event_tracer 0.1.2 → 0.3.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
  SHA256:
3
- metadata.gz: e0d3f6878e332430d33a93d947d071c7dab8e13c9d43ab15198c197bef399718
4
- data.tar.gz: eacc10d2ae0cf10a22e025146e5a7c4d5d65ebeeb5d56876469819305ccebd20
3
+ metadata.gz: 16cc39532664c9eb8da45f8f90a3a76ca7f180cc81da848bdf980dba5f91bfc8
4
+ data.tar.gz: 713186d9e6d2de28d334f2a29db2be8e8619f7176080b5d9390f5225568db0af
5
5
  SHA512:
6
- metadata.gz: 95b2950a8df1ef173a55f79220c791e527b3c42aef9f3692b65b1d80d5e36b1f0977f862cf6cc569f743912f5978897cc3140108f69f7b81e76c3b50757e26bc
7
- data.tar.gz: a0a834562f85a6b66c1aab0fabdb65a6cf952f3da3058b3b2b7c12b949957ba1974d73df06ab3cac704fb364fec262226451093828bd5d6648e01c3759737871
6
+ metadata.gz: 9a5faa6c50a2662896675686b0da3b2706ca29ec102e244be0230547e551e2da014af73954a2396870ebf20b1e55b170451e8f4863257a713776aab6dbc301d6
7
+ data.tar.gz: c2b1ce96276d8821b476a21c35528c3f1c738363d960e1c709e3a1f361228fe4d0ac09ab8f13f2c6a1daef834f35f0fe22fca8b2cc328eab54a114eaa062a039
data/lib/event_tracer.rb CHANGED
@@ -31,14 +31,10 @@ module EventTracer
31
31
  result = Result.new
32
32
 
33
33
  loggers.each do |code, logger|
34
- begin
35
- if args[:action] && args[:message]
36
- result.record code, logger.send(log_type, filtered_log_arguments(code, args))
37
- else
38
- result.record code, LogResult.new(false, 'Fields action & message need to be populated')
39
- end
40
- rescue Exception => e
41
- result.record code, LogResult.new(false, e.message)
34
+ if args[:action] && args[:message]
35
+ result.record code, logger.send(log_type, **args)
36
+ else
37
+ result.record code, LogResult.new(false, 'Fields action & message need to be populated')
42
38
  end
43
39
  end
44
40
 
@@ -55,14 +51,6 @@ module EventTracer
55
51
  @loggers.select { |code, _logger| selected_codes.include?(code) }
56
52
  end
57
53
 
58
- def self.filtered_log_arguments(logger_code, args)
59
- blacklisted_logger_keys = registered_logger_codes - [logger_code]
60
-
61
- args.reject do |key, _value|
62
- blacklisted_logger_keys.include?(key)
63
- end
64
- end
65
-
66
54
  def self.registered_logger_codes
67
55
  @loggers.keys
68
56
  end
@@ -2,45 +2,62 @@ require_relative '../event_tracer'
2
2
  require_relative './basic_decorator'
3
3
 
4
4
  # NOTES
5
- # Appsignal interface to send our usual actions
5
+ # Appsignal interface to send our usual actions
6
6
  # BasicDecorator adds a transparent interface on top of the appsignal interface
7
7
  #
8
- # Usage: EventTracer.register :appsignal, EventTracer::AppsignalLogger.new(Appsignal)
9
- # appsignal_logger.info appsignal: { increment_counter: { counter_1: 1, counter_2: 2 }, set_gauge: { gauge_1: 1 } }
8
+ # Usage: EventTracer.register :appsignal,
9
+ # EventTracer::AppsignalLogger.new(Appsignal, allowed_tags: ['tag_1', 'tag_2'])
10
+ #
11
+ # appsignal_logger.info metrics: [:counter_1, :counter_2]
12
+ # appsignal_logger.info metrics: { counter_1: { type: :counter, value: 1 }, gauce_2: { type: :gauce, value: 10 } }
10
13
  module EventTracer
11
14
  class AppsignalLogger < BasicDecorator
12
15
 
