lib/bender/main.rb in bender-bot-0.0.1 vs lib/bender/main.rb in bender-bot-0.0.2

- old
+ new

@@ -1,8 +1,9 @@ require 'logger' require 'tilt/erb' +require 'queryparams' require_relative 'metadata' require_relative 'mjolnir' require_relative 'web' require_relative 'bot' @@ -68,12 +69,57 @@ option :database, \ type: :string, aliases: %w[ -d ], desc: 'Set path to application database', required: true + option :rooms, \ + type: :string, + aliases: %w[ -r ], + desc: 'Set HipChat rooms (comma-separated)', + required: true + option :jira_user, \ + type: :string, + aliases: %w[ -U ], + desc: 'Set JIRA username', + required: true + option :jira_pass, \ + type: :string, + aliases: %w[ -P ], + desc: 'Set JIRA password', + required: true + option :jira_site, \ + type: :string, + aliases: %w[ -S ], + desc: 'Set JIRA site', + required: true + option :jira_project, \ + type: :string, + aliases: %w[ -J ], + desc: 'Set JIRA project', + required: true + option :jira_type, \ + type: :string, + aliases: %w[ -T ], + desc: 'Set JIRA issue type', + required: true + option :refresh, \ + type: :numeric, + aliases: %w[ -R ], + desc: 'Set JIRA refresh rate', + default: 300 include_common_options def start + bot = start_bot + refresh_users bot + serve_web bot + end + + + + private + + def start_bot Bot::Connection.configure do |config| config.jid = options.jid config.password = options.password config.nick = options.mention config.mention_name = options.nick @@ -83,13 +129,50 @@ config.store = Bot::Storage::YamlStore config.logger = log end - Bot.run! + Bot.run! options + end + def refresh_users bot + req_path = '/rest/api/2/user/assignable/search' + req_params = QueryParams.encode \ + project: options.jira_project, + startAt: 0, + maxResults: 1_000_000 + + uri = URI(options.jira_site + req_path + '?' + req_params) + http = Net::HTTP.new uri.hostname, uri.port + + req = Net::HTTP::Get.new uri + req.basic_auth options.jira_user, options.jira_pass + req['Content-Type'] = 'application/json' + req['Accept'] = 'application/json' + + Thread.new do + loop do + resp = http.request req + + users = JSON.parse(resp.body).inject({}) do |h, user| + h[user['key']] = { + nick: user['key'], + name: user['displayName'], + email: user['emailAddress'] + } ; h + end + + bot.store['users'] = users + + sleep options.refresh + end + end + end + + + def serve_web bot Web.set :environment, options.environment Web.set :port, options.port Web.set :bind, options.bind Web.set :store, options.database @@ -98,9 +181,10 @@ Web.set :dump_errors, true Web.set :show_exceptions, true Web.set :logging, ::Logger::DEBUG end + Web.set :bot, bot Web.run! end end \ No newline at end of file