newrelic_rabbitmq_plugin 1.0.3

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b05d0c13237ae414d6319d9c69319fe4152e8243
4
+ data.tar.gz: 103cf8a4447dd471c952fd969b12d36dc582049b
5
+ SHA512:
6
+ metadata.gz: ec0969072e5c9c5f32db8f0042b4db7bf77e11929eb3062263b6f8e224d6214f118496af0bf8472d8a5644eec3b5fe24c852dc524c0d46b84aecde01fc10660a
7
+ data.tar.gz: 6568ed8abb6f39b294ecbd6e541717df7bca657ba1bac3a4dd0daa74874855b3a006fb5b03c287a0e803f3d3f1cd8216158bb78ea495b42b2c476edc231c7a92
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+ require "newrelic_rabbitmq_agent"
3
+
4
+ require 'optparse'
5
+
6
+ options = OptionParser.new do |opts|
7
+ opts.banner = <<-EOF
8
+ Usage:
9
+ newrelic_rabbitmq_agent [options]
10
+ EOF
11
+
12
+ opts.on("-v", "--verbose", "Run verbosely") do
13
+ NewRelic::Plugin::Config.config.newrelic['verbose'] = 1
14
+ end
15
+
16
+ opts.on("-c", "--config FILE", "Override the location of the newrelic_plugin.yml") do |filename|
17
+ if !File.exists? filename
18
+ puts "File not found: #{filename.inspect}"
19
+ exit 1
20
+ end
21
+
22
+ NewRelic::Plugin::Config.config_file = filename
23
+ end
24
+
25
+ opts.on("-h", "--help") do
26
+ puts opts
27
+ exit 0
28
+ end
29
+ end
30
+
31
+ args = options.parse!(ARGV)
32
+
33
+ NewRelicRabbitMQPlugin.run
@@ -0,0 +1,82 @@
1
+ require 'uri'
2
+ require 'cgi'
3
+
4
+ require "newrelic_plugin"
5
+ require "faraday"
6
+ require "faraday_middleware"
7
+
8
+ module NewRelicRabbitMQPlugin
9
+ VERSION = '1.0.3'
10
+
11
+ class Agent < NewRelic::Plugin::Agent::Base
12
+ agent_guid "com.modcloth.newrelic_plugin.rabbitmq"
13
+ agent_version ::NewRelicRabbitMQPlugin::VERSION
14
+ agent_config_options :name, :uri
15
+ agent_human_labels("RabbitMQ") do
16
+ u = ::URI.parse(uri)
17
+ name || "#{u.host}:#{u.port}"
18
+ end
19
+
20
+ def setup_metrics
21
+ @messages_published = NewRelic::Processor::EpochCounter.new
22
+ @messages_acked = NewRelic::Processor::EpochCounter.new
23
+ @messages_delivered = NewRelic::Processor::EpochCounter.new
24
+ @messages_confirmed = NewRelic::Processor::EpochCounter.new
25
+ @messages_redelivered = NewRelic::Processor::EpochCounter.new
26
+ @messages_noacked = NewRelic::Processor::EpochCounter.new
27
+ @bytes_in = NewRelic::Processor::EpochCounter.new
28
+ @bytes_out = NewRelic::Processor::EpochCounter.new
29
+ end
30
+
31
+ def poll_cycle
32
+ response = conn.get("/api/overview")
33
+
34
+ statistics = response.body
35
+
36
+ report_metric "Queues/Queued", "Messages", statistics.fetch("queue_totals").fetch("messages")
37
+ report_metric "Queues/Ready", "Messages", statistics.fetch("queue_totals").fetch("messages_ready")
38
+ report_metric "Queues/Unacknowledged", "Messages", statistics.fetch("queue_totals").fetch("messages_unacknowledged")
39
+
40
+ statistics.fetch("object_totals").each do |key, value|
41
+ report_metric "Objects/#{key.capitalize}", key, value
42
+ end
43
+
44
+ report_metric "Messages/Publish", "Messages/Second", @messages_published.process(statistics.fetch("message_stats").fetch("publish"))
45
+ report_metric "Messages/Ack", "Messages/Second", @messages_acked.process(statistics.fetch("message_stats").fetch("ack"))
46
+ report_metric "Messages/Deliver", "Messages/Second", @messages_delivered.process(statistics.fetch("message_stats").fetch("deliver_get"))
47
+ report_metric "Messages/Confirm", "Messages/Second", @messages_confirmed.process(statistics.fetch("message_stats").fetch("confirm"))
48
+ report_metric "Messages/Redeliver", "Messages/Second", @messages_redelivered.process(statistics.fetch("message_stats").fetch("redeliver"))
49
+ report_metric "Messages/NoAck", "Messages/Second", @messages_noacked.process(statistics.fetch("message_stats").fetch("get_no_ack"))
50
+
51
+ response = conn.get("/api/nodes")
52
+ statistics = response.body
53
+ statistics.each do |node|
54
+ report_metric "Node/MemoryUsage/#{node.fetch("name")}", "Percentage", (node.fetch("mem_used").to_f / node.fetch("mem_limit"))
55
+ report_metric "Node/ProcUsage/#{node.fetch("name")}", "Percentage", (node.fetch("proc_used").to_f / node.fetch("proc_total"))
56
+ report_metric "Node/FdUsage/#{node.fetch("name")}", "Percentage", (node.fetch("fd_used").to_f / node.fetch("fd_total"))
57
+ report_metric "Node/Type/#{node.fetch("name")}", "Type", node.fetch("type")
58
+ report_metric "Node/Running/#{node.fetch("name")}", "Running", node.fetch("running") ? 1 : 0
59
+ end
60
+ end
61
+
62
+ def conn
63
+ @conn ||= Faraday.new(url: uri) do |conn|
64
+ u = ::URI.parse(uri)
65
+ conn.basic_auth(u.user, u.password)
66
+
67
+ conn.response :json, :content_type => /\bjson$/
68
+
69
+ conn.use Faraday::Response::RaiseError
70
+ conn.adapter Faraday.default_adapter
71
+ end
72
+ end
73
+ end
74
+
75
+ def self.run
76
+ NewRelic::Plugin::Config.config.agents.keys.each do |agent|
77
+ NewRelic::Plugin::Setup.install_agent agent, self
78
+ end
79
+
80
+ NewRelic::Plugin::Run.setup_and_run
81
+ end
82
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: newrelic_rabbitmq_plugin
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Jesse Szwedko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.9.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday_middleware
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.9.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: newrelic_plugin
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 1.3.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.3.1
55
+ description: New Relic plugin for reporting RabbitMQ statistics
56
+ email: j.szwedko@modcloth.com
57
+ executables:
58
+ - newrelic_rabbitmq_agent
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - bin/newrelic_rabbitmq_agent
63
+ - lib/newrelic_rabbitmq_agent.rb
64
+ homepage: https://github.com/modcloth/newrelic_rabbitmq_plugin
65
+ licenses:
66
+ - MIT
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options:
70
+ - --charset=UTF-8
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.9.3
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubyforge_project:
85
+ rubygems_version: 2.0.3
86
+ signing_key:
87
+ specification_version: 2
88
+ summary: New Relic plugin for reporting RabbitMQ statistics
89
+ test_files: []