fluent-plugin-viaq_data_model 0.0.8 → 0.0.9

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
  SHA1:
3
- metadata.gz: 533e2b71ea3c79ce83a75a7c157c6603188bc5d2
4
- data.tar.gz: 77ad9e855ddf94ca5d87cfe4815be363cf8d6ec1
3
+ metadata.gz: a18e41903af1963acc60e14cfa67a97e1150c2e4
4
+ data.tar.gz: 16197edf63812241935d2c2d29e806865bfbe7eb
5
5
  SHA512:
6
- metadata.gz: d78d938a5e2daf26c447175776b8e03f4e2d47b6fad8c779bb797f6e77211956b7e47a9c8090c2ae9478ad035832d11d7644aa74c8893fa0ddfc06a8c136b38a
7
- data.tar.gz: 5613cb33d7c645a607a4e2f90032fb7c18bd0d01f3e27f16af5fc2337d41d9afd27eb7083f9adc0b9fde6681d783d969e8b23b81fcca34cb490e872b904e637b
6
+ metadata.gz: 67b5c1ac90d3b88aa6e0d7bf27a613fe9480adec00ae22d4e7ab1ecf5287ff292744799dfafb7abdd43165d6fa7d8f0ab4ea4fe93997781e804853261ad541fa
7
+ data.tar.gz: 8a459c3fa776e944a397a0bb8443ec7d245696f86ba3df9c670d4d9604855142fee65b2061f433d862ad147f3981909a2a65a5ef7578f16327a6606112fa7de5
@@ -7,7 +7,7 @@ FLUENTD_VERSION = ENV['FLUENTD_VERSION'] || "0.12.0"
7
7
 
8
8
  Gem::Specification.new do |gem|
9
9
  gem.name = "fluent-plugin-viaq_data_model"
10
- gem.version = "0.0.8"
10
+ gem.version = "0.0.9"
11
11
  gem.authors = ["Rich Megginson"]
12
12
  gem.email = ["rmeggins@redhat.com"]
13
13
  gem.description = %q{Filter plugin to ensure data is in the ViaQ common data model}
@@ -225,14 +225,13 @@ module Fluent
225
225
 
226
226
  def process_sys_var_log_fields(tag, time, record, fmtr_type = nil)
227
227
  record['systemd'] = {"t" => {"PID" => record['pid']}, "u" => {"SYSLOG_IDENTIFIER" => record['ident']}}
228
- unless record[@dest_time_name] # e.g. already has @timestamp
229
- rectime = record['time'] || time
228
+ if record[@dest_time_name].nil? # e.g. already has @timestamp
230
229
  # handle the case where the time reported in /var/log/messages is for a previous year
231
- if Time.at(rectime) > Time.now
232
- record['time'] = Time.new((rectime.year - 1), rectime.month, rectime.day, rectime.hour, rectime.min, rectime.sec, rectime.utc_offset).utc.to_datetime.rfc3339(6)
233
- else
234
- record['time'] = rectime.utc.to_datetime.rfc3339(6)
230
+ timeobj = Time.at(time)
231
+ if timeobj > Time.now
232
+ timeobj = Time.new((timeobj.year - 1), timeobj.month, timeobj.day, timeobj.hour, timeobj.min, timeobj.sec, timeobj.utc_offset)
235
233
  end
234
+ record['time'] = timeobj.utc.to_datetime.rfc3339(6)
236
235
  end
237
236
  if record['host'].eql?('localhost') && @docker_hostname
238
237
  record['hostname'] = @docker_hostname
@@ -244,13 +243,21 @@ module Fluent
244
243
  def process_k8s_json_file_fields(tag, time, record, fmtr_type = nil)
245
244
  record['message'] = record['message'] || record['log']
246
245
  record['level'] = (record['stream'] == 'stdout') ? 'info' : 'err'
247
- if record['kubernetes'] && record['kubernetes']['host']
248
- record['hostname'] = record['kubernetes']['host']
246
+ if record.key?('kubernetes') && record['kubernetes'].respond_to?(:fetch) && \
247
+ (k8shost = record['kubernetes'].fetch('host', nil))
248
+ record['hostname'] = k8shost
249
249
  elsif @docker_hostname
250
250
  record['hostname'] = @docker_hostname
251
251
  end
