hallmonitor 4.0.0 → 4.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d535fc73fa9953de660b0884b36496a159c20d7b
|
4
|
+
data.tar.gz: 336bb38e055f533a545d859eb92461b97f025438
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b637d698988d1f05b2603df29c94fc5fc7de6c8a845e331e8acc2599c093e675d9fc5b2d3214fd749c93eaedf00650cd94f99b941095a006f5413a0de6014ff
|
7
|
+
data.tar.gz: 58add99e48674c87f883545c05b2a4b90301892b708086d1196c74cea358b4cf41498b9f212770ed2f66fd924f5ee8cec72d176443ed935b789540eb5ad8091e
|
@@ -8,7 +8,18 @@ module Hallmonitor
|
|
8
8
|
# An outputter for InfluxDB
|
9
9
|
class Influxdb < Outputter
|
10
10
|
# Simple EventData struct, used to communicate with an optional Transformer
|
11
|
-
EventData = Struct.new(:name, :tags, :fields)
|
11
|
+
EventData = Struct.new(:name, :tags, :fields, :timestamp)
|
12
|
+
|
13
|
+
# Maps Influxdb client precisions to multipliers for Time#to_r to get
|
14
|
+
# the value to send to influxdb for the timestamp
|
15
|
+
PRECISION_MAP = {
|
16
|
+
'ns' => 10**9,
|
17
|
+
'u' => 10**6,
|
18
|
+
'ms' => 10**3,
|
19
|
+
's' => 1,
|
20
|
+
'm' => 1 / 60,
|
21
|
+
'h' => 1 / 3600
|
22
|
+
}.freeze
|
12
23
|
|
13
24
|
# @return [#transform(Event, EventData)] Object used to transform data
|
14
25
|
# before it is sent to InfluxDB
|
@@ -39,6 +50,7 @@ module Hallmonitor
|
|
39
50
|
@tags = {}.merge(tags)
|
40
51
|
@client = influxdb_client || raise('Must supply an InfluxDb client')
|
41
52
|
@transformer = transformer
|
53
|
+
@precision_mult = PRECISION_MAP[@client.config.time_precision || 's']
|
42
54
|
end
|
43
55
|
|
44
56
|
# Sends events to InfluxDB instance
|
@@ -54,7 +66,7 @@ module Hallmonitor
|
|
54
66
|
# @param data [EventData] Struct of data we're building for InfluxDB
|
55
67
|
def transform_and_write(event, event_data)
|
56
68
|
event_data = @transformer.transform(event, event_data) if @transformer
|
57
|
-
data = { tags: event_data.tags, values: event_data.fields }
|
69
|
+
data = { tags: event_data.tags, values: event_data.fields, timestamp: event_data.timestamp }
|
58
70
|
@client.write_point(event_data.name, data)
|
59
71
|
end
|
60
72
|
|
@@ -75,9 +87,17 @@ module Hallmonitor
|
|
75
87
|
data.name = event.name
|
76
88
|
data.tags = @tags.merge(event.tags.merge(type: type))
|
77
89
|
data.fields = value.is_a?(Hash) ? value : { value: value }
|
90
|
+
data.timestamp = calc_timestamp(event)
|
78
91
|
data
|
79
92
|
end
|
80
93
|
|
94
|
+
# Calculates a timestamp based on the indicated {Time} object
|
95
|
+
# and the influxdb client's precision
|
96
|
+
# @param event [Hallmonitor::Event]
|
97
|
+
def calc_timestamp(event)
|
98
|
+
(event.time.to_r * @precision_mult).to_i if event.time.respond_to?(:to_r)
|
99
|
+
end
|
100
|
+
|
81
101
|
def build_timer_data(event)
|
82
102
|
build_data(event, 'timer', event.duration)
|
83
103
|
end
|
data/lib/hallmonitor/version.rb
CHANGED
@@ -6,7 +6,9 @@ module Hallmonitor
|
|
6
6
|
RSpec.describe Influxdb do
|
7
7
|
let(:influxdb_client) { nil }
|
8
8
|
let(:default_tags) { {} }
|
9
|
-
let(:outputter)
|
9
|
+
let(:outputter) do
|
10
|
+
described_class.new(influxdb_client, tags: default_tags)
|
11
|
+
end
|
10
12
|
|
11
13
|
context '#initialize' do
|
12
14
|
context 'with a bad influxdb client' do
|
@@ -16,9 +18,13 @@ module Hallmonitor
|
|
16
18
|
end
|
17
19
|
|
18
20
|
context 'with a good client' do
|
19
|
-
let(:influxdb_client) {
|
21
|
+
let(:influxdb_client) { instance_double(InfluxDB::Client) }
|
20
22
|
before do
|
21
23
|
allow(influxdb_client).to receive(:write_point)
|
24
|
+
allow(influxdb_client).to(
|
25
|
+
receive(:config)
|
26
|
+
.and_return(double(time_precision: 'ms'))
|
27
|
+
)
|
22
28
|
end
|
23
29
|
|
24
30
|
it 'does not raise an error' do
|
@@ -38,10 +44,18 @@ module Hallmonitor
|
|
38
44
|
let(:expected_data) do
|
39
45
|
{
|
40
46
|
values: { value: expected_value },
|
41
|
-
tags: default_tags.merge(tags).merge(type: expected_type)
|
47
|
+
tags: default_tags.merge(tags).merge(type: expected_type),
|
48
|
+
timestamp: a_value_within(1000).of((Time.now.to_r * 10**3).to_i)
|
42
49
|
}
|
43
50
|
end
|
44
51
|
|
52
|
+
before do
|
53
|
+
allow(influxdb_client).to(
|
54
|
+
receive(:config)
|
55
|
+
.and_return(double(time_precision: 'ms'))
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
45
59
|
it 'sends the correct information to influxdb' do
|
46
60
|
expect(influxdb_client).to(
|
47
61
|
receive(:write_point).with(event_name, expected_data))
|
@@ -79,7 +93,8 @@ module Hallmonitor
|
|
79
93
|
let(:expected_data) do
|
80
94
|
{
|
81
95
|
values: { value: expected_value },
|
82
|
-
tags: { additional: 'foo' }
|
96
|
+
tags: { additional: 'foo' },
|
97
|
+
timestamp: nil
|
83
98
|
}
|
84
99
|
end
|
85
100
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hallmonitor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris TenHarmsel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|