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 +4 -4
- data/.gitignore +2 -3
- data/.rubocop.yml +1 -1
- data/README.md +43 -2
- data/fluent-plugin-record-demux.gemspec +1 -1
- data/lib/fluent/plugin/out_record_demux.rb +22 -8
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9da92e93a04e15799949041055f91a9d9ff9327627028ce85322343778311bf
|
4
|
+
data.tar.gz: 7eb377c975bdd3bcdbb192dd43a89af9995292dadc5bcfad3174f8f1f580ca09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a04985f89183aa35c8dbd0b4e72fbc430a5160a71b63eb539a25e720b11d51376f82cb87a07b6317fe89a001876a53161c78adda0151b6f51ca4b9536f826b7d
|
7
|
+
data.tar.gz: 586b8c3ffc1b22d553a056fd0e3f96bf9ccada5e7d4c27a5e2b1e6ff714cc376d8c347f96278410b02dbc86c160d4abf94b05a4aa4abccc2f3da6ddb389d6181
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
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
|
|
@@ -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
|
-
|
54
|
+
raise Fluent::ConfigError, "#{NAME}: `tag` must be specified" if tag.nil? || tag.empty?
|
55
55
|
|
56
|
-
|
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 =
|
68
|
+
demux_events = MultiEventStream.new
|
65
69
|
events.each do |time, record|
|
66
70
|
record_keys = record.keys - remove_keys
|
67
|
-
|
68
|
-
|
69
|
-
|
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],
|
88
|
+
new_record = format(time, key, record[key], record_shared)
|
75
89
|
demux_events.add(time, new_record)
|
76
90
|
end
|
77
91
|
end
|