tremolo 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8cd301464b545211094d14f81fb7f5fabae6ee2b
4
- data.tar.gz: 3f00b4c4eef1277501e6ba5107c4a87a0a7ae07c
3
+ metadata.gz: ac99676944c67bc64c93a2297aa481518119d8cf
4
+ data.tar.gz: a4f670b8c599a4f4ea57208f4647a82cbc77cd6e
5
5
  SHA512:
6
- metadata.gz: bfb314678ffd0ac4ce31be0cb679c6153f02ef1bed74665a7870bfaa0a02bc585e2b0138d8d6d807f1905db0277e014dab2a71913a6b03c00da6ea043e18ba69
7
- data.tar.gz: 0eb35699d48509e6d2d363b87683d50d7c6591ee1193cf76cb3c6a6dc1070aa770fbe510e7446d3bcf7c50d53072cd2e30e80a16daf45d18569186b38eb1954c
6
+ metadata.gz: 13ea2e22c5062d2c91626b90776126ee8fd15272197ea03621128b04ede7903acedfd0503fc9d85715ad12a264638d18bd9fbb153d0c23fb5dda768302bba993
7
+ data.tar.gz: 606d586a2bc999e0c7cc5e276609421bf449265f0e89fbabeb4d7115508c58b86bab5885d5feb95b7877f4321358efbd0e70c64d6ce860d68a14db6ca855b2de
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## Tremolo 0.2.0 ##
2
+
3
+ * Adds tags to `Tracker` and `Series`
4
+
5
+ *Tony Pitale*
6
+
1
7
  ## Tremolo 0.1.0 ##
2
8
 
3
9
  * Wireline compatibility with Influxdb 0.9 series
data/README.md CHANGED
@@ -70,6 +70,14 @@ series = tracker.series('timing.series-name')
70
70
  value = series.time { Net::HTTP.get(URI('http://google.com')) }
