influx_reporter 1.0.0 → 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 +5 -5
- data/README.md +18 -0
- data/lib/influx_reporter.rb +9 -0
- data/lib/influx_reporter/client.rb +13 -2
- data/lib/influx_reporter/data_builders.rb +1 -1
- data/lib/influx_reporter/data_builders/event.rb +42 -0
- data/lib/influx_reporter/error_message.rb +2 -1
- data/lib/influx_reporter/event_message.rb +33 -0
- data/lib/influx_reporter/version.rb +1 -1
- data/spec/influx_reporter/data_builders/event_spec.rb +46 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3ddddb2aec52aed72cd27b0068fd4c293b9f3300e4ad01955068aa335a2bca73
|
4
|
+
data.tar.gz: ae5677b7955e961a06f2e95927fb112474e02457ac506b8f84f16009518afad7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73ab7f2528040eee3c65135adb3e5e2192705378741b3c3863c3d5d9ee1e34e4e9a617f577448eca2396919433e45db21488c5b39c893f1d774af071b5941578
|
7
|
+
data.tar.gz: 6f6013c5f538cd50c46a07ccb3b5facef447af48dc1891e924cd9cdaab47f8e2085d6b19dd2987e339cf3bc1ea94f516e3a920e3447c9909546543ab2986f93a
|
data/README.md
CHANGED
@@ -138,6 +138,24 @@ Resque::Failure::Multiple.classes = [InfluxReporter::Integration::Resque]
|
|
138
138
|
Resque::Failure.backend = Resque::Failure::Multiple
|
139
139
|
```
|
140
140
|
|
141
|
+
## Sending events to Influx
|
142
|
+
|
143
|
+
You may want to send events instead of errors or performance traces to Influx. In this case, a method is provided:
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
InfluxReporter.report_event 'event_name'
|
147
|
+
```
|
148
|
+
|
149
|
+
By default, the InfluxDB series name will be "events". You can change this with an extra parameter:
|
150
|
+
```ruby
|
151
|
+
InfluxReporter.report_event 'event_name', extra: { series: 'my_series' }
|
152
|
+
```
|
153
|
+
|
154
|
+
Adding tags & values is also possible:
|
155
|
+
```ruby
|
156
|
+
InfluxReporter.report_event 'event_name', extra: { tags: { key: 'tag' }, values: { key: 'value' } }
|
157
|
+
```
|
158
|
+
|
141
159
|
## Manual profiling
|
142
160
|
|
143
161
|
It's easy to add performance tracking wherever you want using the `InfluxReporter` module.
|
data/lib/influx_reporter.rb
CHANGED
@@ -123,6 +123,15 @@ module InfluxReporter
|
|
123
123
|
client&.report_message message, opts
|
124
124
|
end
|
125
125
|
|
126
|
+
# Send an event to InfluxReporter
|
127
|
+
#
|
128
|
+
# @param message [String]
|
129
|
+
# @param opts [Hash]
|
130
|
+
# @return [Net::HTTPResponse]
|
131
|
+
def self.report_event(message, opts = {})
|
132
|
+
client&.report_event message, opts
|
133
|
+
end
|
134
|
+
|
126
135
|
# Captures any exceptions raised inside the block
|
127
136
|
#
|
128
137
|
def self.capture(&block)
|
@@ -7,6 +7,7 @@ require 'influx_reporter/worker'
|
|
7
7
|
require 'influx_reporter/transaction'
|
8
8
|
require 'influx_reporter/trace'
|
9
9
|
require 'influx_reporter/error_message'
|
10
|
+
require 'influx_reporter/event_message'
|
10
11
|
require 'influx_reporter/data_builders'
|
11
12
|
|
12
13
|
module InfluxReporter
|
@@ -57,9 +58,10 @@ module InfluxReporter
|
|
57
58
|
@influx_client = InfluxDBClient.new config
|
58
59
|
@queue = Queue.new
|
59
60
|
|
60
|
-
@data_builders = Struct.new(:transactions, :error_message).new(
|
61
|
+
@data_builders = Struct.new(:transactions, :error_message, :event).new(
|
61
62
|
DataBuilders::Transactions.new(config),
|
62
|
-
DataBuilders::Error.new(config)
|
63
|
+
DataBuilders::Error.new(config),
|
64
|
+
DataBuilders::Event.new(config)
|
63
65
|
)
|
64
66
|
|
65
67
|
unless config.disable_performance
|
@@ -227,6 +229,15 @@ module InfluxReporter
|
|
227
229
|
enqueue Worker::PostRequest.new('/errors/', data)
|
228
230
|
end
|
229
231
|
|
232
|
+
def report_event(message, opts = {})
|
233
|
+
ensure_worker_running
|
234
|
+
|
235
|
+
event = EventMessage.new(config, message, opts)
|
236
|
+
event.add_extra(@context) if @context
|
237
|
+
data = @data_builders.event.build event
|
238
|
+
enqueue Worker::PostRequest.new('/events/', data)
|
239
|
+
end
|
240
|
+
|
230
241
|
def capture
|
231
242
|
unless block_given?
|
232
243
|
return Kernel.at_exit do
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module InfluxReporter
|
4
|
+
module DataBuilders
|
5
|
+
class Event < DataBuilder
|
6
|
+
# @param event [InfluxReporter::Event]
|
7
|
+
def build(event)
|
8
|
+
{
|
9
|
+
series: build_series_name(event),
|
10
|
+
values: build_values(event),
|
11
|
+
tags: build_tags(event),
|
12
|
+
timestamp: event.timestamp
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
# @param event [InfluxReporter::Event]
|
19
|
+
def build_series_name(event)
|
20
|
+
return event.extra[:series] if event.extra && event.extra[:series].is_a?(String)
|
21
|
+
'events'
|
22
|
+
end
|
23
|
+
|
24
|
+
# @param event [InfluxReporter::Event]
|
25
|
+
def build_tags(event)
|
26
|
+
tags = event.extra[:tags] if event.extra && event.extra[:tags].is_a?(Hash)
|
27
|
+
tags = event.config.tags.merge(tags || {})
|
28
|
+
tags.reject { |_, value| value.nil? || value == '' }
|
29
|
+
end
|
30
|
+
|
31
|
+
# @param event [InfluxReporter::Event]
|
32
|
+
def build_values(event)
|
33
|
+
values = {
|
34
|
+
message: event.message
|
35
|
+
}
|
36
|
+
values = event.extra[:values].merge(values) if event.extra && event.extra[:values].is_a?(Hash)
|
37
|
+
|
38
|
+
values.reject { |_, value| value.nil? }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'active_support/core_ext/hash/deep_merge'
|
3
4
|
require 'influx_reporter/line_cache'
|
4
5
|
require 'influx_reporter/error_message/exception'
|
5
6
|
require 'influx_reporter/error_message/stacktrace'
|
@@ -79,7 +80,7 @@ module InfluxReporter
|
|
79
80
|
|
80
81
|
def add_extra(info)
|
81
82
|
@extra ||= {}
|
82
|
-
@extra.
|
83
|
+
@extra.deep_merge! info
|
83
84
|
end
|
84
85
|
end
|
85
86
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/core_ext/hash/deep_merge'
|
4
|
+
require 'influx_reporter/util/timestamp'
|
5
|
+
|
6
|
+
module InfluxReporter
|
7
|
+
class EventMessage
|
8
|
+
extend Logging
|
9
|
+
|
10
|
+
def initialize(config, message, attrs = {})
|
11
|
+
@config = config
|
12
|
+
|
13
|
+
@message = message
|
14
|
+
@timestamp = Util.nanos
|
15
|
+
|
16
|
+
attrs.each do |k, v|
|
17
|
+
send(:"#{k}=", v)
|
18
|
+
end
|
19
|
+
|
20
|
+
yield self if block_given?
|
21
|
+
end
|
22
|
+
|
23
|
+
attr_reader :config
|
24
|
+
attr_accessor :message
|
25
|
+
attr_reader :timestamp
|
26
|
+
attr_accessor :extra
|
27
|
+
|
28
|
+
def add_extra(info)
|
29
|
+
@extra ||= {}
|
30
|
+
@extra.deep_merge! info
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module InfluxReporter
|
6
|
+
module DataBuilders
|
7
|
+
RSpec.describe Event do
|
8
|
+
let(:config) { Configuration.new }
|
9
|
+
|
10
|
+
subject do
|
11
|
+
Event.new config
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#build' do
|
15
|
+
it 'builds an event message dict from an event' do
|
16
|
+
event_message = InfluxReporter::EventMessage.new(config, 'Event', extra: { tags: { key: 'tag' }, values: { key: 'value' } })
|
17
|
+
example = {
|
18
|
+
series: 'events',
|
19
|
+
values: {
|
20
|
+
message: 'Event',
|
21
|
+
key: 'value'
|
22
|
+
},
|
23
|
+
tags: {
|
24
|
+
key: 'tag'
|
25
|
+
},
|
26
|
+
timestamp: an_instance_of(Integer)
|
27
|
+
}
|
28
|
+
expect(subject.build(event_message)).to match(example)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'builds an event message dict from an event with a custom series name' do
|
32
|
+
event_message = InfluxReporter::EventMessage.new(config, 'Event', extra: { series: 'test' })
|
33
|
+
example = {
|
34
|
+
series: 'test',
|
35
|
+
values: {
|
36
|
+
message: 'Event'
|
37
|
+
},
|
38
|
+
tags: {},
|
39
|
+
timestamp: an_instance_of(Integer)
|
40
|
+
}
|
41
|
+
expect(subject.build(event_message)).to match(example)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: influx_reporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kacper Kawecki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- lib/influx_reporter/configuration.rb
|
85
85
|
- lib/influx_reporter/data_builders.rb
|
86
86
|
- lib/influx_reporter/data_builders/error.rb
|
87
|
+
- lib/influx_reporter/data_builders/event.rb
|
87
88
|
- lib/influx_reporter/data_builders/transactions.rb
|
88
89
|
- lib/influx_reporter/error.rb
|
89
90
|
- lib/influx_reporter/error_message.rb
|
@@ -91,6 +92,7 @@ files:
|
|
91
92
|
- lib/influx_reporter/error_message/http.rb
|
92
93
|
- lib/influx_reporter/error_message/stacktrace.rb
|
93
94
|
- lib/influx_reporter/error_message/user.rb
|
95
|
+
- lib/influx_reporter/event_message.rb
|
94
96
|
- lib/influx_reporter/filter.rb
|
95
97
|
- lib/influx_reporter/http_client.rb
|
96
98
|
- lib/influx_reporter/influx_db_client.rb
|
@@ -127,6 +129,7 @@ files:
|
|
127
129
|
- spec/influx_reporter/client_spec.rb
|
128
130
|
- spec/influx_reporter/configuration_spec.rb
|
129
131
|
- spec/influx_reporter/data_builders/error_spec.rb
|
132
|
+
- spec/influx_reporter/data_builders/event_spec.rb
|
130
133
|
- spec/influx_reporter/data_builders/transactions_spec.rb
|
131
134
|
- spec/influx_reporter/error_message/exception_spec.rb
|
132
135
|
- spec/influx_reporter/error_message/http_spec.rb
|
@@ -181,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
184
|
version: '0'
|
182
185
|
requirements: []
|
183
186
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
187
|
+
rubygems_version: 2.7.7
|
185
188
|
signing_key:
|
186
189
|
specification_version: 4
|
187
190
|
summary: Metrics collector for rails and InfluxDB based on Opbeat Ruby client library
|