fluent-plugin-scalyr 0.8.14 → 0.8.17

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: f9f9a9d2d7c0086b3885e3c3962fcd7271b84b79cbd1dd937cfb27f1d24e16d8
4
- data.tar.gz: d99dd0b487a8f4920a2abc53b00fb2f75499647ed6cb75bcd0ffa9a0a0dd0871
3
+ metadata.gz: df57f8a053be1230c4af77591eb3b2cab52dd23ce2733a38046a6d03a1ab24cb
4
+ data.tar.gz: 20675ccb717aa4c71f216c619070d78dcde0123a43f1866aa43387f84e4a856d
5
5
  SHA512:
6
- metadata.gz: b6374eb7cb7e4eb1fa3ba3c7342999f176743b07b3293ff3a34f87e127004db50502fb3989117873b68702600fdb6072f4fe39f1f78fef2d280d37a86fa04dc8
7
- data.tar.gz: 8964f56c050fa025825ef3bb4c74d7ef593d32eee86930f9bb9847bedd5048a1851767cc1d3d9d67f064dc1b08622b479add48cab6f395519f08e692c2f57154
6
+ metadata.gz: 7036556c268716b93ca61a27b02a2bfd7d1760b6eaecb15423491113c0ba6e97a0472df6d69776fc41b0bb3266e2554944e8853a788020637ccc781d320b786e
7
+ data.tar.gz: 767f067ee3f88c0af7abd58049f11afd3305f7c0a8ae6885e2a6cca5f57318b1b111869fc3fb11a2e6f61bcd627abdf9e6a47435fab5733cdee826bd1493a741
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.14
1
+ 0.8.17
@@ -23,7 +23,7 @@ Gem::Specification.new do |gem|
23
23
  gem.add_dependency "zlib"
24
24
  gem.add_development_dependency "bundler", "~> 1.9"
25
25
  gem.add_development_dependency "flexmock", "~> 1.2"
26
- gem.add_development_dependency "rake", "~> 0.9"
26
+ gem.add_development_dependency "rake", "~> 13.0"
27
27
  gem.add_development_dependency "rubocop", "~> 0.4"
28
28
  gem.add_development_dependency "test-unit", "~> 3.0"
29
29
  end
@@ -73,6 +73,12 @@ module Scalyr
73
73
  end
74
74
 
75
75
  def configure(conf)
76
+ @version = if Gem.loaded_specs.key?("fluent-plugin-scalyr")
77
+ Gem.loaded_specs["fluent-plugin-scalyr"].version
78
+ else
79
+ "unknown"
80
+ end
81
+
76
82
  if conf.elements("buffer").empty?
77
83
  $log.warn "Pre 0.14.0 configuration file detected. Please consider updating your configuration file" # rubocop:disable Layout/LineLength, Lint/RedundantCopDisableDirective
78
84
  end
@@ -146,7 +152,7 @@ module Scalyr
146
152
  # Generate a session id. This will be called once for each <match> in fluent.conf that uses scalyr
147
153
  @session = SecureRandom.uuid
148
154
 
149
- $log.info "Scalyr Fluentd Plugin ID id=#{plugin_id} worker=#{fluentd_worker_id} session=#{@session}" # rubocop:disable Layout/LineLength, Lint/RedundantCopDisableDirective
155
+ $log.info "Scalyr Fluentd Plugin ID id=#{plugin_id} worker=#{fluentd_worker_id} session=#{@session} version=#{@version}" # rubocop:disable Layout/LineLength, Lint/RedundantCopDisableDirective
150
156
  end
151
157
 
152
158
  def format(tag, time, record)
@@ -254,8 +260,8 @@ module Scalyr
254
260
 
255
261
  post = Net::HTTP::Post.new uri.path
256
262
  post.add_field("Content-Type", "application/json")
257
-
258
263
  post.add_field("Content-Encoding", encoding) if @compression_type
264
+ post.add_field("User-Agent", "fluent-plugin-scalyr;#{@version}")
259
265
 
260
266
  post.body = body
261
267
 
@@ -358,13 +364,37 @@ module Scalyr
358
364
  # generate new request if json size of events in the array exceed maximum request buffer size
359
365
  append_event = true
360
366
  if total_bytes + event_json.bytesize > @max_request_buffer
361
- # make sure we always have at least one event
367
+ # the case where a single event causes us to exceed the @max_request_buffer
362
368
  if events.empty?
