hallmonitor 4.0.0 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
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
|