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 +4 -4
- data/lib/datadog/lambda/metrics.rb +70 -0
- data/lib/datadog/lambda/utils/extension.rb +9 -1
- data/lib/datadog/lambda/version.rb +1 -1
- data/lib/datadog/lambda.rb +5 -11
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7190d039044c87a9835b29f812e930cc6c3fee9cdc5348226df7fe603b15a7bf
|
4
|
+
data.tar.gz: 35c495079f2b934ba036008084765d92a376f6924f7a4c5468ad34303ee1912c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
data/lib/datadog/lambda.rb
CHANGED
@@ -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
|
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.
|
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-
|
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.
|
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.
|
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
|