datadog-lambda 2.19.0 → 2.20.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: 14af71dd28cbd28bb7245d9a265c1ef5aae17cc7fca08cdfeec920a0df15863f
4
- data.tar.gz: ddaef0b0f205fd9fabdcd1ee2d6663e3f47f1b80e5a7640bb8b0906600807a9d
3
+ metadata.gz: 7190d039044c87a9835b29f812e930cc6c3fee9cdc5348226df7fe603b15a7bf
4
+ data.tar.gz: 35c495079f2b934ba036008084765d92a376f6924f7a4c5468ad34303ee1912c
5
5
  SHA512:
6
- metadata.gz: 7e91c96b8bd3c20e420b94621df6eb260e3baaa310fc131600e6343663a6b8f613091a5f7b7beba460cce0c3c4c62b2a932e18c83f47ce2848c4a89b8c135053
7
- data.tar.gz: 9dbf1189862c063bdf8eaa361fcebcbca5ee857bb8196b8d420d5a0f9151e7468f971d3628a68baf8182247a57227366ca6387f98523ccb6a86b2ad2b748536d
6
+ metadata.gz: c51f7c325e147d68a713d763c9550f2bf11b3ba9f7492f48c4b5195302f4c5fd4c0da20a9893ea19c27be24c4adf8740186f394250f830cfe8b6d8890c861d7b
7
+ data.tar.gz: 58f67b709d96a5b9e8ce628c4c1d0c02385508de007772a2560da26dc8cc7e90d23562063e3a8e73a5c90f73e71fd7c0cc0fac305c36cca6d901977d39c3fd6f
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Unless explicitly stated otherwise all files in this repository are licensed
5
+ # under the Apache License Version 2.0.
6
+ #
7
+ # This product includes software developed at Datadog (https://www.datadoghq.com/).
8
+ # Copyright 2023 Datadog, Inc.
9
+ #
10
+
11
+ require 'datadog/statsd'
12
+ require 'time'
13
+
14
+ module Datadog
15
+ # Metrics module contains the singleton class Client to send custom
16
+ # metrics to Datadog.
17
+ module Metrics
18
+ URL = 'localhost'
19
+ PORT = '8125'
20
+ # Client is a singleton class that instantiates a Datadog::Statsd
21
+ # client to send metrics to the Datadog Extension if present.
22
+ class Client
23
+ private_class_method :new
24
+
25
+ def self.instance
26
+ @instance ||= new
27
+ end
28
+
29
+ def distribution(name, value, time: nil, **tags)
30
+ tag_list = get_tags(**tags)
31
+
32
+ if Datadog::Utils.extension_running?
33
+ begin
34
+ @statsd.distribution(name, value, tags: tag_list)
35
+ rescue StandardError => e
36
+ Datadog::Utils.logger.warning "error sending metric to the extension: #{e}"
37
+ end
38
+ else
39
+ time ||= Time.now
40
+ time_ms = time.to_i
41
+
42
+ metric = { e: time_ms, m: name, t: tag_list, v: value }
43
+ puts metric.to_json
44
+ end
45
+ end
46
+
47
+ def close
48
+ @statsd&.close
49
+ end
50
+
51
+ def get_tags(**tags)
52
+ tag_list = ["dd_lambda_layer:datadog-ruby#{Datadog::Lambda.dd_lambda_layer_tag}"]
53
+ tags.each do |tag|
54
+ tag_list << "#{tag[0]}:#{tag[1]}"
55
+ end
56
+
57
+ tag_list
58
+ end
59
+
60
+ private_class_method def initialize
61
+ if Datadog::Utils.extension_running?
62
+ Datadog::Utils.logger.debug 'sending metrics through extension'
63
+ @statsd = Datadog::Statsd.new(URL, PORT, single_thread: true)
64
+ else
65
+ Datadog::Utils.logger.debug 'metrics are going to be handled by the forwarder'
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -17,7 +17,15 @@ module Datadog
17
17
  EXTENSION_CHECK_URI = URI(AGENT_URL + HELLO_PATH).freeze
