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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f0b0612f2fe0485a77d7f728963ab6935a145aff
4
- data.tar.gz: 3929513729b77e4633620b2c53d7a502a08e1401
3
+ metadata.gz: 161f82cb48552d214e675d4abc8c10630f0b449f
4
+ data.tar.gz: b52dda64bd66647284769b5ffc91a33b4bad76e1
5
5
  SHA512:
6
- metadata.gz: 2f7bf726acded7384120aafbf3f89ba6e99ee854d1620a3809ba74dc051dada14fc52809d8b86a234fdb8b8e56404484a6b2dfc7e608c1fd94bb71fc33b45aaf
7
- data.tar.gz: 5cdf793902a797cc8b7d8c9a5f1496075c5e650c0ab97ee8047ea1db5d4c2205b62700e9c4ce269635d26a9d4d143eaa8b498196ba54a8d9bd3b092b5d961a60
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.2.1'
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"
@@ -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.2.1
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-30 00:00:00.000000000 Z
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