363
- events << event
369
+ # if we are able to truncate the content (and append an ellipsis)
370
+ # inside the @message_field we do so here
371
+ if record.key?(@message_field) &&
372
+ record[@message_field].is_a?(String) &&
373
+ record[@message_field].bytesize > event_json.bytesize - @max_request_buffer &&
374
+ record[@message_field].bytesize >= 3
375
+
376
+ @log.warn "Received a record that cannot fit within max_request_buffer "\
377
+ "(#{@max_request_buffer}) from #{record['logfile']}, serialized event size "\
378
+ "is #{event_json.bytesize}. The #{@message_field} field will be truncated to fit."
379
+ max_msg_size = @max_request_buffer - event_json.bytesize - 3
380
+ truncated_msg = event[:attrs][@message_field][0...max_msg_size] + "..."
381
+ event[:attrs][@message_field] = truncated_msg
382
+ events << event
383
+
384
+ # otherwise we drop the event and save ourselves hitting a 4XX response from the server
385
+ else
386
+ @log.warn "Received a record that cannot fit within max_request_buffer "\
387
+ "(#{@max_request_buffer}) from #{record['logfile']}, serialized event size "\
388
+ "is #{event_json.bytesize}. The #{@message_field} field too short to truncate, "\
389
+ "dropping event."
390
+ end
364
391
  append_event = false
365
392
  end
366
- request = create_request(events, current_threads)
367
- requests << request
393
+
394
+ unless events.empty?
395
+ request = create_request(events, current_threads)
396
+ requests << request
397
+ end
368
398
 
369
399
  total_bytes = 0
370
400
  current_threads = {}
@@ -380,8 +410,12 @@ module Scalyr
380
410
  }
381
411
 
382
412
  # create a final request with any left over events
383
- request = create_request(events, current_threads)
384
- requests << request
413
+ unless events.empty?
414
+ request = create_request(events, current_threads)
415
+ requests << request
416
+ end
417
+
418
+ requests
385
419
  end
386
420
 
387
421
  def create_request(events, current_threads)
data/test/test_events.rb CHANGED
@@ -357,4 +357,48 @@ class EventsTest < Scalyr::ScalyrOutTest
357
357
  d.feed(time, attrs)
358
358
  end
359
359
  end
360
+
361
+ def test_truncated_large_event
362
+ d = create_driver CONFIG + "max_request_buffer 4000"
363
+
364
+ time = event_time("2015-04-01 10:00:00 UTC")
365
+ attrs = {"log" => "this is a test", "message" => "0123456789" * 500}
366
+
367
+ response = flexmock(Net::HTTPResponse, code: "200", body: '{ "status":"success" }')
368
+ mock = flexmock(d.instance)
369
+
370
+ mock.should_receive(:post_request).with(
371
+ URI,
372
+ on {|request_body|
373
+ body = JSON.parse(request_body)
374
+ events = body["events"]
375
+ assert(events[0]["attrs"].key?("message"), "'message' field not found in event")
376
+ assert_equal(
377
+ "0123456789" * 388 + "012...",
378
+ events[0]["attrs"]["message"],
379
+ "'message' field incorrect"
380
+ )
381
+ true
382
+ }
383
+ ).once.and_return(response)
384
+
385
+ d.run(default_tag: "test") do
386
+ d.feed(time, attrs)
387
+ end
388
+ end
389
+
390
+ def test_dropped_large_event
391
+ d = create_driver CONFIG + "max_request_buffer 4000"
392
+
393
+ time = event_time("2015-04-01 10:00:00 UTC")
394
+ attrs = {"message" => "this is a test", "not_message" => "0123456789" * 500}
395
+
396
+ mock = flexmock(d.instance)
397
+
398
+ mock.should_receive(:post_request).never
399
+
400
+ d.run(default_tag: "test") do
401
+ d.feed(time, attrs)
402
+ end
403
+ end
360
404
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-scalyr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.14
4
+ version: 0.8.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Imron Alston
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-28 00:00:00.000000000 Z
11
+ date: 2022-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -106,14 +106,14 @@ dependencies:
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '0.9'
109
+ version: '13.0'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '0.9'
116
+ version: '13.0'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: rubocop
119
119
  requirement: !ruby/object:Gem::Requirement
@@ -184,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
184
  - !ruby/object:Gem::Version
185
185
  version: '0'
186
186
  requirements: []
187
- rubygems_version: 3.0.3
187
+ rubygems_version: 3.3.11
188
188
  signing_key:
189
189
  specification_version: 4
190
190
  summary: Scalyr plugin for fluentd