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