tpt_serverless 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/tpt_serverless.rb +1 -0
- data/lib/tpt_serverless/datadog.rb +60 -0
- data/lib/tpt_serverless/version.rb +1 -1
- metadata +24 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6887c4fd9a67c788a18671e57b5710e5e9de0e83057af75f3b2ba9989f947ce
|
4
|
+
data.tar.gz: d8bb6a3f64a4e6b61b56bdf1c634867de17caa493de9ea6d344a8e0e6c598131
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7b21869a41a38fd9a24d32a8c649bfe6914255e0092ebf35f5519b254ef1cd67f113597b38b305696905d67c2206a5221cc6c3a3d7677f1773c3bafdd6d49c5
|
7
|
+
data.tar.gz: 3c1b176c3cad4e4f17d592a7ee967d310c0aa0d4f077ab90f94d339279589ecc3eb301372c85aed14af5d4521fe12c7bedfc009f63ee5bf234c37ccffe312e16
|
data/lib/tpt_serverless.rb
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
require "dogapi"
|
2
|
+
require "timeout"
|
3
|
+
|
4
|
+
# TODO: Look into using Lambda Extensions for Datadog (and logging) instead to avoid blocking or
|
5
|
+
# affecting our application code.
|
6
|
+
module TptServerless
|
7
|
+
class Datadog
|
8
|
+
API_KEY = (ENV["DD_API_KEY"] && !ENV["DD_API_KEY"].strip.empty?) ? ENV["DD_API_KEY"] : nil
|
9
|
+
DATADOG_TIMEOUT = 2 # seconds
|
10
|
+
OUR_TIMEOUT = 3 # seconds. slightly longer than DATADOG_TIMEOUT.
|
11
|
+
|
12
|
+
def initialize(api_key: API_KEY, datadog_timeout: DATADOG_TIMEOUT, our_timeout: OUR_TIMEOUT)
|
13
|
+
@app_name = ENV.fetch("APP_SERVICE_NAME", "unknownService")
|
14
|
+
@stage = ENV.fetch("APP_STAGE", "unknown-stage")
|
15
|
+
@host = ENV.fetch("DD_HOSTNAME", nil)
|
16
|
+
@our_timeout = our_timeout
|
17
|
+
|
18
|
+
@client = if api_key
|
19
|
+
Dogapi::Client.new(
|
20
|
+
api_key, # api key
|
21
|
+
nil, # application_key, not required here
|
22
|
+
@host, # host
|
23
|
+
nil, # device
|
24
|
+
true, # silent
|
25
|
+
datadog_timeout, # timeout in seconds
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def inc(metric, amount: 1, tags: [])
|
31
|
+
# prefix the metric with the app name
|
32
|
+
metric = "#{@app_name}.#{metric}"
|
33
|
+
|
34
|
+
tags += ["env:#{@stage}"]
|
35
|
+
# change characters not supported by datadog to underscores
|
36
|
+
tags.map! { |t| t.gsub(%r([^\w:./-]), "_") }
|
37
|
+
|
38
|
+
# log the metric so that we can correlate between metrics & logs more easily
|
39
|
+
logger.info("metric=#{metric} amount=#{amount} tags=#{tags.join(",")}")
|
40
|
+
|
41
|
+
if @client
|
42
|
+
begin
|
43
|
+
Timeout.timeout(@our_timeout) do
|
44
|
+
@client.emit_point(metric, amount, type: "count", tags: tags, host: "aws.lambda")
|
45
|
+
end
|
46
|
+
rescue Exception => e
|
47
|
+
logger.info("WARNING: Failed to emit metric to datadog: #{e.message}")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
nil
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def logger
|
57
|
+
ServerlessLogger.logger
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
metadata
CHANGED
@@ -1,28 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tpt_serverless
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TpT
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
11
|
+
date: 2021-05-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: dogapi
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.45'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.45'
|
27
|
+
description:
|
28
|
+
email:
|
15
29
|
executables: []
|
16
30
|
extensions: []
|
17
31
|
extra_rdoc_files: []
|
18
32
|
files:
|
19
33
|
- lib/tpt_serverless.rb
|
34
|
+
- lib/tpt_serverless/datadog.rb
|
20
35
|
- lib/tpt_serverless/sumo_log_forwarder.rb
|
21
36
|
- lib/tpt_serverless/version.rb
|
22
37
|
homepage: https://github.com/TeachersPayTeachers/tpt_serverless-ruby
|
23
38
|
licenses: []
|
24
39
|
metadata: {}
|
25
|
-
post_install_message:
|
40
|
+
post_install_message:
|
26
41
|
rdoc_options: []
|
27
42
|
require_paths:
|
28
43
|
- lib
|
@@ -37,8 +52,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
37
52
|
- !ruby/object:Gem::Version
|
38
53
|
version: '0'
|
39
54
|
requirements: []
|
40
|
-
rubygems_version: 3.1.
|
41
|
-
signing_key:
|
55
|
+
rubygems_version: 3.1.6
|
56
|
+
signing_key:
|
42
57
|
specification_version: 4
|
43
58
|
summary: TpT serverless utils for Ruby
|
44
59
|
test_files: []
|