fluent-plugin-site24x7 0.1.4 → 0.1.6
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 +4 -4
- data/Gemfile +0 -0
- data/LICENSE +0 -0
- data/README.md +0 -0
- data/Rakefile +0 -0
- data/fluent-plugin-site24x7.gemspec +1 -1
- data/lib/fluent/plugin/out_site24x7.rb +126 -95
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc1338accf3055ea6b93742a4280cdbdb8ec4b5e0ab97ea4ffc79e77855f4f28
|
4
|
+
data.tar.gz: ce48c6512000a972e2f3209b4b142d6ef4cffcec7268720f0a56fed15e75553c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a48c2d71823a1756d55ae9343017331f1a6b0579c42f9fcec1c61070062bb51071adfb614b71cd162015943fd368fa179d4f932662d2b8a6e54678ce7e167539
|
7
|
+
data.tar.gz: d95117ea90350c380ee4dcacc1dd2238bac3d67e8338fa973c8231a81f2f701ead6d8f02d306b82789afb396094e250507a915ba974f64509ef480339597c881
|
data/Gemfile
CHANGED
File without changes
|
data/LICENSE
CHANGED
File without changes
|
data/README.md
CHANGED
File without changes
|
data/Rakefile
CHANGED
File without changes
|
@@ -21,8 +21,10 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
21
21
|
helpers :compat_parameters
|
22
22
|
|
23
23
|
config_param :log_type_config, :string
|
24
|
-
config_param :max_retry, :integer, :default =>
|
24
|
+
config_param :max_retry, :integer, :default => -1
|
25
25
|
config_param :retry_interval, :integer, :default => 2
|
26
|
+
config_param :maxretry_interval, :integer, :default => 60 #1 minutes
|
27
|
+
config_param :retry_timeout, :integer, :default => 24 * 3600 # 24 hours
|
26
28
|
config_param :http_idle_timeout, :integer, default: 5
|
27
29
|
config_param :http_read_timeout, :integer, default: 30
|
28
30
|
config_param :http_proxy, :string, :default => nil
|
@@ -143,9 +145,13 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
143
145
|
for field,rules in @logtype_config['filterConfig'] do
|
144
146
|
temp = []
|
145
147
|
for value in @logtype_config['filterConfig'][field]['values'] do
|
146
|
-
|
148
|
+
if @logtype_config['filterConfig'][field]['exact']
|
149
|
+
temp.push("\\A"+value+"\\Z")
|
150
|
+
else
|
151
|
+
temp.push(value)
|
152
|
+
end
|
147
153
|
end
|
148
|
-
@logtype_config['filterConfig'][field]['values'] = temp.join('|')
|
154
|
+
@logtype_config['filterConfig'][field]['values'] = Regexp.compile(temp.join('|'))
|
149
155
|
end
|
150
156
|
end
|
151
157
|
|
@@ -165,13 +171,13 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
165
171
|
if !@is_timezone_present && @logtype_config.has_key?('timezone')
|
166
172
|
@s247_datetime_format_string += '%z'
|
167
173
|
tz_value = @logtype_config['timezone']
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
174
|
+
if tz_value.start_with?('+')
|
175
|
+
@s247_tz['hrs'] = Integer('-' + tz_value[1..2])
|
176
|
+
@s247_tz['mins'] = Integer('-' + tz_value[3..4])
|
177
|
+
elsif tz_value.start_with?('-')
|
178
|
+
@s247_tz['hrs'] = Integer('+' + tz_value[1..2])
|
179
|
+
@s247_tz['mins'] = Integer('+' + tz_value[3..4])
|
180
|
+
end
|
175
181
|
end
|
176
182
|
end
|
177
183
|
Thread.new { timer_task() }
|
@@ -208,18 +214,30 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
208
214
|
time_zone = String(@s247_tz['hrs'])+':'+String(@s247_tz['mins'])
|
209
215
|
datetime_string += if time_zone.start_with?('-') then time_zone else '+'+time_zone end
|
210
216
|
end
|
217
|
+
#log.info "datetime_string : (#{datetime_string}), s247_datetime_format_string: (#{@s247_datetime_format_string})"
|
211
218
|
datetime_data = DateTime.strptime(datetime_string, @s247_datetime_format_string)
|
212
219
|
return Integer(datetime_data.strftime('%Q'))
|
213
220
|
rescue Exception => e
|
214
|
-
|
215
|
-
|
221
|
+
log.error "Exception in parsing date: #{e.message}"
|
222
|
+
return 0
|
216
223
|
end
|
217
224
|
end
|
218
225
|
|
219
|
-
def
|
220
|
-
|
221
|
-
|
222
|
-
|
226
|
+
def data_collector()
|
227
|
+
if @formatted_line.has_key?('_zl_timestamp')
|
228
|
+
applyMasking()
|
229
|
+
applyHashing()
|
230
|
+
getDerivedFields()
|
231
|
+
if !is_filters_matched()
|
232
|
+
@formatted_line = {}
|
233
|
+
return
|
234
|
+
end
|
235
|
+
remove_ignored_fields()
|
236
|
+
log_size_calculation()
|
237
|
+
else
|
238
|
+
@formatted_line = {}
|
239
|
+
return
|
240
|
+
end
|
223
241
|
end
|
224
242
|
|
225
243
|
def get_last_group_inregex(s247_custom_regex)
|
@@ -228,7 +246,9 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
228
246
|
|
229
247
|
def remove_ignored_fields()
|
230
248
|
@s247_ignored_fields.each do |field_name|
|
231
|
-
|
249
|
+
if @formatted_line.has_key?field_name
|
250
|
+
@formatted_line.delete(field_name)
|
251
|
+
end
|
232
252
|
end
|
233
253
|
end
|
234
254
|
|
@@ -245,10 +265,7 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
245
265
|
match = line.match(@s247_custom_regex)
|
246
266
|
if match
|
247
267
|
@formatted_line.update(@old_formatted_line)
|
248
|
-
@log_size += @old_log_size
|
249
|
-
@old_log_size = line.bytesize
|
250
268
|
@log_fields = match&.named_captures
|
251
|
-
remove_ignored_fields()
|
252
269
|
add_message_metadata()
|
253
270
|
@old_formatted_line = @log_fields
|
254
271
|
@last_line_matched = true
|
@@ -262,14 +279,13 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
262
279
|
@old_log_size += line.bytesize
|
263
280
|
@trace_started = true
|
264
281
|
@last_line_matched = false
|
265
|
-
end
|
282
|
+
end
|
266
283
|
end
|
267
|
-
end
|
268
|
-
|
269
|
-
|
284
|
+
end
|
285
|
+
data_collector()
|
286
|
+
if @formatted_line.length >0
|
270
287
|
parsed_lines.push(@formatted_line)
|
271
|
-
|
272
|
-
end
|
288
|
+
end
|
273
289
|
rescue Exception => e
|
274
290
|
log.error "Exception in parse_line #{e.backtrace}"
|
275
291
|
@formatted_line = {}
|
@@ -283,12 +299,14 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
283
299
|
begin
|
284
300
|
if @logtype_config.has_key?'filterConfig'
|
285
301
|
@logtype_config['filterConfig'].each do |config,value|
|
286
|
-
if @formatted_line
|
287
|
-
|
288
|
-
|
289
|
-
|
302
|
+
if (@formatted_line.has_key?config)
|
303
|
+
if @logtype_config['filterConfig'][config]['values'].match(@formatted_line[config])
|
304
|
+
val = true
|
305
|
+
else
|
306
|
+
val = false
|
307
|
+
end
|
290
308
|
end
|
291
|
-
if (@
|
309
|
+
if (@logtype_config['filterConfig'][config]['match'] ^ (val))
|
292
310
|
return false
|
293
311
|
end
|
294
312
|
end
|
@@ -342,20 +360,18 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
342
360
|
matcher = regex.match(@log_fields.delete(key))
|
343
361
|
if matcher
|
344
362
|
@log_fields.update(matcher.named_captures)
|
345
|
-
remove_ignored_fields()
|
346
363
|
@formatted_line.update(@log_fields)
|
347
364
|
end
|
348
365
|
end
|
349
366
|
end
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
@formatted_line.update(@log_fields)
|
355
|
-
log_line_filter()
|
356
|
-
@log_size += json_log_size
|
367
|
+
add_message_metadata()
|
368
|
+
@formatted_line.update(@log_fields)
|
369
|
+
data_collector()
|
370
|
+
if @formatted_line.length >0
|
357
371
|
return true
|
358
|
-
|
372
|
+
else
|
373
|
+
return false
|
374
|
+
end
|
359
375
|
end
|
360
376
|
|
361
377
|
def json_log_parser(lines)
|
@@ -367,7 +383,7 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
367
383
|
if line[0] == '{' && @json_data[-1] == '}'
|
368
384
|
if json_log_applier(@json_data)
|
369
385
|
parsed_lines.push(@formatted_line)
|
370
|
-
|
386
|
+
end
|
371
387
|
@json_data=''
|
372
388
|
end
|
373
389
|
@json_data += line
|
@@ -380,20 +396,14 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
380
396
|
end
|
381
397
|
|
382
398
|
def ml_regex_applier(ml_trace, ml_data)
|
383
|
-
begin
|
384
|
-
@log_size += @ml_trace.bytesize
|
399
|
+
begin
|
385
400
|
matcher = @s247_custom_regex.match(@ml_trace)
|
386
401
|
@log_fields = matcher.named_captures
|
387
402
|
@log_fields.update(@ml_data)
|
388
|
-
if @s247_ignored_fields
|
389
|
-
remove_ignored_fields()
|
390
|
-
end
|
391
403
|
add_message_metadata()
|
392
404
|
@formatted_line.update(@log_fields)
|
393
|
-
log_line_filter()
|
394
405
|
rescue Exception => e
|
395
406
|
log.error "Exception occurred in ml_parser : #{e.backtrace}"
|
396
|
-
@formatted_line = {}
|
397
407
|
end
|
398
408
|
end
|
399
409
|
|
@@ -413,14 +423,15 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
413
423
|
ml_regex_applier(@ml_trace, @ml_data)
|
414
424
|
if @ml_trace_buffer && @formatted_line
|
415
425
|
@formatted_line[@message_key] = @formatted_line[@message_key] + @ml_trace_buffer
|
416
|
-
@log_size += @ml_trace_buffer.bytesize
|
417
426
|
end
|
418
|
-
|
427
|
+
data_collector()
|
428
|
+
if @formatted_line.length >0
|
429
|
+
parsed_lines.push(@formatted_line)
|
430
|
+
end
|
419
431
|
@ml_trace = ''
|
420
432
|
@ml_trace_buffer = ''
|
421
433
|
if @ml_found
|
422
434
|
@ml_data = ml_start_matcher.named_captures
|
423
|
-
@log_size += line.bytesize
|
424
435
|
else
|
425
436
|
@ml_data = {}
|
426
437
|
end
|
@@ -429,7 +440,6 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
429
440
|
log.error "Exception occurred in ml_parser : #{e.backtrace}"
|
430
441
|
end
|
431
442
|
elsif @ml_found
|
432
|
-
@log_size += line.bytesize
|
433
443
|
@ml_data = ml_start_matcher.named_captures
|
434
444
|
end
|
435
445
|
elsif @ml_found
|
@@ -463,26 +473,27 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
463
473
|
end
|
464
474
|
|
465
475
|
def write(chunk)
|
476
|
+
current_chunk_id = "#{chunk.dump_unique_id_hex(chunk.unique_id)}"
|
466
477
|
begin
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
478
|
+
events = Array.new
|
479
|
+
chunk.msgpack_each do |record|
|
480
|
+
next if record.empty?
|
481
|
+
events.push record[0]
|
482
|
+
end
|
483
|
+
process_http_events(events, current_chunk_id)
|
473
484
|
rescue Exception => e
|
474
485
|
log.error "Exception #{e.backtrace}"
|
475
486
|
end
|
476
487
|
end
|
477
488
|
|
478
|
-
def process_http_events(events)
|
489
|
+
def process_http_events(events, current_chunk_id)
|
479
490
|
@before_time = Time.now
|
480
491
|
batches = batch_http_events(events)
|
481
492
|
batches.each do |batched_event|
|
482
493
|
formatted_events, @log_size = format_http_event_batch(batched_event)
|
483
494
|
if (formatted_events.length>0)
|
484
495
|
formatted_events = gzip_compress(formatted_events)
|
485
|
-
send_logs_to_s247(formatted_events, @log_size)
|
496
|
+
send_logs_to_s247(formatted_events, @log_size, current_chunk_id)
|
486
497
|
end
|
487
498
|
end
|
488
499
|
end
|
@@ -540,49 +551,73 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
540
551
|
gz.string
|
541
552
|
end
|
542
553
|
|
543
|
-
def send_logs_to_s247(gzipped_parsed_lines, log_size)
|
554
|
+
def send_logs_to_s247(gzipped_parsed_lines, log_size, current_chunk_id)
|
544
555
|
request = Net::HTTP::Post.new @uri.request_uri
|
545
556
|
request.body = gzipped_parsed_lines
|
546
|
-
|
557
|
+
|
547
558
|
sleep_interval = @retry_interval
|
548
559
|
begin
|
549
|
-
|
560
|
+
retries = 0
|
561
|
+
first_upload_time = Time.now
|
562
|
+
while true
|
550
563
|
need_retry = false
|
551
564
|
begin
|
565
|
+
@s247_http_client.override_headers["Log-Size"] = @log_size
|
566
|
+
@s247_http_client.override_headers["upload-id"] = current_chunk_id
|
552
567
|
response = @s247_http_client.request @uri, request
|
553
568
|
resp_headers = response.each_header.to_h
|
554
|
-
|
569
|
+
|
555
570
|
if response.code == '200'
|
556
|
-
if resp_headers
|
557
|
-
log.error "
|
571
|
+
if resp_headers['x-uploadid'] == nil
|
572
|
+
log.error "[#{current_chunk_id}]:upload id is empty hence retry flag enabled #{resp_headers}"
|
573
|
+
need_retry = true
|
574
|
+
else
|
575
|
+
@log_upload_allowed = true
|
576
|
+
log.debug "[#{current_chunk_id}]:Successfully sent logs with size #{gzipped_parsed_lines.size} / #{@log_size} to site24x7. Upload Id : #{resp_headers['x-uploadid']}"
|
577
|
+
end
|
578
|
+
elsif response.code == '400'
|
579
|
+
if resp_headers.has_key?'log_license_exceeds' and resp_headers['log_license_exceeds'] == 'True'
|
580
|
+
log.error "[#{current_chunk_id}]:Log license limit exceeds so not able to send logs"
|
558
581
|
@log_upload_allowed = false
|
559
582
|
@log_upload_stopped_time =Time.now.to_i
|
560
|
-
elsif resp_headers.has_key?'
|
561
|
-
log.error "Max upload limit reached for log type"
|
583
|
+
elsif resp_headers.has_key?'blocked_logtype' and resp_headers['blocked_logtype'] == 'True'
|
584
|
+
log.error "[#{current_chunk_id}]:Max upload limit reached for log type"
|
562
585
|
@log_upload_allowed = false
|
563
586
|
@log_upload_stopped_time =Time.now.to_i
|
564
|
-
elsif resp_headers.has_key?'
|
565
|
-
log.error "
|
587
|
+
elsif resp_headers.has_key?'api_upload_enabled' and resp_headers['api_upload_enabled'] == 'False'
|
588
|
+
log.error "[#{current_chunk_id}]:API upload not enabled for log type : "
|
589
|
+
@log_upload_allowed = false
|
590
|
+
@log_upload_stopped_time =Time.now.to_i
|
591
|
+
elsif resp_headers.has_key?'invalid_logtype' and resp_headers['invalid_logtype'] == 'True'
|
592
|
+
log.error "[#{current_chunk_id}]:Log type not present in this account so stopping log collection"
|
593
|
+
@valid_logtype = false
|
594
|
+
elsif resp_headers.has_key?'invalid_account' and resp_headers['invalid_account'] == 'True'
|
595
|
+
log.error "[#{current_chunk_id}]: Invalid account so stopping log collection"
|
566
596
|
@valid_logtype = false
|
567
597
|
else
|
568
|
-
|
569
|
-
log.debug "Successfully sent logs with size #{gzipped_parsed_lines.size} / #{@log_size} to site24x7. Upload Id : #{resp_headers['x-uploadid']}"
|
598
|
+
log.error "[#{current_chunk_id}]: Upload failed for reason : #{response.message}"
|
570
599
|
end
|
571
600
|
else
|
572
|
-
log.error "Response Code #{
|
601
|
+
log.error "[#{current_chunk_id}]:Response Code #{response.code} from Site24x7, so retrying (#{retries + 1}/#{@max_retry})"
|
573
602
|
need_retry = true
|
574
603
|
end
|
575
604
|
rescue StandardError => e
|
576
|
-
log.error "Error connecting to Site24x7. exception: #{e} (#{
|
605
|
+
log.error "[#{current_chunk_id}]:Error connecting to Site24x7. exception: #{e} (#{retries + 1}/#{@max_retry})"
|
606
|
+
need_retry = true
|
577
607
|
end
|
578
608
|
|
579
609
|
if need_retry
|
580
|
-
|
581
|
-
|
610
|
+
retries += 1
|
611
|
+
if (retries >= @max_retry && @max_retry > 0) || (Time.now > first_upload_time + @retry_timeout && @retry_timeout > 0)
|
612
|
+
log.error "[#{current_chunk_id}]: Internal max retries(#{max_retry}) or retry_timeout : #{first_upload_time + @retry_timeout} reached"
|
582
613
|
break
|
583
614
|
end
|
615
|
+
log.info "[#{current_chunk_id}]:Going to retry the upload at #{Time.now + sleep_interval}"
|
584
616
|
sleep(sleep_interval)
|
585
617
|
sleep_interval *= 2
|
618
|
+
if sleep_interval > @maxretry_interval
|
619
|
+
sleep_interval = @maxretry_interval
|
620
|
+
end
|
586
621
|
else
|
587
622
|
return
|
588
623
|
end
|
@@ -599,8 +634,7 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
599
634
|
ml_regex_applier(@ml_trace, @ml_data)
|
600
635
|
if @ml_trace_buffer
|
601
636
|
if !(@formatted_line.empty?)
|
602
|
-
@formatted_line[@message_key] = @formatted_line[@message_key] + @ml_trace_buffer
|
603
|
-
@log_size += @ml_trace_buffer.bytesize
|
637
|
+
@formatted_line[@message_key] = @formatted_line[@message_key] + @ml_trace_buffer
|
604
638
|
else
|
605
639
|
@ml_trace += @ml_trace_buffer.gsub('\n', '<NewLine>')
|
606
640
|
ml_regex_applier(@ml_trace, @ml_data)
|
@@ -615,10 +649,8 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
615
649
|
@json_data = ''
|
616
650
|
elsif @old_formatted_line
|
617
651
|
@formatted_line.update(@old_formatted_line)
|
618
|
-
|
619
|
-
@log_size += @old_log_size
|
652
|
+
data_collector()
|
620
653
|
@old_formatted_line = {}
|
621
|
-
@old_log_size = 0
|
622
654
|
end
|
623
655
|
@logged = true
|
624
656
|
if @format_record
|
@@ -654,9 +686,7 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
654
686
|
end
|
655
687
|
end
|
656
688
|
@formatted_line[key] = field_value
|
657
|
-
@log_size -= adjust_length
|
658
689
|
else
|
659
|
-
@log_size -= (@formatted_line[key].bytesize - @masking_config[key]['string'].bytesize)
|
660
690
|
@formatted_line[key] = @masking_config[key]['string']
|
661
691
|
end
|
662
692
|
end
|
@@ -693,11 +723,6 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
693
723
|
end
|
694
724
|
end
|
695
725
|
end
|
696
|
-
end
|
697
|
-
if adjust_length
|
698
|
-
@log_size -= adjust_length
|
699
|
-
else
|
700
|
-
@log_size -= (@formatted_line[key].bytesize - field_value.bytesize)
|
701
726
|
end
|
702
727
|
@formatted_line[key] = field_value
|
703
728
|
end
|
@@ -716,10 +741,7 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
716
741
|
if @formatted_line.has_key?key
|
717
742
|
match_derived = each.match(@formatted_line[key])
|
718
743
|
if match_derived
|
719
|
-
@formatted_line.update(match_derived.named_captures)
|
720
|
-
for field_name,value in match_derived.named_captures do
|
721
|
-
@log_size += @formatted_line[field_name].bytesize
|
722
|
-
end
|
744
|
+
@formatted_line.update(match_derived.named_captures)
|
723
745
|
end
|
724
746
|
break
|
725
747
|
end
|
@@ -727,10 +749,19 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
727
749
|
end
|
728
750
|
rescue Exception => e
|
729
751
|
log.error "Exception occurred in derived fields : #{e.backtrace}"
|
730
|
-
end
|
752
|
+
end
|
731
753
|
end
|
732
754
|
end
|
733
755
|
|
756
|
+
def log_size_calculation()
|
757
|
+
data_exclusion = ["_zl", "s247", "inode"]
|
758
|
+
@formatted_line.each do |field, value|
|
759
|
+
unless data_exclusion.any? { |exclusion| field.start_with?(exclusion) }
|
760
|
+
@log_size += value.to_s.bytesize
|
761
|
+
end
|
762
|
+
end
|
763
|
+
end
|
764
|
+
|
734
765
|
def timer_task()
|
735
766
|
while true
|
736
767
|
@after_time = Time.now
|
@@ -741,7 +772,7 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
741
772
|
if out != nil
|
742
773
|
out = Yajl.dump([out])
|
743
774
|
out = gzip_compress(out)
|
744
|
-
send_logs_to_s247(out, @log_size)
|
775
|
+
send_logs_to_s247(out, @log_size, 'holded_line')
|
745
776
|
end
|
746
777
|
end
|
747
778
|
end
|
@@ -749,4 +780,4 @@ class Fluent::Site24x7Output < Fluent::Plugin::Output
|
|
749
780
|
end
|
750
781
|
end
|
751
782
|
|
752
|
-
end
|
783
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-site24x7
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Magesh Rajan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -152,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
154
|
requirements: []
|
155
|
-
rubygems_version: 3.1.
|
155
|
+
rubygems_version: 3.1.2
|
156
156
|
signing_key:
|
157
157
|
specification_version: 4
|
158
158
|
summary: Site24x7 output plugin for Fluent event collector.
|