monitoring-client 0.2.8 → 0.2.9

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.
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- monitoring-client (0.2.6)
4
+ monitoring-client (0.2.9)
5
5
  yajl-ruby
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
10
  diff-lcs (1.1.3)
11
+ rake (0.9.2)
11
12
  rspec (2.6.0)
12
13
  rspec-core (~> 2.6.0)
13
14
  rspec-expectations (~> 2.6.0)
@@ -23,4 +24,5 @@ PLATFORMS
23
24
 
24
25
  DEPENDENCIES
25
26
  monitoring-client!
27
+ rake
26
28
  rspec
@@ -0,0 +1,171 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ module Monitoring
4
+ class RabbitMqQueueLengths
5
+
6
+ require "optparse"
7
+ require "yaml"
8
+ require "monitoring/client/version"
9
+ require "monitoring/client/profiler"
10
+
11
+ RC_OK = 0
12
+ RC_USAGE = 1
13
+ RC_KILLED = 2
14
+
15
+
16
+ def initialize()
17
+ @config_fn = File.join(ENV["HOME"], ".monitoring.rabbitmq-queue-lengths.yml")
18
+ @daemon_mode = true
19
+ @pid_file_fn = "/var/run/monitor-rabbitmq-queue-lengths.pid"
20
+ @sleep_period = 60
21
+ @stdout = "/dev/null"
22
+ @stderr = "/dev/null"
23
+ @alive = true
24
+ end
25
+
26
+
27
+ def parse_opts(argv)
28
+ optparser = OptionParser.new() do |o|
29
+ o.banner = "monitor-rabbitmq-queue-lengths [options]"
30
+
31
+ o.separator("")
32
+ o.separator("options")
33
+
34
+ o.on("-c", "--config=CONFIG",
35
+ "Config file to use",
36
+ "Default: #{@config_fn.inspect()}") do |v|
37
+ @config_fn = v
38
+ end
39
+
40
+ o.on("-f", "--forgeround",
41
+ "Run in forground",
42
+ "Default: #{!@daemon_mode}") do |v|
43
+ @daemon_mode = !v
44
+ end
45
+
46
+ o.on("--pid-file=FILE",
47
+ "Place to store our pid file",
48
+ "Default: " + @pid_file_fn.inspect()) do |v|
49
+ @pid_file_fn = v
50
+ end
51
+
52
+ o.on("--sleep-period=s",
53
+ "Time to sleep between posts",
54
+ "Default: #{@sleep_period}") do |v|
55
+ @sleep_period = Float(v)
56
+ end
57
+
58
+ o.on("--stdout=FILE",
59
+ "Place to write stdout to",
60
+ "Default: " + @stdout.inspect()) do |v|
61
+ @stdout = v
62
+ end
63
+
64
+ o.on("-v", "--version",
65
+ "Print version and exit") do |v|
66
+ STDOUT.puts(Monitoring::Client::VERSION)
67
+ Kernel.exit(RC_OK)
68
+ end
69
+
70
+ o.on("--stderr=FILE",
71
+ "Place to write stdout to",
72
+ "Default: " + @stderr.inspect()) do |v|
73
+ @stderr = v
74
+ end
75
+
76
+ o.separator("")
77
+ o.on_tail("-h", "--help", "You're reading it :-)") do
78
+ puts(o)
79
+ Kernel.exit(RC_USAGE)
80
+ end
81
+ end
82
+
83
+ optparser.parse(argv)
84
+ self
85
+ end
86
+
87
+ def load_config()
88
+ @config = YAML.load_file(@config_fn)
89
+ [
90
+ :profiler_name,
91
+ ].each do |expected_key|
92
+ unless @config.has_key?(expected_key) &&
93
+ !@config[expected_key].nil? &&
94
+ @config[expected_key].size > 0
95
+ die("Bad config at #{@config_fn}: "\
96
+ "Expected #{expected_key} to exist and not be blank")
97
+ end
98
+ end
99
+ end
100
+
101
+ def run()
102
+ load_config()
103
+ daemonize() if @daemon_mode
104
+
105
+ trap(:INT) do
106
+ if @alive
107
+ STDOUT.puts("SIGINT: going away gracefully")
108
+ @alive = false
109
+ else
110
+ STDOUT.puts("SIGINT (again): going away not so gracefully")
111
+ Kernel.exit!(RC_KILLED)
112
+ end
113
+ end
114
+
115
+ while @alive
116
+ post_queue_lengths
117
+ Kernel.sleep(@sleep_period)
118
+ end
119
+ end
120
+
121
+ def daemonize()
122
+ pid_file_fd = File.open(@pid_file_fn, "w")
123
+ pid_file_fd.flock(File::LOCK_EX | File::LOCK_NB) ||
124
+ die("Daemon already exists")
125
+
126
+ die("First fork failed") if (pid = Kernel.fork()) == -1
127
+ exit unless pid.nil?
128
+
129
+ Process.setsid
130
+ pid_file_fd.puts(Process.pid)
131
+ pid_file_fd.flush()
132
+
133
+ Dir.chdir("/")
134
+ File.umask(0000)
135
+ STDIN.reopen("/dev/null")
136
+ STDOUT.reopen(@stdout)
137
+ STDERR.reopen(@stderr)
138
+ end
139
+
140
+ def die(why)
141
+ STDERR.puts(why)
142
+ Kernel.exit!(1)
143
+ end
144
+
145
+ def get_profiler
146
+ @profiler ||= Monitoring::Client::Profiler.new(@config[:profiler_name])
147
+ end
148
+
149
+ def routine(routine_name)
150
+ get_profiler.routine(routine_name) do |routine|
151
+ yield(routine)
152
+ end
153
+ end
154
+
155
+ def post_queue_lengths
156
+ list_queues = %x{sudo rabbitmqctl list_queues}.split("\n")
157
+ list_queues.slice!(0)
158
+ list_queues.slice!(list_queues.size - 1)
159
+ routine("list_queues") do |m|
160
+ m.count("n-queues", list_queues.size, "n")
161
+ list_queues.each do |line|
162
+ queue_name, size = line.split("\t")
163
+ size = Integer(size)
164
+ m.count(queue_name, size, "n")
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
170
+
171
+ Monitoring::RabbitMqQueueLengths.new().parse_opts(ARGV).run()
@@ -14,9 +14,9 @@ module Monitoring
14
14
 
