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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3490965ff0f2f6d557cc43dc4398ab1c9d7e0f21
4
- data.tar.gz: fb35cdc72302e25bd3c87717c9fbf10b1e4be84a
3
+ metadata.gz: 584f9d1ff3b09d9d3fd951f02d11a19197b34722
4
+ data.tar.gz: 272c1c360c7e38d34a979c416bea17e946c388c5
5
5
  SHA512:
6
- metadata.gz: cc77220d9d468180c92fde5f05ebba42c52edaddce362d7355199c910dcf0fa9166438acea5523697f4e90fa84a17267b8cc87d4683734bb72b81dca0b049b75
7
- data.tar.gz: 538374700dd7d762ee31006e26dac2b2d9fb953bcb6ed5843bc208a19d3e858a3d6de3775b00394af0100043834634a82332337042c7e954c8f2a769fcf56607
6
+ metadata.gz: 789b33f2a41e16ee32e6c7ec61fff8926a7a9ddfc900b013a6ab610dea91d9bc0a4af2e85e4490b455433f3c05dead41293798f6fc55707fd170f0a1c86d17b1
7
+ data.tar.gz: 0197b9b78f8caae7f0993bef6ba0ccb19c3438edf6e1f4e8168eda177ebdfca4eb6a8b760670be0b64c4a46229fa165a4af83258e925c676854ab4631489318b
@@ -1,8 +1,10 @@
1
1
  # encoding: utf-8
2
- # require "logstash-core"
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.1.1'
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"
@@ -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.1.1
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-29 00:00:00.000000000 Z
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