comsat 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +15 -0
- data/lib/comsat/client.rb +11 -28
- data/lib/comsat/route.rb +12 -5
- data/lib/comsat/service.rb +9 -0
- data/lib/comsat/services/pagerduty.rb +1 -1
- data/lib/comsat/version.rb +1 -1
- data/spec/client_spec.rb +37 -16
- metadata +10 -10
    
        data/README.md
    CHANGED
    
    | @@ -36,6 +36,7 @@ Messages are datum's that contain three pieces of information: | |
| 36 36 | 
             
            * message
         | 
| 37 37 | 
             
            * source
         | 
| 38 38 | 
             
            * message_id
         | 
| 39 | 
            +
            * message_type
         | 
| 39 40 |  | 
| 40 41 | 
             
            The 'source' is where this message originates, for example, "nagios". The
         | 
| 41 42 | 
             
            'message_id' should be a unique identifier for this message, and for certain
         | 
| @@ -78,6 +79,20 @@ client.notify("notify_on_exception", { | |
| 78 79 | 
             
            })
         | 
| 79 80 | 
             
            ```
         | 
| 80 81 |  | 
| 82 | 
            +
            Or you can specify routes without an 'event_type', instead specifying it in
         | 
| 83 | 
            +
            the payload:
         | 
| 84 | 
            +
             | 
| 85 | 
            +
            ```ruby
         | 
| 86 | 
            +
            client = Comsat::Client.new
         | 
| 87 | 
            +
            client.create_route("notify_on_exception", ["campfire://<api_key>:X@blossom.campfirenow.com/Test%20Room"])
         | 
| 88 | 
            +
            client.notify("notify_on_exception", {
         | 
| 89 | 
            +
              :message => "Exception reached in #function",
         | 
| 90 | 
            +
              :source => "my_app",
         | 
| 91 | 
            +
              :message_id => "exception-#{rand(1_000)}",
         | 
| 92 | 
            +
              :message_type => "notice"
         | 
| 93 | 
            +
            })
         | 