18
18
  EXTENSION_PATH = '/opt/extensions/datadog-agent'
19
19
 
20
- def self.extension_running
20
+ @is_extension_running = nil
21
+
22
+ def self.extension_running?
23
+ return @is_extension_running unless @is_extension_running.nil?
24
+
25
+ @is_extension_running = check_extension_running
26
+ end
27
+
28
+ def self.check_extension_running
21
29
  return false unless File.exist?(EXTENSION_PATH)
22
30
 
23
31
  begin
@@ -12,7 +12,7 @@ module Datadog
12
12
  module Lambda
13
13
  module VERSION
14
14
  MAJOR = 2
15
- MINOR = 19
15
+ MINOR = 20
16
16
  PATCH = 0
17
17
  PRE = nil
18
18
 
@@ -9,12 +9,12 @@
9
9
  #
10
10
  # rubocop:disable Metrics/ModuleLength
11
11
 
12
+ require 'datadog/lambda/metrics'
12
13
  require 'datadog/lambda/trace/listener'
13
14
  require 'datadog/lambda/utils/logger'
14
15
  require 'datadog/lambda/utils/extension'
15
16
  require 'datadog/lambda/trace/patch_http'
16
17
  require 'json'
17
- require 'time'
18
18
  require 'datadog/lambda/version'
19
19
 
20
20
  module Datadog
@@ -23,6 +23,7 @@ module Datadog
23
23
  module Lambda
24
24
  @is_cold_start = true
25
25
  @patch_http = true
26
+ @metrics_client = Metrics::Client.instance
26
27
 
27
28
  # Configures Datadog's APM tracer with lambda specific defaults.
28
29
  # Same options can be given as Datadog.configure in tracer
@@ -36,7 +37,7 @@ module Datadog
36
37
  $stdout.sync = true
37
38
 
38
39
  Datadog.configure do |c|
39
- unless Datadog::Utils.extension_running
40
+ unless Datadog::Utils.extension_running?
40
41
  c.tracing.writer = Datadog::Tracing::SyncWriter.new(
41
42
  transport: Datadog::Transport::IO.default
42
43
  )
@@ -66,6 +67,7 @@ module Datadog
66
67
  ensure
67
68
  @listener.on_end
68
69
  @is_cold_start = false
70
+ @metrics_client.close
69
71
  end
70
72
  res
71
73
  end
@@ -85,15 +87,7 @@ module Datadog
85
87
  raise 'name must be a string' unless name.is_a?(String)
86
88
  raise 'value must be a number' unless value.is_a?(Numeric)
87
89
 
88
- time ||= Time.now
89
- time_ms = time.to_f.to_i
90
-
91
- tag_list = ["dd_lambda_layer:datadog-ruby#{dd_lambda_layer_tag}"]
92
- tags.each do |tag|
93
- tag_list.push("#{tag[0]}:#{tag[1]}")
94
- end
95
- metric = { e: time_ms, m: name, t: tag_list, v: value }
96
- puts metric.to_json
90
+ @metrics_client.distribution(name, value, time: time, **tags)
97
91
  end
98
92
 
99
93
  def self.dd_lambda_layer_tag
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadog-lambda
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.19.0
4
+ version: 2.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-10 00:00:00.000000000 Z
11
+ date: 2023-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-xray-sdk
@@ -24,20 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.11.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: dogstatsd-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: ddtrace
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: 1.11.0
47
+ version: 1.12.0
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: 1.11.0
54
+ version: 1.12.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -119,6 +133,7 @@ extensions: []
119
133
  extra_rdoc_files: []
120
134
  files:
121
135
  - lib/datadog/lambda.rb
136
+ - lib/datadog/lambda/metrics.rb
122
137
  - lib/datadog/lambda/trace/constants.rb
123
138
  - lib/datadog/lambda/trace/context.rb
124
139
  - lib/datadog/lambda/trace/ddtrace.rb