logstash-output-newrelic 1.4.0 → 1.5.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25593f8efc45dce5d2366a19ce89a4d722f6e5a55fdb3d6d8cad607d551dcbd7
|
4
|
+
data.tar.gz: d729dc031d6276a9dafdd1ae5a7615bd378993437a36b6828c540fc901839c88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82c061a523aab278574d91373f8691c1499d0560b04e96dd8a8f178b14438eaceb7236dc62cea8ca6ac15d56e9ffa7acdfc2534338d4ae00306b0ef3e47b9f58
|
7
|
+
data.tar.gz: a6b92e08674d6d67e04d9ca2cb5bc0007c717e43c07c888399f715e4c5de546a58cf8237ae9128b742d5cd96ba7b9d52142e11875d1e02b9649af7e515e5e3a0
|
@@ -13,7 +13,7 @@ require_relative './exception/error'
|
|
13
13
|
class LogStash::Outputs::NewRelic < LogStash::Outputs::Base
|
14
14
|
java_import java.util.concurrent.Executors;
|
15
15
|
|
16
|
-
|
16
|
+
RETRIABLE_CODES = Set[408, 429, 500, 502, 503, 504, 599]
|
17
17
|
|
18
18
|
MAX_PAYLOAD_SIZE_BYTES = 1_000_000
|
19
19
|
|
@@ -145,6 +145,8 @@ class LogStash::Outputs::NewRelic < LogStash::Outputs::Base
|
|
145
145
|
|
146
146
|
def nr_send(payload)
|
147
147
|
retries = 0
|
148
|
+
retry_duration = 1
|
149
|
+
|
148
150
|
begin
|
149
151
|
http = Net::HTTP.new(@end_point.host, 443)
|
150
152
|
request = Net::HTTP::Post.new(@end_point.request_uri)
|
@@ -163,7 +165,8 @@ class LogStash::Outputs::NewRelic < LogStash::Outputs::Base
|
|
163
165
|
@logger.error(e.message)
|
164
166
|
if (should_retry(retries) && is_retryable_code(e))
|
165
167
|
retries += 1
|
166
|
-
sleep(
|
168
|
+
sleep(retry_duration)
|
169
|
+
retry_duration *= 2
|
167
170
|
retry
|
168
171
|
end
|
169
172
|
rescue => e
|
@@ -178,7 +181,8 @@ class LogStash::Outputs::NewRelic < LogStash::Outputs::Base
|
|
178
181
|
:error_class => e.class.name,
|
179
182
|
:backtrace => e.backtrace
|
180
183
|
)
|
181
|
-
sleep(
|
184
|
+
sleep(retry_duration)
|
185
|
+
retry_duration *= 2
|
182
186
|
retry
|
183
187
|
else
|
184
188
|
@logger.error(
|
@@ -197,6 +201,6 @@ class LogStash::Outputs::NewRelic < LogStash::Outputs::Base
|
|
197
201
|
|
198
202
|
def is_retryable_code(response_error)
|
199
203
|
error_code = response_error.response_code
|
200
|
-
|
204
|
+
RETRIABLE_CODES.include?(error_code)
|
201
205
|
end
|
202
206
|
end # class LogStash::Outputs::NewRelic
|
@@ -265,7 +265,7 @@ describe LogStash::Outputs::NewRelic do
|
|
265
265
|
end
|
266
266
|
end
|
267
267
|
|
268
|
-
context "error handling" do
|
268
|
+
context "error handling and retry logic" do
|
269
269
|
it "continues through errors, future calls should still succeed" do
|
270
270
|
stub_request(:any, base_uri)
|
271
271
|
.to_raise(StandardError.new("from test"))
|
@@ -281,33 +281,41 @@ describe LogStash::Outputs::NewRelic do
|
|
281
281
|
.to have_been_made
|
282
282
|
end
|
283
283
|
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
284
|
+
[
|
285
|
+
{ "returned_status_code" => 200, "expected_to_retry" => false },
|
286
|
+
{ "returned_status_code" => 202, "expected_to_retry" => false },
|
287
|
+
{ "returned_status_code" => 400, "expected_to_retry" => false },
|
288
|
+
{ "returned_status_code" => 404, "expected_to_retry" => false },
|
289
|
+
{ "returned_status_code" => 408, "expected_to_retry" => true },
|
290
|
+
{ "returned_status_code" => 429, "expected_to_retry" => true },
|
291
|
+
{ "returned_status_code" => 500, "expected_to_retry" => true },
|
292
|
+
{ "returned_status_code" => 502, "expected_to_retry" => true },
|
293
|
+
{ "returned_status_code" => 503, "expected_to_retry" => true },
|
294
|
+
{ "returned_status_code" => 504, "expected_to_retry" => true },
|
295
|
+
{ "returned_status_code" => 599, "expected_to_retry" => true }
|
296
|
+
].each do |test_case|
|
297
|
+
returned_status_code = test_case["returned_status_code"]
|
298
|
+
expected_to_retry = test_case["expected_to_retry"]
|
299
|
+
|
300
|
+
it "should #{expected_to_retry ? "" : "not"} retry on status code #{returned_status_code}" do
|
301
|
+
stub_request(:any, base_uri)
|
302
|
+
.to_return(status: returned_status_code)
|
303
|
+
.to_return(status: 200)
|
304
|
+
|
305
|
+
logstash_event = LogStash::Event.new({ "message" => "Test message" })
|
306
|
+
@newrelic_output.multi_receive([logstash_event])
|
307
|
+
|
308
|
+
expected_retries = expected_to_retry ? 2 : 1
|
309
|
+
wait_for(a_request(:post, base_uri)
|
310
|
+
.with { |request| single_gzipped_message(request.body)['message'] == 'Test message' })
|
311
|
+
.to have_been_made.at_least_times(expected_retries)
|
312
|
+
wait_for(a_request(:post, base_uri)
|
313
|
+
.with { |request| single_gzipped_message(request.body)['message'] == 'Test message' })
|
314
|
+
.to have_been_made.at_most_times(expected_retries)
|
315
|
+
end
|
308
316
|
end
|
309
317
|
|
310
|
-
it "not
|
318
|
+
it "does not retry when max_retries is set to 0" do
|
311
319
|
@newrelic_output = LogStash::Plugin.lookup("output", "newrelic").new(
|
312
320
|
{ "base_uri" => base_uri, "license_key" => api_key, "max_retries" => '0' }
|
313
321
|
)
|
@@ -324,7 +332,7 @@ describe LogStash::Outputs::NewRelic do
|
|
324
332
|
.to have_been_made.times(1)
|
325
333
|
end
|
326
334
|
|
327
|
-
it "
|
335
|
+
it "retries when receive a not expected exception" do
|
328
336
|
stub_request(:any, base_uri)
|
329
337
|
.to_raise(StandardError.new("from test"))
|
330
338
|
.to_return(status: 200)
|