mongodb-graphite-agent 0.0.8 → 0.0.9

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/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source 'https://rubygems.org'
2
-
1
+ source 'https://rubygems.org'
2
+
3
3
  gemspec
@@ -1,30 +1,30 @@
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 host", :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 :mongodb_host, "must be specified" unless opts[:mongodb_host]
27
- Trollop::die :graphite_host, "(or --dry-run) must be specified " if (opts[:graphite_host].blank? and opts[:dry_run].blank?)
28
-
29
- runner = Mongodb::Graphite::Agent::Runner.new(opts)
30
- runner.run
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 host", :type => :int, :default => 27017
13
+ opt :mongodb_password, "MongoDB password", :type => :string
14
+ opt :mongodb_replicaset, "Set this flag if the host is part of a MongoDB replicaSet", :type => :boolean, :default => false
15
+ opt :graphite_host, "Graphite host", :type => :string
16
+ opt :graphite_port, "Graphite port", :type => :string
17
+ opt :graphite_metrics_prefix, "Graphite metrics prefix", :type => :string, :default => Socket.gethostname
18
+ opt :dry_run, "Dry run", :type => :boolean, :default => false
19
+ opt :verbose, "Verbose", :type => :boolean, :default => false
20
+ end
21
+
22
+ if opts[:dry_run]
23
+ puts "\n\nWARNING!!! This is a dry run\n\n\n"
24
+ sleep 1
25
+ end
26
+
27
+ Trollop::die :graphite_host, "(or --dry-run) must be specified" if (opts[:graphite_host].blank? and opts[:dry_run].blank?)
28
+
29
+ runner = Mongodb::Graphite::Agent::Runner.new(opts)
30
+ runner.run
@@ -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,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.0.8"
5
- end
6
- end
7
- end
1
+ module Mongodb
2
+ module Graphite
3
+ module Agent
4
+ VERSION = "0.0.9"
5
+ end
6
+ end
7
+ end
@@ -1,82 +1,85 @@
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
-
12
- module Mongodb
13
- module Graphite
14
- module Agent
15
- class Runner
16
-
17
- def initialize(opts)
18
- @opts = opts
19
- end
20
-
21
- def run
22
- connection = Mongo::MongoClient.new(@opts.mongodb_host, @opts.mongodb_port, :slave_ok => true)
23
- unless (@opts[:mongodb_username].blank? && @opts[:mongodb_password].blank?)
24
- connection["admin"].authenticate(@opts.mongodb_username, @opts.mongodb_password)
25
- end
26
-
27
- server_status_result = connection["local"].command('serverStatus' => 1)
28
- metric_hash = Utils.to_hash(server_status_result).select { |k|
29
- k.match('^connection|^network\.|^cursors|^mem\.mapped|^indexCounters|^repl.oplog')
30
- }
31
-
32
- opcounters_per_second_metric_hash = calculate_opcounters_per_second server_status_result["opcounters"]
33
-
34
- if @opts[:verbose]
35
- puts "Calculating metrics..."
36
- ap metric_hash
37
- ap opcounters_per_second_metric_hash
38
- end
39
-
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
+
12
+ module Mongodb
13
+ module Graphite
14
+ module Agent
15
+ class Runner
16
+
17
+ def initialize(opts)
18
+ @opts = opts
19
+ end
20
+
21
+ def run
22
+ connection = Mongo::MongoClient.new(@opts.mongodb_host, @opts.mongodb_port, :slave_ok => true)
23
+ unless (@opts[:mongodb_username].blank? && @opts[:mongodb_password].blank?)
24
+ connection["admin"].authenticate(@opts.mongodb_username, @opts.mongodb_password)
25
+ end
26
+
27
+ server_status_result = connection["local"].command('serverStatus' => 1)
28
+ metric_hash = Utils.to_hash(server_status_result).select { |k|
29
+ k.match('^connection|^network\.|^cursors|^mem\.mapped|^indexCounters|^repl.oplog')
30
+ }
31
+
32
+ unless (@opts[:mongodb_replicaset].blank?)
33
+ opcounters_per_second_metric_hash = calculate_opcounters_per_second server_status_result["opcountersRepl"]
34
+ else
35
+ opcounters_per_second_metric_hash = calculate_opcounters_per_second server_status_result["opcounters"]
36
+ end
37
+
38
+ if @opts[:verbose]
39
+ puts "Calculating metrics..."
40
+ ap metric_hash
41
+ ap opcounters_per_second_metric_hash
42
+ end
43
+
44
+
45
+ unless (@opts[:dry_run])
46
+ graphite_writer = GraphiteWriter.new({:host => @opts[:graphite_host],
47
+ :port => @opts[:graphite_port],
48
+ :verbose => @opts[:verbose],
49
+ :metrics_prefix => @opts[:graphite_metrics_prefix]})
50
+ graphite_writer.write(metric_hash)
51
+ graphite_writer.write(opcounters_per_second_metric_hash)
52
+ end
53
+ end
54
+
55
+ def calculate_opcounters_per_second(opcounters)
56
+ current_sample = OpCountersSample.new Hash[opcounters]
57
+ previous_sample = current_sample.dup
58
+ result = {}
59
+
60
+ if File.exist? 'lastsample'
61
+ File.open('lastsample', 'r') do |file|
62
+ previous_sample = Marshal.load(file)
63
+ end
64
+ end
65
+
66
+ delta = TimeDifference.between(Time.parse(current_sample.sample_time), Time.parse(previous_sample.sample_time))
67
+ puts "Last sample was taken #{delta.in_seconds.round(0)} seconds ago"
68
+
69
+ previous_sample.values.keys.sort.each do |k|
70
+ previous_sample_value = previous_sample.values[k]
71
+ current_sample_value = current_sample.values[k]
72
+ value_per_seconds = ((current_sample_value - previous_sample_value) / delta.in_seconds).round(2)
73
+ result["#{k}_per_seconds"] = value_per_seconds
74
+ end
75
+
76
+ File.open('lastsample', 'w') do |file|
77
+ Marshal.dump(current_sample, file)
78
+ end
79
+
80
+ result
81
+ end
82
+ end
83
+ end
84
+ end
82
85
  end
@@ -1,31 +1,31 @@
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
+
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
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.0.8
4
+ version: 0.0.9
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-04 00:00:00.000000000 Z
12
+ date: 2013-07-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -188,15 +188,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
188
188
  - - ! '>='
189
189
  - !ruby/object:Gem::Version
190
190
  version: '0'
191
+ segments:
192
+ - 0
193
+ hash: 2166291128576152408
191
194
  required_rubygems_version: !ruby/object:Gem::Requirement
192
195
  none: false
193
196
  requirements:
194
197
  - - ! '>='
195
198
  - !ruby/object:Gem::Version
196
199
  version: '0'
200
+ segments:
201
+ - 0
202
+ hash: 2166291128576152408
197
203
  requirements: []
198
204
  rubyforge_project:
199
- rubygems_version: 1.8.24
205
+ rubygems_version: 1.8.25
200
206
  signing_key:
201
207
  specification_version: 3
202
208
  summary: ''