signalfx-lambda 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +94 -9
- data/lib/signalfx/lambda/metrics.rb +88 -0
- data/lib/signalfx/lambda/tracing.rb +58 -86
- data/lib/signalfx/lambda/version.rb +1 -1
- data/lib/signalfx/lambda.rb +79 -0
- data/signalfx-lambda.gemspec +2 -1
- metadata +20 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66109fc8dcb960d2debc31c6fc37b741bf3b4f55508c0b23c4032da3fe0e94ef
|
4
|
+
data.tar.gz: 0f0a82a5c16fe67584de6c1ad5e89ffa910166e2f4bfc7f9f7b494fe1374ae63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8221f2148e1811c23b86bc365f2ac78c0335a48623a2fafcbabb8eb7eae5fe184af4405dde005a6331d4f40d410d42440c98294543e7cdaf82021e7c5478f3fe
|
7
|
+
data.tar.gz: 5dc457153fd2e4ea1acce699f9228ddfd37cad23a1657d1c73161c4533ec37fd64f39d644bad414884b32ceac2aed70eb6c9f7001af246f8c1b1092817757700
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# SignalFx::Lambda
|
2
2
|
|
3
|
-
This gem provides a simplified way to
|
4
|
-
Ruby 2.5 runtime.
|
3
|
+
This gem provides a simplified way to get metrics and traces from AWS Lambda
|
4
|
+
functions written for the Ruby 2.5 runtime.
|
5
5
|
|
6
6
|
## Installation
|
7
7
|
|
@@ -34,32 +34,80 @@ def handler(event:, context:)
|
|
34
34
|
JSON.generate(body)
|
35
35
|
end
|
36
36
|
|
37
|
-
SignalFx::Lambda
|
37
|
+
SignalFx::Lambda.register_handler(metrics: true, tracing: true, &method(:handler))
|
38
38
|
```
|
39
39
|
|
40
40
|
`register_handler` will accept any block.
|
41
41
|
|
42
|
+
If passing in a block parameter, it must be the last argument.
|
43
|
+
|
44
|
+
It also takes these optional arguments:
|
45
|
+
- `metrics`: Enable reporting of metrics. Default: `true`
|
46
|
+
- `tracing`: Enable tracing. Default: `true`
|
47
|
+
|
48
|
+
### Endpoint configuration
|
49
|
+
|
50
|
+
If metrics and traces should be reported to a common endpoint, as is the case
|
51
|
+
when using the Smart Gateway, a single environment variable should be set:
|
52
|
+
|
53
|
+
```
|
54
|
+
SIGNALFX_ENDPOINT_URL=<gateway_url>
|
55
|
+
```
|
56
|
+
|
57
|
+
If the component-specific URLs below are set, they will take precedence over
|
58
|
+
`SIGNALFX_ENDPOINT_URL` for those components.
|
59
|
+
|
60
|
+
By default, the metrics and traces will be reported to the `us0` realm. If you are
|
61
|
+
not in this realm you will need to set the `SIGNALFX_TRACING_URL` and
|
62
|
+
`SIGNALFX_METRICS_URL` environment variables, as described below.
|
63
|
+
|
42
64
|
### Tracer configuration
|
43
65
|
|
44
66
|
The tracer used by the function is configured through environment variables:
|
45
67
|
|
46
68
|
```
|
47
69
|
SIGNALFX_ACCESS_TOKEN
|
48
|
-
SIGNALFX_INGEST_URL
|
49
70
|
SIGNALFX_SERVICE_NAME
|
71
|
+
SIGNALFX_TRACING_URL
|
50
72
|
```
|
51
73
|
|
52
|
-
In production, `
|
74
|
+
In production, `SIGNALFX_TRACING_URL` should be pointing to your [Smart Gateway](https://docs.signalfx.com/en/latest/apm/apm-deployment/smart-gateway.html).
|
53
75
|
When pointing to the Smart Gateway, an access token is not needed. When not
|
54
76
|
configured, the ingest URL defaults to `https://ingest.signalfx.com/v1/trace`,
|
55
77
|
which requires an access token to be configured.
|
56
78
|
|
79
|
+
The default `SIGNALFX_TRACING_URL` points to the `us0` realm. If you are not in
|
80
|
+
this realm, you will need to set the environment variable to the correct realm
|
81
|
+
ingest endpoint (https://ingest.{REALM}.signalfx.com/v1/trace). To determine what realm
|
82
|
+
you are in, check your profile page in the SignalFx web application (click the
|
83
|
+
avatar in the upper right and click My Profile).
|
84
|
+
|
57
85
|
The tracer will be persisted across invocations to the same context, reducing
|
58
86
|
the time needed for tracer initialization.
|
59
87
|
|
88
|
+
### SignalFx client configuration
|
89
|
+
|
90
|
+
The SignalFx client requires the following environment variables to be set:
|
91
|
+
|
92
|
+
```
|
93
|
+
SIGNALFX_ACCESS_TOKEN
|
94
|
+
SIGNALFX_METRICS_URL
|
95
|
+
```
|
96
|
+
|
97
|
+
When `SIGNALFX_METRICS_URL` is pointing to a Smart Gateway in production, the
|
98
|
+
access token is not needed.
|
99
|
+
|
100
|
+
The metrics URL will default to `https://ingest.signalfx.com` when not configured.
|
101
|
+
|
102
|
+
The default `SIGNALFX_METRICS_URL` points to the `us0` realm. If you are not in
|
103
|
+
this realm, you will need to set the environment variable to the correct realm
|
104
|
+
ingest endpoint (https://ingest.{REALM}.signalfx.com). To determine what realm
|
105
|
+
you are in, check your profile page in the SignalFx web application (click the
|
106
|
+
avatar in the upper right and click My Profile).
|
107
|
+
|
60
108
|
## Trace and tags
|
61
109
|
|
62
|
-
The wrapper will generate a
|
110
|
+
The wrapper will generate a trace per function invocation. The parent span will
|
63
111
|
be named with the pattern `lambda_ruby_<function_name>`. The span prefix can be
|
64
112
|
optionally configured with the `SIGNALFX_SPAN_PREFIX` environment variable:
|
65
113
|
|
@@ -82,11 +130,39 @@ Each span will also have the following tags:
|
|
82
130
|
|
83
131
|
If a `qualifier` is present in the ARN, depending on the resource type, either `aws_function_qualifier` or `event_source_mappings` will be tagged.
|
84
132
|
|
85
|
-
##
|
133
|
+
## Metrics
|
134
|
+
|
135
|
+
When metrics are enabled, the following datapoints are sent to SignalFx:
|
136
|
+
|
137
|
+
| Metric Name | Type | Description |
|
138
|
+
| --- | --- | --- |
|
139
|
+
| `function.invocations` | Counter | Count number of Lambda invocations |
|
140
|
+
| `function.cold_starts` | Counter | Count number of cold starts |
|
141
|
+
| `function.errors` | Counter | Count number of errors captured from underlying Lambda handler |
|
142
|
+
| `function.duration` | Gauge | Execution time of the underlying Lambda handler in milliseconds |
|
143
|
+
|
144
|
+
Each datapoint has the following dimensions:
|
145
|
+
- `metric_source`: `ruby-lambda-wrapper`
|
146
|
+
- `lambda_arn`: the full ARN of the invocation
|
147
|
+
- `aws_region`: the region that the function executed in
|
148
|
+
- `aws_account_id`: id of the account this function ran for
|
149
|
+
- `aws_function_name`: the function name set for this Lambda
|
150
|
+
- `aws_function_version`: the function version
|
151
|
+
- `aws_function_qualifier`: function version qualifier, which will be a version
|
152
|
+
or version alias if it is not an event source mapping invocation
|
153
|
+
- `event_source_mappings`: function name if it is an event source mapping invocation
|
154
|
+
- `aws_execution_env`: the name of the runtime environment running this function
|
155
|
+
- `function_wrapper_version`: the version of this wrapper gem being used
|
156
|
+
- `log_group_name`: log group for the function
|
157
|
+
- `log_stream_name`: log stream for the instance
|
158
|
+
|
159
|
+
## Manual Instrumentation
|
160
|
+
|
161
|
+
### Tracing
|
86
162
|
|
87
163
|
Manual tracing may be useful to get a better view into the function. The
|
88
164
|
OpenTracing global tracer makes the tracer used by the wrapper available
|
89
|
-
|
165
|
+
when more specific instrumentation is desired.
|
90
166
|
|
91
167
|
```ruby
|
92
168
|
require 'opentracing'
|
@@ -103,6 +179,15 @@ Lambda handler as the parent.
|
|
103
179
|
|
104
180
|
For more examples of usage, please see [opentracing-ruby](https://github.com/opentracing/opentracing-ruby).
|
105
181
|
|
182
|
+
### Metrics
|
183
|
+
|
184
|
+
Your function can be manually instrumented to send additional metrics using the
|
185
|
+
already configured SignalFx client.
|
186
|
+
|
187
|
+
```ruby
|
188
|
+
SignalFx::Lambda::Metrics.client.send(counters: ..., gauges: ..., cumulative_counters: ...)
|
189
|
+
```
|
190
|
+
|
106
191
|
## Development
|
107
192
|
|
108
193
|
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -115,4 +200,4 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/signal
|
|
115
200
|
|
116
201
|
## License
|
117
202
|
|
118
|
-
The gem is available as open source under the terms of the [
|
203
|
+
The gem is available as open source under the terms of the [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0).
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'signalfx'
|
2
|
+
|
3
|
+
module SignalFx
|
4
|
+
module Lambda
|
5
|
+
module Metrics
|
6
|
+
class Error < StandardError; end
|
7
|
+
|
8
|
+
class << self
|
9
|
+
attr_accessor :client
|
10
|
+
|
11
|
+
def wrap_function(event:, context:)
|
12
|
+
cold_start = @client.nil?
|
13
|
+
init_client unless @client
|
14
|
+
counters = []
|
15
|
+
gauges = []
|
16
|
+
|
17
|
+
dimensions = populate_dimensions(context)
|
18
|
+
|
19
|
+
# time execution of next block
|
20
|
+
start_time = Time.now
|
21
|
+
response = yield event: event, context: context
|
22
|
+
end_time = Time.now
|
23
|
+
|
24
|
+
duration = ((end_time - start_time) * 1000) # duration in ms
|
25
|
+
end_time = end_time.strftime('%s%L')
|
26
|
+
|
27
|
+
counters.push(
|
28
|
+
{
|
29
|
+
:metric => 'function.invocations',
|
30
|
+
:value => 1,
|
31
|
+
:timestamp => end_time,
|
32
|
+
:dimensions => dimensions
|
33
|
+
}
|
34
|
+
)
|
35
|
+
|
36
|
+
counters.push(
|
37
|
+
{
|
38
|
+
:metric => 'function.cold_starts',
|
39
|
+
:value => 1,
|
40
|
+
:timestamp => end_time,
|
41
|
+
:dimensions => dimensions
|
42
|
+
}
|
43
|
+
) if cold_start
|
44
|
+
|
45
|
+
gauges = [
|
46
|
+
{
|
47
|
+
:metric => 'function.duration',
|
48
|
+
:value => duration,
|
49
|
+
:timestamp => end_time,
|
50
|
+
:dimensions => dimensions
|
51
|
+
}
|
52
|
+
]
|
53
|
+
|
54
|
+
response
|
55
|
+
rescue => error
|
56
|
+
error_counter = {
|
57
|
+
:metric => 'function.errors',
|
58
|
+
:value => 1,
|
59
|
+
:timestamp => end_time,
|
60
|
+
:dimensions => dimensions
|
61
|
+
}
|
62
|
+
|
63
|
+
counters.push(error_counter)
|
64
|
+
|
65
|
+
raise
|
66
|
+
ensure
|
67
|
+
# send metrics before leaving this block
|
68
|
+
@client.send(gauges: gauges, counters: counters) if @client
|
69
|
+
end
|
70
|
+
|
71
|
+
def populate_dimensions(context)
|
72
|
+
dimensions = SignalFx::Lambda.fields.map do |key, val|
|
73
|
+
{ :key => key, :value => val }
|
74
|
+
end
|
75
|
+
dimensions.merge!({ :key => 'metric_source', :value => SignalFx::Lambda::COMPONENT })
|
76
|
+
end
|
77
|
+
|
78
|
+
def init_client
|
79
|
+
access_token = ENV['SIGNALFX_ACCESS_TOKEN']
|
80
|
+
ingest_endpoint = ENV['SIGNALFX_METRICS_URL'] || ENV['SIGNALFX_ENDPOINT_URL'] || 'https://ingest.signalfx.com'
|
81
|
+
|
82
|
+
@client = SignalFx.new access_token, ingest_endpoint: ingest_endpoint
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
@@ -8,103 +8,75 @@ module SignalFx
|
|
8
8
|
module Tracing
|
9
9
|
class Error < StandardError; end
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
class << self
|
12
|
+
attr_accessor :tracer, :reporter
|
13
13
|
|
14
|
-
|
14
|
+
def wrap_function(event:, context:, &block)
|
15
|
+
init_tracer(event) if !@tracer # avoid initializing except on a cold start
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
tags = SignalFx::Lambda.fields
|
18
|
+
tags['component'] = SignalFx::Lambda::COMPONENT
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
if scope
|
22
|
-
scope.span.set_tag("error", true)
|
23
|
-
scope.span.log_kv(key: "message", value: error.message)
|
24
|
-
end
|
25
|
-
|
26
|
-
# pass this error up
|
27
|
-
raise
|
28
|
-
ensure
|
29
|
-
scope.close if scope
|
30
|
-
|
31
|
-
# flush the spans before leaving the execution context
|
32
|
-
@reporter.flush
|
33
|
-
end
|
20
|
+
scope = OpenTracing.start_active_span("#{@span_prefix}#{context.function_name}",
|
21
|
+
tags: tags)
|
34
22
|
|
35
|
-
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.build_tags(context)
|
40
|
-
tags = {
|
41
|
-
'component' => 'ruby-lambda-wrapper',
|
42
|
-
'lambda_arn' => context.invoked_function_arn,
|
43
|
-
'aws_request_id' => context.aws_request_id,
|
44
|
-
'aws_function_name' => context.function_name,
|
45
|
-
'aws_function_version' => context.function_version,
|
46
|
-
'aws_execution_env' => ENV['AWS_EXECUTION_ENV'],
|
47
|
-
'log_group_name' => context.log_group_name,
|
48
|
-
'log_stream_name' => context.log_stream_name,
|
49
|
-
'function_wrapper_version' => "signalfx-lambda-#{SignalFx::Lambda::VERSION}",
|
50
|
-
}
|
51
|
-
|
52
|
-
tags = tags.merge(tags_from_arn(context.invoked_function_arn))
|
53
|
-
end
|
23
|
+
response = yield event: event, context: context
|
24
|
+
scope.span.set_tag("http.status_code", response[:statusCode]) if response[:statusCode]
|
54
25
|
|
55
|
-
|
56
|
-
|
26
|
+
response
|
27
|
+
rescue => error
|
28
|
+
if scope
|
29
|
+
scope.span.set_tag("error", true)
|
30
|
+
scope.span.log_kv(key: "message", value: error.message)
|
31
|
+
end
|
57
32
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
33
|
+
# pass this error up
|
34
|
+
raise
|
35
|
+
ensure
|
36
|
+
scope.close if scope
|
62
37
|
|
63
|
-
|
64
|
-
|
65
|
-
when 'function'
|
66
|
-
tags['aws_function_qualifier'] = qualifier
|
67
|
-
when 'event-source-mappings'
|
68
|
-
tags['event_source_mappings'] = qualifier
|
69
|
-
end
|
38
|
+
# flush the spans before leaving the execution context
|
39
|
+
@reporter.flush
|
70
40
|
end
|
71
41
|
|
72
|
-
|
73
|
-
|
42
|
+
def wrapped_handler(event:, context:)
|
43
|
+
wrap_function(event, context, &@handler)
|
44
|
+
end
|
74
45
|
|
75
|
-
|
76
|
-
|
77
|
-
|
46
|
+
def register_handler(&handler)
|
47
|
+
@handler = handler
|
48
|
+
end
|
78
49
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
50
|
+
def init_tracer(event)
|
51
|
+
access_token = ENV['SIGNALFX_ACCESS_TOKEN']
|
52
|
+
ingest_url = ENV['SIGNALFX_TRACING_URL'] || ENV['SIGNALFX_ENDPOINT_URL'] || 'https://ingest.signalfx.com/v1/trace'
|
53
|
+
service_name = ENV['SIGNALFX_SERVICE_NAME'] || event.function_name
|
54
|
+
@span_prefix = ENV['SIGNALFX_SPAN_PREFIX'] || 'lambda_ruby_'
|
55
|
+
|
56
|
+
# configure the trace reporter
|
57
|
+
headers = { }
|
58
|
+
headers['X-SF-Token'] = access_token if !access_token.empty?
|
59
|
+
encoder = Jaeger::Client::Encoders::ThriftEncoder.new(service_name: service_name)
|
60
|
+
sender = Jaeger::Client::HttpSender.new(url: ingest_url, headers: headers, encoder: encoder, logger: Logger.new(STDOUT))
|
61
|
+
@reporter = Jaeger::Client::Reporters::RemoteReporter.new(sender: sender, flush_interval: 100)
|
62
|
+
|
63
|
+
# propagation format configuration
|
64
|
+
injectors = {
|
65
|
+
OpenTracing::FORMAT_TEXT_MAP => [Jaeger::Client::Injectors::B3RackCodec]
|
66
|
+
}
|
67
|
+
extractors = {
|
68
|
+
OpenTracing::FORMAT_TEXT_MAP => [SignalFx::Lambda::Tracing::B3TextMapCodec]
|
69
|
+
}
|
70
|
+
|
71
|
+
OpenTracing.global_tracer = Jaeger::Client.build(
|
72
|
+
service_name: service_name,
|
73
|
+
reporter: @reporter,
|
74
|
+
injectors: injectors,
|
75
|
+
extractors: extractors
|
76
|
+
)
|
77
|
+
|
78
|
+
@tracer = OpenTracing.global_tracer
|
79
|
+
end
|
108
80
|
end
|
109
81
|
end
|
110
82
|
end
|
data/lib/signalfx/lambda.rb
CHANGED
@@ -1,2 +1,81 @@
|
|
1
1
|
require 'signalfx/lambda/version'
|
2
2
|
require 'signalfx/lambda/tracing'
|
3
|
+
require 'signalfx/lambda/metrics'
|
4
|
+
|
5
|
+
module SignalFx
|
6
|
+
module Lambda
|
7
|
+
class Error < StandardError; end
|
8
|
+
|
9
|
+
COMPONENT = 'ruby-lambda-wrapper'.freeze
|
10
|
+
|
11
|
+
class << self
|
12
|
+
attr_accessor :fields
|
13
|
+
|
14
|
+
def wrapped_handler(event:, context:)
|
15
|
+
# gather some useful information from the execution context and ARN and
|
16
|
+
# make it available to the handlers
|
17
|
+
@fields = gather_fields(context)
|
18
|
+
@wrapped_handler.call(event: event, context: context)
|
19
|
+
end
|
20
|
+
|
21
|
+
def register_handler(metrics: true, tracing: true, &handler)
|
22
|
+
@handler = handler # the original handler
|
23
|
+
|
24
|
+
# Add the wrappers needed
|
25
|
+
wrappers = []
|
26
|
+
wrappers.push(@handler)
|
27
|
+
wrappers.push(Tracing.method(:wrap_function)) if tracing
|
28
|
+
wrappers.push(Metrics.method(:wrap_function)) if metrics
|
29
|
+
|
30
|
+
@wrapped_handler = build_wrapped_handler(wrappers) if @wrapped_handler.nil?
|
31
|
+
end
|
32
|
+
|
33
|
+
# build a nested block depending on the wrappers enabled
|
34
|
+
def build_wrapped_handler(wrappers)
|
35
|
+
wrappers.inject do |inner, outer|
|
36
|
+
proc do |event:, context:|
|
37
|
+
outer.call(event: event, context: context, &inner)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# build a map of useful properties from the context object
|
43
|
+
def gather_fields(context)
|
44
|
+
fields = {
|
45
|
+
'lambda_arn' => context.invoked_function_arn,
|
46
|
+
'aws_request_id' => context.aws_request_id,
|
47
|
+
'aws_function_name' => context.function_name,
|
48
|
+
'aws_function_version' => context.function_version,
|
49
|
+
'aws_execution_env' => ENV['AWS_EXECUTION_ENV'],
|
50
|
+
'log_group_name' => context.log_group_name,
|
51
|
+
'log_stream_name' => context.log_stream_name,
|
52
|
+
'function_wrapper_version' => "signalfx-lambda-#{SignalFx::Lambda::VERSION}",
|
53
|
+
}
|
54
|
+
|
55
|
+
fields.merge!(fields_from_arn(context.invoked_function_arn))
|
56
|
+
end
|
57
|
+
|
58
|
+
# the arn packs useful data, including region, account id, resource type,
|
59
|
+
# and qualifier
|
60
|
+
def fields_from_arn(arn = '')
|
61
|
+
_, _, _, region, account_id, resource_type, _, qualifier = arn.split(':')
|
62
|
+
|
63
|
+
fields = {
|
64
|
+
'aws_region' => region,
|
65
|
+
'aws_account_id' => account_id,
|
66
|
+
}
|
67
|
+
|
68
|
+
if qualifier
|
69
|
+
case resource_type
|
70
|
+
when 'function'
|
71
|
+
fields['aws_function_qualifier'] = qualifier
|
72
|
+
when 'event-source-mappings'
|
73
|
+
fields['event_source_mappings'] = qualifier
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
fields
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/signalfx-lambda.gemspec
CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
|
25
25
|
spec.add_dependency "jaeger-client", "~> 0.10.0"
|
26
26
|
spec.add_dependency "opentracing", "~> 0.3"
|
27
|
-
spec.
|
27
|
+
spec.add_dependency "signalfx"
|
28
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
28
29
|
spec.add_development_dependency "rake", "~> 10.0"
|
29
30
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: signalfx-lambda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ashwin Chandrasekar
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jaeger-client
|
@@ -38,20 +38,34 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: signalfx
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
61
|
+
version: '2.0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
68
|
+
version: '2.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,6 +95,7 @@ files:
|
|
81
95
|
- bin/console
|
82
96
|
- bin/setup
|
83
97
|
- lib/signalfx/lambda.rb
|
98
|
+
- lib/signalfx/lambda/metrics.rb
|
84
99
|
- lib/signalfx/lambda/tracing.rb
|
85
100
|
- lib/signalfx/lambda/tracing/extractors.rb
|
86
101
|
- lib/signalfx/lambda/version.rb
|
@@ -104,8 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
119
|
- !ruby/object:Gem::Version
|
105
120
|
version: '0'
|
106
121
|
requirements: []
|
107
|
-
|
108
|
-
rubygems_version: 2.7.3
|
122
|
+
rubygems_version: 3.0.2
|
109
123
|
signing_key:
|
110
124
|
specification_version: 4
|
111
125
|
summary: Lambda handler wrapper
|