class Octospy::Worker
Attributes
thread[R]
Public Class Methods
new(repositories, &block)
click to toggle source
# File lib/octospy/worker.rb, line 5 def initialize(repositories, &block) @repositories = repositories @block = block @last_event_id = nil thread_loop end
Public Instance Methods
api_requestable?()
click to toggle source
# File lib/octospy/worker.rb, line 37 def api_requestable? limit = Octokit.rate_limit if !limit.limit.zero? && limit.remaining.zero? notify "ヾ(;´Д`)ノ #{limit}" false else true end # No rate limit for white listed users rescue Octokit::NotFound true end
notify_recent_envets()
click to toggle source
# File lib/octospy/worker.rb, line 86 def notify_recent_envets events = repository_events return if events.count.zero? last_event = events.sort_by(&:id).last debug 'last_event', <<-MSG.compact repo: #{last_event.repo.name}, event_type: #{last_event.type}, #{@last_event_id.nil? ? "while_ago: #{while_ago}, created_at: #{last_event.created_at}" : "last_id: #{@last_event_id}, current_id: #{last_event.id}"} MSG # ascending by event.id events.sort_by(&:id).each { |event| next if skipping?(event) parsed_event = Octospy.parse(event) unless parsed_event debug 'could_not_parse', <<-MSG.compact repo: #{event.repo.name}, event: #{event.type} MSG next end @last_event_id = event.id.to_i parsed_event.each { |p| notify p[:message] } } end
repository_events()
click to toggle source
# File lib/octospy/worker.rb, line 50 def repository_events @repositories.each_with_object([]) do |repo, arr| break unless api_requestable? sleep Octospy.api_request_interval events = ::Octokit.repository_events(repo.to_s) arr.concat events debug_attrs = <<-MSG.compact repo: #{repo}, limit: #{Octokit.rate_limit.remaining}/#{Octokit.rate_limit.limit}, reset: #{Octokit.rate_limit.resets_at.strftime('%H:%M:%S')} *after #{Octokit.rate_limit.resets_in}sec, MSG if !events.nil? && !events.empty? debug_attrs << ' ' + <<-MSG.compact first: #{events.first.type}, last: #{events.last.type} MSG end debug 'get_event', debug_attrs end end
skipping?(event)
click to toggle source
# File lib/octospy/worker.rb, line 75 def skipping?(event) case when event.nil?, @last_event_id.nil? && while_ago >= event.created_at, !@last_event_id.nil? && @last_event_id >= event.id.to_i true else false end end
thread_loop()
click to toggle source
# File lib/octospy/worker.rb, line 16 def thread_loop debug 'thread_start', <<-MSG.compact api_request_interval(A): #{Octospy.api_request_interval}, repoisitory_count(R): #{@repositories.count}, worker_interval(W): #{Octospy.worker_interval}, work_interval(A*R+W): #{work_interval} MSG @thread = Thread.start { loop { work } } end
work()
click to toggle source
# File lib/octospy/worker.rb, line 27 def work notify_recent_envets debug 'sleep', work_interval sleep work_interval rescue => e error e.message debug 'sleep', work_interval sleep worker_interval end
work_interval()
click to toggle source
# File lib/octospy/worker.rb, line 12 def work_interval (Octospy.api_request_interval * @repositories.count) + Octospy.worker_interval end
Private Instance Methods
debug(name, message = nil)
click to toggle source
# File lib/octospy/worker.rb, line 128 def debug(name, message = nil) return unless Octospy.debug prefix = '[DEBUG]'.colorize_for_irc.orange info = name.colorize_for_irc.bold @block.call "#{prefix} #{info} #{message}" end
error(message)
click to toggle source
# File lib/octospy/worker.rb, line 136 def error(message) prefix = '[ERROR]'.colorize_for_irc.red @block.call "#{prefix} #{message}" end
notify(message)
click to toggle source
# File lib/octospy/worker.rb, line 124 def notify(message) @block.call message end
while_ago()
click to toggle source
# File lib/octospy/worker.rb, line 120 def while_ago Time.now.utc - (60 * 30) end