13
- SUPPORTED_METRICS ||= %i(increment_counter add_distribution_value set_gauge)
16
+ SUPPORTED_METRIC_TYPES = {
17
+ counter: :increment_counter,
18
+ distribution: :add_distribution_value,
19
+ gauge: :set_gauge
20
+ }
21
+ DEFAULT_METRIC_TYPE = :increment_counter
22
+ DEFAULT_COUNTER = 1
23
+
24
+ def initialize(decoratee, allowed_tags: [])
25
+ super(decoratee)
26
+ @allowed_tags = allowed_tags
27
+ end
14
28
 
15
29
  LOG_TYPES.each do |log_type|
16
30
  define_method log_type do |**args|
17
- return LogResult.new(false, "Invalid appsignal config") unless args[:appsignal] && args[:appsignal].is_a?(Hash)
18
-
19
- applied_metrics(args[:appsignal]).each do |metric|
20
- metric_args = args[:appsignal][metric]
21
- return LogResult.new(false, "Appsignal metric #{metric} invalid") unless metric_args && metric_args.is_a?(Hash)
22
-
23
- send_metric metric, metric_args
31
+ metrics = args[:metrics]
32
+
33
+ return fail_result('Invalid appsignal config') unless valid_args?(metrics)
34
+ return success_result if metrics.empty?
35
+
36
+ tags = args.slice(*allowed_tags)
37
+
38
+ case metrics
39
+ when Array
40
+ metrics.each do |metric|
41
+ appsignal.public_send(DEFAULT_METRIC_TYPE, metric, DEFAULT_COUNTER, tags)
42
+ end
43
+ when Hash
44
+ metrics.each do |metric_name, metric_payload|
45
+ metric_type = SUPPORTED_METRIC_TYPES[metric_payload.fetch(:type).to_sym]
46
+ appsignal.public_send(metric_type, metric_name, metric_payload.fetch(:value), tags) if metric_type
47
+ end
24
48
  end
25
49
 
26
- LogResult.new(true)
50
+ success_result
27
51
  end
28
52
  end
29
53
 
30
54
  private
31
55
 
32
- attr_reader :appsignal, :decoratee
56
+ attr_reader :decoratee, :allowed_tags
33
57
  alias_method :appsignal, :decoratee
34
58
 
35
- def applied_metrics(appsignal_args)
36
- appsignal_args.keys.select { |metric| SUPPORTED_METRICS.include?(metric) }
59
+ def valid_args?(metrics)
60
+ metrics && (metrics.is_a?(Hash) || metrics.is_a?(Array))
37
61
  end
38
-
39
- def send_metric(metric, payload)
40
- payload.each do |increment, value|
41
- appsignal.send(metric, increment, value)
42
- end
43
- end
44
-
45
62
  end
46
63
  end
@@ -7,8 +7,8 @@ module EventTracer
7
7
  class BaseLogger < BasicDecorator
8
8
 
9
9
  LOG_TYPES.each do |log_type|
10
- define_method log_type do |*args|
11
- send_message(log_type, *args)
10
+ define_method log_type do |**args|
11
+ send_message(log_type, **args)
12
12
  LogResult.new(true)
13
13
  end
14
14
  end
@@ -20,7 +20,7 @@ module EventTracer
20
20
 
21
21
  # EventTracer ensures action & message is always populated
22
22
  def send_message(log_method, action:, message:, **args)
23
- data = args.merge(action: action, message: message)
23
+ data = args.merge(action: action, message: message).except(:metrics)
24
24
  logger.public_send(log_method, data)
25
25
  end
26
26
 
@@ -1,3 +1,5 @@
1
+ require 'delegate'
2
+
1
3
  module EventTracer
2
4
  class BasicDecorator < Delegator
3
5
 
@@ -14,5 +16,13 @@ module EventTracer
14
16
  @delegate_sd_obj = obj
15
17
  end
16
18
 
19
+ def success_result
20
+ LogResult.new(true)
21
+ end
22
+
23
+ def fail_result(message)
24
+ LogResult.new(false, message)
25
+ end
26
+
17
27
  end
