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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1b0c481adf3b258ec29fc1a2a526d2d4053fbb50
4
- data.tar.gz: f1fce2792f3ff3b7be73160c81aa9ce05dbd81d7
2
+ SHA256:
3
+ metadata.gz: 3ddddb2aec52aed72cd27b0068fd4c293b9f3300e4ad01955068aa335a2bca73
4
+ data.tar.gz: ae5677b7955e961a06f2e95927fb112474e02457ac506b8f84f16009518afad7
5
5
  SHA512:
6
- metadata.gz: 345a3d341374f25b18ceed08ffd6ca770019e05b43c5391b716aec17ae3c63eb95af2287fa69e65a078feae930f2a6d4fc84be441b40143ead5df96e5a4d18cf
7
- data.tar.gz: 54528657a0b66f92a36392f5dd768efd5137997ec8f1a1dc84d4174ec0982a320ca157000d594ff2a7cfa9fd186e100e5a221c2c50cba32e90f3101c74b155f4
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.
@@ -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
@@ -11,7 +11,7 @@ module InfluxReporter
11
11
  attr_reader :config
12
12
  end
13
13
 
14
- %w[transactions error].each do |f|
14
+ %w[transactions error event].each do |f|
15
15
  require "influx_reporter/data_builders/#{f}"
16
16
  end
17
17
  end
@@ -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.merge! info
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module InfluxReporter
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.0'
5
5
  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.0.0
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-05-14 00:00:00.000000000 Z
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.5.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