logstash-output-newrelic 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
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)
|