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