nexus_semantic_logger 1.1.0 → 1.2.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
  SHA256:
3
- metadata.gz: 2f12150f394b0f2c56570a19a1979c3f8cf0f58f3c622d6d2886ed6925041825
4
- data.tar.gz: 7fc2853cb92631be96b8bc17f07d97eff6057091170704d28ef0280b673ac370
3
+ metadata.gz: 5fb3fba7b28b1b186a3e601dc9901c94acf9db07c5f40b2a4c2357104fcda507
4
+ data.tar.gz: d32b561ab333d7240b4d752e3a3faffa1ad95102882644eb045224f3bb493f44
5
5
  SHA512:
6
- metadata.gz: dd9b6db086b0b1bb5f8cb760577d87a8603ae892aeeb8e01249081911f3b83068e96357ad0c13a8fa184e96a63efb9f55241bbcc1baa7aa4e513021dd713689b
7
- data.tar.gz: '084c137b346270f171132a5de282a3a2019be85fe5a83de3677cedf26290f6f7b1ced55c2ede9cbd57afe9daa6ed9d5d58ddf60ce5e7954d6e3b937753302e30'
6
+ metadata.gz: 23af7bf651c2f48db0411ae861d36a81d652de9af6da5c275b04f66781d45657abecbf31521cb825a7977a90fa32dac3872f3fe47fc3ec07396928b717abb648
7
+ data.tar.gz: 9523b13f81fb98da9712e0af779f3b59ff85ae7ba23269c3c2f2845ac91b2ec77674e4cf5985334c1445273d1f12f81dbdba6049d6270ccfb5a6ff454ec30136
data/README.md CHANGED
@@ -1,3 +1,36 @@
1
1
  # nexus_semantic_logger
2
2
 
