logstash-output-newrelic 1.0.8 → 1.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/DEVELOPER.md +1 -15
- data/README.md +24 -31
- data/lib/logstash/outputs/config/bigdecimal_patch.rb +24 -0
- data/lib/logstash/outputs/newrelic.rb +24 -39
- data/lib/logstash/outputs/newrelic_version/version.rb +1 -1
- data/logstash-output-newrelic.gemspec +2 -1
- data/spec/outputs/newrelic_spec.rb +87 -62
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f099ad9c408ec722141c72268c3bdc038adbe98c0760da028f5149f87077a0eb
|
4
|
+
data.tar.gz: 45817bcb9ada5fa8ca81a57f102878fc752111f7a0b7e3d3a7fc9c681a6df480
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de3784b9f1ca8300c99a7adea011e95b5ac5140ffd01d7a18dfc6cf5c5c5bbd2767cc4ac519e763bea7e0e7d12a509b9dcde98cc890b52d41ae901d750086511
|
7
|
+
data.tar.gz: acfc744ccc74de945848c3b76ade20b6e858fce52d1951e1533b302a2c55b4ae2f6156f507a8b0f949967981a5a304f293973f632f8c3863ab04fc1f1463a82b
|
data/DEVELOPER.md
CHANGED
@@ -14,14 +14,6 @@
|
|
14
14
|
* Run tests: `jruby -S bundle exec rspec`
|
15
15
|
* Build the gem: `jruby -S gem build logstash-output-newrelic.gemspec`
|
16
16
|
|
17
|
-
## Pushing changes to the public repo
|
18
|
-
After updating the New Relic repo with changes, changes will need to be pushed to the public GitHub repo at: https://github.com/newrelic/logstash-output-plugin
|
19
|
-
|
20
|
-
* `git remote add public git@github.com:newrelic/logstash-output-plugin.git`
|
21
|
-
* `git push public master:name-of-branch-to-create`
|
22
|
-
* Create a PR from that branch in https://github.com/newrelic/logstash-output-plugin
|
23
|
-
* Get the PR reviewed, merged, and delete the branch!
|
24
|
-
|
25
17
|
# Testing it with a local Logstash install
|
26
18
|
|
27
19
|
Note: you may need to run the following commands outside of your checkout, since these should not
|
@@ -31,10 +23,4 @@ be run with the JRuby version that you've configured your checkout to use (by us
|
|
31
23
|
* Add new version: `logstash-plugin install logstash-output-newrelic-<version>.gem`
|
32
24
|
* Restart logstash: For Homebrew: `brew services restart logstash`
|
33
25
|
* Cause a change that you've configured Logstash to pick up (for instance, append to a file you're having it monitor)
|
34
|
-
* Look in `https://
|
35
|
-
|
36
|
-
# Push changes to RubyGems
|
37
|
-
After updating the source code and gem version in `version.rb`, push the changes to RubyGems. There is an older version of the gem that we do not want to overwrite — `version 0.9.1`. Please be sure you are publishing changes to the correct gem i.e. `version 1.0.0` or higher. Note, you must be a gem owner to publish changes on [RubyGems.org](https://rubygems.org/profiles/NR-LOGGING). Once you've created the account, you will need to run `gem signin` to login to RubyGems via the command line.
|
38
|
-
|
39
|
-
* Build the gem: `gem build logstash-output-newrelic.gemspec`
|
40
|
-
* Publish the gem: `gem push logstash-output-newrelic-<VERSION>.gem` with the updated version (ex: `gem push logstash-output-newrelic-1.0.0.gem`)
|
26
|
+
* Look in `https://one.newrelic.com/launcher/logger.log-launcher` for your log message
|
data/README.md
CHANGED
@@ -11,9 +11,11 @@ Versions of this plugin less than 1.0.0 are unsupported.
|
|
11
11
|
|
12
12
|
## Configuration
|
13
13
|
|
14
|
-
Add the following
|
14
|
+
Add one of the following blocks to your logstash.conf (with your specific key), then restart Logstash.
|
15
15
|
There are other optional configuration properties, see below.
|
16
16
|
|
17
|
+
### Using API Insert Key
|
18
|
+
|
17
19
|
Get your API Insert Key:
|
18
20
|
`https://insights.newrelic.com/accounts/<ACCOUNT_ID>/manage/api_keys`
|
19
21
|
|
@@ -26,23 +28,41 @@ output {
|
|
26
28
|
}
|
27
29
|
```
|
28
30
|
|
31
|
+
### Using License Key
|
32
|
+
|
33
|
+
Get your License Key:
|
34
|
+
`https://rpm.newrelic.com/accounts/<ACCOUNT_ID>`
|
35
|
+
|
36
|
+
Example:
|
37
|
+
```rb
|
38
|
+
output {
|
39
|
+
newrelic {
|
40
|
+
license_key => "<LICENSE_KEY>"
|
41
|
+
}
|
42
|
+
}
|
43
|
+
```
|
29
44
|
|
30
45
|
### Required plugin configuration
|
31
46
|
|
47
|
+
Exactly one of the following:
|
48
|
+
|
32
49
|
| Property | Description |
|
33
50
|
|---|---|
|
34
51
|
| api_key | your New Relic API Insert key |
|
52
|
+
| license_key | your New Relic License key |
|
35
53
|
|
36
54
|
### Optional plugin configuration
|
37
55
|
|
38
56
|
| Property | Description | Default value |
|
39
57
|
|---|---|---|
|
40
58
|
| concurrent_requests | The number of threads to make requests from | 1 |
|
41
|
-
| retries | The maximum number of times to retry a failed request, exponentially increasing delay between each retry | 5 |
|
42
|
-
| retry_seconds | The inital delay between retries, in seconds | 5 |
|
43
|
-
| max_delay | The maximum delay between retries, in seconds | 30 |
|
44
59
|
| base_uri | New Relic ingestion endpoint | https://log-api.newrelic.com/log/v1 |
|
45
60
|
|
61
|
+
|
62
|
+
### EU plugin configuration
|
63
|
+
|
64
|
+
When using this plugin in the EU override the base_uri with `https://log-api.eu.newrelic.com/log/v1`
|
65
|
+
|
46
66
|
## Testing
|
47
67
|
|
48
68
|
An easy way to test the plugin is to make sure Logstash is getting input from a log file you
|
@@ -57,30 +77,3 @@ input {
|
|
57
77
|
* Restart Logstash
|
58
78
|
* Append a test log message to your log file: `echo "test message" >> /path/to/your/log/file`
|
59
79
|
* Search New Relic Logs for `"test message"`
|
60
|
-
|
61
|
-
## JSON message parsing
|
62
|
-
|
63
|
-
This plugin will attempt to parse any 'message' attribute as JSON -- if it is JSON, it will be parsed and
|
64
|
-
the JSON attributes will be added to the event.
|
65
|
-
|
66
|
-
For example, the event:
|
67
|
-
```
|
68
|
-
{
|
69
|
-
"timestamp": 1562767499238,
|
70
|
-
"message": "{\"service-name\": \"login-service\", \"user\": {\"id\": 123, \"name\": \"alice\"}}"
|
71
|
-
}
|
72
|
-
|
73
|
-
```
|
74
|
-
|
75
|
-
Will be treated as:
|
76
|
-
```
|
77
|
-
{
|
78
|
-
"timestamp": 1562767499238,
|
79
|
-
"message": "{\"service-name\": \"my-service\", \"user\": {\"id\": 123, \"name\": \"alice\"}}",
|
80
|
-
"service-name": "login-service",
|
81
|
-
"user": {
|
82
|
-
"id": 123,
|
83
|
-
"name": "alice"
|
84
|
-
}
|
85
|
-
}
|
86
|
-
```
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'bigdecimal'
|
2
|
+
|
3
|
+
class BigDecimal
|
4
|
+
# Floating-point numbers that go through the 'json' Logstash filter get automatically converted into BigDecimals.
|
5
|
+
# Example of such a filter:
|
6
|
+
#
|
7
|
+
# filter {
|
8
|
+
# json {
|
9
|
+
# source => "message"
|
10
|
+
# }
|
11
|
+
# }
|
12
|
+
#
|
13
|
+
# The problem is that { "value" => BigDecimal('0.12345') } gets serialized into { "value": "0.12345e0"}. We do
|
14
|
+
# want to keep floating point numbers serialized as floating point numbers, even at the expense of loosing a little
|
15
|
+
# bit of precision during the conversion. So, in the above example, the correct serialization would be:
|
16
|
+
# { "value": 0.12345}
|
17
|
+
def to_json(options = nil) #:nodoc:
|
18
|
+
if finite?
|
19
|
+
self.to_f.to_s
|
20
|
+
else
|
21
|
+
'null'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -6,6 +6,7 @@ require 'uri'
|
|
6
6
|
require 'zlib'
|
7
7
|
require 'json'
|
8
8
|
require 'java'
|
9
|
+
require_relative './config/bigdecimal_patch'
|
9
10
|
|
10
11
|
class LogStash::Outputs::NewRelic < LogStash::Outputs::Base
|
11
12
|
java_import java.util.concurrent.Executors;
|
@@ -13,10 +14,8 @@ class LogStash::Outputs::NewRelic < LogStash::Outputs::Base
|
|
13
14
|
|
14
15
|
config_name "newrelic"
|
15
16
|
|
16
|
-
config :api_key, :validate => :password, :required =>
|
17
|
-
config :
|
18
|
-
config :max_delay, :validate => :number, :default => 30
|
19
|
-
config :retries, :validate => :number, :default => 5
|
17
|
+
config :api_key, :validate => :password, :required => false
|
18
|
+
config :license_key, :validate => :password, :required => false
|
20
19
|
config :concurrent_requests, :validate => :number, :default => 1
|
21
20
|
config :base_uri, :validate => :string, :default => "https://log-api.newrelic.com/log/v1"
|
22
21
|
|
@@ -24,23 +23,31 @@ class LogStash::Outputs::NewRelic < LogStash::Outputs::Base
|
|
24
23
|
|
25
24
|
def register
|
26
25
|
@end_point = URI.parse(@base_uri)
|
26
|
+
if @api_key.nil? && @license_key.nil?
|
27
|
+
raise LogStash::ConfigurationError, "Must provide a license key or api key", caller
|
28
|
+
end
|
29
|
+
auth = {
|
30
|
+
@api_key.nil? ? 'X-License-Key': 'X-Insert-Key' =>
|
31
|
+
@api_key.nil? ? @license_key.value : @api_key.value
|
32
|
+
}
|
27
33
|
@header = {
|
28
|
-
'X-Insert-Key' => @api_key.value,
|
29
34
|
'X-Event-Source' => 'logs',
|
30
35
|
'Content-Encoding' => 'gzip'
|
31
|
-
}.freeze
|
36
|
+
}.merge(auth).freeze
|
32
37
|
@executor = java.util.concurrent.Executors.newFixedThreadPool(@concurrent_requests)
|
33
38
|
@semaphor = java.util.concurrent.Semaphore.new(@concurrent_requests)
|
34
39
|
end
|
35
40
|
|
36
41
|
# Used by tests so that the test run can complete (background threads prevent JVM exit)
|
37
42
|
def shutdown
|
38
|
-
@executor
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
43
|
+
if @executor
|
44
|
+
@executor.shutdown
|
45
|
+
# We want this long enough to not have threading issues
|
46
|
+
terminationWaitInSeconds = 10
|
47
|
+
terminatedInTime = @executor.awaitTermination(terminationWaitInSeconds, java.util.concurrent.TimeUnit::SECONDS)
|
48
|
+
if !terminatedInTime
|
49
|
+
raise "Did not shut down within #{terminationWaitInSeconds} seconds"
|
50
|
+
end
|
44
51
|
end
|
45
52
|
end
|
46
53
|
|
@@ -100,39 +107,17 @@ class LogStash::Outputs::NewRelic < LogStash::Outputs::Base
|
|
100
107
|
gzip = Zlib::GzipWriter.new(io)
|
101
108
|
gzip << [payload].to_json
|
102
109
|
gzip.close
|
103
|
-
|
110
|
+
nr_send(io.string)
|
104
111
|
ensure
|
105
112
|
@semaphor.release()
|
106
113
|
end
|
107
114
|
end
|
108
115
|
end
|
109
116
|
|
110
|
-
def
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
def sleep_duration(attempt)
|
115
|
-
if attempt == 0
|
116
|
-
return 0
|
117
|
+
def handle_response(response)
|
118
|
+
if !(200 <= response.code.to_i && response.code.to_i < 300)
|
119
|
+
@logger.error("Request returned " + response.code + " " + response.body)
|
117
120
|
end
|
118
|
-
|
119
|
-
[max_delay, (2 ** (attempt - 1)) * retry_seconds].min
|
120
|
-
end
|
121
|
-
|
122
|
-
def sleep_on_retry(attempt)
|
123
|
-
duration = sleep_duration(attempt)
|
124
|
-
if duration > 0
|
125
|
-
sleep duration
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
def attempt_send(payload, attempt)
|
130
|
-
sleep_on_retry(attempt)
|
131
|
-
attempt_send(payload, attempt + 1) unless was_successful?(nr_send(payload)) if should_retry?(attempt)
|
132
|
-
end
|
133
|
-
|
134
|
-
def was_successful?(response)
|
135
|
-
200 <= response.code.to_i && response.code.to_i < 300
|
136
121
|
end
|
137
122
|
|
138
123
|
def nr_send(payload)
|
@@ -142,6 +127,6 @@ class LogStash::Outputs::NewRelic < LogStash::Outputs::Base
|
|
142
127
|
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
143
128
|
@header.each {|k, v| request[k] = v}
|
144
129
|
request.body = payload
|
145
|
-
http.request(request)
|
130
|
+
handle_response(http.request(request))
|
146
131
|
end
|
147
132
|
end # class LogStash::Outputs::NewRelic
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
s.add_runtime_dependency "logstash-codec-plain"
|
27
27
|
s.add_development_dependency "logstash-devutils"
|
28
28
|
s.add_development_dependency "webmock"
|
29
|
+
s.add_development_dependency "rspec"
|
29
30
|
s.add_development_dependency "rspec-wait"
|
30
|
-
|
31
|
+
s.add_development_dependency "rspec_junit_formatter"
|
31
32
|
end
|
@@ -7,6 +7,48 @@ require "logstash/event"
|
|
7
7
|
require "webmock/rspec"
|
8
8
|
require "zlib"
|
9
9
|
|
10
|
+
describe LogStash::Outputs::NewRelic do
|
11
|
+
let (:base_uri) { "https://testing-example-collector.com" }
|
12
|
+
let (:retry_seconds) { 0 }
|
13
|
+
# Don't sleep in tests, to keep tests fast. We have a test for the method that produces the sleep duration between retries.
|
14
|
+
let (:max_delay) { 0 }
|
15
|
+
let (:retries) { 3 }
|
16
|
+
let (:license_key) { 'cool-guy' }
|
17
|
+
let (:simple_config) {
|
18
|
+
{
|
19
|
+
"base_uri" => base_uri,
|
20
|
+
"license_key" => license_key
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
before(:each) do
|
25
|
+
@newrelic_output = LogStash::Plugin.lookup("output", "newrelic").new(simple_config)
|
26
|
+
@newrelic_output.register
|
27
|
+
end
|
28
|
+
|
29
|
+
after(:each) do
|
30
|
+
if @newrelic_output
|
31
|
+
@newrelic_output.shutdown
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "license key tests" do
|
36
|
+
it "sets license key when given in the header" do
|
37
|
+
stub_request(:any, base_uri).to_return(status: 200)
|
38
|
+
|
39
|
+
event = LogStash::Event.new({:message => "Test message" })
|
40
|
+
@newrelic_output.multi_receive([event])
|
41
|
+
|
42
|
+
wait_for(a_request(:post, base_uri)
|
43
|
+
.with(headers: {
|
44
|
+
"X-License-Key" => license_key,
|
45
|
+
"X-Event-Source" => "logs",
|
46
|
+
"Content-Encoding" => "gzip",
|
47
|
+
})).to have_been_made
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
10
52
|
describe LogStash::Outputs::NewRelic do
|
11
53
|
let (:api_key) { "someAccountKey" }
|
12
54
|
let (:base_uri) { "https://testing-example-collector.com" }
|
@@ -18,9 +60,6 @@ describe LogStash::Outputs::NewRelic do
|
|
18
60
|
{
|
19
61
|
"api_key" => api_key,
|
20
62
|
"base_uri" => base_uri,
|
21
|
-
"retries" => retries,
|
22
|
-
"retry_seconds" => retry_seconds,
|
23
|
-
"max_delay" => max_delay,
|
24
63
|
}
|
25
64
|
}
|
26
65
|
|
@@ -62,15 +101,17 @@ describe LogStash::Outputs::NewRelic do
|
|
62
101
|
end
|
63
102
|
|
64
103
|
after(:each) do
|
65
|
-
@newrelic_output
|
104
|
+
if @newrelic_output
|
105
|
+
@newrelic_output.shutdown
|
106
|
+
end
|
66
107
|
end
|
67
108
|
|
68
109
|
context "validation of config" do
|
69
110
|
it "requires api_key" do
|
70
111
|
no_api_key_config = {
|
71
112
|
}
|
72
|
-
|
73
|
-
expect {
|
113
|
+
output = LogStash::Plugin.lookup("output", "newrelic").new(no_api_key_config)
|
114
|
+
expect { output.register }.to raise_error LogStash::ConfigurationError
|
74
115
|
end
|
75
116
|
end
|
76
117
|
|
@@ -200,7 +241,7 @@ describe LogStash::Outputs::NewRelic do
|
|
200
241
|
|
201
242
|
# Shut down the plugin so that it has the chance to send a request
|
202
243
|
# (since we're verifying that nothing is sent)
|
203
|
-
@newrelic_output
|
244
|
+
@newrelic_output.shutdown
|
204
245
|
|
205
246
|
expect(a_request(:post, base_uri))
|
206
247
|
.not_to have_been_made
|
@@ -223,80 +264,64 @@ describe LogStash::Outputs::NewRelic do
|
|
223
264
|
end
|
224
265
|
end
|
225
266
|
|
226
|
-
context "
|
227
|
-
it "
|
228
|
-
specific_config = simple_config.clone
|
229
|
-
# Use non-trivial times -- they can be big, since this test doesn't do any sleeping, just
|
230
|
-
# tests the sleep duration
|
231
|
-
specific_config["max_delay"] = 60
|
232
|
-
specific_config["retry_seconds"] = 5
|
233
|
-
|
234
|
-
# Create a new plugin with this specific config that has longer retry sleep
|
235
|
-
# configuration than we normally want
|
236
|
-
@newrelic_output&.shutdown
|
237
|
-
@newrelic_output = LogStash::Plugin.lookup("output", "newrelic").new(specific_config)
|
238
|
-
@newrelic_output.register
|
239
|
-
|
240
|
-
expect(@newrelic_output.sleep_duration(0)).to equal(0)
|
241
|
-
expect(@newrelic_output.sleep_duration(1)).to equal(5)
|
242
|
-
expect(@newrelic_output.sleep_duration(2)).to equal(10)
|
243
|
-
expect(@newrelic_output.sleep_duration(3)).to equal(20)
|
244
|
-
expect(@newrelic_output.sleep_duration(4)).to equal(40)
|
245
|
-
expect(@newrelic_output.sleep_duration(5)).to equal(60)
|
246
|
-
expect(@newrelic_output.sleep_duration(6)).to equal(60) # Never gets bigger than this
|
247
|
-
end
|
248
|
-
|
249
|
-
it "first call fails, should retry" do
|
267
|
+
context "error handling" do
|
268
|
+
it "continues through errors, future calls should still succeed" do
|
250
269
|
stub_request(:any, base_uri)
|
251
|
-
.
|
270
|
+
.to_raise(StandardError.new("from test"))
|
252
271
|
.to_return(status: 200)
|
253
272
|
|
254
|
-
|
255
|
-
|
273
|
+
event1 = LogStash::Event.new({ "message" => "Test message 1" })
|
274
|
+
event2 = LogStash::Event.new({ "message" => "Test message 2" })
|
275
|
+
@newrelic_output.multi_receive([event1])
|
276
|
+
@newrelic_output.multi_receive([event2])
|
256
277
|
|
257
|
-
wait_for(a_request(:post, base_uri)
|
278
|
+
wait_for(a_request(:post, base_uri)
|
279
|
+
.with { |request| single_gzipped_message(request.body)['message'] == 'Test message 2' })
|
280
|
+
.to have_been_made
|
258
281
|
end
|
282
|
+
end
|
259
283
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
.to_return(status: 500)
|
264
|
-
.to_return(status: 200)
|
284
|
+
context "JSON serialization" do
|
285
|
+
it "serializes floating point numbers as floating point numbers" do
|
286
|
+
stub_request(:any, base_uri).to_return(status: 200)
|
265
287
|
|
266
|
-
event = LogStash::Event.new({ "
|
288
|
+
event = LogStash::Event.new({ "floatingpoint" => 0.12345 })
|
267
289
|
@newrelic_output.multi_receive([event])
|
268
290
|
|
269
|
-
wait_for(a_request(:post, base_uri)
|
291
|
+
wait_for(a_request(:post, base_uri)
|
292
|
+
.with { |request|
|
293
|
+
message = single_gzipped_message(request.body)
|
294
|
+
message['attributes']['floatingpoint'] == 0.12345
|
295
|
+
}
|
296
|
+
).to have_been_made
|
270
297
|
end
|
271
298
|
|
272
|
-
it "
|
273
|
-
stub_request(:any, base_uri)
|
274
|
-
.to_return(status: 500)
|
299
|
+
it "serializes BigDecimals as floating point numbers" do
|
300
|
+
stub_request(:any, base_uri).to_return(status: 200)
|
275
301
|
|
276
|
-
event = LogStash::Event.new({ "
|
302
|
+
event = LogStash::Event.new({ "bigdecimal" => BigDecimal('0.12345') })
|
277
303
|
@newrelic_output.multi_receive([event])
|
278
304
|
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
305
|
+
wait_for(a_request(:post, base_uri)
|
306
|
+
.with { |request|
|
307
|
+
message = single_gzipped_message(request.body)
|
308
|
+
message['attributes']['bigdecimal'] == 0.12345
|
309
|
+
}
|
310
|
+
).to have_been_made
|
283
311
|
end
|
284
|
-
end
|
285
312
|
|
286
|
-
|
287
|
-
|
288
|
-
stub_request(:any, base_uri)
|
289
|
-
.to_raise(StandardError.new("from test"))
|
290
|
-
.to_return(status: 200)
|
313
|
+
it "serializes NaN as null" do
|
314
|
+
stub_request(:any, base_uri).to_return(status: 200)
|
291
315
|
|
292
|
-
|
293
|
-
|
294
|
-
@newrelic_output.multi_receive([event1])
|
295
|
-
@newrelic_output.multi_receive([event2])
|
316
|
+
event = LogStash::Event.new({ "nan" => BigDecimal('NaN') })
|
317
|
+
@newrelic_output.multi_receive([event])
|
296
318
|
|
297
319
|
wait_for(a_request(:post, base_uri)
|
298
|
-
.with { |request|
|
299
|
-
|
320
|
+
.with { |request|
|
321
|
+
message = single_gzipped_message(request.body)
|
322
|
+
message['attributes']['nan'] == nil
|
323
|
+
}
|
324
|
+
).to have_been_made
|
300
325
|
end
|
301
326
|
end
|
302
327
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-newrelic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- New Relic Logging Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
name: rspec
|
76
|
+
prerelease: false
|
77
|
+
type: :development
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
requirement: !ruby/object:Gem::Requirement
|
71
85
|
requirements:
|
@@ -80,6 +94,20 @@ dependencies:
|
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
name: rspec_junit_formatter
|
104
|
+
prerelease: false
|
105
|
+
type: :development
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
description:
|
84
112
|
email: logging-team@newrelic.com
|
85
113
|
executables: []
|
@@ -92,6 +120,7 @@ files:
|
|
92
120
|
- Gemfile
|
93
121
|
- LICENSE
|
94
122
|
- README.md
|
123
|
+
- lib/logstash/outputs/config/bigdecimal_patch.rb
|
95
124
|
- lib/logstash/outputs/newrelic.rb
|
96
125
|
- lib/logstash/outputs/newrelic_version/version.rb
|
97
126
|
- logstash-output-newrelic.gemspec
|