mongodb-graphite-agent 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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