logstash-input-faker 0.1.1 → 0.2.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: 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