
- Re-factor - Remove code for notifications - Remove addons - Remove travis-core gem. - Ignore logs directory only - Move core tests to spec/lib
62 lines
1.6 KiB
Ruby
62 lines
1.6 KiB
Ruby
require 'active_support/inflector/inflections.rb'
|
|
require 'metriks'
|
|
|
|
module Travis
|
|
module Event
|
|
|
|
# Event handlers subscribe to events issued from core models (such
|
|
# as Build and Job::Test).
|
|
#
|
|
# Subscriptions are defined in Travis.config so they can easily be
|
|
# added/removed for an environment.
|
|
#
|
|
# Subscribing classes are supposed to define an EVENTS constant which holds
|
|
# a regular expression which will be matched against the event name.
|
|
class Subscription
|
|
class << self
|
|
def register(name, const)
|
|
handlers[name.to_sym] = const
|
|
end
|
|
|
|
def handlers
|
|
@handlers ||= {}
|
|
end
|
|
end
|
|
|
|
attr_reader :name
|
|
|
|
def initialize(name)
|
|
@name = name
|
|
end
|
|
|
|
def subscriber
|
|
self.class.handlers[name.to_sym] || Handler.const_get(name.to_s.camelize, false)
|
|
rescue NameError => e
|
|
Travis.logger.error "Could not find event handler #{name.inspect}, ignoring."
|
|
nil
|
|
end
|
|
|
|
def patterns
|
|
subscriber ? Array(subscriber::EVENTS) : []
|
|
end
|
|
|
|
def notify(event, *args)
|
|
if matches?(event)
|
|
subscriber.notify(event, *args)
|
|
increment_counter(event)
|
|
end
|
|
end
|
|
|
|
def matches?(event)
|
|
patterns.any? { |patterns| patterns.is_a?(Regexp) ? patterns.match(event) : patterns == event }
|
|
end
|
|
|
|
def increment_counter(event)
|
|
# TODO ask mathias about this metric
|
|
metric = "travis.notifications.#{name}.#{event.gsub(/:/, '.')}"
|
|
Metriks.meter(metric).mark
|
|
end
|
|
end
|
|
end
|
|
end
|