mongodb-graphite-agent 0.1.1 → 0.1.2

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
@@ -1,20 +1,20 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- .idea/*
19
- lastsample
20
- *.iml
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea/*
19
+ lastsample
20
+ *.iml
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - rbx-19mode
5
+
6
+ services:
7
+ - mongodb
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source 'https://rubygems.org'
2
-
1
+ source 'https://rubygems.org'
2
+
3
3
  gemspec
data/README.md CHANGED
@@ -1,29 +1,21 @@
1
- # Mongodb::Graphite::Agent
2
-
3
- TODO: Write a gem description
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- gem 'mongodb-graphite-agent'
10
-
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install mongodb-graphite-agent
18
-
19
- ## Usage
20
-
21
- TODO: Write usage instructions here
22
-
23
- ## Contributing
24
-
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
1
+ # Mongodb::Graphite::Agent
2
+
3
+ [![Build Status](https://travis-ci.org/emmekappa/mongodb-graphite-agent.png)](https://travis-ci.org/emmekappa/mongodb-graphite-agent)
4
+
5
+ Sends MongoDB metrics to Graphite.
6
+
7
+ ## Installation
8
+
9
+ $ gem install mongodb-graphite-agent
10
+
11
+ ## Usage
12
+
13
+ mongodb-graphite-agent.rb --mongodb-host localhost --graphite-host graphite.local --graphite-port 9090 --graphite-metrics-prefix "localhost.mongodb" --verbose
14
+
15
+ ## Contributing
16
+
17
+ 1. Fork it
18
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
19
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
20
+ 4. Push to the branch (`git push origin my-new-feature`)
21
+ 5. Create new Pull Request
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new('spec')
5
+
6
+ # If you want to make this the default task
7
+ task :default => :spec
@@ -1,28 +1,29 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift File.expand_path("#{File.dirname(__FILE__)}/../lib")
4
-
5
- require 'trollop'
6
- require 'mongodb/graphite/agent'
7
-
8
- opts = Trollop::options do
9
- opt :mongodb_username, "MongoDB username", :type => :string
10
- opt :mongodb_host, "MongoDB host", :type => :string, :default => "localhost"
11
- opt :mongodb_post, "MongoDB port", :type => :int, :default => 27017
12
- opt :mongodb_password, "MongoDB password", :type => :string
13
- opt :graphite_host, "Graphite host", :type => :string
14
- opt :graphite_port, "Graphite port", :type => :string
15
- opt :graphite_metrics_prefix, "Graphite metrics prefix", :type => :string, :default => Socket.gethostname
16
- opt :dry_run, "Dry run", :type => :boolean, :default => false
17
- opt :verbose, "Verbose", :type => :boolean, :default => false
18
- end
19
-
20
- if opts[:dry_run]
21
- puts "\n\nWARNING!!! This is a dry run\n\n\n"
22
- sleep 1
23
- end
24
-
25
- Trollop::die :graphite_host, "(or --dry-run) must be specified" if (opts[:graphite_host].blank? and opts[:dry_run].blank?)
26
-
27
- runner = Mongodb::Graphite::Agent::Runner.new(opts)
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.expand_path("#{File.dirname(__FILE__)}/../lib")
4
+
5
+ require 'trollop'
6
+ require 'mongodb/graphite/agent'
7
+ require 'mongodb/graphite/agent/graphite_writer'
8
+
9
+ opts = Trollop::options do
10
+ opt :mongodb_username, "MongoDB username", :type => :string
11
+ opt :mongodb_host, "MongoDB host", :type => :string, :default => "localhost"
12
+ opt :mongodb_post, "MongoDB port", :type => :int, :default => 27017
13
+ opt :mongodb_password, "MongoDB password", :type => :string
14
+ opt :graphite_host, "Graphite host", :type => :string
15
+ opt :graphite_port, "Graphite port", :type => :string
16
+ opt :graphite_metrics_prefix, "Graphite metrics prefix", :type => :string, :default => Socket.gethostname
17
+ opt :dry_run, "Dry run", :type => :boolean, :default => false
18
+ opt :verbose, "Verbose", :type => :boolean, :default => false
19
+ end
20
+
21
+ if opts[:dry_run]
22
+ puts "\n\nWARNING!!! This is a dry run\n\n\n"
23
+ sleep 1
24
+ end
25
+
26
+ Trollop::die :graphite_host, "(or --dry-run) must be specified" if (opts[:graphite_host].blank? and opts[:dry_run].blank?)
27
+
28
+ runner = Mongodb::Graphite::Agent::Runner.new(opts)
28
29
  runner.run
@@ -1,82 +1,82 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'mongo'
4
- require 'simple-graphite'
5
- require 'bson'
6
- require 'socket'
7
- require 'awesome_print'
8
- require 'time_difference'
9
- require 'mongodb/graphite/agent/utils'
10
- require 'mongodb/graphite/agent/op_counters_sample'
11
- require 'mongodb/graphite/agent/mongo_cient_extensions'
12
-
13
- module Mongodb
14
- module Graphite
15
- module Agent
16
- class Runner
17
-
18
- def initialize(opts)
19
- @opts = opts
20
- end
21
-
22
- def run
23
- connection = Mongo::MongoClient.new(@opts.mongodb_host, @opts.mongodb_port, :slave_ok => true)
24
- unless (@opts[:mongodb_username].blank? && @opts[:mongodb_password].blank?)
25
- connection["admin"].authenticate(@opts.mongodb_username, @opts.mongodb_password)
26
- end
27
-
28
- server_status_result = connection["local"].command('serverStatus' => 1)
29
- metric_hash = Utils.to_hash(server_status_result).select { |k|
30
- k.match('^connection|^network\.|^cursors|^mem\.mapped|^indexCounters|^repl.oplog')
31
- }
32
-
33
- opcounters_per_second_metric_hash = calculate_opcounters_per_second server_status_result["opcounters"]
34
-
35
- if @opts[:verbose]
36
- puts "Calculating metrics..."
37
- ap metric_hash
38
- ap opcounters_per_second_metric_hash
39
- end
40
-
41
-
42
- unless (@opts[:dry_run])
43
- graphite_writer = GraphiteWriter.new({:host => @opts[:graphite_host],
44
- :port => @opts[:graphite_port],
45
- :verbose => @opts[:verbose],
46
- :metrics_prefix => @opts[:graphite_metrics_prefix]})
47
- graphite_writer.write(metric_hash)
48
- graphite_writer.write(opcounters_per_second_metric_hash)
49
- end
50
- end
51
-
52
- def calculate_opcounters_per_second(opcounters)
53
- current_sample = OpCountersSample.new Hash[opcounters]
54
- previous_sample = current_sample.dup
55
- result = {}
56
-
57
- if File.exist? 'lastsample'
58
- File.open('lastsample', 'r') do |file|
59
- previous_sample = Marshal.load(file)
60
- end
61
- end
62
-
63
- delta = TimeDifference.between(Time.parse(current_sample.sample_time), Time.parse(previous_sample.sample_time))
64
- puts "Last sample was taken #{delta.in_seconds.round(0)} seconds ago"
65
-
66
- previous_sample.values.keys.sort.each do |k|
67
- previous_sample_value = previous_sample.values[k]
68
- current_sample_value = current_sample.values[k]
69
- value_per_seconds = ((current_sample_value - previous_sample_value) / delta.in_seconds).round(2)
70
- result["#{k}_per_seconds"] = value_per_seconds
71
- end
72
-
73
- File.open('lastsample', 'w') do |file|
74
- Marshal.dump(current_sample, file)
75
- end
76
-
77
- result
78
- end
79
- end
80
- end
81
- end
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'mongo'
4
+ require 'simple-graphite'
5
+ require 'bson'
6
+ require 'socket'
7
+ require 'awesome_print'
8
+ require 'time_difference'
9
+ require 'mongodb/graphite/agent/utils'
10
+ require 'mongodb/graphite/agent/op_counters_sample'
11
+ require 'mongodb/graphite/agent/mongo_cient_extensions'
12
+
13
+ module Mongodb
14
+ module Graphite
15
+ module Agent
16
+ class Runner
17
+
18
+ def initialize(opts)
19
+ @opts = opts
20
+ end
21
+
22
+ def run
23
+ connection = Mongo::MongoClient.new(@opts[:mongodb_host], @opts[:mongodb_port], :slave_ok => true)
24
+ unless (@opts[:mongodb_username].blank? && @opts[:mongodb_password].blank?)
25
+ connection["admin"].authenticate(@opts.mongodb_username, @opts.mongodb_password)
26
+ end
27
+
28
+ server_status_result = connection["local"].command('serverStatus' => 1)
29
+ metric_hash = Utils.to_hash(server_status_result).select { |k|
30
+ k.match('^connection|^network\.|^cursors|^mem\.mapped|^indexCounters|^repl.oplog')
31
+ }
32
+
33
+ opcounters_per_second_metric_hash = calculate_opcounters_per_second server_status_result["opcounters"]
34
+
35
+ if @opts[:verbose]
36
+ puts "Calculating metrics..."
37
+ ap metric_hash
38
+ ap opcounters_per_second_metric_hash
39
+ end
40
+
41
+
42
+ unless (@opts[:dry_run])
43
+ graphite_writer = GraphiteWriter.new({:host => @opts[:graphite_host],
44
+ :port => @opts[:graphite_port],
45
+ :verbose => @opts[:verbose],
46
+ :metrics_prefix => @opts[:graphite_metrics_prefix]})
47
+ graphite_writer.write(metric_hash)
48
+ graphite_writer.write(opcounters_per_second_metric_hash)
49
+ end
50
+ end
51
+
52
+ def calculate_opcounters_per_second(opcounters)
53
+ current_sample = OpCountersSample.new Hash[opcounters]
54
+ previous_sample = current_sample.dup
55
+ result = {}
56
+
57
+ if File.exist? 'lastsample'
58
+ File.open('lastsample', 'r') do |file|
59
+ previous_sample = Marshal.load(file)
60
+ end
61
+ end
62
+
63
+ delta = TimeDifference.between(Time.parse(current_sample.sample_time), Time.parse(previous_sample.sample_time))
64
+ puts "Last sample was taken #{delta.in_seconds.round(0)} seconds ago"
65
+
66
+ previous_sample.values.keys.sort.each do |k|
67
+ previous_sample_value = previous_sample.values[k]
68
+ current_sample_value = current_sample.values[k]
69
+ value_per_seconds = ((current_sample_value - previous_sample_value) / delta.in_seconds).round(2)
70
+ result["#{k}_per_seconds"] = value_per_seconds
71
+ end
72
+
73
+ File.open('lastsample', 'w') do |file|
74
+ Marshal.dump(current_sample, file)
75
+ end
76
+
77
+ result
78
+ end
79
+ end
80
+ end
81
+ end
82
82
  end
@@ -1,21 +1,21 @@
1
- module Mongodb
2
- module Graphite
3
- module Agent
4
- class GraphiteWriter
5
- def initialize(opts)
6
- @graphite = ::Graphite.new({:host => opts[:host], :port => opts[:port]})
7
- @opts = opts
8
- end
9
-
10
- def write(metric_hash)
11
- @metric_hash_with_hostname = Hash[metric_hash.map { |k,v| ["#{@opts[:metrics_prefix]}.#{k}", v]}]
12
- if @opts[:verbose]
13
- puts "Sending data to graphite..."
14
- ap @metric_hash_with_hostname
15
- end
16
- @graphite.send_metrics @metric_hash_with_hostname
17
- end
18
- end
19
- end
20
- end
21
- end
1
+ module Mongodb
2
+ module Graphite
3
+ module Agent
4
+ class GraphiteWriter
5
+ def initialize(opts)
6
+ @graphite = ::Graphite.new({:host => opts[:host], :port => opts[:port]})
7
+ @opts = opts
8
+ end
9
+
10
+ def write(metric_hash)
11
+ @metric_hash_with_hostname = Hash[metric_hash.map { |k,v| ["#{@opts[:metrics_prefix]}.#{k}", v]}]
12
+ if @opts[:verbose]
13
+ puts "Sending data to graphite..."
14
+ ap @metric_hash_with_hostname
15
+ end
16
+ @graphite.send_metrics @metric_hash_with_hostname
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,15 +1,15 @@
1
- module Mongo
2
-
3
- class MongoClient
4
- def is_replicaset?
5
- begin
6
- cmd = BSON::OrderedHash.new
7
- cmd["replSetGetStatus"] = 1
8
- result = self.db("admin").command(cmd)
9
- return !result["set"].blank?
10
- rescue Mongo::OperationFailure
11
- return false
12
- end
13
- end
14
- end
15
- end
1
+ module Mongo
2
+
3
+ class MongoClient
4
+ def is_replicaset?
5
+ begin
6
+ cmd = BSON::OrderedHash.new
7
+ cmd["replSetGetStatus"] = 1
8
+ result = self.db("admin").command(cmd)
9
+ return !result["set"].blank?
10
+ rescue Mongo::OperationFailure
11
+ return false
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,26 +1,26 @@
1
- require 'date'
2
-
3
- module Mongodb
4
- module Graphite
5
- module Agent
6
-
7
- class OpCountersSample
8
- attr_reader :values, :sample_time
9
-
10
- def initialize(values, sample_time = DateTime.now.to_s)
11
- @values = values
12
- @sample_time = sample_time
13
- end
14
-
15
- def marshal_dump
16
- [@sample_time, @values]
17
- end
18
-
19
- def marshal_load array
20
- @sample_time, @values = array
21
- end
22
-
23
- end
24
- end
25
- end
1
+ require 'date'
2
+
3
+ module Mongodb
4
+ module Graphite
5
+ module Agent
6
+
7
+ class OpCountersSample
8
+ attr_reader :values, :sample_time
9
+
10
+ def initialize(values, sample_time = DateTime.now.to_s)
11
+ @values = values
12
+ @sample_time = sample_time
13
+ end
14
+
15
+ def marshal_dump
16
+ [@sample_time, @values]
17
+ end
18
+
19
+ def marshal_load array
20
+ @sample_time, @values = array
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
26
  end
@@ -1,29 +1,29 @@
1
- module Mongodb
2
- module Graphite
3
- module Agent
4
-
5
- module Utils
6
- def self.merge_all
7
- self.inject({}) { |h1, h2|
8
- h1.merge! h2
9
- }
10
- end
11
-
12
- def self.json_descent(pre, json)
13
- json.map do |k, v|
14
- key = pre + [k]
15
- if v.is_a? BSON::OrderedHash
16
- json_descent(key, v)
17
- else
18
- {key.join('.') => v}
19
- end
20
- end
21
- end
22
-
23
- def self.to_hash(s)
24
- json_descent([], s).flatten.reduce Hash.new, :merge
25
- end
26
- end
27
- end
28
- end
29
- end
1
+ module Mongodb
2
+ module Graphite
3
+ module Agent
4
+
5
+ module Utils
6
+ def self.merge_all
7
+ self.inject({}) { |h1, h2|
8
+ h1.merge! h2
9
+ }
10
+ end
11
+
12
+ def self.json_descent(pre, json)
13
+ json.map do |k, v|
14
+ key = pre + [k]
15
+ if v.is_a? BSON::OrderedHash
16
+ json_descent(key, v)
17
+ else
18
+ {key.join('.') => v}
19
+ end
20
+ end
21
+ end
22
+
23
+ def self.to_hash(s)
24
+ json_descent([], s).flatten.reduce Hash.new, :merge
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,7 +1,7 @@
1
- module Mongodb
2
- module Graphite
3
- module Agent
4
- VERSION = "0.1.1"
5
- end
6
- end
7
- end
1
+ module Mongodb
2
+ module Graphite
3
+ module Agent
4
+ VERSION = "0.1.2"
5
+ end
6
+ end
7
+ end
@@ -1,31 +1,32 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'mongodb/graphite/agent/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "mongodb-graphite-agent"
8
- spec.version = Mongodb::Graphite::Agent::VERSION
9
- spec.authors = ["Michele Cantelli"]
10
- spec.email = ["michele.cantelli@jobrapido.com"]
11
- spec.description = ""
12
- spec.summary = ""
13
- spec.homepage = "https://github.com/emmekappa/mongodb-graphite-agent"
14
- spec.license = "MIT"
15
-
16
- spec.files = `git ls-files`.split($/)
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
20
-
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
23
-
24
- spec.add_dependency 'mongo'
25
- spec.add_dependency 'simple-graphite'
26
- spec.add_dependency 'bson'
27
- spec.add_dependency 'bson_ext'
28
- spec.add_dependency 'awesome_print'
29
- spec.add_dependency 'time_difference'
30
- spec.add_dependency 'trollop'
31
- end
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mongodb/graphite/agent/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mongodb-graphite-agent"
8
+ spec.version = Mongodb::Graphite::Agent::VERSION
9
+ spec.authors = ["Michele Cantelli"]
10
+ spec.email = ["michele.cantelli@jobrapido.com"]
11
+ spec.description = ""
12
+ spec.summary = ""
13
+ spec.homepage = "https://github.com/emmekappa/mongodb-graphite-agent"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec"
24
+
25
+ spec.add_dependency 'mongo'
26
+ spec.add_dependency 'simple-graphite'
27
+ spec.add_dependency 'bson'
28
+ spec.add_dependency 'bson_ext'
29
+ spec.add_dependency 'awesome_print'
30
+ spec.add_dependency 'time_difference'
31
+ spec.add_dependency 'trollop'
32
+ end
@@ -0,0 +1,13 @@
1
+ require 'rspec'
2
+ require 'mongodb/graphite/agent'
3
+
4
+ describe 'MongoDB Server Status' do
5
+
6
+ it 'should read server status' do
7
+
8
+ #To change this template use File | Settings | File Templates.
9
+ runner = Mongodb::Graphite::Agent::Runner.new({ :mongodb_host => 'localhost', :mongodb_port => '27017', :dry_run => true, :verbose => true})
10
+ runner.run
11
+
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ require 'rspec'
2
+ require 'mongodb/graphite/agent/op_counters_sample'
3
+
4
+ describe 'OpCounters' do
5
+ it 'should reload last sample' do
6
+ current_sample = Mongodb::Graphite::Agent::OpCountersSample.new(100)
7
+
8
+ File.open('lastsample-test', 'w') do |file|
9
+ Marshal.dump(current_sample, file)
10
+ end
11
+
12
+ File.open('lastsample-test', 'r') do |file|
13
+ previous_sample = Marshal.load(file)
14
+ previous_sample.values.should eq(100)
15
+ end
16
+ end
17
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongodb-graphite-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-14 00:00:00.000000000 Z
12
+ date: 2013-07-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: mongo
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +180,7 @@ extensions: []
164
180
  extra_rdoc_files: []
165
181
  files:
166
182
  - .gitignore
183
+ - .travis.yml
167
184
  - Gemfile
168
185
  - LICENSE.txt
169
186
  - README.md
@@ -176,6 +193,8 @@ files:
176
193
  - lib/mongodb/graphite/agent/utils.rb
177
194
  - lib/mongodb/graphite/agent/version.rb
178
195
  - mongodb-graphite-agent.gemspec
196
+ - spec/agent_spec.rb
197
+ - spec/op_counters_sample_spec.rb
179
198
  homepage: https://github.com/emmekappa/mongodb-graphite-agent
180
199
  licenses:
181
200
  - MIT
@@ -189,22 +208,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
189
208
  - - ! '>='
190
209
  - !ruby/object:Gem::Version
191
210
  version: '0'
192
- segments:
193
- - 0
194
- hash: 2967853814840194051
195
211
  required_rubygems_version: !ruby/object:Gem::Requirement
196
212
  none: false
197
213
  requirements:
198
214
  - - ! '>='
199
215
  - !ruby/object:Gem::Version
200
216
  version: '0'
201
- segments:
202
- - 0
203
- hash: 2967853814840194051
204
217
  requirements: []
205
218
  rubyforge_project:
206
- rubygems_version: 1.8.25
219
+ rubygems_version: 1.8.24
207
220
  signing_key:
208
221
  specification_version: 3
209
222
  summary: ''
210
- test_files: []
223
+ test_files:
224
+ - spec/agent_spec.rb
225
+ - spec/op_counters_sample_spec.rb