15
15
 
16
16
  def initialize()
17
- @config_fn = File.join(ENV["HOME"], ".monitoring.yml")
17
+ @config_fn = File.join(ENV["HOME"], ".monitoring.system-info.yml")
18
18
  @daemon_mode = true
19
- @pid_file_fn = "/var/run/monitoringd.pid"
19
+ @pid_file_fn = "/var/run/monitor-system-info.pid"
20
20
  @sleep_period = 60
21
21
  @stdout = "/dev/null"
22
22
  @stderr = "/dev/null"
@@ -1,5 +1,5 @@
1
1
  module Monitoring
2
2
  module Client
3
- VERSION = "0.2.8"
3
+ VERSION = "0.2.9"
4
4
  end
5
5
  end
@@ -21,4 +21,5 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_runtime_dependency "yajl-ruby"
23
23
  s.add_development_dependency "rspec"
24
+ s.add_development_dependency "rake"
24
25
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monitoring-client
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 8
10
- version: 0.2.8
9
+ - 9
10
+ version: 0.2.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Marc Bowes
@@ -15,12 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-24 00:00:00 +02:00
18
+ date: 2011-10-10 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: yajl-ruby
23
- prerelease: false
22
+ type: :runtime
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
25
  requirements:
@@ -30,11 +29,11 @@ dependencies:
30
29
  segments:
31
30
  - 0
32
31
  version: "0"
33
- type: :runtime
32
+ name: yajl-ruby
34
33
  version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: rspec
37
34
  prerelease: false
35
+ - !ruby/object:Gem::Dependency
36
+ type: :development
38
37
  requirement: &id002 !ruby/object:Gem::Requirement
39
38
  none: false
40
39
  requirements:
@@ -44,12 +43,28 @@ dependencies:
44
43
  segments:
45
44
  - 0
46
45
  version: "0"
47
- type: :development
46
+ name: rspec
48
47
  version_requirements: *id002
48
+ prerelease: false
49
+ - !ruby/object:Gem::Dependency
50
+ type: :development
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ name: rake
61
+ version_requirements: *id003
62
+ prerelease: false
49
63
  description: Ruby client which uses UDP to communicate with a daemon which uses HTTP POST to communicate with a Web server
50
64
  email:
51
65
  - marcbowes+monitoring+client@gmail.com
52
66
  executables:
67
+ - monitor-rabbitmq-queue-lengths
53
68
  - monitor-system-info
54
69
  - monitoringd
55
70
  extensions: []
@@ -61,6 +76,7 @@ files:
61
76
  - Gemfile
62
77
  - Gemfile.lock
63
78
  - Rakefile
79
+ - bin/monitor-rabbitmq-queue-lengths
64
80
  - bin/monitor-system-info
65
81
  - bin/monitoringd
66
82
  - lib/monitoring.rb
@@ -109,5 +125,8 @@ rubygems_version: 1.6.2
109
125
  signing_key:
110
126
  specification_version: 3
111
127
  summary: Simple client & daemon to post metrics
112
- test_files: []
113
-
128
+ test_files:
129
+ - spec/compiler_spec.rb
130
+ - spec/config_spec.rb
131
+ - spec/profiler_spec.rb
132
+ - spec/spec_helper.rb