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 +4 -4
- data/lib/logstash/inputs/faker.rb +50 -3
- data/logstash-input-faker.gemspec +1 -1
- data/spec/inputs/faker_spec.rb +10 -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: 584f9d1ff3b09d9d3fd951f02d11a19197b34722
|
4
|
+
data.tar.gz: 272c1c360c7e38d34a979c416bea17e946c388c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 789b33f2a41e16ee32e6c7ec61fff8926a7a9ddfc900b013a6ab610dea91d9bc0a4af2e85e4490b455433f3c05dead41293798f6fc55707fd170f0a1c86d17b1
|
7
|
+
data.tar.gz: 0197b9b78f8caae7f0993bef6ba0ccb19c3438edf6e1f4e8168eda177ebdfca4eb6a8b760670be0b64c4a46229fa165a4af83258e925c676854ab4631489318b
|
@@ -1,8 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
|
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.
|
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"
|
data/spec/inputs/faker_spec.rb
CHANGED
@@ -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.
|
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-
|
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
|