71
71
  ```
72
72
 
73
+ ## Tags ##
74
+
75
+ A Hash of `tags` data can be passed to `increment`, `decrement`, `timing`, and `time`, and `write_point`, as the last argument.
76
+
77
+ ```ruby
78
+ series.write_point({:value => 18}, {:otherdata => 1986})
79
+ ```
80
+
73
81
  ## Databases, Namespace and Series names
74
82
 
75
83
  Since version 0.7.1 of InfluxDB, multiple databases can be configured for different UDP ports. All
@@ -1,27 +1,51 @@
1
1
  module Tremolo
2
2
  class DataPoint
3
- attr_accessor :series_name, :data, :time
3
+ attr_accessor :series_name, :tags, :values, :time
4
4
 
5
5
  def initialize(series_name, data, time=nil)
6
6
  self.series_name = series_name
7
- self.data = data
8
7
  self.time = time.nil? ? nil : time.to_i
8
+
9
+ self.tags = data.fetch(:tags, {})
10
+ self.values = data.fetch(:values, [])
11
+ end
12
+
13
+ # key/value pairs of tag data
14
+ def tag_values
15
+ tags.map(&value_mapper).join(',')
9
16
  end
10
17
 
11
- def values
12
- @data.map {|h| h.map {|k,v| "#{k}=#{cast(v)}" }.join(',')}
18
+ # join the series name and tag values
19
+ def measurement_and_tags
20
+ [series_name, tag_values].delete_if {|v| v.to_s.length == 0}.join(',')
21
+ end
22
+
23
+ # join lines for each value
24
+ def lines
25
+ values.map(&line_format).join("\n")
26
+ end
27
+
28
+ private
29
+ def fields
30
+ values.map {|point| point.map(&value_mapper)}.join(',')
13
31
  end
14
32
 
15
33
  def cast(value)
16
34
  value
17
35
  end
18
36
 
19
- def line
20
- @line ||= lambda {|values| [series_name, values, time].compact.join(' ')}
37
+ def line_format
38
+ @line ||= lambda do |values|
39
+ [
40
+ measurement_and_tags,
41
+ fields,
42
+ time
43
+ ].compact.join(' ')
44
+ end
21
45
  end
22
46
 
23
- def lines
24
- values.map {|v| line.call(v)}.join("\n")
47
+ def value_mapper
48
+ lambda { |k,v| "#{k}=#{cast(v)}" }
25
49
  end
26
50
  end
27
51
  end
@@ -7,13 +7,13 @@ module Tremolo
7
7
  Series.new(self, series_name)
8
8
  end
9
9
 
10
- def increment(series_name);end
11
- def decrement(series_name);end
12
- def timing(series_name, value);end
13
- def time(series_name, &block)
10
+ def increment(series_name, tags = {});end
11
+ def decrement(series_name, tags = {});end
12
+ def timing(series_name, value, tags = {});end
13
+ def time(series_name, tags = {}, &block)
14
14
  block.call
15
15
  end
16
- def write_point(series_name, data);end
17
- def write_points(series_name, data);end
16
+ def write_point(series_name, data, tags = {});end
17
+ def write_points(series_name, data, tags = {});end
18
18
  end
19
19
  end
@@ -7,17 +7,17 @@ module Tremolo
7
7
  @socket.connect(host, port) # client
8
8
  end
9
9
 
10
- def write_points(series_name, data)
10
+ def write_points(series_name, values, tags = {})
11
11
  begin
12
- @socket.send(prepare(series_name, data), 0)
12
+ @socket.send(prepare(series_name, values, tags), 0)
13
13
  rescue Errno::ECONNREFUSED
14
14
  nil
15
15
  end
16
16
  end
17
17
 
18
18
  private
19
- def prepare(series_name, data)
20
- DataPoint.new(series_name, data).lines
19
+ def prepare(series_name, values, tags = {})
20
+ DataPoint.new(series_name, {:values => values, :tags => tags}).lines
21
21
  end
22
22
  end
23
23
  end
@@ -8,28 +8,28 @@ module Tremolo
8
8
  @tracker, @series_name = tracker, series_name
9
9
  end
10
10
 
11
- def increment
12
- write_point({value: 1})
11
+ def increment(tags = {})
12
+ write_point({value: 1}, tags)
13
13
  end
14
14
 
15
- def decrement
16
- write_point({value: -1})
15
+ def decrement(tags = {})
16
+ write_point({value: -1}, tags)
17
17
  end
18
18
 
19
- def timing(value)
20
- write_point({value: value})
19
+ def timing(value, tags = {})
20
+ write_point({value: value}, tags)
21
21
  end
22
22
 
23
- def time(&block)
24
- tracker.time(series_name, &block)
23
+ def time(tags = {}, &block)
24
+ tracker.time(series_name, tags, &block)
25
25
  end
26
26
 
27
- def write_point(data)
28
- write_points([data])
27
+ def write_point(data, tags = {})
28
+ write_points([data], tags)
29
29
  end
30
30
 
31
- def write_points(data)
32
- tracker.write_points(series_name, data)
31
+ def write_points(data, tags = {})
32
+ tracker.write_points(series_name, data, tags)
33
33
  end
34
34
  end
35
35
  end
@@ -16,32 +16,32 @@ module Tremolo
16
16
  Series.new(self, series_name)
17
17
  end
18
18
 
19
- def increment(series_name)
20
- write_point(series_name, {value: 1})
19
+ def increment(series_name, tags = {})
20
+ write_point(series_name, {value: 1}, tags)
21
21
  end
22
22
 
23
- def decrement(series_name)
24
- write_point(series_name, {value: -1})
23
+ def decrement(series_name, tags = {})
24
+ write_point(series_name, {value: -1}, tags)
25
25
  end
26
26
 
27
- def timing(series_name, value)
28
- write_point(series_name, {value: value})
27
+ def timing(series_name, value, tags = {})
28
+ write_point(series_name, {value: value}, tags)
29
29
  end
30
30
 
31
- def time(series_name, &block)
31
+ def time(series_name, tags = {}, &block)
32
32
  start = Time.now
33
33
  block.call.tap do |_|
34
34
  value = ((Time.now-start)*1000).round
35
- timing(series_name, value)
35
+ timing(series_name, value, tags)
36
36
  end
37
37
  end
38
38
 
39
- def write_point(series_name, data)
40
- write_points(series_name, [data])
39
+ def write_point(series_name, data, tags = {})
40
+ write_points(series_name, [data], tags)
41
41
  end
42
42
 
43
- def write_points(series_name, data)
44
- sender.async.write_points([namespace, series_name].compact.join('.'), data)
43
+ def write_points(series_name, data, tags = {})
44
+ sender.async.write_points([namespace, series_name].compact.join('.'), data, tags)
45
45
  end
46
46
 
47
47
  private
@@ -1,3 +1,3 @@
1
1
  module Tremolo
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -20,6 +20,12 @@ describe Tremolo::NoopTracker do
20
20
  expect(socket).to have_received(:send).never
21
21
  end
22
22
 
23
+ it 'does not send single point with value 1 and tags' do
24
+ tracker.increment('accounts.created', {associated_id: 81102})
25
+
26
+ expect(socket).to have_received(:send).never
27
+ end
28
+
23
29
  it 'does not send single point with value -1' do
24
30
  tracker.decrement('accounts.created')
25
31
 
@@ -16,7 +16,7 @@ describe Tremolo::Series do
16
16
 
17
17
  line = 'accounts.created value=111,associated_id=81102'
18
18
 
19
- sleep 0.1
19
+ sleep 0.01
20
20
  expect(socket).to have_received(:send).with(line, 0)
21
21
  end
22
22
 
@@ -25,7 +25,7 @@ describe Tremolo::Series do
25
25
 
26
26
  line = 'accounts.created value=1'
27
27
 
28
- sleep 0.1
28
+ sleep 0.01
29
29
  expect(socket).to have_received(:send).with(line, 0)
30
30
  end
31
31
 
@@ -34,7 +34,7 @@ describe Tremolo::Series do
34
34
 
35
35
  line = 'accounts.created value=-1'
36
36
 
37
- sleep 0.1
37
+ sleep 0.01
38
38
  expect(socket).to have_received(:send).with(line, 0)
39
39
  end
40
40
 
@@ -43,7 +43,7 @@ describe Tremolo::Series do
43
43
 
44
44
  line = 'accounts.created value=89'
45
45
 
46
- sleep 0.1
46
+ sleep 0.01
47
47
  expect(socket).to have_received(:send).with(line, 0)
48
48
  end
49
49
 
@@ -62,7 +62,7 @@ describe Tremolo::Series do
62
62
 
63
63
  line = 'accounts.created value=1050'
64
64
 
65
- sleep 0.1
65
+ sleep 0.01
66
66
  expect(returned).to eq('returning another thing')
67
67
  expect(socket).to have_received(:send).with(line, 0)
68
68
  end
@@ -15,7 +15,16 @@ describe Tremolo::Tracker do
15
15
 
16
16
  line = 'accounts.created value=111,associated_id=81102'
17
17
 
18
- sleep 0.1
18
+ sleep 0.01
19
+ expect(socket).to have_received(:send).with(line, 0)
20
+ end
21
+
22
+ it 'sends tags formatted for InfluxDB', :celluloid => true do
23
+ tracker.write_point('accounts.created', {value: 111}, {associated_id: 81102})
24
+
25
+ line = 'accounts.created,associated_id=81102 value=111'
26
+
27
+ sleep 0.01
19
28
  expect(socket).to have_received(:send).with(line, 0)
20
29
  end
21
30
 
@@ -24,7 +33,7 @@ describe Tremolo::Tracker do
24
33
 
25
34
  line = 'accounts.created value=1'
26
35
 
27
- sleep 0.1
36
+ sleep 0.01
28
37
  expect(socket).to have_received(:send).with(line, 0)
29
38
  end
30
39
 
@@ -33,7 +42,7 @@ describe Tremolo::Tracker do
33
42
 
34
43
  line = 'accounts.created value=-1'
35
44
 
36
- sleep 0.1
45
+ sleep 0.01
37
46
  expect(socket).to have_received(:send).with(line, 0)
38
47
  end
39
48
 
@@ -42,7 +51,7 @@ describe Tremolo::Tracker do
42
51
 
43
52
  line = 'timing.accounts.created value=89'
44
53
 
45
- sleep 0.1
54
+ sleep 0.01
46
55
  expect(socket).to have_received(:send).with(line, 0)
47
56
  end
48
57
 
@@ -61,7 +70,7 @@ describe Tremolo::Tracker do
61
70
 
62
71
  line = 'timing.accounts.created value=1014'
63
72
 
64
- sleep 0.1
73
+ sleep 0.01
65
74
  expect(returned).to eq('returning a thing')
66
75
  expect(socket).to have_received(:send).with(line, 0)
67
76
  end
@@ -74,7 +83,7 @@ describe Tremolo::Tracker do
74
83
 
75
84
  line = 'alf.timing.accounts.created value=14'
76
85
 
77
- sleep 0.1
86
+ sleep 0.01
78
87
  expect(socket).to have_received(:send).with(line, 0)
79
88
  end
80
89
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tremolo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Pitale
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-03 00:00:00.000000000 Z
11
+ date: 2015-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid-io