datadog-lambda 2.16.0 → 2.20.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: 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