3
3
  Configures a [semantic_logger](https://rubygems.org/gems/rails_semantic_logger) as required for NexusMods components.
4
+
5
+ # Local gem development
6
+
7
+ Steps to run this gem from local sources in one the nexus 'staged build' rails components:
8
+
9
+ ## Copy gem sources to component
10
+
11
+ ```
12
+ cd ~/legacy/users
13
+ cp -r ../nexus_semantic_logger .
14
+ ```
15
+
16
+ ## Adjust component Dockerfile to include gem sources
17
+
18
+ Within stage 1, append a COPY after the Gemfile copy:
19
+
20
+ ```
21
+ COPY --chown=nexus:nexus Gemfile* ./
22
+ COPY --chown=nexus:nexus nexus_semantic_logger/ ./nexus_semantic_logger/
23
+ ```
24
+
25
+ Within stage 2, append a COPY after the bundle copy:
26
+
27
+ ```
28
+ COPY --from=stage1 /usr/local/bundle /usr/local/bundle
29
+ COPY --from=stage1 /app/nexus_semantic_logger/ /app/nexus_semantic_logger/
30
+ ```
31
+
32
+ ## Adjust Gemfile to use local path
33
+
34
+ ```
35
+ gem 'nexus_semantic_logger', :path => "/app/nexus_semantic_logger"
36
+
@@ -36,6 +36,8 @@ module NexusSemanticLogger
36
36
  dd_appender = config.semantic_logger.add_appender(io: $stdout, formatter: config.rails_semantic_logger.format)
37
37
  dd_appender.filter = NexusSemanticLogger::AppenderFilter.filter_lambda
38
38
 
39
+ NexusSemanticLogger::DatadogTracer.new(service)
40
+
39
41
  logger.info('SemanticLogger initialised.', level: config.log_level)
40
42
  end
41
43
 
@@ -48,13 +50,13 @@ module NexusSemanticLogger
48
50
  color_appender = config.semantic_logger.add_appender(io: $stdout, formatter: :color)
49
51
  color_appender.filter = NexusSemanticLogger::AppenderFilter.filter_lambda
50
52
 
51
- if ENV['DD_AGENT_HOST'].present? && ENV['DD_AGENT_PORT'].present?
53
+ if ENV['DD_AGENT_HOST'].present? && ENV['DD_AGENT_LOGGING_PORT'].present?
52
54
  # Development logs can be sent to datadog via a TCP logging endpoint on a local agent.
53
55
  # Each port is assigned a particular service.
54
56
  # See https://logger.rocketjob.io/appenders.html
55
57
  dd_appender = config.semantic_logger.add_appender(
56
58
  appender: :tcp,
57
- server: "#{ENV['DD_AGENT_HOST']}:#{ENV['DD_AGENT_PORT']}",
59
+ server: "#{ENV['DD_AGENT_HOST']}:#{ENV['DD_AGENT_LOGGING_PORT']}",
58
60
  formatter: config.rails_semantic_logger.format
59
61
  )
60
62
  dd_appender.filter = NexusSemanticLogger::AppenderFilter.filter_lambda
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+ require 'singleton'
3
+
4
+ module NexusSemanticLogger
5
+ # Application wide location to get datadog objects.
6
+ # Can be moved to its own gem in future, and there is scope to make the usage code even leaner.
7
+ class DatadogSingleton
8
+ include Singleton
9
+ attr_accessor :statsd, :tags
10
+
11
+ def flush
12
+ statsd&.flush(sync: Rails.env.development?) # Force flush sync in development, speed up checks.
13
+ end
14
+
15
+ def increment(metric_name)
16
+ statsd&.increment(metric_name, tags: tags)
17
+ flush
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+ require 'datadog/statsd'
3
+ require 'ddtrace'
4
+
5
+ module NexusSemanticLogger
6
+ class DatadogTracer
7
+ def initialize(service)
8
+ Datadog.configure do |c|
9
+ if ENV['DD_AGENT_HOST'].present?
10
+ # To enable runtime metrics collection, set `true`. Defaults to `false`
11
+ # You can also set DD_RUNTIME_METRICS_ENABLED=true to configure this.
12
+ c.runtime_metrics.enabled = true
13
+
14
+ # Configure DogStatsD instance for sending runtime metrics.
15
+ # By default, runtime metrics from the application are sent to the Datadog Agent with DogStatsD on port 8125.
16
+ datadog_singleton = DatadogSingleton.instance
17
+ datadog_singleton.statsd = Datadog::Statsd.new(ENV['DD_AGENT_HOST'], 8125)
18
+ datadog_singleton.tags = ["env:#{Rails.env}", "service:#{service}"]
19
+ c.runtime_metrics.statsd = datadog_singleton.statsd
20
+
21
+ # Tracer requires configuration to a datadog agent via DD_AGENT_HOST.
22
+ dd_force_tracer_val = ENV.fetch('DD_FORCE_TRACER', false)
23
+ dd_force_tracer = dd_force_tracer_val.present? && dd_force_tracer_val.to_s == 'true'
24
+ c.tracer(enabled: Rails.env.production? || dd_force_tracer, env: Rails.env)
25
+ end
26
+
27
+ c.use(:rails, service_name: service)
28
+
29
+ c.logger.level = Logger::WARN # ddtrace info logging is too verbose.
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  module NexusSemanticLogger
3
- # Leave this as 1.1.0 in order for CI process to replace with the tagged version.
4
- VERSION = '1.1.0'
3
+ # Leave this as 1.2.0 in order for CI process to replace with the tagged version.
4
+ VERSION = '1.2.0'
5
5
  end
@@ -2,6 +2,8 @@
2
2
  require 'nexus_semantic_logger/appender_filter'
3
3
  require 'nexus_semantic_logger/application'
4
4
  require 'nexus_semantic_logger/datadog_formatter'
5
+ require 'nexus_semantic_logger/datadog_singleton'
6
+ require 'nexus_semantic_logger/datadog_tracer'
5
7
 
6
8
  module NexusSemanticLogger
7
9
  end
@@ -16,5 +16,6 @@ Gem::Specification.new do |spec|
16
16
  spec.add_dependency('amazing_print', '~> 1.4.0')
17
17
  spec.add_dependency('rails_semantic_logger', '~> 4.10.0')
18
18
  spec.add_dependency('net_tcp_client', '~> 2.2.0') # For TCP logging.
19
+ spec.add_dependency('dogstatsd-ruby', '~> 5.4.0') # For custom application metrics.
19
20
  spec.required_ruby_version = Gem::Requirement.new('>= 2.7.0')
20
21
  end
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.1.0
4
+ version: 1.2.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-07-06 00:00:00.000000000 Z
11
+ date: 2022-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: amazing_print
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 2.2.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: dogstatsd-ruby
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 5.4.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 5.4.0
55
69
  description:
56
70
  email: john.harris@nexusmods.com
57
71
  executables: []
@@ -66,6 +80,8 @@ files:
66
80
  - lib/nexus_semantic_logger/appender_filter.rb
67
81
  - lib/nexus_semantic_logger/application.rb
68
82
  - lib/nexus_semantic_logger/datadog_formatter.rb
83
+ - lib/nexus_semantic_logger/datadog_singleton.rb
84
+ - lib/nexus_semantic_logger/datadog_tracer.rb
69
85
  - lib/nexus_semantic_logger/version.rb
70
86
  - nexus_semantic_logger.gemspec
71
87
  homepage:
@@ -86,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
102
  - !ruby/object:Gem::Version
87
103
  version: '0'
88
104
  requirements: []
89
- rubygems_version: 3.3.17
105
+ rubygems_version: 3.3.18
90
106
  signing_key:
91
107
  specification_version: 4
92
108
  summary: semantic_logger usage for nexus