formatted-metrics 1.0.4 → 1.1.0
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 +7 -0
- data/.travis.yml +0 -2
- data/lib/metrics/formatters/l2met.rb +50 -6
- data/lib/metrics/version.rb +1 -1
- data/spec/metrics/formatters/l2met_spec.rb +14 -1
- metadata +9 -23
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f7edd948c0f2e561a7fba319c15f4708f92cf24e
|
4
|
+
data.tar.gz: 74220cfe25a93832000aa8620090508f99fef40d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f45582f1080e61c61ae1fd9db73f7c972f17b4c31fb887f95a2bcd3600283f2c0308c53618e4582bad08f3d18899d98dd2b3a5e14904eca772bb5f02eaf51f74
|
7
|
+
data.tar.gz: bdf3c63a206664ae884c2fd714faa630a95fe8211a1b32e523a62849fed5974c2b32935225d7a73af97d4a86a75464d2a379e7805c4fbc419ab7ee0e9b4fee1b
|
data/.travis.yml
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
module Metrics::Formatters
|
2
|
-
PRECISION = 3
|
2
|
+
PRECISION = 3.freeze
|
3
3
|
|
4
4
|
class L2Met < Base
|
5
5
|
# Example
|
6
6
|
# source=web.2 sample#load_avg_1m=0.31 sample#load_avg_5m=0.10 sample#load_avg_15m=0.05
|
7
7
|
def lines
|
8
8
|
groups.map do |source, instrumenters|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
].flatten.join(' ')
|
13
|
-
end
|
9
|
+
measurements = instrumenters.map { |instrumenter| measurement(instrumenter) }
|
10
|
+
Lines.new(full_source(source), measurements).lines
|
11
|
+
end.flatten
|
14
12
|
end
|
15
13
|
|
16
14
|
private
|
@@ -34,5 +32,51 @@ module Metrics::Formatters
|
|
34
32
|
def blank?(string)
|
35
33
|
string.nil? || string.empty?
|
36
34
|
end
|
35
|
+
|
36
|
+
# Responsible for taking a prefix, and an array of measurements, and
|
37
|
+
# returning an array of log lines that are limited to 1024 characters per
|
38
|
+
# line.
|
39
|
+
class Lines
|
40
|
+
include Enumerable
|
41
|
+
|
42
|
+
MAX_LEN = 1024.freeze
|
43
|
+
DELIMITER = ' '.freeze
|
44
|
+
|
45
|
+
attr_reader :source
|
46
|
+
attr_reader :measurements
|
47
|
+
attr_reader :max
|
48
|
+
|
49
|
+
def initialize(source, measurements)
|
50
|
+
@source = "source=#{source}"
|
51
|
+
@measurements = measurements
|
52
|
+
@max = MAX_LEN - @source.length + DELIMITER.length * 2
|
53
|
+
end
|
54
|
+
|
55
|
+
def each(&block)
|
56
|
+
measurements.each(&block)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Groups the array of measurements into an array of log lines, each line
|
60
|
+
# prefixed with the source.
|
61
|
+
#
|
62
|
+
# Example
|
63
|
+
#
|
64
|
+
# # This:
|
65
|
+
# ['measure#rack.request=1', ..., 'measure#rack.request.time=200ms']
|
66
|
+
#
|
67
|
+
# # Into this:
|
68
|
+
# ['source=app measure#rack.request=1', 'source=app measure#rack.request.time=200ms', ...]
|
69
|
+
#
|
70
|
+
# Returns an Array.
|
71
|
+
def lines
|
72
|
+
total = 0
|
73
|
+
chunk { |measurement|
|
74
|
+
total += measurement.length + DELIMITER.length * 2
|
75
|
+
total / max
|
76
|
+
}.map { |_, line|
|
77
|
+
[source, line].join(DELIMITER)
|
78
|
+
}
|
79
|
+
end
|
80
|
+
end
|
37
81
|
end
|
38
82
|
end
|
data/lib/metrics/version.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'securerandom'
|
2
3
|
|
3
4
|
describe Metrics::Formatters::L2Met do
|
4
5
|
let(:formatter) { described_class.new *instrumenters }
|
@@ -12,7 +13,7 @@ describe Metrics::Formatters::L2Met do
|
|
12
13
|
end
|
13
14
|
|
14
15
|
describe '.lines' do
|
15
|
-
subject(:
|
16
|
+
subject(:lines) { formatter.lines }
|
16
17
|
|
17
18
|
context 'with a single instrumenter' do
|
18
19
|
let(:instrumenters) { [ instrumenter(metric: 'rack.request.time', value: 10.3333, units: 'ms', type: 'sample') ] }
|
@@ -37,5 +38,17 @@ describe Metrics::Formatters::L2Met do
|
|
37
38
|
|
38
39
|
it { should eq ['source=app sample#rack.request.time=10ms', 'source=app.foo count#jobs.queued=15jobs count#jobs.busy=10jobs'] }
|
39
40
|
end
|
41
|
+
|
42
|
+
context 'with lots of metrics from the same source' do
|
43
|
+
let(:instrumenters) do
|
44
|
+
100.times.map { instrumenter(metric: SecureRandom.hex, value: rand(100), units: 'ms', type: 'sample') }
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'limits each line to 1024 characters' do
|
48
|
+
lines.each do |line|
|
49
|
+
expect(line.length).to be < 1024
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
40
53
|
end
|
41
54
|
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: formatted-metrics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Eric J. Holmes
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-12-20 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,23 +27,20 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -97,33 +90,26 @@ files:
|
|
97
90
|
homepage: http://github.com/remind101/formatted-metrics
|
98
91
|
licenses:
|
99
92
|
- MIT
|
93
|
+
metadata: {}
|
100
94
|
post_install_message:
|
101
95
|
rdoc_options: []
|
102
96
|
require_paths:
|
103
97
|
- lib
|
104
98
|
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
99
|
requirements:
|
107
|
-
- -
|
100
|
+
- - '>='
|
108
101
|
- !ruby/object:Gem::Version
|
109
102
|
version: '0'
|
110
|
-
segments:
|
111
|
-
- 0
|
112
|
-
hash: -116079147036176157
|
113
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
104
|
requirements:
|
116
|
-
- -
|
105
|
+
- - '>='
|
117
106
|
- !ruby/object:Gem::Version
|
118
107
|
version: '0'
|
119
|
-
segments:
|
120
|
-
- 0
|
121
|
-
hash: -116079147036176157
|
122
108
|
requirements: []
|
123
109
|
rubyforge_project:
|
124
|
-
rubygems_version:
|
110
|
+
rubygems_version: 2.0.3
|
125
111
|
signing_key:
|
126
|
-
specification_version:
|
112
|
+
specification_version: 4
|
127
113
|
summary: Easily output formatted metrics to stdout
|
128
114
|
test_files:
|
129
115
|
- spec/metrics/formatters/l2met_spec.rb
|