252
- unless record[@dest_time_name] # e.g. already has @timestamp
253
- record['time'] = record['time'].utc.to_datetime.rfc3339(6)
252
+ if record[@dest_time_name].nil? # e.g. already has @timestamp
253
+ unless record['time'].nil?
254
+ # convert from string - parses a wide variety of formats
255
+ rectime = Time.parse(record['time'])
256
+ else
257
+ # convert from time_t
258
+ rectime = Time.at(time)
259
+ end
260
+ record['time'] = rectime.utc.to_datetime.rfc3339(6)
254
261
  end
255
262
  end
256
263
 
@@ -68,19 +68,19 @@ module ViaqDataModelFilterSystemd
68
68
  def process_journal_fields(tag, time, record, fmtr_type)
69
69
  systemd_t = {}
70
70
  JOURNAL_FIELD_MAP_SYSTEMD_T.each do |jkey, key|
71
- if record[jkey]
71
+ if record.key?(jkey)
72
72
  systemd_t[key] = record[jkey]
73
73
  end
74
74
  end
75
75
  systemd_u = {}
76
76
  JOURNAL_FIELD_MAP_SYSTEMD_U.each do |jkey, key|
77
- if record[jkey]
77
+ if record.key?(jkey)
78
78
  systemd_u[key] = record[jkey]
79
79
  end
80
80
  end
81
81
  systemd_k = {}
82
82
  JOURNAL_FIELD_MAP_SYSTEMD_K.each do |jkey, key|
83
- if record[jkey]
83
+ if record.key?(jkey)
84
84
  systemd_k[key] = record[jkey]
85
85
  end
86
86
  end
@@ -106,8 +106,8 @@ module ViaqDataModelFilterSystemd
106
106
  end
107
107
  record['level'] = ["emerg", "alert", "crit", "err", "warning", "notice", "info", "debug", "trace", "unknown"][pri_index]
108
108
  JOURNAL_TIME_FIELDS.each do |field|
109
- if record[field]
110
- record['time'] = Time.at(record[field].to_f / 1000000.0).utc.to_datetime.rfc3339(6)
109
+ if (val = record[field])
110
+ record['time'] = Time.at(val.to_f / 1000000.0).utc.to_datetime.rfc3339(6)
111
111
  break
112
112
  end
113
113
  end
@@ -121,8 +121,9 @@ module ViaqDataModelFilterSystemd
121
121
  end
122
122
  when :k8s_journal
123
123
  record['message'] = record['message'] || record['MESSAGE'] || record['log']
124
- if record['kubernetes'] && record['kubernetes']['host']
125
- record['hostname'] = record['kubernetes']['host']
124
+ if record.key?('kubernetes') && record['kubernetes'].respond_to?(:fetch) && \
125
+ (k8shost = record['kubernetes'].fetch('host', nil))
126
+ record['hostname'] = k8shost
126
127
  elsif @docker_hostname
127
128
  record['hostname'] = @docker_hostname
128
129
  else
@@ -601,8 +601,9 @@ class ViaqDataModelFilterTest < Test::Unit::TestCase
601
601
  ENV['IPADDR6'] = '::1'
602
602
  ENV['FLUENTD_VERSION'] = 'fversion'
603
603
  ENV['DATA_VERSION'] = 'dversion'