18
- end
28
+ end
@@ -0,0 +1,71 @@
1
+ require_relative '../event_tracer'
2
+ require_relative './basic_decorator'
3
+ # NOTES
4
+ # Datadog interface to send our usual actions
5
+ # BasicDecorator adds a transparent interface on top of the datadog interface
6
+ #
7
+ # Usage: EventTracer.register :datadog,
8
+ # EventTracer::DataDogLogger.new(DataDog, allowed_tags: ['tag_1', 'tag_2'])
9
+ #
10
+ # data_dog_logger.info metrics: [:counter_1, :counter_2]
11
+ # data_dog_logger.info metrics: { counter_1: { type: :counter, value: 1}, gauce_2: { type: :gauce, value: 10 } }
12
+
13
+ module EventTracer
14
+ class DatadogLogger < BasicDecorator
15
+
16
+ SUPPORTED_METRIC_TYPES = {
17
+ counter: :count,
18
+ distribution: :distribution,
19
+ gauge: :gauge,
20
+ set: :set,
21
+ histogram: :histogram
22
+ }
23
+ DEFAULT_METRIC_TYPE = :count
24
+ DEFAULT_COUNTER = 1
25
+
26
+ def initialize(decoratee, allowed_tags: [])
27
+ super(decoratee)
28
+ @allowed_tags = allowed_tags
29
+ end
30
+
31
+ LOG_TYPES.each do |log_type|
32
+ define_method log_type do |**args|
33
+ metrics = args[:metrics]
34
+
35
+ return fail_result('Invalid Datadog config') unless valid_args?(metrics)
36
+ return success_result if metrics.empty?
37
+
38
+ tags = build_tags(args)
39
+
40
+ case metrics
41
+ when Array
42
+ metrics.each do |metric|
43
+ datadog.public_send(DEFAULT_METRIC_TYPE, metric, DEFAULT_COUNTER, tags: tags)
44
+ end
45
+ when Hash
46
+ metrics.each do |metric_name, metric_payload|
47
+ metric_type = SUPPORTED_METRIC_TYPES[metric_payload.fetch(:type).to_sym]
48
+ datadog.public_send(metric_type, metric_name, metric_payload.fetch(:value), tags: tags) if metric_type
49
+ end
50
+ end
51
+
52
+ success_result
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ attr_reader :decoratee, :allowed_tags
59
+ alias_method :datadog, :decoratee
60
+
61
+ def valid_args?(metrics)
62
+ metrics && (metrics.is_a?(Hash) || metrics.is_a?(Array))
63
+ end
64
+
65
+ def build_tags(args)
66
+ args.slice(*allowed_tags).map do |tag, value|
67
+ "#{tag}:#{value}"
68
+ end
69
+ end
70
+ end
71
+ end
@@ -1,3 +1,3 @@
1
1
  module EventTracer
2
- VERSION = "0.1.2"
2
+ VERSION = '0.3.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: event_tracer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - melvrickgoh
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-04 00:00:00.000000000 Z
11
+ date: 2021-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.17'
19
+ version: 2.1.4
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.17'
26
+ version: 2.1.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -64,13 +64,14 @@ files:
64
64
  - lib/event_tracer/appsignal_logger.rb
65
65
  - lib/event_tracer/base_logger.rb
66
66
  - lib/event_tracer/basic_decorator.rb
67
+ - lib/event_tracer/datadog_logger.rb
67
68
  - lib/event_tracer/log_result.rb
68
69
  - lib/event_tracer/version.rb
69
70
  homepage: https://github.com/melvrickgoh/event_tracer
70
71
  licenses:
71
72
  - MIT
72
73
  metadata: {}
73
- post_install_message:
74
+ post_install_message:
74
75
  rdoc_options: []
75
76
  require_paths:
76
77
  - lib/event_tracer
@@ -86,8 +87,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
87
  - !ruby/object:Gem::Version
87
88
  version: '0'
88
89
  requirements: []
89
- rubygems_version: 3.0.3
90
- signing_key:
90
+ rubygems_version: 3.2.3
91
+ signing_key:
91
92
  specification_version: 4
92
93
  summary: Thin wrapper for formatted logging/ metric services to be used as a single
93
94
  service