logstash-input-faker 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|