604
- now = Time.now
605
- input = {"pid"=>12345,"ident"=>"service","host"=>"myhost","time"=>now,"message"=>"mymessage"}
604
+ timestr = Time.at(@time).strftime('%b %d %H:%M:%S')
605
+ expectedtime = Time.at(@time).utc.to_datetime.rfc3339(6)
606
+ input = {"pid"=>12345,"ident"=>"service","host"=>"myhost","time"=>timestr,"message"=>"mymessage"}
606
607
  rec = emit_with_tag('system.var.log.messages', input, '
607
608
  <formatter>
608
609
  tag "system.var.log**"
@@ -615,7 +616,7 @@ class ViaqDataModelFilterTest < Test::Unit::TestCase
615
616
  assert_equal("service", rec['systemd']['u']['SYSLOG_IDENTIFIER'])
616
617
  assert_equal('mymessage', rec['message'])
617
618
  assert_equal('myhost', rec['hostname'])
618
- assert_equal(now.utc.to_datetime.rfc3339(6), rec['@timestamp'])
619
+ assert_equal(expectedtime, rec['@timestamp'])
619
620
  assert_equal('127.0.0.1', rec['pipeline_metadata']['normalizer']['ipaddr4'])
620
621
  assert_equal('::1', rec['pipeline_metadata']['normalizer']['ipaddr6'])
621
622
  assert_equal('fluent-plugin-systemd', rec['pipeline_metadata']['normalizer']['inputname'])
@@ -630,10 +631,12 @@ class ViaqDataModelFilterTest < Test::Unit::TestCase
630
631
  ENV['IPADDR6'] = '::1'
631
632
  ENV['FLUENTD_VERSION'] = 'fversion'
632
633
  ENV['DATA_VERSION'] = 'dversion'
633
- now = DateTime.strptime('Dec 31 23:59:59', '%b %d %H:%M:%S').to_time.utc
634
+ timestr = 'Dec 31 23:59:59'
635
+ future = DateTime.strptime(timestr, '%b %d %H:%M:%S').to_time
636
+ @time = future.to_i
634
637
  # subtract 1 from year
635
- expected = Time.new(now.year-1, now.month, now.day, now.hour, now.min, now.sec, now.utc_offset)
636
- input = {"pid"=>12345,"ident"=>"service","host"=>"myhost","time"=>now,"message"=>"mymessage"}
638
+ expected = Time.new(future.year-1, future.month, future.day, future.hour, future.min, future.sec, future.utc_offset)
639
+ input = {"pid"=>12345,"ident"=>"service","host"=>"myhost","time"=>timestr,"message"=>"mymessage"}
637
640
  rec = emit_with_tag('system.var.log.messages', input, '
638
641
  <formatter>
639
642
  tag "system.var.log**"
@@ -656,13 +659,72 @@ class ViaqDataModelFilterTest < Test::Unit::TestCase
656
659
  dellist = 'host,pid,ident'.split(',')
657
660
  dellist.each{|field| assert_nil(rec[field])}
658
661
  end
662
+ test 'process a /var/log/messages record, already has @timestamp' do
663
+ ENV['IPADDR4'] = '127.0.0.1'
664
+ ENV['IPADDR6'] = '::1'
665
+ ENV['FLUENTD_VERSION'] = 'fversion'
666
+ ENV['DATA_VERSION'] = 'dversion'
667
+ timestr = Time.at(@time).strftime('%b %d %H:%M:%S')
668
+ input = {"pid"=>12345,"ident"=>"service","host"=>"myhost","time"=>timestr,
669
+ "message"=>"mymessage","@timestamp"=>@timestamp_str}
670
+ rec = emit_with_tag('system.var.log.messages', input, '
671
+ rename_time_if_missing true
672
+ <formatter>
673
+ tag "system.var.log**"
674
+ type sys_var_log
675
+ remove_keys host,pid,ident
676
+ </formatter>
677
+ pipeline_type normalizer
678
+ ')
679
+ assert_equal(12345, rec['systemd']['t']['PID'])
680
+ assert_equal("service", rec['systemd']['u']['SYSLOG_IDENTIFIER'])
681
+ assert_equal('mymessage', rec['message'])
682
+ assert_equal('myhost', rec['hostname'])
683
+ assert_equal(@timestamp_str, rec['@timestamp'])
684
+ assert_equal('127.0.0.1', rec['pipeline_metadata']['normalizer']['ipaddr4'])
685
+ assert_equal('::1', rec['pipeline_metadata']['normalizer']['ipaddr6'])
686
+ assert_equal('fluent-plugin-systemd', rec['pipeline_metadata']['normalizer']['inputname'])
687
+ assert_equal('fluentd', rec['pipeline_metadata']['normalizer']['name'])
688
+ assert_equal('fversion dversion', rec['pipeline_metadata']['normalizer']['version'])
689
+ assert_equal(@timestamp_str, rec['pipeline_metadata']['normalizer']['received_at'])
690
+ dellist = 'host,pid,ident'.split(',')
691
+ dellist.each{|field| assert_nil(rec[field])}
692
+ end
659
693
  test 'process a k8s json-file record, default settings' do
694
+ ENV['IPADDR4'] = '127.0.0.1'
695
+ ENV['IPADDR6'] = '::1'
696
+ ENV['FLUENTD_VERSION'] = 'fversion'
697
+ ENV['DATA_VERSION'] = 'dversion'
698
+ input = {'kubernetes'=>{'host'=>'k8shost'},'stream'=>'stderr','time'=>@timestamp_str,'log'=>'mymessage'}
699
+ rec = emit_with_tag('kubernetes.var.log.containers.name.name_this_that_other_log', input, '
700
+ <formatter>
701
+ tag "kubernetes.var.log.containers**"
702
+ type k8s_json_file
703
+ remove_keys log,stream
704
+ </formatter>
705
+ pipeline_type normalizer
706
+ ')
707
+ assert_equal('mymessage', rec['message'])
708
+ assert_equal('k8shost', rec['hostname'])
709
+ assert_equal('err', rec['level'])
710
+ assert_equal(@timestamp_str, rec['@timestamp'])
711
+ assert_equal('127.0.0.1', rec['pipeline_metadata']['normalizer']['ipaddr4'])
712
+ assert_equal('::1', rec['pipeline_metadata']['normalizer']['ipaddr6'])
713
+ assert_equal('fluent-plugin-systemd', rec['pipeline_metadata']['normalizer']['inputname'])
714
+ assert_equal('fluentd', rec['pipeline_metadata']['normalizer']['name'])
715
+ assert_equal('fversion dversion', rec['pipeline_metadata']['normalizer']['version'])
716
+ assert_equal(@timestamp_str, rec['pipeline_metadata']['normalizer']['received_at'])
717
+ dellist = 'host,pid,ident'.split(',')
718
+ dellist.each{|field| assert_nil(rec[field])}
719
+ end
720
+ test 'process a k8s json-file record with a string valued timestamp' do
660
721
  ENV['IPADDR4'] = '127.0.0.1'
661
722
  ENV['IPADDR6'] = '::1'
662
723
  ENV['FLUENTD_VERSION'] = 'fversion'
663
724
  ENV['DATA_VERSION'] = 'dversion'
664
725
  now = Time.now
665
- input = {'kubernetes'=>{'host'=>'k8shost'},'stream'=>'stderr','time'=>now,'log'=>'mymessage'}
726
+ input = {'kubernetes'=>{'host'=>'k8shost'},
727
+ 'stream'=>'stderr','time'=>now.to_datetime.rfc3339(9),'log'=>'mymessage'}
666
728
  rec = emit_with_tag('kubernetes.var.log.containers.name.name_this_that_other_log', input, '
667
729
  <formatter>
668
730
  tag "kubernetes.var.log.containers**"
@@ -684,6 +746,93 @@ class ViaqDataModelFilterTest < Test::Unit::TestCase
684
746
  dellist = 'host,pid,ident'.split(',')
685
747
  dellist.each{|field| assert_nil(rec[field])}
686
748
  end
749
+ test 'process a k8s json-file record with a string valued timestamp, alternate format' do
750
+ ENV['IPADDR4'] = '127.0.0.1'
751
+ ENV['IPADDR6'] = '::1'
752
+ ENV['FLUENTD_VERSION'] = 'fversion'
753
+ ENV['DATA_VERSION'] = 'dversion'
754
+ now = Time.now
755
+ expectedtime = Time.parse(now.to_datetime.ctime).utc.to_datetime.rfc3339(6)
756
+ input = {'kubernetes'=>{'host'=>'k8shost'},
757
+ 'stream'=>'stderr','time'=>now.to_datetime.ctime,'log'=>'mymessage'}
758
+ rec = emit_with_tag('kubernetes.var.log.containers.name.name_this_that_other_log', input, '
759
+ <formatter>
760
+ tag "kubernetes.var.log.containers**"
761
+ type k8s_json_file
762
+ remove_keys log,stream
763
+ </formatter>
764
+ pipeline_type normalizer
765
+ ')
766
+ assert_equal('mymessage', rec['message'])
767
+ assert_equal('k8shost', rec['hostname'])
768
+ assert_equal('err', rec['level'])
769
+ assert_equal(expectedtime, rec['@timestamp'])
770
+ assert_equal('127.0.0.1', rec['pipeline_metadata']['normalizer']['ipaddr4'])
771
+ assert_equal('::1', rec['pipeline_metadata']['normalizer']['ipaddr6'])
772
+ assert_equal('fluent-plugin-systemd', rec['pipeline_metadata']['normalizer']['inputname'])
773
+ assert_equal('fluentd', rec['pipeline_metadata']['normalizer']['name'])
774
+ assert_equal('fversion dversion', rec['pipeline_metadata']['normalizer']['version'])
775
+ assert_equal(@timestamp_str, rec['pipeline_metadata']['normalizer']['received_at'])
776
+ dellist = 'host,pid,ident'.split(',')
777
+ dellist.each{|field| assert_nil(rec[field])}
778
+ end
779
+ test 'process a k8s json-file record, already has @timestamp' do
780
+ ENV['IPADDR4'] = '127.0.0.1'
781
+ ENV['IPADDR6'] = '::1'
782
+ ENV['FLUENTD_VERSION'] = 'fversion'
783
+ ENV['DATA_VERSION'] = 'dversion'
784
+ input = {'kubernetes'=>{'host'=>'k8shost'},'@timestamp'=>@timestamp_str,
785
+ 'stream'=>'stderr','time'=>'ignored','log'=>'mymessage'}
786
+ rec = emit_with_tag('kubernetes.var.log.containers.name.name_this_that_other_log', input, '
787
+ rename_time_if_missing true
788
+ <formatter>
789
+ tag "kubernetes.var.log.containers**"
790
+ type k8s_json_file
791
+ remove_keys log,stream
792
+ </formatter>
793
+ pipeline_type normalizer
794
+ ')
795
+ assert_equal('mymessage', rec['message'])
796
+ assert_equal('k8shost', rec['hostname'])
797
+ assert_equal('err', rec['level'])
798
+ assert_equal(@timestamp_str, rec['@timestamp'])
799
+ assert_equal('127.0.0.1', rec['pipeline_metadata']['normalizer']['ipaddr4'])
800
+ assert_equal('::1', rec['pipeline_metadata']['normalizer']['ipaddr6'])
801
+ assert_equal('fluent-plugin-systemd', rec['pipeline_metadata']['normalizer']['inputname'])
802
+ assert_equal('fluentd', rec['pipeline_metadata']['normalizer']['name'])
803
+ assert_equal('fversion dversion', rec['pipeline_metadata']['normalizer']['version'])
804
+ assert_equal(@timestamp_str, rec['pipeline_metadata']['normalizer']['received_at'])
805
+ dellist = 'host,pid,ident'.split(',')
806
+ dellist.each{|field| assert_nil(rec[field])}
807
+ end
808
+ test 'process a k8s json-file record, no time field' do
809
+ ENV['IPADDR4'] = '127.0.0.1'
810
+ ENV['IPADDR6'] = '::1'
811
+ ENV['FLUENTD_VERSION'] = 'fversion'
812
+ ENV['DATA_VERSION'] = 'dversion'
813
+ input = {'kubernetes'=>{'host'=>'k8shost'},
814
+ 'stream'=>'stderr','log'=>'mymessage'}
815
+ rec = emit_with_tag('kubernetes.var.log.containers.name.name_this_that_other_log', input, '
816
+ <formatter>
817
+ tag "kubernetes.var.log.containers**"
818
+ type k8s_json_file
819
+ remove_keys log,stream
820
+ </formatter>
821
+ pipeline_type normalizer
822
+ ')
823
+ assert_equal('mymessage', rec['message'])
824
+ assert_equal('k8shost', rec['hostname'])
825
+ assert_equal('err', rec['level'])
826
+ assert_equal(Time.at(@time).utc.to_datetime.rfc3339(6), rec['@timestamp'])
827
+ assert_equal('127.0.0.1', rec['pipeline_metadata']['normalizer']['ipaddr4'])
828
+ assert_equal('::1', rec['pipeline_metadata']['normalizer']['ipaddr6'])
829
+ assert_equal('fluent-plugin-systemd', rec['pipeline_metadata']['normalizer']['inputname'])
830
+ assert_equal('fluentd', rec['pipeline_metadata']['normalizer']['name'])
831
+ assert_equal('fversion dversion', rec['pipeline_metadata']['normalizer']['version'])
832
+ assert_equal(@timestamp_str, rec['pipeline_metadata']['normalizer']['received_at'])
833
+ dellist = 'host,pid,ident'.split(',')
834
+ dellist.each{|field| assert_nil(rec[field])}
835
+ end
687
836
  # tests for elasticsearch index functionality
688
837
  test 'construct an operations index prefix' do
689
838
  rec = emit_with_tag('journal.system', normal_input, '
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-viaq_data_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rich Megginson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-05 00:00:00.000000000 Z
11
+ date: 2017-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd