nexus_semantic_logger 1.8.0 → 1.9.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: f13512ab6f95abaa8a782f2718438d924eeca7dd1ae014c0f5419b14f0b13bfa
4
- data.tar.gz: 54594c63bca42969a1639e1d6295f51a6b4faf5222e340c8dbd0e00a9e16390b
3
+ metadata.gz: 71ea65404e5b4980ffa32eda0d91588142cd2571252117f1f651f566f506bb98
4
+ data.tar.gz: ade58c1fcc429f832d26ed23786d859068cefb6e33a1f7b5b32d2627de999c91
5
5
  SHA512:
6
- metadata.gz: bc42282551ce7a194ab0e4891296891cfb0520943f7c4ba383c259a90ef59d035aacdc756c11f5ab2d18d17175e655d919d6d46f50399c8c51bde831343801e1
7
- data.tar.gz: b4e966ed8e476ede32c07cfb85e16ebfb00337d7b7ba8fb9989bae1f180a2f170349f78b617b5aeae2d0c4edacf2b16d77748e566db7e89967fb8004eea3c186
6
+ metadata.gz: 0d488c447d1e7f14c49a0c33ff0ee79ff512346ea17557c68a91e4b204dd37d9bdafb04383ed4db1c7c2c71d15273a9375c49c1e031a9a710e2345b34f143db9
7
+ data.tar.gz: 3712bf027d2fc5668c3a593d8cbd79457aef86d69a19e5602bfe4929ba301e14f6ce9006680acfbf4ce777ba5ae42f18ee45cdb6fded3a3fa4d1e0f8c284479b
@@ -39,6 +39,8 @@ module NexusSemanticLogger
39
39
 
40
40
  NexusSemanticLogger::DatadogTracer.new(service)
41
41
 
42
+ SemanticLogger.on_log(NexusSemanticLogger::LoggerMetricsSubscriber.new)
43
+
42
44
  logger.info('SemanticLogger initialised.', level: config.log_level)
43
45
 
44
46
  config.after_initialize do
@@ -17,7 +17,7 @@ module NexusSemanticLogger
17
17
  # @param [String] metric Metric name.
18
18
  # @param [Array<String>] tags Additional tags.
19
19
  def increment(metric, tags: [])
20
- statsd&.increment(metric, tags: global_tags + tags)
20
+ statsd&.increment(metric, tags: combine_tags(tags))
21
21
  flush
22
22
  end
23
23
 
@@ -25,7 +25,7 @@ module NexusSemanticLogger
25
25
  # @param [String] metric Metric name.
26
26
  # @param [Array<String>] tags Additional tags.
27
27
  def decrement(metric, tags: [])
28
- statsd&.decrement(metric, tags: global_tags + tags)
28
+ statsd&.decrement(metric, tags: combine_tags(tags))
29
29
  flush
30
30
  end
31
31
 
@@ -34,7 +34,7 @@ module NexusSemanticLogger
34
34
  # @param [Integer] ms Timing in milliseconds.
35
35
  # @param [Array<String>] tags Additional tags.
36
36
  def timing(metric, ms, tags: [])
37
- statsd&.timing(metric, ms, tags: global_tags + tags)
37
+ statsd&.timing(metric, ms, tags: combine_tags(tags))
38
38
  flush
39
39
  end
40
40
 
@@ -43,7 +43,7 @@ module NexusSemanticLogger
43
43
  # @param [Numeric] value Distribution value.
44
44
  # @param [Array<String>] tags Additional tags.
45
45
  def distribution(metric, value, tags: [])
46
- statsd&.distribution(metric, value, tags: global_tags + tags)
46
+ statsd&.distribution(metric, value, tags: combine_tags(tags))
47
47
  flush
48
48
  end
49
49
 
@@ -52,8 +52,18 @@ module NexusSemanticLogger
52
52
  # @param [Numeric] value Gauge value.
53
53
  # @param [Array<String>] tags Additional tags.
54
54
  def gauge(metric, value, tags: [])
55
- statsd&.gauge(metric, value, tags: global_tags + tags)
55
+ statsd&.gauge(metric, value, tags: combine_tags(tags))
56
56
  flush
57
57
  end
58
+
59
+ private
60
+
61
+ # Safely combine the global tags with the supplied tags.
62
+ def combine_tags(tags)
63
+ final_tags = []
64
+ final_tags += global_tags unless global_tags.nil?
65
+ final_tags += tags unless tags.nil?
66
+ final_tags
67
+ end
58
68
  end
59
69
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+ require 'semantic_logger'
3
+
4
+ module NexusSemanticLogger
5
+ # Sends SemanticLogger metrics to statsd.
6
+ # This is a candidate to move into the nexus_semantic_logger gem if it becomes widely useful.
7
+ # See https://logger.rocketjob.io/metrics.html
8
+ # Based on https://github.com/reidmorrison/semantic_logger/blob/master/lib/semantic_logger/metric/statsd.rb
9
+ class LoggerMetricsSubscriber < SemanticLogger::Subscriber
10
+ def call(log)
11
+ log(log) if should_log?(log)
12
+ end
13
+
14
+ def log(log)
15
+ metric = log.metric
16
+ tags = log.payload.nil? ? nil : []
17
+ log.payload&.each_pair { |key, value| tags << "#{key}:#{value}" }
18
+ if (duration = log.duration)
19
+ NexusSemanticLogger.metrics.timing(metric, duration, tags: tags)
20
+ else
21
+ amount = (log.metric_amount || 1).round
22
+ if amount.negative?
23
+ NexusSemanticLogger.metrics.decrement(metric, tags: tags)
24
+ else
25
+ NexusSemanticLogger.metrics.increment(metric, tags: tags)
26
+ end
27
+ end
28
+ end
29
+
30
+ # Only forward log entries that contain metrics.
31
+ def should_log?(log)
32
+ # Does not support metrics with dimensions.
33
+ log.metric && !log.dimensions && meets_log_level?(log) && !filtered?(log)
34
+ end
35
+ end
36
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  module NexusSemanticLogger
3
- # Leave this as 1.8.0 in order for CI process to replace with the tagged version.
4
- VERSION = '1.8.0'
3
+ # Leave this as 1.9.0 in order for CI process to replace with the tagged version.
4
+ VERSION = '1.9.0'
5
5
  end
@@ -4,6 +4,7 @@ require 'nexus_semantic_logger/application'
4
4
  require 'nexus_semantic_logger/datadog_formatter'
5
5
  require 'nexus_semantic_logger/datadog_singleton'
6
6
  require 'nexus_semantic_logger/datadog_tracer'
7
+ require 'nexus_semantic_logger/logger_metrics_subscriber'
7
8
 
8
9
  module NexusSemanticLogger
9
10
  # Get application wide object for sending metrics.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nexus_semantic_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johnathon Harris
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-28 00:00:00.000000000 Z
11
+ date: 2022-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: amazing_print
@@ -112,6 +112,7 @@ files:
112
112
  - lib/nexus_semantic_logger/datadog_singleton.rb
113
113
  - lib/nexus_semantic_logger/datadog_tracer.rb
114
114
  - lib/nexus_semantic_logger/extensions/action_dispatch/debug_exceptions.rb
115
+ - lib/nexus_semantic_logger/logger_metrics_subscriber.rb
115
116
  - lib/nexus_semantic_logger/sneakers_metrics.rb
116
117
  - lib/nexus_semantic_logger/version.rb
117
118
  - nexus_semantic_logger.gemspec