logstash-input-faker 0.2.1 → 0.3.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 +57 -0
- data/logstash-input-faker.gemspec +1 -1
- data/spec/inputs/faker_spec.rb +43 -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: 161f82cb48552d214e675d4abc8c10630f0b449f
|
4
|
+
data.tar.gz: b52dda64bd66647284769b5ffc91a33b4bad76e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 330785d305642a000971147d623139bc9f6604fd0556e651b3b32b29ba22923edfbe0a97ec24671d19fc2951613359370cfe00063c5fb991185b4acc648b00e5
|
7
|
+
data.tar.gz: f3484dbd524e0ddbfcf8f556023d873d5172e0e6e79b5662c2044de573bfc8b673c81e5fd5637729c01d71f2e1a39373933d4d050b697491b79f17c5e3103c48
|
@@ -36,6 +36,15 @@ class LogStash::Inputs::Faker < LogStash::Inputs::Base
|
|
36
36
|
|
37
37
|
default :codec, "plain"
|
38
38
|
|
39
|
+
config :primary_key, :validate => :hash, :default => {}
|
40
|
+
|
41
|
+
config :foreign_keys, :validate => :array, :default => []
|
42
|
+
|
43
|
+
config :foreign_key_field, :validate => :string, :default => nil
|
44
|
+
|
45
|
+
config :add_primary_key_to_events, :validate => :boolean, :default => false
|
46
|
+
|
47
|
+
config :add_foreign_keys_to_events, :validate => :boolean, :default => false
|
39
48
|
|
40
49
|
# Similar to LogStash::Inputs::Base.add_field define a hash
|
41
50
|
# where the value is a Faker module and method call
|
@@ -78,8 +87,13 @@ class LogStash::Inputs::Faker < LogStash::Inputs::Base
|
|
78
87
|
|
79
88
|
def run(queue)
|
80
89
|
number = 0
|
90
|
+
set_primary_key if @add_primary_key_to_events
|
91
|
+
set_foreign_keys if @add_foreign_keys_to_events
|
81
92
|
while !stop? && (@count <= 0 || number < @count)
|
82
93
|
event = LogStash::Event.new({})
|
94
|
+
if @add_primary_key_to_events
|
95
|
+
LogStash::Util::Decorators.add_fields(@primary_key, event,"inputs/#{self.class.name}")
|
96
|
+
end
|
83
97
|
add_faker_fields(event)
|
84
98
|
if @splitable_field
|
85
99
|
add_splitable_fields(event)
|
@@ -105,6 +119,7 @@ class LogStash::Inputs::Faker < LogStash::Inputs::Base
|
|
105
119
|
def add_splitable_fields(event)
|
106
120
|
event.remove(@splitable_field)
|
107
121
|
splitable_events = []
|
122
|
+
used_ids = []
|
108
123
|
if @splitable_field_count <= 0
|
109
124
|
@splitable_field_count = rand(100)
|
110
125
|
end
|
@@ -116,6 +131,16 @@ class LogStash::Inputs::Faker < LogStash::Inputs::Base
|
|
116
131
|
@add_splitable_field.each do |field, value|
|
117
132
|
new_event.set(field, event.sprintf(value))
|
118
133
|
end
|
134
|
+
if @add_foreign_keys_to_events
|
135
|
+
key = (@foreign_keys - used_ids).sample
|
136
|
+
if key.nil?
|
137
|
+
used_ids = []
|
138
|
+
key = (@foreign_keys - used_ids).sample
|
139
|
+
else
|
140
|
+
new_event.set(@foreign_key_field, key)
|
141
|
+
end
|
142
|
+
used_ids.push(key)
|
143
|
+
end
|
119
144
|
new_event.remove("@timestamp")
|
120
145
|
new_event.remove("@version")
|
121
146
|
splitable_events << new_event.to_hash
|
@@ -123,6 +148,38 @@ class LogStash::Inputs::Faker < LogStash::Inputs::Base
|
|
123
148
|
event.set(@splitable_field, splitable_events)
|
124
149
|
end
|
125
150
|
|
151
|
+
protected
|
152
|
+
def set_primary_key
|
153
|
+
if @add_primary_key_to_events && @primary_key.empty?
|
154
|
+
@primary_key = { "[id]" => Faker::Number.number(10).to_s }
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
protected
|
159
|
+
def set_foreign_keys
|
160
|
+
if @add_foreign_keys_to_events && @foreign_keys.empty?
|
161
|
+
@foreign_key_field = "[foreign_id]" if @foreign_key_field.to_s.empty?
|
162
|
+
if @splitable_field_count <= 0
|
163
|
+
if @count <= 0
|
164
|
+
generate_foreign_keys(@count)
|
165
|
+
else
|
166
|
+
generate_foreign_keys(1000)
|
167
|
+
end
|
168
|
+
else
|
169
|
+
generate_foreign_keys(@splitable_field_count)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
protected
|
175
|
+
def generate_foreign_keys(key_count)
|
176
|
+
@foreign_keys = []
|
177
|
+
while @foreign_keys.size < key_count
|
178
|
+
@foreign_keys.push(Faker::Number.number(10).to_s)
|
179
|
+
@foreign_keys.uniq!
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
126
183
|
public
|
127
184
|
def close
|
128
185
|
if @codec.respond_to?(:flush)
|
@@ -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.3.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
@@ -22,13 +22,56 @@ describe LogStash::Inputs::Faker do
|
|
22
22
|
"[name][testing]" => "Internet.user_name('%{first_name} %{last_name}', ['_'])"
|
23
23
|
}
|
24
24
|
plg.splitable_field_count = 10
|
25
|
+
plg.add_foreign_keys_to_events = true
|
26
|
+
plg.foreign_key_field = "[id]"
|
27
|
+
plg.foreign_keys = [1,2,3,4,5,6,7,8,9,10]
|
28
|
+
plg.add_primary_key_to_events = true
|
29
|
+
plg.primary_key = { "[query_id]" => "12345678910" }
|
30
|
+
|
31
|
+
|
32
|
+
event = plugin_input(plg) do |result|
|
33
|
+
result.pop
|
34
|
+
end
|
35
|
+
|
36
|
+
insist { event }.is_a? LogStash::Event
|
37
|
+
insist { event.get("query_id") } == "12345678910"
|
38
|
+
insist { event.get("data").size } == 10
|
39
|
+
insist { event.get("data").all?{|e| e.has_key?("id") } }
|
40
|
+
insist { event.get("data").map{|e| e["test"] } }.all? { |v| v == "field" }
|
41
|
+
insist { event.get("first_name") } != "Name.first_name"
|
42
|
+
insist { event.get("last_name") } != "Name.last_name"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should generate a message, ids, foreign_ids, and remove the Faker calls" do
|
46
|
+
plg = LogStash::Inputs::Faker.new
|
47
|
+
plg.count = 1
|
48
|
+
plg.add_faker_field = {
|
49
|
+
"first_name" => "Name.first_name",
|
50
|
+
"last_name" => "Name.last_name"
|
51
|
+
}
|
52
|
+
plg.splitable_field = "data"
|
53
|
+
plg.add_splitable_field = {
|
54
|
+
"test" => "field"
|
55
|
+
}
|
56
|
+
plg.add_splitable_faker_field = {
|
57
|
+
"[name][testing]" => "Internet.user_name('%{first_name} %{last_name}', ['_'])"
|
58
|
+
}
|
59
|
+
plg.splitable_field_count = 10
|
60
|
+
plg.add_foreign_keys_to_events = true
|
61
|
+
# plg.foreign_key_field = "[id]"
|
62
|
+
# plg.foreign_keys = [1,2,3,4,5,6,7,8,9,10]
|
63
|
+
plg.add_primary_key_to_events = true
|
64
|
+
# plg.primary_key = { "[query_id]" => "12345678910" }
|
65
|
+
|
25
66
|
|
26
67
|
event = plugin_input(plg) do |result|
|
27
68
|
result.pop
|
28
69
|
end
|
29
70
|
|
30
71
|
insist { event }.is_a? LogStash::Event
|
72
|
+
insist { event.get("id").present? }
|
31
73
|
insist { event.get("data").size } == 10
|
74
|
+
insist { event.get("data").all?{|e| e.has_key?("foreign_id") } }
|
32
75
|
insist { event.get("data").map{|e| e["test"] } }.all? { |v| v == "field" }
|
33
76
|
insist { event.get("first_name") } != "Name.first_name"
|
34
77
|
insist { event.get("last_name") } != "Name.last_name"
|
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.3.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-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|