logstash-input-faker 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 36d8b31ac016bd92319e5ae44622638e939ee1d8
4
+ data.tar.gz: b05d8e7ed0df4ceee77c5231c879b74a987ac952
5
+ SHA512:
6
+ metadata.gz: ce2f6fd7c5073eaac2e8c3a313d4da55fd053f42db1abfad3e7fc259218fd2dae62f3eb7b01bdce167ca570af409eea5091eb6e49a1019534ca3ca66d7bb44ed
7
+ data.tar.gz: 6ec81fe0774de8102c1bfdbc0f4433815af3d255fd4476c84bd4fdbbf77814eea065a2626cd6285f035bc98690bd59643e72409ba96f70e47863b65b8c796bb8
data/CONTRIBUTORS ADDED
@@ -0,0 +1,10 @@
1
+ The following is a list of people who have contributed ideas, code, bug
2
+ reports, or in general have helped logstash along its way.
3
+
4
+ Contributors:
5
+ * jsericks - jsericks@gmail.com
6
+
7
+ Note: If you've sent us patches, bug reports, or otherwise contributed to
8
+ Logstash, and you aren't on the list above and want to be, please let us know
9
+ and we'll make sure you're here. Contributions from folks like you are what make
10
+ open source awesome.
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ logstash_path = "../../logstash"
6
+
7
+ if Dir.exist?(logstash_path) && ENV["LOGSTASH_SOURCE"] == 1
8
+ gem 'logstash-core', :path => "#{logstash_path}/logstash-core"
9
+ gem 'logstash-core-plugin-api', :path => "#{logstash_path}/logstash-core-plugin-api"
10
+ end
data/LICENSE ADDED
@@ -0,0 +1,11 @@
1
+ Licensed under the Apache License, Version 2.0 (the "License");
2
+ you may not use this file except in compliance with the License.
3
+ You may obtain a copy of the License at
4
+
5
+ http://www.apache.org/licenses/LICENSE-2.0
6
+
7
+ Unless required by applicable law or agreed to in writing, software
8
+ distributed under the License is distributed on an "AS IS" BASIS,
9
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ See the License for the specific language governing permissions and
11
+ limitations under the License.
data/README.md ADDED
File without changes
@@ -0,0 +1,89 @@
1
+ # encoding: utf-8
2
+ # require "logstash-core"
3
+ require "logstash/inputs/base"
4
+ require "logstash/namespace"
5
+ require "logstash/util/decorators"
6
+ require "faker"
7
+ require "socket" # for Socket.gethostname
8
+
9
+ I18n.reload!
10
+
11
+ # [NOTE]
12
+ # ===================================================================
13
+ # The values put into the add_faker_field params must be available
14
+ # modules and method calls from the Faker gem library seen at
15
+ # https://github.com/stympy/faker/
16
+ # ===================================================================
17
+ # Example:
18
+ # [source, ruby]
19
+ # input {
20
+ # faker {
21
+ # count => 1
22
+ # add_faker_field => {
23
+ # "[name][last_name]" => "Name.last_name"
24
+ # "[name][first_name]" => "Name.first_name"
25
+ # "[address][city]" => "Address.city"
26
+ # "[address][address1]" => "Address.street_address"
27
+ # }
28
+ # overwrite_fields => true
29
+ # }
30
+ # }
31
+
32
+ class LogStash::Inputs::Faker < LogStash::Inputs::Base
33
+ config_name "faker"
34
+
35
+ default :codec, "plain"
36
+
37
+ config :add_faker_field, :validate => :hash, :default => {}
38
+
39
+ # Will overwrite fields that are in the event prior to add_faker_field
40
+ # being invoked ( usually fields created using add_field ) if true
41
+ # when false this will insert the new faker values into an array with
42
+ # the previously defined event values
43
+ config :overwrite_fields, :validate => :boolean, :default => false
44
+
45
+ # The number of events to generate
46
+ # When not explicitly defined plugin will
47
+ # generate events until stopped
48
+ config :count, :validate => :number, :default => 0
49
+
50
+ public
51
+ def register
52
+ @host = Socket.gethostname
53
+ @count = Array(@count).first
54
+ end
55
+
56
+ def run(queue)
57
+ number = 0
58
+
59
+ while !stop? && (@count <= 0 || number < @count)
60
+ event = LogStash::Event.new({})
61
+ add_faker_fields(event)
62
+ decorate(event)
63
+ event.set("host", @host)
64
+ queue << event
65
+ number += 1
66
+ end #end loop
67
+ end # end run
68
+
69
+ protected
70
+ def add_faker_fields(event)
71
+ new_fields = {}
72
+ @add_faker_field.each do |field, faker_string|
73
+ event.remove(field) if @overwrite_fields
74
+ new_fields[field] = Faker.class_eval(faker_string)
75
+ end
76
+ LogStash::Util::Decorators.add_fields(new_fields,event,"inputs/#{self.class.name}")
77
+ end
78
+
79
+ public
80
+ def close
81
+ if @codec.respond_to?(:flush)
82
+ @codec.flush do |event|
83
+ decorate(event)
84
+ event.set("host", @host)
85
+ queue << event
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,29 @@
1
+ Gem::Specification.new do |s|
2
+
3
+ s.name = 'logstash-input-faker'
4
+ s.version = '0.1.0'
5
+ s.licenses = ['Apache License (2.0)']
6
+ s.summary = "Generate log events with fake data"
7
+ s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
8
+ s.authors = ["Jsericks"]
9
+ s.email = 'jsericks@gmail.com'
10
+ s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
11
+ s.require_paths = ["lib"]
12
+
13
+ # Files
14
+ s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"]
15
+
16
+ # Tests
17
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
+
19
+ # Special flag to let us know this is actually a logstash plugin
20
+ s.metadata = { "logstash_plugin" => "true", "logstash_group" => "input" }
21
+
22
+ # Gem dependencies
23
+ s.add_runtime_dependency "logstash-core"
24
+ s.add_runtime_dependency "logstash-core-plugin-api"
25
+ s.add_runtime_dependency "logstash-codec-plain"
26
+ s.add_runtime_dependency "faker", "~> 1.7", ">= 1.7.3"
27
+
28
+ s.add_development_dependency 'logstash-devutils'
29
+ end
@@ -0,0 +1,59 @@
1
+
2
+ require "logstash/devutils/rspec/spec_helper"
3
+ require "logstash/inputs/faker"
4
+
5
+ describe LogStash::Inputs::Faker do
6
+ it_behaves_like "an interruptible input plugin" do
7
+ let(:config) { { } }
8
+ end
9
+
10
+ it "should generate a message and remove the Faker calls" do
11
+ plg = LogStash::Inputs::Faker.new
12
+ plg.count = 1
13
+ plg.add_faker_field = {
14
+ "first_name" => "Name.first_name",
15
+ "last_name" => "Name.last_name"
16
+ }
17
+
18
+ event = plugin_input(plg) do |result|
19
+ result.pop
20
+ end
21
+
22
+ insist { event }.is_a? LogStash::Event
23
+ insist { event.get("first_name") } != "Name.first_name"
24
+ insist { event.get("last_name") } != "Name.last_name"
25
+ end
26
+
27
+ it "should generate a message with nested fields and the added_field" do
28
+ plg = LogStash::Inputs::Faker.new
29
+ plg.count = 1
30
+ plg.add_faker_field = {
31
+ "[name][first_name]" => "Name.first_name",
32
+ "[name][last_name]" => "Name.last_name"
33
+ }
34
+ plg.add_field = { "[name][middle_name]" => "Jimmy" }
35
+
36
+ event = plugin_input(plg) do |result|
37
+ result.pop
38
+ end
39
+
40
+ insist { event }.is_a? LogStash::Event
41
+ insist { event.get("[name][middle_name]") } == "Jimmy"
42
+ insist { event.get("[name][first_name]") } != "Name.first_name"
43
+ insist { event.get("[name][last_name]") } != "Name.last_name"
44
+ end
45
+
46
+ it "should generate 100 messages" do
47
+ plg = LogStash::Inputs::Faker.new
48
+ plg.count = 100
49
+ plg.add_faker_field = {
50
+ "first_name" => "Name.first_name",
51
+ "last_name" => "Name.last_name"
52
+ }
53
+ events = plugin_input(plg) do |result|
54
+ 100.times.map{result.pop}
55
+ end
56
+
57
+ insist { events.size } == 100
58
+ end
59
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logstash-input-faker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jsericks
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ name: logstash-core
20
+ prerelease: false
21
+ type: :runtime
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ name: logstash-core-plugin-api
34
+ prerelease: false
35
+ type: :runtime
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ name: logstash-codec-plain
48
+ prerelease: false
49
+ type: :runtime
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.7'
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 1.7.3
64
+ name: faker
65
+ prerelease: false
66
+ type: :runtime
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '1.7'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.7.3
75
+ - !ruby/object:Gem::Dependency
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ name: logstash-devutils
82
+ prerelease: false
83
+ type: :development
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ description: This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program
90
+ email: jsericks@gmail.com
91
+ executables: []
92
+ extensions: []
93
+ extra_rdoc_files: []
94
+ files:
95
+ - CONTRIBUTORS
96
+ - Gemfile
97
+ - LICENSE
98
+ - README.md
99
+ - lib/logstash/inputs/faker.rb
100
+ - logstash-input-faker.gemspec
101
+ - spec/inputs/faker_spec.rb
102
+ homepage: http://www.elastic.co/guide/en/logstash/current/index.html
103
+ licenses:
104
+ - Apache License (2.0)
105
+ metadata:
106
+ logstash_plugin: 'true'
107
+ logstash_group: input
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 2.6.6
125
+ signing_key:
126
+ specification_version: 4
127
+ summary: Generate log events with fake data
128
+ test_files:
129
+ - spec/inputs/faker_spec.rb