fluent-plugin-randomtag 0.0.2
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 +7 -0
- data/Gemfile +4 -0
- data/README.md +47 -0
- data/Rakefile +12 -0
- data/fluent-plugin-randomtag.gemspec +19 -0
- data/lib/fluent/plugin/out_randomtag.rb +69 -0
- data/test/plugin/test_out_randomtag.rb +102 -0
- data/test/test_helper.rb +19 -0
- metadata +96 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0e8a9ba685b1e7baff93b5cca2fd9898d261bc6c
|
4
|
+
data.tar.gz: 1fcbb14cf7ddfe5e7842dbfcd7d291cc39789939
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fe62e0907fefe8799fc677150c1110a76fbfe331f55d89b6e869690a52e75c4cbc8914e18cc3ab8c705913977644586a63a1586fd7342a6a54a57d709049cceb
|
7
|
+
data.tar.gz: b1a9e34174a25b9cd86d9010b6a929828539a64c177e5821f77f8a432ced2c3bdbbb853c509c716ee4cc787b50566041a9a0b99c2abde3dc4317bc2418723aeb
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
fluent-plugin-random
|
2
|
+
====================
|
3
|
+
|
4
|
+
(Yet another Fluentd plugin)
|
5
|
+
|
6
|
+
What
|
7
|
+
----
|
8
|
+
|
9
|
+
Allows to replace generate random value (only in integer at the time of this README) in a the specified key.
|
10
|
+
|
11
|
+
How
|
12
|
+
---
|
13
|
+
|
14
|
+
You want to define :
|
15
|
+
- Output field : **field**.
|
16
|
+
- Integer interval : **integer** (syntax is the Ruby range..syntax)
|
17
|
+
|
18
|
+
More random type could come in the future (float, string)
|
19
|
+
|
20
|
+
Examples
|
21
|
+
========
|
22
|
+
|
23
|
+
Example 0
|
24
|
+
---------
|
25
|
+
|
26
|
+
```
|
27
|
+
<match *.test>
|
28
|
+
type random
|
29
|
+
add_tag_prefix random.
|
30
|
+
integer 15..100
|
31
|
+
field key1
|
32
|
+
</match>
|
33
|
+
```
|
34
|
+
|
35
|
+
Example of records :
|
36
|
+
```
|
37
|
+
{
|
38
|
+
'foo' => "bar"
|
39
|
+
}
|
40
|
+
```
|
41
|
+
... *can* output :
|
42
|
+
```
|
43
|
+
{
|
44
|
+
'key1' => 42,
|
45
|
+
'foo' => "bar"
|
46
|
+
}
|
47
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
desc 'Default: run test.'
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
Rake::TestTask.new(:test) do |test|
|
9
|
+
test.libs << 'lib' << 'test'
|
10
|
+
test.pattern = 'test/**/test_*.rb'
|
11
|
+
test.verbose = true
|
12
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "fluent-plugin-randomtag"
|
3
|
+
spec.version = "0.0.2"
|
4
|
+
spec.authors = ["Neozaru","davidwin93"]
|
5
|
+
spec.email = ["neozaru@mailoo.org"]
|
6
|
+
spec.description = %q{Fluentd custom plugin to generate random values in tag}
|
7
|
+
spec.summary = %q{Fluentd custom plugin to generate random values in tag}
|
8
|
+
spec.homepage = "https://github.com/go2mobi/fluent-plugin-random"
|
9
|
+
spec.license = "WTFPL"
|
10
|
+
|
11
|
+
spec.files = `git ls-files`.split($/)
|
12
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
13
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
14
|
+
spec.require_paths = ["lib"]
|
15
|
+
|
16
|
+
spec.add_development_dependency "bundler"
|
17
|
+
spec.add_development_dependency "rake"
|
18
|
+
spec.add_development_dependency "fluentd"
|
19
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "securerandom"
|
3
|
+
|
4
|
+
module Fluent
|
5
|
+
class RandomTagOutput < Output
|
6
|
+
include Fluent::HandleTagNameMixin
|
7
|
+
|
8
|
+
Fluent::Plugin.register_output('randomtag', self)
|
9
|
+
|
10
|
+
config_param :integer, :string, :default => nil
|
11
|
+
|
12
|
+
|
13
|
+
def parse_integer_field(interval)
|
14
|
+
lower_upper = interval.split("..", 2).map{|value| Integer(value) }
|
15
|
+
if (lower_upper.length != 2 || !lower_upper[0].is_a?(Integer) || !lower_upper[1].is_a?(Integer))
|
16
|
+
raise "random_tag: Bad value for 'integer' (value: '#{interval}')"
|
17
|
+
end
|
18
|
+
return lower_upper
|
19
|
+
end
|
20
|
+
|
21
|
+
def check_valid_interval(lower, upper)
|
22
|
+
if (lower >= upper)
|
23
|
+
raise "random_tag: Bad interval for 'integer' (#{lower} >= #{upper})"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def configure(conf)
|
29
|
+
super
|
30
|
+
|
31
|
+
if (integer.nil?)
|
32
|
+
raise ConfigError, "random_tag: 'integer' is required to be set."
|
33
|
+
end
|
34
|
+
|
35
|
+
@integer_interval = parse_integer_field(integer)
|
36
|
+
check_valid_interval(@integer_interval[0], @integer_interval[1])
|
37
|
+
@random = Random.new()
|
38
|
+
end
|
39
|
+
|
40
|
+
def emit(tag, es, chain)
|
41
|
+
es.each { |time, record|
|
42
|
+
t = tag.dup
|
43
|
+
r = process()
|
44
|
+
#Create new tag with random number prefixed
|
45
|
+
nT = "#{r}.#{t}"
|
46
|
+
filter_record(nT, time, record)
|
47
|
+
Engine.emit(nT, time, record)
|
48
|
+
}
|
49
|
+
|
50
|
+
chain.next
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def filter_record(tag, time, record)
|
56
|
+
super(tag, time, record)
|
57
|
+
end
|
58
|
+
|
59
|
+
def process()
|
60
|
+
|
61
|
+
return generate_integer(@integer_interval[0], @integer_interval[1])
|
62
|
+
end
|
63
|
+
|
64
|
+
def generate_integer(lower, upper)
|
65
|
+
return @random.rand(lower..upper)
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'test_helper'
|
3
|
+
require 'fluent/plugin/out_randomtag'
|
4
|
+
|
5
|
+
class RandomTagOutputTest < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
Fluent::Test.setup
|
8
|
+
@p = create_driver(%[
|
9
|
+
strict true
|
10
|
+
integer 1..10
|
11
|
+
])
|
12
|
+
end
|
13
|
+
|
14
|
+
def create_driver(conf, tag = 'test')
|
15
|
+
Fluent::Test::OutputTestDriver.new(
|
16
|
+
Fluent::RandomTagOutput, tag
|
17
|
+
).configure(conf)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_unit_parse_integer
|
21
|
+
assert_raise do @p.instance.parse_integer_field("") end
|
22
|
+
assert_raise do @p.instance.parse_integer_field("1.10") end
|
23
|
+
assert_raise do @p.instance.parse_integer_field("1..10,1") end
|
24
|
+
assert_raise do @p.instance.parse_integer_field("10") end
|
25
|
+
assert_raise do @p.instance.parse_integer_field("1..10..11") end
|
26
|
+
assert_raise do @p.instance.parse_integer_field("1..") end
|
27
|
+
assert_raise do @p.instance.parse_integer_field("..10") end
|
28
|
+
assert_raise do @p.instance.parse_integer_field("foo..10") end
|
29
|
+
assert_raise do @p.instance.parse_integer_field("1..bar") end
|
30
|
+
assert_raise do @p.instance.parse_integer_field("foo") end
|
31
|
+
assert_raise do @p.instance.parse_integer_field("foo..bar") end
|
32
|
+
|
33
|
+
lower_upper = @p.instance.parse_integer_field("1..10")
|
34
|
+
assert_equal 1, lower_upper[0]
|
35
|
+
assert_equal 10, lower_upper[1]
|
36
|
+
|
37
|
+
lower_upper = @p.instance.parse_integer_field("10..1")
|
38
|
+
assert_equal 10, lower_upper[0]
|
39
|
+
assert_equal 1, lower_upper[1]
|
40
|
+
|
41
|
+
lower_upper = @p.instance.parse_integer_field("-10000000000..10000000000")
|
42
|
+
assert_equal -10000000000, lower_upper[0]
|
43
|
+
assert_equal 10000000000, lower_upper[1]
|
44
|
+
|
45
|
+
lower_upper = @p.instance.parse_integer_field("-1000000000000000000000000000000..1000000000000000000000000000000")
|
46
|
+
assert_equal -1000000000000000000000000000000, lower_upper[0]
|
47
|
+
assert_equal 1000000000000000000000000000000, lower_upper[1]
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_unit_check_valid_interval()
|
51
|
+
assert_raise do @p.instance.check_valid_interval(10,1) end
|
52
|
+
assert_raise do @p.instance.check_valid_interval(10,-1) end
|
53
|
+
|
54
|
+
@p.instance.check_valid_interval(-50,10)
|
55
|
+
@p.instance.check_valid_interval(1,10)
|
56
|
+
@p.instance.check_valid_interval(-1000000000000000000000000000000, 1000000000000000000000000000000)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_configure_on_success
|
60
|
+
# All set
|
61
|
+
d = create_driver(%[
|
62
|
+
strict true
|
63
|
+
integer 1..10
|
64
|
+
])
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_configure_on_failure
|
69
|
+
# when mandatory keys not set
|
70
|
+
assert_raise(Fluent::ConfigError) do
|
71
|
+
create_driver(%[
|
72
|
+
blah blah
|
73
|
+
])
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
# 'integer' is missing
|
78
|
+
assert_raise(Fluent::ConfigError) do
|
79
|
+
create_driver(%[
|
80
|
+
field key1
|
81
|
+
])
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_emit
|
86
|
+
d = create_driver(%[
|
87
|
+
integer 1..10
|
88
|
+
])
|
89
|
+
|
90
|
+
record = {
|
91
|
+
'foo' => 'bar'
|
92
|
+
}
|
93
|
+
|
94
|
+
d.run { d.emit(record) }
|
95
|
+
emits = d.emits
|
96
|
+
|
97
|
+
assert_equal 1, emits.count
|
98
|
+
assert_equal 'bar', emits[0][2]['foo']
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
4
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
5
|
+
|
6
|
+
require 'fluent/test'
|
7
|
+
|
8
|
+
unless ENV.has_key?('VERBOSE')
|
9
|
+
nulllogger = Object.new
|
10
|
+
nulllogger.instance_eval {|obj|
|
11
|
+
def method_missing(method, *args)
|
12
|
+
# pass
|
13
|
+
end
|
14
|
+
}
|
15
|
+
$log = nulllogger
|
16
|
+
end
|
17
|
+
|
18
|
+
class Test::Unit::TestCase
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fluent-plugin-randomtag
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Neozaru
|
8
|
+
- davidwin93
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2016-04-29 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: fluentd
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
description: Fluentd custom plugin to generate random values in tag
|
57
|
+
email:
|
58
|
+
- neozaru@mailoo.org
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- Gemfile
|
64
|
+
- README.md
|
65
|
+
- Rakefile
|
66
|
+
- fluent-plugin-randomtag.gemspec
|
67
|
+
- lib/fluent/plugin/out_randomtag.rb
|
68
|
+
- test/plugin/test_out_randomtag.rb
|
69
|
+
- test/test_helper.rb
|
70
|
+
homepage: https://github.com/go2mobi/fluent-plugin-random
|
71
|
+
licenses:
|
72
|
+
- WTFPL
|
73
|
+
metadata: {}
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 2.4.8
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: Fluentd custom plugin to generate random values in tag
|
94
|
+
test_files:
|
95
|
+
- test/plugin/test_out_randomtag.rb
|
96
|
+
- test/test_helper.rb
|