fluent-plugin-record-demux 0.1.1 → 0.2.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: e3af2e3acf245f6e85007a6832dec1cdeb7fb7e54fc91afc2312e5c9da4be9be
4
- data.tar.gz: 8296a752f7a84b20f900a214abc55bea52af25b4e9a06d1d079b445921331e39
3
+ metadata.gz: c9da92e93a04e15799949041055f91a9d9ff9327627028ce85322343778311bf
4
+ data.tar.gz: 7eb377c975bdd3bcdbb192dd43a89af9995292dadc5bcfad3174f8f1f580ca09
5
5
  SHA512:
6
- metadata.gz: 2d99ca520a2a8e281769c3dcc508937e9ec34e4c925e54c848590aa4f59ed4ed0a773730847b697ef3e3d511d2437077531f31bd3b1841e4ed0b3539f6f55943
7
- data.tar.gz: 6170f58d6f984e9ea7ac87f9bc4b71e7e69e6274d1b848998dd3c53ebb2de6bf6e50fa6246553ce513f028698561f7c93816f8ea2b6f224a2ca02acb10beac0e
6
+ metadata.gz: a04985f89183aa35c8dbd0b4e72fbc430a5160a71b63eb539a25e720b11d51376f82cb87a07b6317fe89a001876a53161c78adda0151b6f51ca4b9536f826b7d
7
+ data.tar.gz: 586b8c3ffc1b22d553a056fd0e3f96bf9ccada5e7d4c27a5e2b1e6ff714cc376d8c347f96278410b02dbc86c160d4abf94b05a4aa4abccc2f3da6ddb389d6181
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
- # tmp files
1
+ /pkg
2
2
  /tmp
3
- .byebug_history
3
+ /.byebug_history
4
4
  /coverage
5
-
6
5
  /Gemfile.lock
data/.rubocop.yml CHANGED
@@ -14,7 +14,7 @@ Layout/LineLength:
14
14
  Max: 100
15
15
 
16
16
  Metrics/AbcSize:
17
- Max: 25
17
+ Max: 30
18
18
 
19
19
  Metrics/BlockLength:
20
20
  Exclude:
data/README.md CHANGED
@@ -18,9 +18,9 @@
18
18
  | timestamp_key | string | *nil* | add timestamp key when defined, computed from time of the event |
19
19
  | timestamp_format | enum | iso | can be iso for iso8601(3) or epochmillis for epoch with millisecond format |
20
20
 
21
- ### example
21
+ ### example 1
22
22
 
23
- Example of configuration
23
+ Example of configuration:
24
24
 
25
25
  ``` text
26
26
  <match *>
@@ -34,6 +34,47 @@ Example of configuration
34
34
  </match>
35
35
  ```
36
36
 
37
+ ### example 2
38
+
39
+ With configuration:
40
+
41
+ ``` text
42
+ <match *>
43
+ @type record_demux
44
+
45
+ tag data.demux
46
+
47
+ shared_keys tags_1, tags_2
48
+ remove_keys tmp
49
+ </match>
50
+ ```
51
+
52
+ or with configuration:
53
+
54
+ ``` text
55
+ <match *>
56
+ @type record_demux
57
+
58
+ tag data.demux
59
+
60
+ demux_keys a, b, c
61
+ remove_keys tmp
62
+ </match>
63
+ ```
64
+
65
+ It will transform event like:
66
+
67
+ ``` text
68
+ { "a": "data_a", "b": "data_b", "c": "data_c", "tags_1": "data_1", "tags_2": "data_2", "tmp": "data_tmp" }
69
+ ```
70
+
71
+ into events:
72
+
73
+ ``` text
74
+ { "a": "data_a", "tags_1": "data_1", "tags_2": "data_2" }
75
+ { "b": "data_b", "tags_1": "data_1", "tags_2": "data_2" }
76
+ { "c": "data_c", "tags_1": "data_1", "tags_2": "data_2" }
77
+ ```
37
78
 
38
79
  ## Installation
39
80
 
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'fluent-plugin-record-demux'
8
- spec.version = '0.1.1'
8
+ spec.version = '0.2.0'
9
9
  spec.authors = ['Thomas Tych']
10
10
  spec.email = ['thomas.tych@gmail.com']
11
11
 
@@ -31,7 +31,7 @@ module Fluent
31
31
  desc 'list of keys to demux'
32
32
  config_param :demux_keys, :array, value_type: :string, default: nil
33
33
  desc 'list of keys to be shared in all new records'
34
- config_param :shared_keys, :array, value_type: :string, default: []
34
+ config_param :shared_keys, :array, value_type: :string, default: nil
35
35
  desc 'list of keys to be removed'
36
36
  config_param :remove_keys, :array, value_type: :string, default: []
37
37
 
@@ -51,9 +51,13 @@ module Fluent
51
51
  def configure(conf)
52
52
  super
53
53
 
54
- return unless @tag.nil?
54
+ raise Fluent::ConfigError, "#{NAME}: `tag` must be specified" if tag.nil? || tag.empty?
55
55
 
56
- raise Fluent::ConfigError, "#{NAME}: `tag` must be specified"
56
+ if demux_keys.nil? && shared_keys.nil?
57
+ raise Fluent::ConfigError, 'specify demux_keys or shared_keys'
58
+ end
59
+
60
+ true
57
61
  end
58
62
 
59
63
  def multi_workers_ready?
@@ -61,17 +65,27 @@ module Fluent
61
65
  end
62
66
 
63
67
  def process(_events_tag, events)
64
- demux_events = Fluent::EventStream.new
68
+ demux_events = MultiEventStream.new
65
69
  events.each do |time, record|
66
70
  record_keys = record.keys - remove_keys
67
- record_shared_keys = record_keys.intersection(shared_keys)
68
- record.slice(*record_shared_keys)
69
- record_demux_keys = record_keys - record_shared_keys if !demux_keys || demux_keys.empty?
71
+
72
+ record_shared_keys = if shared_keys.nil?
73
+ record_keys - demux_keys
74
+ else
75
+ record_keys.intersection(shared_keys)
76
+ end
77
+ record_shared = record.slice(*record_shared_keys)
78
+
79
+ record_demux_keys = if demux_keys.nil?
80
+ record_keys - record_shared_keys
81
+ else
82
+ record_keys.intersection(demux_keys)
83
+ end
70
84
 
71
85
  record_demux_keys.each do |key|
72
86
  next unless record.key?(key)
73
87
 
74
- new_record = format(time, key, record[key], shared)
88
+ new_record = format(time, key, record[key], record_shared)
75
89
  demux_events.add(time, new_record)
76
90
  end
77
91
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-record-demux
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Tych