metrix 0.0.13 → 0.0.14
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/lib/metrix/graphite.rb +7 -31
- data/lib/metrix/opentsdb.rb +6 -23
- data/lib/metrix/process_metric.rb +5 -1
- data/lib/metrix/tcp_reporter.rb +53 -0
- data/lib/metrix/version.rb +1 -1
- data/spec/fixtures/proc.5.txt +1 -0
- data/spec/lib/metrix/process_metric_spec.rb +18 -0
- metadata +5 -2
data/lib/metrix/graphite.rb
CHANGED
@@ -1,45 +1,21 @@
|
|
1
1
|
require "socket"
|
2
2
|
require "metrix"
|
3
|
+
require "metrix/tcp_reporter"
|
3
4
|
|
4
5
|
module Metrix
|
5
|
-
class Graphite
|
6
|
+
class Graphite < TcpReporter
|
6
7
|
attr_reader :host, :port
|
7
8
|
|
8
9
|
def initialize(host, port = 2003)
|
9
|
-
|
10
|
-
@port = port
|
10
|
+
super(host, port, 100)
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
|
15
|
-
logger.debug "adding #{m.to_graphite}"
|
16
|
-
buffers << m.to_graphite
|
17
|
-
flush if buffers.count > 90
|
18
|
-
end
|
13
|
+
def window_size
|
14
|
+
90
|
19
15
|
end
|
20
16
|
|
21
|
-
def
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
def flush
|
26
|
-
Timeout.timeout(1) do
|
27
|
-
if buffers.empty?
|
28
|
-
logger.info "nothing to send"
|
29
|
-
return
|
30
|
-
end
|
31
|
-
started = Time.now
|
32
|
-
Socket.tcp(@host, @port) do |socket|
|
33
|
-
socket.puts(buffers.join("\n"))
|
34
|
-
end
|
35
|
-
logger.info "sent #{buffers.count} in %.06fs" % [Time.now - started]
|
36
|
-
end
|
37
|
-
ensure
|
38
|
-
buffers.clear
|
39
|
-
end
|
40
|
-
|
41
|
-
def logger
|
42
|
-
Metrix.logger
|
17
|
+
def serialize_metric(m)
|
18
|
+
m.to_graphite
|
43
19
|
end
|
44
20
|
end
|
45
21
|
end
|
data/lib/metrix/opentsdb.rb
CHANGED
@@ -1,39 +1,22 @@
|
|
1
1
|
require "socket"
|
2
2
|
require "timeout"
|
3
|
+
require "benchmark"
|
4
|
+
require "metrix/tcp_reporter"
|
3
5
|
|
4
6
|
module Metrix
|
5
|
-
class OpenTSDB
|
6
|
-
attr_reader :host, :port
|
7
|
-
|
8
|
-
def initialize(host, port = 4242)
|
9
|
-
@host = host
|
10
|
-
@port = port
|
11
|
-
end
|
12
|
-
|
7
|
+
class OpenTSDB < TcpReporter
|
13
8
|
def <<(metric)
|
14
9
|
metric.metrics.each do |m|
|
15
10
|
Metrix.logger.debug "buffering #{m.to_opentsdb}"
|
16
11
|
buffers << m.to_opentsdb
|
17
|
-
flush if buffers.count >=
|
12
|
+
flush if buffers.count >= 1000
|
18
13
|
end
|
19
14
|
rescue => err
|
20
15
|
Metrix.logger.error "#{err.message} #{err.inspect}"
|
21
16
|
end
|
22
17
|
|
23
|
-
def
|
24
|
-
|
25
|
-
return if buffers.empty?
|
26
|
-
Metrix.logger.info "sending #{buffers.count} to #{@host}:#{@port}"
|
27
|
-
Socket.tcp(@host, @port) do |socket|
|
28
|
-
socket.puts buffers.join("\n")
|
29
|
-
end
|
30
|
-
end
|
31
|
-
ensure
|
32
|
-
buffers.clear
|
33
|
-
end
|
34
|
-
|
35
|
-
def buffers
|
36
|
-
@buffers ||= []
|
18
|
+
def serialize_metric(m)
|
19
|
+
m.to_opentsdb
|
37
20
|
end
|
38
21
|
end
|
39
22
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Metrix
|
2
|
+
class TcpReporter
|
3
|
+
attr_reader :host, :port
|
4
|
+
|
5
|
+
def initialize(host, port = 4242, window_size = nil)
|
6
|
+
@host = host
|
7
|
+
@port = port
|
8
|
+
@window_size = window_size
|
9
|
+
end
|
10
|
+
|
11
|
+
def window_size
|
12
|
+
@window_size || 1000
|
13
|
+
end
|
14
|
+
|
15
|
+
def buffers
|
16
|
+
@buffers ||= []
|
17
|
+
end
|
18
|
+
|
19
|
+
def <<(metric)
|
20
|
+
metric.metrics.each do |m|
|
21
|
+
line = serialize_metric(m)
|
22
|
+
Metrix.logger.debug "buffering #{line}"
|
23
|
+
buffers << line
|
24
|
+
flush if buffers.count >= window_size
|
25
|
+
end
|
26
|
+
rescue => err
|
27
|
+
logger.error "#{err.message} #{err.inspect}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def flush
|
31
|
+
Timeout.timeout(1) do
|
32
|
+
return if buffers.empty?
|
33
|
+
cnt = buffers.count
|
34
|
+
Metrix.logger.info "sending #{cnt} to #{@host}:#{@port}"
|
35
|
+
ms = Benchmark.measure do
|
36
|
+
Socket.tcp(@host, @port) do |socket|
|
37
|
+
buffers.each do |line|
|
38
|
+
socket.puts line
|
39
|
+
end
|
40
|
+
socket.flush
|
41
|
+
end
|
42
|
+
end
|
43
|
+
logger.info "sent %d metrics in %.06f" % [cnt, ms.real]
|
44
|
+
end
|
45
|
+
ensure
|
46
|
+
buffers.clear
|
47
|
+
end
|
48
|
+
|
49
|
+
def logger
|
50
|
+
Metrix.logger
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/metrix/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
5 (kworker/0:0H) S 2 0 0 0 -1 69238880 0 0 0 0 0 0 0 0 0 -20 1 0 12 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 18446744071579336871 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
@@ -13,6 +13,24 @@ describe "Metrix::ProcessMetric" do
|
|
13
13
|
it { subject.utime.should eq(32337) }
|
14
14
|
it { subject.stime.should eq(34740) }
|
15
15
|
|
16
|
+
describe "#normalize_name", :wip do
|
17
|
+
{
|
18
|
+
"kworker/0:0H" => "kworker_0_0H",
|
19
|
+
"(java)" => "java"
|
20
|
+
}.each do |from, to|
|
21
|
+
it "normalized #{from.inspect} to #{to.inspect}" do
|
22
|
+
subject.normalize_name(from).should eq(to)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "with crazy characters", :wip do
|
28
|
+
let(:data) { FIXTURES_PATH.join("proc.5.txt").read }
|
29
|
+
subject(:process) { Metrix::ProcessMetric.new(data) }
|
30
|
+
|
31
|
+
it { subject.name.should eq("kworker_0_0H") }
|
32
|
+
end
|
33
|
+
|
16
34
|
describe "#metrics" do
|
17
35
|
subject(:metrics) do
|
18
36
|
hash_metrics(process.metrics)
|
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.14
|
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-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: SyslogLogger
|
@@ -107,6 +107,7 @@ files:
|
|
107
107
|
- lib/metrix/process_metric.rb
|
108
108
|
- lib/metrix/reporter/stdout.rb
|
109
109
|
- lib/metrix/system.rb
|
110
|
+
- lib/metrix/tcp_reporter.rb
|
110
111
|
- lib/metrix/version.rb
|
111
112
|
- metrix.gemspec
|
112
113
|
- spec/fixtures/df.txt
|
@@ -120,6 +121,7 @@ files:
|
|
120
121
|
- spec/fixtures/nginx.status.txt
|
121
122
|
- spec/fixtures/php.fpm.status.txt
|
122
123
|
- spec/fixtures/proc.26928.txt
|
124
|
+
- spec/fixtures/proc.5.txt
|
123
125
|
- spec/fixtures/proc.stat.txt
|
124
126
|
- spec/lib/metrix/base_spec.rb
|
125
127
|
- spec/lib/metrix/cli_spec.rb
|
@@ -174,6 +176,7 @@ test_files:
|
|
174
176
|
- spec/fixtures/nginx.status.txt
|
175
177
|
- spec/fixtures/php.fpm.status.txt
|
176
178
|
- spec/fixtures/proc.26928.txt
|
179
|
+
- spec/fixtures/proc.5.txt
|
177
180
|
- spec/fixtures/proc.stat.txt
|
178
181
|
- spec/lib/metrix/base_spec.rb
|
179
182
|
- spec/lib/metrix/cli_spec.rb
|