logstash-filter-math 0.2 → 1.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 +4 -4
- data/Gemfile +0 -1
- data/lib/logstash/filters/math.rb +7 -7
- data/logstash-filter-math.gemspec +8 -10
- data/spec/filters/math_spec.rb +26 -26
- data/spec/spec_helper.rb +2 -0
- metadata +13 -19
- data/.gitignore +0 -4
- data/Rakefile +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4dbbbc58d14856fcd8e53f57c6897c2a2eb7221
|
4
|
+
data.tar.gz: c939090de8e97cfd20622fb6c84064f59c2e67ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f9340a61978c42ef4c56436a4b29f15d38f1fffa433bb27bae632888b7b0e9d16232ae785752521cfa157fe4f05b0f6f5c7e47b525fda6cdbdd8ddec0090334
|
7
|
+
data.tar.gz: 4df67712a02104a781721991bf36221004056efad23a1e50c745fd8048691a8d126b9e8727001743c8b7ed93304869dc081f60b4cc857f431521e2a9f3663a37
|
data/Gemfile
CHANGED
@@ -46,19 +46,19 @@ class LogStash::Filters::Math < LogStash::Filters::Base
|
|
46
46
|
# Check that all the fields exist and are numeric
|
47
47
|
next unless event.include?(calculation[1])
|
48
48
|
next unless event.include?(calculation[2])
|
49
|
-
next unless event
|
50
|
-
next unless event
|
49
|
+
next unless event.get(calculation[1]) == 0 or event.get(calculation[1]).is_a? Float or event.get(calculation[1]).is_a? Integer
|
50
|
+
next unless event.get(calculation[2]) == 0 or event.get(calculation[2]).is_a? Float or event.get(calculation[2]).is_a? Integer
|
51
51
|
case calculation[0]
|
52
52
|
when "add"
|
53
|
-
event
|
53
|
+
event.set( calculation[3], event.get(calculation[1]) + event.get(calculation[2]) )
|
54
54
|
when "sub"
|
55
|
-
event
|
55
|
+
event.set(calculation[3], event.get(calculation[1]) - event.get(calculation[2]) )
|
56
56
|
when "div"
|
57
57
|
# Avoid division by zero
|
58
|
-
next if event
|
59
|
-
event
|
58
|
+
next if event.get( calculation[2] ) == 0
|
59
|
+
event.set( calculation[3], event.get( calculation[1]).to_f / event.get(calculation[2]) )
|
60
60
|
when "mpx"
|
61
|
-
event
|
61
|
+
event.set( calculation[3], event.get( calculation[1]) * event.get( calculation[2] ) )
|
62
62
|
end # case calculation[0]
|
63
63
|
end # for each calculate
|
64
64
|
filter_matched(event)
|
@@ -1,26 +1,24 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-filter-math'
|
3
|
-
s.version = '0
|
3
|
+
s.version = '1.0'
|
4
4
|
s.licenses = ['Apache License (2.0)']
|
5
5
|
s.summary = "Do simple math functions on numeric fields."
|
6
6
|
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
7
|
-
s.authors = ["
|
8
|
-
s.email = '
|
7
|
+
s.authors = ["Robin Clarke"]
|
8
|
+
s.email = 'robin@robinclarke.net'
|
9
9
|
s.homepage = "http://www.elastics.co/guide/en/logstash/current/index.html"
|
10
10
|
s.require_paths = ["lib"]
|
11
11
|
|
12
|
-
# Files
|
13
|
-
s.files = `git ls-files`.split($\)
|
14
12
|
|
15
|
-
#
|
13
|
+
# Files
|
14
|
+
s.files = Dir['lib/**/*','spec/**/*','vendor/**/*','*.gemspec','*.md','CONTRIBUTORS','Gemfile','LICENSE','NOTICE.TXT']
|
15
|
+
# Tests
|
16
16
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
17
17
|
|
18
18
|
# Special flag to let us know this is actually a logstash plugin
|
19
19
|
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "filter" }
|
20
20
|
|
21
21
|
# Gem dependencies
|
22
|
-
s.add_runtime_dependency "logstash-core",
|
23
|
-
|
24
|
-
s.add_development_dependency 'logstash-devutils', '~> 0'
|
22
|
+
s.add_runtime_dependency "logstash-core-plugin-api", "~> 2.0"
|
23
|
+
s.add_development_dependency 'logstash-devutils'
|
25
24
|
end
|
26
|
-
|
data/spec/filters/math_spec.rb
CHANGED
@@ -12,37 +12,37 @@ describe LogStash::Filters::Math do
|
|
12
12
|
|
13
13
|
describe "should add two integers" do
|
14
14
|
sample( "var1" => -2, "var2" => 7 ) do
|
15
|
-
expect( subject
|
15
|
+
expect( subject.get("result") ).to eq( 5 )
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
describe "should add two floats" do
|
20
20
|
sample( "var1" => -2.4, "var2" => 7.8 ) do
|
21
|
-
expect( subject
|
21
|
+
expect( subject.get("result") ).to eq( 5.4 )
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
describe "two huge numbers should add to infinity" do
|
26
26
|
sample( "var1" => 1.79769313486232e+308, "var2" => 1e+308 ) do
|
27
|
-
expect( subject
|
27
|
+
expect( subject.get("result") ).to eq( Float::INFINITY )
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
describe "one value being 0 should work" do
|
32
32
|
sample( "var1" => 0, "var2" => 7.8 ) do
|
33
|
-
expect( subject
|
33
|
+
expect( subject.get("result") ).to eq( 7.8 )
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
describe "first value missing should result in nil" do
|
38
38
|
sample( "var2" => 3 ) do
|
39
|
-
expect( subject
|
39
|
+
expect( subject.get("result") ).to be_nil
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
describe "Second value missing should result in nil" do
|
44
44
|
sample( "var1" => 3 ) do
|
45
|
-
expect( subject
|
45
|
+
expect( subject.get("result") ).to be_nil
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -55,37 +55,37 @@ describe LogStash::Filters::Math do
|
|
55
55
|
|
56
56
|
describe "should subtract two integers" do
|
57
57
|
sample( "var1" => -2, "var2" => 7 ) do
|
58
|
-
expect( subject
|
58
|
+
expect( subject.get("result") ).to eq( -9 )
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
62
|
describe "should subtract two floats" do
|
63
63
|
sample( "var1" => -2.4, "var2" => 7.8 ) do
|
64
|
-
expect( subject
|
64
|
+
expect( subject.get("result") ).to eq( -10.2 )
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
68
|
describe "two huge negative numbers should subtract to negative infinity" do
|
69
69
|
sample( "var1" => -1.79769313486232e+308, "var2" => -1e+308 ) do
|
70
|
-
expect( subject
|
70
|
+
expect( subject.get("result") ).to eq( -Float::INFINITY )
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
74
|
describe "one value being 0 should work" do
|
75
75
|
sample( "var1" => 0, "var2" => 7.8 ) do
|
76
|
-
expect( subject
|
76
|
+
expect( subject.get("result") ).to eq( -7.8 )
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
80
|
describe "first value missing should result in nil" do
|
81
81
|
sample( "var2" => 3 ) do
|
82
|
-
expect( subject
|
82
|
+
expect( subject.get("result") ).to be_nil
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
86
|
describe "Second value missing should result in nil" do
|
87
87
|
sample( "var1" => 3 ) do
|
88
|
-
expect( subject
|
88
|
+
expect( subject.get("result") ).to be_nil
|
89
89
|
end
|
90
90
|
end
|
91
91
|
end
|
@@ -98,37 +98,37 @@ describe LogStash::Filters::Math do
|
|
98
98
|
|
99
99
|
describe "should multiply two integers" do
|
100
100
|
sample( "var1" => -2, "var2" => 7 ) do
|
101
|
-
expect( subject
|
101
|
+
expect( subject.get("result") ).to eq( -14 )
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
105
|
describe "should multiply two floats" do
|
106
106
|
sample( "var1" => -2.4, "var2" => 7.8 ) do
|
107
|
-
expect( subject
|
107
|
+
expect( subject.get("result") ).to eq( -18.72 )
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
111
111
|
describe "two huge numbers should multiply to infinity" do
|
112
112
|
sample( "var1" => 1.79769313486232e+300, "var2" => 1e+300 ) do
|
113
|
-
expect( subject
|
113
|
+
expect( subject.get("result") ).to eq( Float::INFINITY )
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
117
|
describe "one value being 0 should result in 0" do
|
118
118
|
sample( "var1" => 0, "var2" => 7.8 ) do
|
119
|
-
expect( subject
|
119
|
+
expect( subject.get("result") ).to eq( 0 )
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
123
|
describe "first value missing should result in nil" do
|
124
124
|
sample( "var2" => 3 ) do
|
125
|
-
expect( subject
|
125
|
+
expect( subject.get("result") ).to be_nil
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
129
|
describe "Second value missing should result in nil" do
|
130
130
|
sample( "var1" => 3 ) do
|
131
|
-
expect( subject
|
131
|
+
expect( subject.get("result") ).to be_nil
|
132
132
|
end
|
133
133
|
end
|
134
134
|
end
|
@@ -141,43 +141,43 @@ describe LogStash::Filters::Math do
|
|
141
141
|
|
142
142
|
describe "should divide two integers" do
|
143
143
|
sample( "var1" => -2, "var2" => 7 ) do
|
144
|
-
expect( subject
|
144
|
+
expect( subject.get("result") ).to eq( -0.2857142857142857 )
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
148
|
describe "should divide two floats" do
|
149
149
|
sample( "var1" => -2.4, "var2" => 7.8 ) do
|
150
|
-
expect( subject
|
150
|
+
expect( subject.get("result") ).to eq( -0.3076923076923077 )
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
154
154
|
describe "1 divided by a huge number should give zero" do
|
155
155
|
sample( "var1" => 1, "var2" => 1.79769313486232e+308 ) do
|
156
|
-
expect( subject
|
156
|
+
expect( subject.get("result") ).to eq( 0 )
|
157
157
|
end
|
158
158
|
end
|
159
159
|
|
160
160
|
describe "First variable being zero should result in 0" do
|
161
161
|
sample( "var1" => 0, "var2" => 7.8 ) do
|
162
|
-
expect( subject
|
162
|
+
expect( subject.get("result") ).to eq( 0 )
|
163
163
|
end
|
164
164
|
end
|
165
165
|
|
166
166
|
describe "Second variable being zero should result in nil (would be infinity, but this can't be represented in JSON)" do
|
167
167
|
sample( "var1" => 2, "var2" => 0 ) do
|
168
|
-
expect( subject
|
168
|
+
expect( subject.get("result") ).to be_nil
|
169
169
|
end
|
170
170
|
end
|
171
171
|
|
172
172
|
describe "first value missing should result in nil" do
|
173
173
|
sample( "var2" => 3 ) do
|
174
|
-
expect( subject
|
174
|
+
expect( subject.get("result") ).to be_nil
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
178
178
|
describe "Second value missing should result in nil" do
|
179
179
|
sample( "var1" => 3 ) do
|
180
|
-
expect( subject
|
180
|
+
expect( subject.get("result") ).to be_nil
|
181
181
|
end
|
182
182
|
end
|
183
183
|
end
|
@@ -195,7 +195,7 @@ describe LogStash::Filters::Math do
|
|
195
195
|
describe "results of one calculation can be used in the next calculation"
|
196
196
|
sample( "var1" => 3.4, "var2" => 6.6, "var3" => 4.4, "var4" => 2.4 ) do
|
197
197
|
# I would really expect 20.0 here... what kind of floating point error is this?!
|
198
|
-
expect( subject
|
198
|
+
expect( subject.get("result") ).to eq( 20.000000000000004 )
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,39 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-math
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0
|
4
|
+
version: '1.0'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Robin Clarke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
|
-
- -
|
17
|
-
- !ruby/object:Gem::Version
|
18
|
-
version: 1.4.0
|
19
|
-
- - <
|
16
|
+
- - ~>
|
20
17
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
22
|
-
name: logstash-core
|
18
|
+
version: '2.0'
|
19
|
+
name: logstash-core-plugin-api
|
23
20
|
prerelease: false
|
24
21
|
type: :runtime
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 1.4.0
|
30
|
-
- - <
|
24
|
+
- - ~>
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
26
|
+
version: '2.0'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
requirement: !ruby/object:Gem::Requirement
|
35
29
|
requirements:
|
36
|
-
- -
|
30
|
+
- - '>='
|
37
31
|
- !ruby/object:Gem::Version
|
38
32
|
version: '0'
|
39
33
|
name: logstash-devutils
|
@@ -41,23 +35,22 @@ dependencies:
|
|
41
35
|
type: :development
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
|
-
- -
|
38
|
+
- - '>='
|
45
39
|
- !ruby/object:Gem::Version
|
46
40
|
version: '0'
|
47
41
|
description: This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program
|
48
|
-
email:
|
42
|
+
email: robin@robinclarke.net
|
49
43
|
executables: []
|
50
44
|
extensions: []
|
51
45
|
extra_rdoc_files: []
|
52
46
|
files:
|
53
|
-
- .gitignore
|
54
47
|
- Gemfile
|
55
48
|
- LICENSE
|
56
49
|
- README.md
|
57
|
-
- Rakefile
|
58
50
|
- lib/logstash/filters/math.rb
|
59
51
|
- logstash-filter-math.gemspec
|
60
52
|
- spec/filters/math_spec.rb
|
53
|
+
- spec/spec_helper.rb
|
61
54
|
homepage: http://www.elastics.co/guide/en/logstash/current/index.html
|
62
55
|
licenses:
|
63
56
|
- Apache License (2.0)
|
@@ -86,3 +79,4 @@ specification_version: 4
|
|
86
79
|
summary: Do simple math functions on numeric fields.
|
87
80
|
test_files:
|
88
81
|
- spec/filters/math_spec.rb
|
82
|
+
- spec/spec_helper.rb
|
data/.gitignore
DELETED
data/Rakefile
DELETED