datadog-lambda 2.16.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: 2db432203f35cb4abd7dfb7d9b072db41a8187ce990d8d8fe7e23e76bb880d80
4
- data.tar.gz: 44e85f5fbbaca2e2eff04c1a44c176983cd532580ab4ada6b6beca9c40cd04d3
3
+ metadata.gz: 7190d039044c87a9835b29f812e930cc6c3fee9cdc5348226df7fe603b15a7bf
4
+ data.tar.gz: 35c495079f2b934ba036008084765d92a376f6924f7a4c5468ad34303ee1912c
5
5
  SHA512:
6
- metadata.gz: 49fa2240d7e2c0e7d98536ab0c958b29910b805c8933611239143d45621409fbf7b22f14626d46262ba17ed8ce65c4af7a35ca680854cec259dc9272fa899784
7
- data.tar.gz: 0053b4ff3302215716ccc43e7d077b3fff41672adb8eea39a7df4800adec31b51d6ed83f7d53129f06d689638b4b2a1b45a4a9b5a1aa749bc1f14d9b60381471
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
@@ -33,7 +33,7 @@ module Datadog
33
33
  return block.call
34
34
  end
35
35
 
36
- Datadog::Tracing.trace('aws.lambda', options) do |_span|
36
+ Datadog::Tracing.trace('aws.lambda', **options) do |_span|
37
37
  block.call
38
38
  end
39
39
  end
@@ -0,0 +1,41 @@
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
+ require 'net/http'
11
+
12
+ module Datadog
13
+ # Utils contains utility functions shared between modules
14
+ module Utils
15
+ AGENT_URL = 'http://127.0.0.1:8124'
16
+ HELLO_PATH = '/lambda/hello'
17
+ EXTENSION_CHECK_URI = URI(AGENT_URL + HELLO_PATH).freeze
18
+ EXTENSION_PATH = '/opt/extensions/datadog-agent'
19
+
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
29
+ return false unless File.exist?(EXTENSION_PATH)
30
+
31
+ begin
32
+ Net::HTTP.get(EXTENSION_CHECK_URI)
33
+ rescue StandardError => e
34
+ Datadog::Utils.logger.debug "extension is not running, returned with error #{e}"
35
+ return false
36
+ end
37
+
38
+ true
39
+ end
40
+ end
41
+ end
@@ -12,7 +12,7 @@ module Datadog
12
12
  module Lambda
13
13
  module VERSION
14
14
  MAJOR = 2
15
- MINOR = 16
15
+ MINOR = 20
16
16
  PATCH = 0
17
17
  PRE = nil
18
18
 
@@ -9,11 +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'
15
+ require 'datadog/lambda/utils/extension'
14
16
  require 'datadog/lambda/trace/patch_http'
15
17
  require 'json'
16
- require 'time'
17
18
  require 'datadog/lambda/version'
18
19
 
19
20
  module Datadog
@@ -22,6 +23,7 @@ module Datadog
22
23
  module Lambda
23
24
  @is_cold_start = true
24
25
  @patch_http = true
26
+ @metrics_client = Metrics::Client.instance
25
27
 
26
28
  # Configures Datadog's APM tracer with lambda specific defaults.
27
29
  # Same options can be given as Datadog.configure in tracer
@@ -35,9 +37,11 @@ module Datadog
35
37
  $stdout.sync = true
36
38
 
37
39
  Datadog.configure do |c|
38
- c.tracing.writer = Datadog::Tracing::SyncWriter.new(
39
- transport: Datadog::Transport::IO.default
40
- )
40
+ unless Datadog::Utils.extension_running?
41
+ c.tracing.writer = Datadog::Tracing::SyncWriter.new(
42
+ transport: Datadog::Transport::IO.default
43
+ )
44
+ end
41
45
  c.tags = { "_dd.origin": 'lambda' }
42
46
  yield(c) if block_given?
43
47
  end
@@ -63,6 +67,7 @@ module Datadog
63
67
  ensure
64
68
  @listener.on_end
65
69
  @is_cold_start = false
70
+ @metrics_client.close
66
71
  end
67
72
  res
68
73
  end
@@ -82,15 +87,7 @@ module Datadog
82
87
  raise 'name must be a string' unless name.is_a?(String)
83
88
  raise 'value must be a number' unless value.is_a?(Numeric)
84
89
 
85
- time ||= Time.now
86
- time_ms = time.to_f.to_i
87
-
88
- tag_list = ["dd_lambda_layer:datadog-ruby#{dd_lambda_layer_tag}"]
89
- tags.each do |tag|
90
- tag_list.push("#{tag[0]}:#{tag[1]}")
91
- end
92
- metric = { e: time_ms, m: name, t: tag_list, v: value }
93
- puts metric.to_json
90
+ @metrics_client.distribution(name, value, time: time, **tags)
94
91
  end
95
92
 
96
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.16.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: 2022-10-21 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.5.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.5.0
54
+ version: 1.12.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -119,12 +133,14 @@ 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
125
140
  - lib/datadog/lambda/trace/listener.rb
126
141
  - lib/datadog/lambda/trace/patch_http.rb
127
142
  - lib/datadog/lambda/trace/xray.rb
143
+ - lib/datadog/lambda/utils/extension.rb
128
144
  - lib/datadog/lambda/utils/logger.rb
129
145
  - lib/datadog/lambda/version.rb
130
146
  homepage: https://github.com/DataDog/datadog-lambda-rb