logstash-input-faker 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/lib/logstash/inputs/faker.rb +50 -3
- data/logstash-input-faker.gemspec +1 -1
- data/spec/inputs/faker_spec.rb +10 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 584f9d1ff3b09d9d3fd951f02d11a19197b34722
|
4
|
+
data.tar.gz: 272c1c360c7e38d34a979c416bea17e946c388c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 789b33f2a41e16ee32e6c7ec61fff8926a7a9ddfc900b013a6ab610dea91d9bc0a4af2e85e4490b455433f3c05dead41293798f6fc55707fd170f0a1c86d17b1
|
7
|
+
data.tar.gz: 0197b9b78f8caae7f0993bef6ba0ccb19c3438edf6e1f4e8168eda177ebdfca4eb6a8b760670be0b64c4a46229fa165a4af83258e925c676854ab4631489318b
|
@@ -1,8 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
|
2
|
+
require "logstash-core"
|
3
3
|
require "logstash/inputs/base"
|
4
4
|
require "logstash/namespace"
|
5
|
+
require "logstash/util"
|
5
6
|
require "logstash/util/decorators"
|
7
|
+
require "json"
|
6
8
|
require "faker"
|
7
9
|
require "socket" # for Socket.gethostname
|
8
10
|
|
@@ -34,8 +36,29 @@ class LogStash::Inputs::Faker < LogStash::Inputs::Base
|
|
34
36
|
|
35
37
|
default :codec, "plain"
|
36
38
|
|
39
|
+
|
40
|
+
# Similar to LogStash::Inputs::Base.add_field define a hash
|
41
|
+
# where the value is a Faker module and method call
|
42
|
+
# ex: Name.first_name
|
37
43
|
config :add_faker_field, :validate => :hash, :default => {}
|
38
44
|
|
45
|
+
# Add a splitable field. Currently only supports defining a
|
46
|
+
# single field that will be used for generating sub-events
|
47
|
+
config :splitable_field, :validate => :string, :default => nil
|
48
|
+
|
49
|
+
# Add static values to the splitable field's data structure
|
50
|
+
# See add_field for structure definition
|
51
|
+
config :add_splitable_field, :validate => :hash, :default => {}
|
52
|
+
|
53
|
+
# Add Faker fields to the splitable object mappings
|
54
|
+
# These expect the same format of add_faker_field
|
55
|
+
config :add_splitable_faker_field, :validate => :hash, :default => {}
|
56
|
+
|
57
|
+
# define the number of entries into the array of the splitable field
|
58
|
+
# When set to 0 a random number will be used within 1-100 as the
|
59
|
+
# splitable field count
|
60
|
+
config :splitable_field_count, :validate => :number, default: 0
|
61
|
+
|
39
62
|
# Will overwrite fields that are in the event prior to add_faker_field
|
40
63
|
# being invoked ( usually fields created using add_field ) if true
|
41
64
|
# when false this will insert the new faker values into an array with
|
@@ -55,10 +78,12 @@ class LogStash::Inputs::Faker < LogStash::Inputs::Base
|
|
55
78
|
|
56
79
|
def run(queue)
|
57
80
|
number = 0
|
58
|
-
|
59
81
|
while !stop? && (@count <= 0 || number < @count)
|
60
82
|
event = LogStash::Event.new({})
|
61
83
|
add_faker_fields(event)
|
84
|
+
if @splitable_field
|
85
|
+
add_splitable_fields(event)
|
86
|
+
end
|
62
87
|
decorate(event)
|
63
88
|
event.set("host", @host)
|
64
89
|
queue << event
|
@@ -73,7 +98,29 @@ class LogStash::Inputs::Faker < LogStash::Inputs::Base
|
|
73
98
|
event.remove(field) if @overwrite_fields
|
74
99
|
new_fields[field] = Faker.class_eval(faker_string)
|
75
100
|
end
|
76
|
-
LogStash::Util::Decorators.add_fields(new_fields,event,"inputs/#{self.class.name}")
|
101
|
+
LogStash::Util::Decorators.add_fields(new_fields, event,"inputs/#{self.class.name}")
|
102
|
+
end
|
103
|
+
|
104
|
+
protected
|
105
|
+
def add_splitable_fields(event)
|
106
|
+
event.remove(@splitable_field)
|
107
|
+
splitable_events = []
|
108
|
+
if @splitable_field_count <= 0
|
109
|
+
@splitable_field_count = rand(100)
|
110
|
+
end
|
111
|
+
@splitable_field_count.times do
|
112
|
+
new_event = LogStash::Event.new()
|
113
|
+
@add_splitable_faker_field.each do |field, faker_string|
|
114
|
+
new_event.set(field, Faker.class_eval(faker_string))
|
115
|
+
end
|
116
|
+
@add_splitable_field.each do |field, value|
|
117
|
+
new_event.set(field, value)
|
118
|
+
end
|
119
|
+
new_event.remove("@timestamp")
|
120
|
+
new_event.remove("@version")
|
121
|
+
splitable_events << new_event.to_hash
|
122
|
+
end
|
123
|
+
event.set(@splitable_field, splitable_events)
|
77
124
|
end
|
78
125
|
|
79
126
|
public
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-input-faker'
|
4
|
-
s.version = '0.
|
4
|
+
s.version = '0.2.0'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "Generate log events with fake data"
|
7
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"
|
data/spec/inputs/faker_spec.rb
CHANGED
@@ -14,12 +14,22 @@ describe LogStash::Inputs::Faker do
|
|
14
14
|
"first_name" => "Name.first_name",
|
15
15
|
"last_name" => "Name.last_name"
|
16
16
|
}
|
17
|
+
plg.splitable_field = "data"
|
18
|
+
plg.add_splitable_field = {
|
19
|
+
"test" => "field"
|
20
|
+
}
|
21
|
+
plg.add_splitable_faker_field = {
|
22
|
+
"[name][testing]" => "Name.first_name"
|
23
|
+
}
|
24
|
+
plg.splitable_field_count = 10
|
17
25
|
|
18
26
|
event = plugin_input(plg) do |result|
|
19
27
|
result.pop
|
20
28
|
end
|
21
29
|
|
22
30
|
insist { event }.is_a? LogStash::Event
|
31
|
+
insist { event.get("data").size } == 10
|
32
|
+
insist { event.get("data").map{|e| e["test"] } }.all? { |v| v == "field" }
|
23
33
|
insist { event.get("first_name") } != "Name.first_name"
|
24
34
|
insist { event.get("last_name") } != "Name.last_name"
|
25
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-faker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jsericks
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|