metrix 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/metrix/cli.rb +84 -5
- data/lib/metrix/fpm.rb +50 -0
- data/lib/metrix/version.rb +1 -1
- data/spec/fixtures/php.fpm.status.txt +14 -0
- data/spec/lib/metrix/cli_spec.rb +31 -0
- data/spec/lib/metrix/fpm_spec.rb +22 -0
- metadata +9 -2
data/lib/metrix/cli.rb
CHANGED
@@ -4,7 +4,9 @@ require "metrix/mongodb"
|
|
4
4
|
require "metrix/nginx"
|
5
5
|
require "metrix/system"
|
6
6
|
require "metrix/load"
|
7
|
+
require "metrix/fpm"
|
7
8
|
require "logger"
|
9
|
+
require "fileutils"
|
8
10
|
|
9
11
|
module Metrix
|
10
12
|
class CLI
|
@@ -19,15 +21,58 @@ module Metrix
|
|
19
21
|
end
|
20
22
|
|
21
23
|
def run
|
22
|
-
opts.parse(@args)
|
23
24
|
Metrix.logger.level = log_level
|
25
|
+
action = opts.parse(@args).first
|
26
|
+
case action
|
27
|
+
when "start"
|
28
|
+
if running?
|
29
|
+
logger.warn "refuse to run. seems that #{pid_path} exists!"
|
30
|
+
abort "not allowed to run" if running?
|
31
|
+
end
|
32
|
+
pid = Process.fork do
|
33
|
+
start
|
34
|
+
end
|
35
|
+
sleep 1
|
36
|
+
Process.detach(pid)
|
37
|
+
when "status"
|
38
|
+
if File.exists?(pid_path)
|
39
|
+
logger.debug "#{pid_path} exists"
|
40
|
+
puts "STATUS: running with pid #{File.read(pid_path).strip}"
|
41
|
+
else
|
42
|
+
logger.debug "#{pid_path} does not exist"
|
43
|
+
puts "STATUS: not running"
|
44
|
+
end
|
45
|
+
when "stop"
|
46
|
+
abort "not running!" if !running?
|
47
|
+
pid = File.read(pid_path).strip
|
48
|
+
logger.info "killing pid #{pid}"
|
49
|
+
system "kill #{pid}"
|
50
|
+
puts "killed #{pid}"
|
51
|
+
else
|
52
|
+
logger.warn "action #{action} unknown!"
|
53
|
+
abort "action #{action} unknown!"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def delete_pidfile!
|
58
|
+
logger.info "deleteing pidfile #{pid_path}"
|
59
|
+
FileUtils.rm_f(pid_path)
|
60
|
+
end
|
61
|
+
|
62
|
+
def start
|
24
63
|
if self.reporter.nil?
|
25
64
|
puts "ERROR: at least one reporter must be specified"
|
26
65
|
abort opts.to_s
|
27
66
|
end
|
67
|
+
Signal.trap("TERM") do
|
68
|
+
logger.info "terminating..."
|
69
|
+
$running = false
|
70
|
+
end
|
71
|
+
$running = true
|
28
72
|
cnt = -1
|
29
73
|
started = Time.now
|
30
|
-
|
74
|
+
write_pidfile!(Process.pid)
|
75
|
+
while $running
|
31
76
|
begin
|
32
77
|
cnt += 1
|
33
78
|
now = Time.now.utc
|
@@ -49,6 +94,12 @@ module Metrix
|
|
49
94
|
end
|
50
95
|
end
|
51
96
|
|
97
|
+
if fpm?
|
98
|
+
fetch_metrix :fpm do
|
99
|
+
reporter << Metrix::FPM.new(fpm_status)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
52
103
|
if system?
|
53
104
|
fetch_metrix :system do
|
54
105
|
reporter << Metrix::System.new(File.read("/proc/stat"))
|
@@ -67,7 +118,7 @@ module Metrix
|
|
67
118
|
end
|
68
119
|
reporter.flush
|
69
120
|
rescue SystemExit
|
70
|
-
|
121
|
+
$running = false
|
71
122
|
rescue => err
|
72
123
|
Metrix.logger.error "#{err.message}"
|
73
124
|
Metrix.logger.error "#{err.backtrace.inspect}"
|
@@ -81,6 +132,24 @@ module Metrix
|
|
81
132
|
end
|
82
133
|
end
|
83
134
|
end
|
135
|
+
delete_pidfile!
|
136
|
+
end
|
137
|
+
|
138
|
+
def write_pidfile!(pid)
|
139
|
+
logger.info "writing #{pid} to #{pid_path}"
|
140
|
+
File.open(pid_path, "w") { |f| f.print(pid) }
|
141
|
+
end
|
142
|
+
|
143
|
+
def allowed_to_run?
|
144
|
+
!running?
|
145
|
+
end
|
146
|
+
|
147
|
+
def pid_path
|
148
|
+
"/var/run/metrix.pid"
|
149
|
+
end
|
150
|
+
|
151
|
+
def running?
|
152
|
+
File.exists?(pid_path)
|
84
153
|
end
|
85
154
|
|
86
155
|
def log_level
|
@@ -99,6 +168,10 @@ module Metrix
|
|
99
168
|
!!@mongodb
|
100
169
|
end
|
101
170
|
|
171
|
+
def fpm?
|
172
|
+
!!@fpm
|
173
|
+
end
|
174
|
+
|
102
175
|
def nginx?
|
103
176
|
!!@nginx
|
104
177
|
end
|
@@ -111,8 +184,11 @@ module Metrix
|
|
111
184
|
get_url "http://127.0.0.1:28017/serverStatus"
|
112
185
|
end
|
113
186
|
|
187
|
+
def fpm_status
|
188
|
+
get_url "http://127.0.0.1:9001/fpm-status"
|
189
|
+
end
|
190
|
+
|
114
191
|
def nginx_status
|
115
|
-
Metrix.logger.info "fetching mongodb metrix"
|
116
192
|
get_url "http://127.0.0.1:8000/"
|
117
193
|
end
|
118
194
|
|
@@ -154,6 +230,10 @@ module Metrix
|
|
154
230
|
exit
|
155
231
|
end
|
156
232
|
|
233
|
+
o.on("--fpm") do
|
234
|
+
@fpm = true
|
235
|
+
end
|
236
|
+
|
157
237
|
o.on("--nginx") do
|
158
238
|
@nginx = true
|
159
239
|
end
|
@@ -179,7 +259,6 @@ module Metrix
|
|
179
259
|
o.on("--stdout") do
|
180
260
|
require "metrix/reporter/stdout"
|
181
261
|
@reporter = Metrix::Reporter::Stdout.new
|
182
|
-
log_to_stdout
|
183
262
|
end
|
184
263
|
|
185
264
|
o.on("--debug") do
|
data/lib/metrix/fpm.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require "metrix/base"
|
2
|
+
|
3
|
+
module Metrix
|
4
|
+
class FPM < Base
|
5
|
+
def initialize(data)
|
6
|
+
@data = data
|
7
|
+
@time = Time.now
|
8
|
+
end
|
9
|
+
|
10
|
+
def prefix
|
11
|
+
"fpm"
|
12
|
+
end
|
13
|
+
|
14
|
+
def extract(data)
|
15
|
+
{
|
16
|
+
accepted_conn: accepted_conn,
|
17
|
+
start_since: start_since,
|
18
|
+
accepted_conn: accepted_conn,
|
19
|
+
listen_queue: listen_queue,
|
20
|
+
max_listen_queue: max_listen_queue,
|
21
|
+
listen_queue_len: listen_queue_len,
|
22
|
+
idle_processes: idle_processes,
|
23
|
+
active_processes: active_processes,
|
24
|
+
total_processes: total_processes,
|
25
|
+
max_active_processes: max_active_processes,
|
26
|
+
max_children_reached: max_children_reached,
|
27
|
+
slow_requests: slow_requests,
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
{
|
32
|
+
"accepted conn" => :accepted_conn,
|
33
|
+
"start since" => :start_since,
|
34
|
+
"accepted conn" => :accepted_conn,
|
35
|
+
"listen queue" => :listen_queue,
|
36
|
+
"max listen queue" => :max_listen_queue,
|
37
|
+
"listen queue len" => :listen_queue_len,
|
38
|
+
"idle processes" => :idle_processes,
|
39
|
+
"active processes" => :active_processes,
|
40
|
+
"total processes" => :total_processes,
|
41
|
+
"max active processes" => :max_active_processes,
|
42
|
+
"max children reached" => :max_children_reached,
|
43
|
+
"slow requests" => :slow_requests,
|
44
|
+
}.each do |from, to|
|
45
|
+
define_method(to) do
|
46
|
+
cast_int(@data[/^#{from}:\s*(\d+)/, 1])
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/metrix/version.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
pool: www
|
2
|
+
process manager: dynamic
|
3
|
+
start time: 03/Jun/2013:16:34:04 +0000
|
4
|
+
start since: 29
|
5
|
+
accepted conn: 4
|
6
|
+
listen queue: 1
|
7
|
+
max listen queue: 2
|
8
|
+
listen queue len: 128
|
9
|
+
idle processes: 1
|
10
|
+
active processes: 2
|
11
|
+
total processes: 3
|
12
|
+
max active processes: 4
|
13
|
+
max children reached: 1
|
14
|
+
slow requests: 2
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "metrix/cli"
|
3
|
+
|
4
|
+
describe "Metrix::CLI", :wip do
|
5
|
+
subject(:cli) { Metrix::CLI.new([]) }
|
6
|
+
it { should_not be_nil }
|
7
|
+
|
8
|
+
it { cli.pid_path.should eq("/var/run/metrix.pid") }
|
9
|
+
|
10
|
+
describe "#running?" do
|
11
|
+
before do
|
12
|
+
File.stub(:exists?).with("/var/run/metrix.pid") { false }
|
13
|
+
end
|
14
|
+
it { cli.should_not be_running }
|
15
|
+
|
16
|
+
describe "being running" do
|
17
|
+
before do
|
18
|
+
File.stub(:exists?).with("/var/run/metrix.pid") { true }
|
19
|
+
end
|
20
|
+
it { cli.should be_running }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#allowed_to_run?" do
|
25
|
+
before do
|
26
|
+
cli.stub(:running?) { true }
|
27
|
+
end
|
28
|
+
|
29
|
+
it { should_not be_allowed_to_run }
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "metrix/fpm"
|
3
|
+
|
4
|
+
describe "Metrix::FPM", :wip do
|
5
|
+
let(:data) { FIXTURES_PATH.join("php.fpm.status.txt").read }
|
6
|
+
subject(:fpm) { Metrix::FPM.new(data) }
|
7
|
+
it { should_not be_nil }
|
8
|
+
it { subject.start_since.should eq(29) }
|
9
|
+
it { subject.accepted_conn.should eq(4) }
|
10
|
+
it { subject.listen_queue.should eq(1) }
|
11
|
+
it { subject.idle_processes.should eq(1) }
|
12
|
+
|
13
|
+
it { subject.prefix.should eq("fpm") }
|
14
|
+
|
15
|
+
describe "#extract" do
|
16
|
+
subject(:extract) { fpm.extract(1) }
|
17
|
+
it { should be_kind_of(Hash) }
|
18
|
+
it { subject[:accepted_conn].should eq(4) }
|
19
|
+
it { subject[:active_processes].should eq(2) }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metrix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
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-06-
|
12
|
+
date: 2013-06-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: SyslogLogger
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- lib/metrix/base.rb
|
94
94
|
- lib/metrix/cli.rb
|
95
95
|
- lib/metrix/elastic_search.rb
|
96
|
+
- lib/metrix/fpm.rb
|
96
97
|
- lib/metrix/graphite.rb
|
97
98
|
- lib/metrix/json.rb
|
98
99
|
- lib/metrix/load.rb
|
@@ -110,9 +111,12 @@ files:
|
|
110
111
|
- spec/fixtures/loadavg.txt
|
111
112
|
- spec/fixtures/mongo_server_status.json
|
112
113
|
- spec/fixtures/nginx.status.txt
|
114
|
+
- spec/fixtures/php.fpm.status.txt
|
113
115
|
- spec/fixtures/proc.26928.txt
|
114
116
|
- spec/fixtures/proc.stat.txt
|
117
|
+
- spec/lib/metrix/cli_spec.rb
|
115
118
|
- spec/lib/metrix/elastic_search_spec.rb
|
119
|
+
- spec/lib/metrix/fpm_spec.rb
|
116
120
|
- spec/lib/metrix/graphite_spec.rb
|
117
121
|
- spec/lib/metrix/load_spec.rb
|
118
122
|
- spec/lib/metrix/metric_spec.rb
|
@@ -152,9 +156,12 @@ test_files:
|
|
152
156
|
- spec/fixtures/loadavg.txt
|
153
157
|
- spec/fixtures/mongo_server_status.json
|
154
158
|
- spec/fixtures/nginx.status.txt
|
159
|
+
- spec/fixtures/php.fpm.status.txt
|
155
160
|
- spec/fixtures/proc.26928.txt
|
156
161
|
- spec/fixtures/proc.stat.txt
|
162
|
+
- spec/lib/metrix/cli_spec.rb
|
157
163
|
- spec/lib/metrix/elastic_search_spec.rb
|
164
|
+
- spec/lib/metrix/fpm_spec.rb
|
158
165
|
- spec/lib/metrix/graphite_spec.rb
|
159
166
|
- spec/lib/metrix/load_spec.rb
|
160
167
|
- spec/lib/metrix/metric_spec.rb
|