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 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