| 94 | 
            +
            ```
         | 
| 95 | 
            +
             | 
| 81 96 | 
             
            You can also instrument Comsat with your favorite logger (which should be
         | 
| 82 97 | 
             
            Scrolls by now :)):
         | 
| 83 98 |  | 
    
        data/lib/comsat/client.rb
    CHANGED
    
    | @@ -10,7 +10,7 @@ module Comsat | |
| 10 10 | 
             
                  @@routes
         | 
| 11 11 | 
             
                end
         | 
| 12 12 |  | 
| 13 | 
            -
                def create_route(route, event_type, services)
         | 
| 13 | 
            +
                def create_route(route, event_type=nil, services)
         | 
| 14 14 | 
             
                  start = Time.now
         | 
| 15 15 | 
             
                  Comsat.log(:fn => :create_route, :route => "#{route}", :at => :start)
         | 
| 16 16 | 
             
                  unless routes.detect {|r| r.name == route }
         | 
| @@ -19,41 +19,24 @@ module Comsat | |
| 19 19 | 
             
                  Comsat.log(:fn => :create_route, :route => "#{route}", :at => :finish, :elapsed => Time.now - start)
         | 
| 20 20 | 
             
                end
         | 
| 21 21 |  | 
| 22 | 
            -
                def notify(route,  | 
| 22 | 
            +
                def notify(route, msg={})
         | 
| 23 | 
            +
                  message = msg.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
         | 
| 24 | 
            +
                  if notify_route.event_type
         | 
| 25 | 
            +
                    event = notify_route
         | 
| 26 | 
            +
                  elsif message[:message_type]
         | 
| 27 | 
            +
                    event = message[:message_type]
         | 
| 28 | 
            +
                  else
         | 
| 29 | 
            +
                    event = "notice"
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 23 32 | 
             
                  start = Time.now
         | 
| 24 33 | 
             
                  Comsat.log(:fn => :notify, :route => "#{route}", :at => :start)
         | 
| 25 34 | 
             
                  notify_route = @@routes.detect {|r| r.name == route } if message
         | 
| 26 | 
            -
                  event = notify_route.event_type
         | 
| 27 35 | 
             
                  notify_route.services.each do |svc|
         | 
| 28 36 | 
             
                    Comsat.log(:fn => :notify, :service => "#{svc.class.to_s.downcase}", :event => event)
         | 
| 29 37 | 
             
                    svc.send("send_#{event}".to_sym, message)
         | 
| 30 38 | 
             
                  end
         | 
| 31 39 | 
             
                  Comsat.log(:fn => :notify, :route => "#{route}", :at => :finish, :elapsed => Time.now - start)
         | 
| 32 40 | 
             
                end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                def send_notice(data)
         | 
| 35 | 
            -
                  send_event(:notice, data)
         | 
| 36 | 
            -
                end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                def send_alert(data)
         | 
| 39 | 
            -
                  send_event(:alert, data)
         | 
| 40 | 
            -
                end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                def send_resolve(data)
         | 
| 43 | 
            -
                  send_event(:resolve, data)
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                private
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                def send_event(event_type, data)
         | 
| 49 | 
            -
                  @urls.each do |url|
         | 
| 50 | 
            -
                    service = ServiceFactory.create(url)
         | 
| 51 | 
            -
                    if service.respond_to?("send_#{event_type}")
         | 
| 52 | 
            -
                      service.send("send_#{event_type}".to_sym, data)
         | 
| 53 | 
            -
                    else
         | 
| 54 | 
            -
                      next
         | 
| 55 | 
            -
                    end
         | 
| 56 | 
            -
                  end
         | 
| 57 | 
            -
                end
         | 
| 58 41 | 
             
              end
         | 
| 59 42 | 
             
            end
         | 
    
        data/lib/comsat/route.rb
    CHANGED
    
    | @@ -2,16 +2,23 @@ module Comsat | |
| 2 2 | 
             
              class Route
         | 
| 3 3 | 
             
                attr_accessor :name, :services, :event_type
         | 
| 4 4 |  | 
| 5 | 
            -
                def initialize(route, et, urls)
         | 
| 5 | 
            +
                def initialize(route, et=nil, urls)
         | 
| 6 6 | 
             
                  @name = route
         | 
| 7 | 
            -
                  @event_type = et | 
| 8 | 
            -
             | 
| 7 | 
            +
                  @event_type = et
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  @services = {
         | 
| 10 | 
            +
                    "notice" => [],
         | 
| 11 | 
            +
                    "alert" => [],
         | 
| 12 | 
            +
                    "resolve" => [],
         | 
| 13 | 
            +
                    "all" => []
         | 
| 14 | 
            +
                  }
         | 
| 15 | 
            +
             | 
| 9 16 | 
             
                  urls.each do |url|
         | 
| 10 17 | 
             
                    svc = ServiceFactory.create(url)
         | 
| 11 18 | 
             
                    if svc.respond_to?("send_#{@event_type}")
         | 
| 12 | 
            -
                      @services << svc
         | 
| 19 | 
            +
                      @services[@event_type] << svc
         | 
| 13 20 | 
             
                    else
         | 
| 14 | 
            -
                       | 
| 21 | 
            +
                      @services["all"] << svc
         | 
| 15 22 | 
             
                    end
         | 
| 16 23 | 
             
                  end
         | 
| 17 24 | 
             
                end
         | 
    
        data/lib/comsat/service.rb
    CHANGED
    
    
| @@ -17,7 +17,7 @@ module Comsat | |
| 17 17 | 
             
                  source     = data[:source]
         | 
| 18 18 | 
             
                  message = "[#{source}] #{message}"
         | 
| 19 19 |  | 
| 20 | 
            -
                  pagerduty_url = "https://#{@credentials.host} | 
| 20 | 
            +
                  pagerduty_url = "https://#{@credentials.host}/generic/2010-04-15/create_event.json"
         | 
| 21 21 | 
             
                  data = {
         | 
| 22 22 | 
             
                    :service_key => @credentials.api_key,
         | 
| 23 23 | 
             
                    :incident_key => id,
         | 
    
        data/lib/comsat/version.rb
    CHANGED
    
    
    
        data/spec/client_spec.rb
    CHANGED
    
    | @@ -12,28 +12,49 @@ describe Comsat::Client do | |
| 12 12 | 
             
              end
         | 
| 13 13 |  | 
| 14 14 | 
             
              describe "#create_route" do
         | 
| 15 | 
            -
                before do
         | 
| 16 | 
            -
                  subject.create_route("test_route", "notice", [undefined_svc, defined_svc])
         | 
| 17 | 
            -
                end
         | 
| 18 15 |  | 
| 19 | 
            -
                 | 
| 20 | 
            -
                   | 
| 21 | 
            -
             | 
| 16 | 
            +
                describe "specify event_types" do
         | 
| 17 | 
            +
                  before do
         | 
| 18 | 
            +
                    subject.create_route("test_route", "notice", [undefined_svc, defined_svc])
         | 
| 19 | 
            +
                  end
         | 
| 22 20 |  | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 21 | 
            +
                  it "should register a route with base class" do
         | 
| 22 | 
            +
                    subject.routes.should_not be_empty
         | 
| 23 | 
            +
                  end
         | 
| 26 24 |  | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 25 | 
            +
                  it "should create a route" do
         | 
| 26 | 
            +
                    subject.routes.first.name.should == "test_route"
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  it "should have one service initiated on the event_type 'notice'" do
         | 
| 30 | 
            +
                    subject.routes.first.services["notice"].length.should == 1
         | 
| 31 | 
            +
                  end
         | 
| 30 32 |  | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            +
                  it "should have a campfire service initiated" do
         | 
| 34 | 
            +
                    subject.routes.first.services["notice"].first.class.should == Comsat::Campfire
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  it "should provide an event type" do
         | 
| 38 | 
            +
                    subject.routes.first.event_type == "notice"
         | 
| 39 | 
            +
                  end
         | 
| 33 40 | 
             
                end
         | 
| 34 41 |  | 
| 35 | 
            -
                 | 
| 36 | 
            -
                   | 
| 42 | 
            +
                describe "no event_type specified" do
         | 
| 43 | 
            +
                  before do
         | 
| 44 | 
            +
                    subject.create_route("test_route2", [defined_svc])
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  it "should register a route with base class" do
         | 
| 48 | 
            +
                    subject.routes.should_not be_empty
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  it "should create a route" do
         | 
| 52 | 
            +
                    subject.routes.first.name.should == "test_route2"
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  it "should have one service initiated on all event_types" do
         | 
| 56 | 
            +
                    subject.routes.first.services["all"].length.should == 1
         | 
| 57 | 
            +
                  end
         | 
| 37 58 | 
             
                end
         | 
| 38 59 | 
             
              end
         | 
| 39 60 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: comsat
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.7
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -10,11 +10,11 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2012-04- | 
| 13 | 
            +
            date: 2012-04-18 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: rest-client
         | 
| 17 | 
            -
              requirement: & | 
| 17 | 
            +
              requirement: &70239639975100 !ruby/object:Gem::Requirement
         | 
| 18 18 | 
             
                none: false
         | 
| 19 19 | 
             
                requirements:
         | 
| 20 20 | 
             
                - - ! '>='
         | 
| @@ -22,10 +22,10 @@ dependencies: | |
| 22 22 | 
             
                    version: '0'
         | 
| 23 23 | 
             
              type: :runtime
         | 
| 24 24 | 
             
              prerelease: false
         | 
| 25 | 
            -
              version_requirements: * | 
| 25 | 
            +
              version_requirements: *70239639975100
         | 
| 26 26 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 27 27 | 
             
              name: scrolls
         | 
| 28 | 
            -
              requirement: & | 
| 28 | 
            +
              requirement: &70239639974440 !ruby/object:Gem::Requirement
         | 
| 29 29 | 
             
                none: false
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - ! '>='
         | 
| @@ -33,10 +33,10 @@ dependencies: | |
| 33 33 | 
             
                    version: '0'
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 | 
            -
              version_requirements: * | 
| 36 | 
            +
              version_requirements: *70239639974440
         | 
| 37 37 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 38 38 | 
             
              name: rake
         | 
| 39 | 
            -
              requirement: & | 
| 39 | 
            +
              requirement: &70239639972620 !ruby/object:Gem::Requirement
         | 
| 40 40 | 
             
                none: false
         | 
| 41 41 | 
             
                requirements:
         | 
| 42 42 | 
             
                - - ! '>='
         | 
| @@ -44,10 +44,10 @@ dependencies: | |
| 44 44 | 
             
                    version: '0'
         | 
| 45 45 | 
             
              type: :development
         | 
| 46 46 | 
             
              prerelease: false
         | 
| 47 | 
            -
              version_requirements: * | 
| 47 | 
            +
              version_requirements: *70239639972620
         | 
| 48 48 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 49 49 | 
             
              name: rspec
         | 
| 50 | 
            -
              requirement: & | 
| 50 | 
            +
              requirement: &70239639971220 !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                none: false
         | 
| 52 52 | 
             
                requirements:
         | 
| 53 53 | 
             
                - - ! '>='
         | 
| @@ -55,7 +55,7 @@ dependencies: | |
| 55 55 | 
             
                    version: '0'
         | 
| 56 56 | 
             
              type: :development
         | 
| 57 57 | 
             
              prerelease: false
         | 
| 58 | 
            -
              version_requirements: * | 
| 58 | 
            +
              version_requirements: *70239639971220
         | 
| 59 59 | 
             
            description: Notifications as a Gem
         | 
| 60 60 | 
             
            email:
         | 
| 61 61 | 
             
            - ops@heroku.com
         |