scout_scout 0.0.4 → 0.0.5

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/.gitignore CHANGED
@@ -17,6 +17,5 @@ tmtags
17
17
  coverage
18
18
  rdoc
19
19
  pkg
20
- *.gemspec
21
20
 
22
21
  ## PROJECT::SPECIFIC
@@ -21,6 +21,12 @@ A library for extracting data out of Scout[http//:scoutapp.com], a hosted monito
21
21
  #details about a specific plugin
22
22
  data = ram_hungry.plugin(12345)
23
23
 
24
+ #detauls on that server's triggers
25
+ ram_hungry_triggers = ram_hungry.triggers
26
+
27
+ #details about triggers for a specific plugin
28
+ plugin_triggers = ram_hungry.plugin(12345).triggers
29
+
24
30
  #all available descriptors
25
31
  descriptors = ScoutScout::Descriptor.all
26
32
 
@@ -49,4 +55,4 @@ information and examples.
49
55
 
50
56
  == Copyright
51
57
 
52
- Copyright (c) 2010 Jesse Newland, Derek Haynes. See LICENSE for details.
58
+ Copyright (c) 2010 Jesse Newland, Derek Haynes. See LICENSE for details.
data/Rakefile CHANGED
@@ -17,6 +17,7 @@ begin
17
17
  gem.add_development_dependency "fakeweb"
18
18
  gem.add_dependency "hashie", "~> 0.1.8"
19
19
  gem.add_dependency "httparty", "~> 0.5.0"
20
+ gem.add_dependency "nokogiri"
20
21
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
21
22
  end
22
23
  Jeweler::GemcutterTasks.new
@@ -1,13 +1,17 @@
1
+ require 'rubygems'
1
2
  require 'hashie'
2
3
  require 'httparty'
4
+ require 'nokogiri'
3
5
  require 'cgi'
4
6
  require 'scout_scout/version'
5
7
  require 'scout_scout/server'
6
8
  require 'scout_scout/descriptor'
7
9
  require 'scout_scout/plugin'
10
+ require 'scout_scout/trigger'
8
11
  require 'scout_scout/alert'
9
12
  require 'scout_scout/cluster.rb'
10
13
  require 'scout_scout/metric.rb'
14
+ require 'scout_scout/person'
11
15
 
12
16
  class ScoutScout
13
17
  include HTTParty
@@ -38,6 +42,31 @@ class ScoutScout
38
42
  response = self.class.get("/#{self.class.account}/clients.xml")
39
43
  response['clients'].map { |client| ScoutScout::Server.new(client) }
40
44
  end
45
+
46
+ def people
47
+ response = self.class.get("/#{self.class.account}/account_memberships")
48
+ doc = Nokogiri::HTML(response.body)
49
+
50
+ tables = doc.css('table.list')
51
+ # first table is pending
52
+ # second is active
53
+ active_table = tables.last
54
+ user_rows = active_table.css('tr')[1..-1] # skip first row, which is headings
55
+
56
+ user_rows.map do |row|
57
+ name_td, email_td, admin_td, links_td = *row.css('td')
58
+
59
+ name = name_td.content.gsub(/[\t\n]/, '')
60
+ email = email_td.content.gsub(/[\t\n]/, '')
61
+ admin = admin_td.content.gsub(/[\t\n]/, '') == 'Yes'
62
+ id = if links_td.inner_html =~ %r{/#{self.class.account}/account_memberships/(\d+)}
63
+ $1.to_i
64
+ end
65
+
66
+ ScoutScout::Person.new :id => id, :name => name, :email => email, :admin => admin
67
+ end
68
+
69
+ end
41
70
 
42
71
  class << self
43
72
  alias_method :http_get, :get
@@ -52,4 +81,4 @@ class ScoutScout
52
81
  response.code.to_s =~ /^(4|5)/ ? raise( ScoutScout::Error,response.message) : response
53
82
  end
54
83
 
55
- end
84
+ end
@@ -0,0 +1,3 @@
1
+ class ScoutScout::Person < Hashie::Mash
2
+
3
+ end
@@ -16,6 +16,28 @@ class ScoutScout::Plugin < Hashie::Mash
16
16
  @descriptors ||= @descriptor_hash.map { |d| decorate_with_server_and_plugin(ScoutScout::Descriptor.new(d)) }
17
17
  end
18
18
 
19
+ def email_subscribers
20
+ response = ScoutScout.get("/#{ScoutScout.account}/clients/#{server.id}/email_subscribers?plugin_id=#{id}")
21
+ doc = Nokogiri::HTML(response.body)
22
+
23
+ table = doc.css('table.list').first
24
+ user_rows = table.css('tr')[1..-1] # skip first row, which is headings
25
+
26
+ user_rows.map do |row|
27
+ name_td, receiving_notifications_td = *row.css('td')
28
+
29
+ name = name_td.content.gsub(/[\t\n]/, '')
30
+ checked = receiving_notifications_td.css('input').attribute('checked')
31
+ receiving_notifications = checked && checked.value == 'checked'
32
+ Hashie::Mash.new :name => name, :receiving_notifications => receiving_notifications
33
+ end
34
+ end
35
+
36
+ def triggers
37
+ response = ScoutScout.get("/#{ScoutScout.account}/clients/#{server.id}/triggers.xml?plugin_id=#{id}")
38
+ response['triggers'].map { |trigger| decorate_with_server_and_plugin(ScoutScout::Trigger.new(trigger)) }
39
+ end
40
+
19
41
  protected
20
42
 
21
43
  def decorate_with_server_and_plugin(hashie)
@@ -24,4 +46,4 @@ protected
24
46
  hashie
25
47
  end
26
48
 
27
- end
49
+ end
@@ -71,6 +71,14 @@ class ScoutScout::Server < Hashie::Mash
71
71
  ScoutScout::Descriptor.all(:host => hostname).map { |d| decorate_with_server(d) }
72
72
  end
73
73
 
74
+ # Details about all triggers for this server
75
+ #
76
+ # @return [Array] An array of ScoutScout::Trigger objects
77
+ def triggers
78
+ response = ScoutScout.get("/#{ScoutScout.account}/clients/#{self.id}/triggers.xml")
79
+ response['triggers'].map { |trigger| decorate_with_server(ScoutScout::Trigger.new(trigger)) }
80
+ end
81
+
74
82
  protected
75
83
 
76
84
  def decorate_with_server(hashie)
@@ -0,0 +1,11 @@
1
+ class ScoutScout::Trigger < Hashie::Mash
2
+ attr_writer :server, :plugin
3
+
4
+ def server
5
+ @server ||= ScoutScout::Server.first(id)
6
+ end
7
+
8
+ def plugin
9
+ @plugin ||= server.plugin(plugin_id)
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  class ScoutScout
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -0,0 +1,84 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{scout_scout}
8
+ s.version = "0.0.5"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Jesse Newland"]
12
+ s.date = %q{2010-07-15}
13
+ s.description = %q{API wrapper for scout.com}
14
+ s.email = %q{jnewland@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "lib/scout_scout.rb",
26
+ "lib/scout_scout/alert.rb",
27
+ "lib/scout_scout/cluster.rb",
28
+ "lib/scout_scout/descriptor.rb",
29
+ "lib/scout_scout/metric.rb",
30
+ "lib/scout_scout/person.rb",
31
+ "lib/scout_scout/plugin.rb",
32
+ "lib/scout_scout/server.rb",
33
+ "lib/scout_scout/trigger.rb",
34
+ "lib/scout_scout/version.rb",
35
+ "scout_scout.gemspec",
36
+ "spec/fixtures/activities.xml",
37
+ "spec/fixtures/client.xml",
38
+ "spec/fixtures/client_by_hostname.xml",
39
+ "spec/fixtures/clients.xml",
40
+ "spec/fixtures/data.xml",
41
+ "spec/fixtures/descriptors.xml",
42
+ "spec/fixtures/plugin_data.xml",
43
+ "spec/fixtures/plugins.xml",
44
+ "spec/fixtures/triggers.xml",
45
+ "spec/scout_scout_spec.rb",
46
+ "spec/spec.opts",
47
+ "spec/spec_helper.rb"
48
+ ]
49
+ s.homepage = %q{http://github.com/jnewland/scout_scout}
50
+ s.rdoc_options = ["--charset=UTF-8"]
51
+ s.require_paths = ["lib"]
52
+ s.rubygems_version = %q{1.3.6}
53
+ s.summary = %q{API wrapper for scout.com}
54
+ s.test_files = [
55
+ "spec/scout_scout_spec.rb",
56
+ "spec/spec_helper.rb"
57
+ ]
58
+
59
+ if s.respond_to? :specification_version then
60
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
61
+ s.specification_version = 3
62
+
63
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
64
+ s.add_development_dependency(%q<rspec>, ["= 1.3.0"])
65
+ s.add_development_dependency(%q<fakeweb>, [">= 0"])
66
+ s.add_runtime_dependency(%q<hashie>, ["~> 0.1.8"])
67
+ s.add_runtime_dependency(%q<httparty>, ["~> 0.5.0"])
68
+ s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
69
+ else
70
+ s.add_dependency(%q<rspec>, ["= 1.3.0"])
71
+ s.add_dependency(%q<fakeweb>, [">= 0"])
72
+ s.add_dependency(%q<hashie>, ["~> 0.1.8"])
73
+ s.add_dependency(%q<httparty>, ["~> 0.5.0"])
74
+ s.add_dependency(%q<nokogiri>, [">= 0"])
75
+ end
76
+ else
77
+ s.add_dependency(%q<rspec>, ["= 1.3.0"])
78
+ s.add_dependency(%q<fakeweb>, [">= 0"])
79
+ s.add_dependency(%q<hashie>, ["~> 0.1.8"])
80
+ s.add_dependency(%q<httparty>, ["~> 0.5.0"])
81
+ s.add_dependency(%q<nokogiri>, [">= 0"])
82
+ end
83
+ end
84
+
@@ -0,0 +1,40 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <triggers type="array">
3
+ <trigger>
4
+ <id type="integer">119871</id>
5
+ <last-fired-at type="datetime">2010-04-08T04:10:00-04:00</last-fired-at>
6
+ <max-value type="float">85.0</max-value>
7
+ <min-value type="float">0.0</min-value>
8
+ <plugin-id type="integer">136421</plugin-id>
9
+ <sms-max-value type="float">90.0</sms-max-value>
10
+ <sms-percentage-change type="integer" nil="true"></sms-percentage-change>
11
+ <simple-type>peak</simple-type>
12
+ <title>Alert me when Disk Capacity exceeds 85%. SMS alert at 90%.</title>
13
+ <descriptor-label>Disk Capacity</descriptor-label>
14
+ </trigger>
15
+ <trigger>
16
+ <id type="integer">152031</id>
17
+ <last-fired-at type="datetime">2010-04-29T14:45:00-04:00</last-fired-at>
18
+ <max-value type="float">85.0</max-value>
19
+ <min-value type="float">0.0</min-value>
20
+ <plugin-id type="integer">136421</plugin-id>
21
+ <sms-max-value type="float">90.0</sms-max-value>
22
+ <sms-percentage-change type="integer" nil="true"></sms-percentage-change>
23
+ <simple-type>peak</simple-type>
24
+ <title>Alert me when % Memory Used exceeds 85%. SMS alert at 90%.</title>
25
+ <descriptor-label>% Memory Used</descriptor-label>
26
+ </trigger>
27
+ <trigger>
28
+ <id type="integer">119921</id>
29
+ <last-fired-at type="datetime" nil="true"></last-fired-at>
30
+ <max-value type="float">1.0</max-value>
31
+ <min-value type="float">0.0</min-value>
32
+ <plugin-id type="integer">136451</plugin-id>
33
+ <sms-max-value type="float">10.0</sms-max-value>
34
+ <sms-percentage-change type="integer" nil="true"></sms-percentage-change>
35
+ <simple-type>peak</simple-type>
36
+ <title>Alert me when Passenger Global Queue Depth exceeds 1 . SMS alert at 10 .</title>
37
+ <descriptor-label>Passenger Global Queue Depth</descriptor-label>
38
+ </trigger>
39
+ </triggers>
40
+
@@ -155,6 +155,25 @@ describe "ScoutScout" do
155
155
  end
156
156
 
157
157
  end
158
+ describe 'trigger' do
159
+ describe 'list' do
160
+ before(:each) do
161
+ @scout_scout.stub_get('clients/13431.xml', 'client.xml')
162
+ @server = ScoutScout::Server.first(13431)
163
+ @scout_scout.stub_get('clients/13431/triggers.xml', 'triggers.xml')
164
+ @triggers = @server.triggers
165
+ end
166
+ it "should be accessable" do
167
+ @triggers.size.should == 3
168
+ @triggers.each do |trigger|
169
+ trigger.simple_type.should == 'peak'
170
+ end
171
+ end
172
+ it "should be an array of ScoutScout::Trigger objects" do
173
+ @triggers.first.class.should == ScoutScout::Trigger
174
+ end
175
+ end
176
+ end
158
177
  describe 'descriptor list' do
159
178
  before(:each) do
160
179
  @scout_scout.stub_get('clients/13431.xml', 'client.xml')
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scout_scout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 5
9
+ version: 0.0.5
5
10
  platform: ruby
6
11
  authors:
7
12
  - Jesse Newland
@@ -9,49 +14,75 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-24 00:00:00 -05:00
17
+ date: 2010-07-15 00:00:00 -04:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: rspec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - "="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 3
30
+ - 0
23
31
  version: 1.3.0
24
- version:
32
+ type: :development
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: fakeweb
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
33
43
  version: "0"
34
- version:
44
+ type: :development
45
+ version_requirements: *id002
35
46
  - !ruby/object:Gem::Dependency
36
47
  name: hashie
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
40
50
  requirements:
41
51
  - - ~>
42
52
  - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ - 1
56
+ - 8
43
57
  version: 0.1.8
44
- version:
58
+ type: :runtime
59
+ version_requirements: *id003
45
60
  - !ruby/object:Gem::Dependency
46
61
  name: httparty
47
- type: :runtime
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
62
+ prerelease: false
63
+ requirement: &id004 !ruby/object:Gem::Requirement
50
64
  requirements:
51
65
  - - ~>
52
66
  - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
69
+ - 5
70
+ - 0
53
71
  version: 0.5.0
54
- version:
72
+ type: :runtime
73
+ version_requirements: *id004
74
+ - !ruby/object:Gem::Dependency
75
+ name: nokogiri
76
+ prerelease: false
77
+ requirement: &id005 !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ type: :runtime
85
+ version_requirements: *id005
55
86
  description: API wrapper for scout.com
56
87
  email: jnewland@gmail.com
57
88
  executables: []
@@ -72,9 +103,12 @@ files:
72
103
  - lib/scout_scout/cluster.rb
73
104
  - lib/scout_scout/descriptor.rb
74
105
  - lib/scout_scout/metric.rb
106
+ - lib/scout_scout/person.rb
75
107
  - lib/scout_scout/plugin.rb
76
108
  - lib/scout_scout/server.rb
109
+ - lib/scout_scout/trigger.rb
77
110
  - lib/scout_scout/version.rb
111
+ - scout_scout.gemspec
78
112
  - spec/fixtures/activities.xml
79
113
  - spec/fixtures/client.xml
80
114
  - spec/fixtures/client_by_hostname.xml
@@ -83,6 +117,7 @@ files:
83
117
  - spec/fixtures/descriptors.xml
84
118
  - spec/fixtures/plugin_data.xml
85
119
  - spec/fixtures/plugins.xml
120
+ - spec/fixtures/triggers.xml
86
121
  - spec/scout_scout_spec.rb
87
122
  - spec/spec.opts
88
123
  - spec/spec_helper.rb
@@ -99,18 +134,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
134
  requirements:
100
135
  - - ">="
101
136
  - !ruby/object:Gem::Version
137
+ segments:
138
+ - 0
102
139
  version: "0"
103
- version:
104
140
  required_rubygems_version: !ruby/object:Gem::Requirement
105
141
  requirements:
106
142
  - - ">="
107
143
  - !ruby/object:Gem::Version
144
+ segments:
145
+ - 0
108
146
  version: "0"
109
- version:
110
147
  requirements: []
111
148
 
112
149
  rubyforge_project:
113
- rubygems_version: 1.3.5
150
+ rubygems_version: 1.3.6
114
151
  signing_key:
115
152
  specification_version: 3
116
153
  summary: API wrapper for scout.com