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 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
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-filter_custom_cart.gemspec
4
+ gemspec
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
@@ -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