fluent-plugin-spectrum 0.0.5 → 0.0.6
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/.travis.yml +2 -1
- data/Gemfile +0 -1
- data/README.md +4 -4
- data/Rakefile +2 -2
- data/fluent-plugin-spectrum.gemspec +12 -10
- data/lib/fluent/plugin/in_spectrum.rb +44 -24
- data/test/helper.rb +4 -3
- data/test/plugin/test_in_spectrum.rb +15 -6
- metadata +40 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c949d2e99ee26e2c94f69cc95f51691bfcb6c06
|
4
|
+
data.tar.gz: a0a20f56156aebccbbb21da927b1d7e145622d60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00b234557427b77bc8ed240f432f74ebb6114cb844af5740eca0215d308ee38e16bde66cdf5147081323794a596ee29cb39cd6515b962849b1f34afc9e9b45cd
|
7
|
+
data.tar.gz: 51d6ba395c211abea598b69cabb28178c91b03d2238c631b1909597fd5a6d8f102db1d8a0bca665450c77da34dc38a383a63503637496b17e52ced3327dc652c
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -3,9 +3,11 @@
|
|
3
3
|
fluent-plugin-spectrum is an input plug-in for [Fluentd](http://fluentd.org)
|
4
4
|
|
5
5
|
## Status
|
6
|
-
[](http://badge.fury.io/rb/fluent-plugin-spectrum)
|
7
6
|
[](https://travis-ci.org/Bigel0w/fluent-plugin-spectrum)
|
8
7
|
[](https://coveralls.io/r/Bigel0w/fluent-plugin-spectrum?branch=master)
|
8
|
+
[](https://gemnasium.com/Bigel0w/fluent-plugin-spectrum)
|
9
|
+
[](https://codeclimate.com/github/Bigel0w/fluent-plugin-spectrum)
|
10
|
+
[](http://badge.fury.io/rb/fluent-plugin-spectrum)
|
9
11
|
|
10
12
|
## Installation
|
11
13
|
|
@@ -94,8 +96,6 @@ Verify:
|
|
94
96
|
2015-03-05 15:04:00 -0800 alert.spectrum: {"event_type":"alert.spectrum","intermediary_source":"spectrumapi001.corp.yourdomain.net","ALARM_ID":"54f8e0e0-e706-12c2-0165-005056a07ac5","CREATION_DATE":"1425596640","SEVERITY":"3","ALARM_TITLE":"LOGMATCH TRAPSEND CRIT","HOSTNAME":"yourhost001.corp.yourdomain.net","IP_ADDRESS":"10.10.0.14","ORIGINATING_EVENT_ATTR":"A SEC logmatch trapsend CRIT Your Alert Message here","MODEL_STRING":"Host_Device","ACKNOWLEDGED":"false","ALARM_STATUS":"","OCCURRENCES":"1","TROUBLE_SHOOTER":"","USER_CLEARABLE":"true","TROUBLE_TICKET_ID":"","PERSISTENT":"true","GC_NAME":"Your_Global_Collection"}
|
95
97
|
|
96
98
|
## To Do
|
97
|
-
* Add retry login. On timeout/failure retry, how often, increasing delay? (how would that affect polling time, possible duplicates?)
|
98
99
|
* All flag to allow specifying spectrum attributes to get or get _ALL_
|
99
100
|
* Add flag to allow start date/time if users want to backfill data from a specific date. then start loop.
|
100
|
-
* Add flag to disable loop, if users only wanted to backfill from datetime to now or specific end time.
|
101
|
-
* Change loop to allow multiple runs to stack on eachother to avoid missing data?
|
101
|
+
* Add flag to disable loop, if users only wanted to backfill from datetime to now or specific end time.
|
data/Rakefile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#!/usr/bin/env rake
|
2
1
|
require 'bundler'
|
2
|
+
require "bundler/gem_tasks"
|
3
3
|
Bundler::GemHelper.install_tasks
|
4
4
|
|
5
5
|
require 'rake/testtask'
|
@@ -10,4 +10,4 @@ Rake::TestTask.new(:test) do |test|
|
|
10
10
|
test.verbose = true
|
11
11
|
end
|
12
12
|
|
13
|
-
task :default => [:
|
13
|
+
task :default => [:test]
|
@@ -3,12 +3,12 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.name = "fluent-plugin-spectrum"
|
6
|
-
gem.version = "0.0.
|
7
|
-
gem.date = '2015-
|
6
|
+
gem.version = "0.0.6"
|
7
|
+
gem.date = '2015-04-04'
|
8
8
|
gem.authors = ["Alex Pena"]
|
9
9
|
gem.email = ["pena.alex@gmail.com"]
|
10
|
-
gem.summary = %q{Fluentd
|
11
|
-
gem.description = %q{Fluentd plugin for
|
10
|
+
gem.summary = %q{Fluentd plugin for managing monitoring alerts from CA Spectrum}
|
11
|
+
gem.description = %q{Fluentd input/output plugin for managing monitoring alerts from CA Spectrum. Input supports polling CA Spectrum APIs. Output currently only supports updating events retrieved from Spectrum.}
|
12
12
|
gem.homepage = 'https://github.com/Bigel0w/fluent-plugin-spectrum'
|
13
13
|
gem.license = 'MIT'
|
14
14
|
|
@@ -16,10 +16,12 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
17
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
18
|
gem.require_paths = ["lib"]
|
19
|
-
|
20
|
-
gem.add_development_dependency "rake", '~>
|
21
|
-
|
22
|
-
gem.
|
23
|
-
|
24
|
-
gem.add_runtime_dependency "
|
19
|
+
# dev deps
|
20
|
+
gem.add_development_dependency "rake", '~> 10.0'
|
21
|
+
gem.add_development_dependency "bundler", '~> 1.6'
|
22
|
+
gem.add_development_dependency "test-unit", '~> 3.0'
|
23
|
+
# runtime deps
|
24
|
+
gem.add_runtime_dependency "fluentd", '~> 0.12'
|
25
|
+
gem.add_runtime_dependency "json", '~> 1.8'
|
26
|
+
gem.add_runtime_dependency "rest-client", '~> 1.8'
|
25
27
|
end
|
@@ -1,16 +1,19 @@
|
|
1
1
|
module Fluent
|
2
2
|
class SpectrumInput < Input
|
3
3
|
Fluent::Plugin.register_input('spectrum', self)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
config_param
|
8
|
-
config_param
|
9
|
-
|
10
|
-
config_param
|
11
|
-
config_param
|
12
|
-
config_param
|
13
|
-
config_param
|
4
|
+
|
5
|
+
# Configurations
|
6
|
+
INTERVAL_MIN = 10 # shoud stay above 10, avg response is 5-7 seconds
|
7
|
+
config_param :tag, :string, :default => "alert.spectrum"
|
8
|
+
config_param :endpoint, :string, :default => nil
|
9
|
+
config_param :username, :string, :default => nil
|
10
|
+
config_param :password, :string, :default => nil
|
11
|
+
config_param :state_file, :string, :default => nil
|
12
|
+
config_param :attributes, :string, :default => "ALL"
|
13
|
+
config_param :interval, :integer, :default => INTERVAL_MIN
|
14
|
+
config_param :select_limit, :integer, :default => 10000
|
15
|
+
config_param :include_raw, :bool, :default => "false"
|
16
|
+
config_param :debug_mode, :bool, :default => false
|
14
17
|
|
15
18
|
# Classes
|
16
19
|
class TimerWatcher < Coolio::TimerWatcher
|
@@ -90,10 +93,22 @@ module Fluent
|
|
90
93
|
def configure(conf)
|
91
94
|
super
|
92
95
|
@conf = conf
|
93
|
-
|
96
|
+
# Only check configs if debug is off
|
97
|
+
unless @debug_mode
|
98
|
+
# Verify configs
|
99
|
+
# Stop if required fields are not set
|
100
|
+
unless @endpoint && @username && @password
|
101
|
+
raise ConfigError, "Spectrum :: ConfigError 'endpoint' and 'username' and 'password' must be all specified."
|
102
|
+
end
|
103
|
+
# Enforce min interval
|
104
|
+
if @interval.to_i < INTERVAL_MIN
|
105
|
+
raise ConfigError, "Spectrum :: ConfigError 'interval' must be #{INTERVAL_MIN} or over."
|
106
|
+
end
|
107
|
+
end
|
108
|
+
# Warn about optional state file
|
94
109
|
unless @state_file
|
95
|
-
$log.warn "'state_file PATH' parameter is not set to a valid source."
|
96
|
-
$log.warn "this parameter is highly recommended to save the last known good timestamp to resume event consuming"
|
110
|
+
$log.warn "Spectrum :: 'state_file PATH' parameter is not set to a valid source."
|
111
|
+
$log.warn "Spectrum :: this parameter is highly recommended to save the last known good timestamp to resume event consuming"
|
97
112
|
end
|
98
113
|
# map of Spectrum attribute codes to names
|
99
114
|
@spectrum_access_code={
|
@@ -144,13 +159,11 @@ module Fluent
|
|
144
159
|
@spectrum_access_code.each do |key, array|
|
145
160
|
@attr_of_interest += " <rs:requested-attribute id=\"#{key}\"/>"
|
146
161
|
end
|
147
|
-
|
148
|
-
# Setup URL Resource
|
162
|
+
# URL Resource
|
149
163
|
def resource
|
150
164
|
@url = 'http://' + @endpoint.to_s + '/spectrum/restful/alarms'
|
151
|
-
RestClient::Resource.new(@url, :user => @username, :password => @password, :open_timeout =>
|
165
|
+
RestClient::Resource.new(@url, :user => @username, :password => @password, :open_timeout => 5, :timeout => (@interval * 3))
|
152
166
|
end
|
153
|
-
|
154
167
|
### need to add this but first figure out how to pass a one time override for timeout since get takes a longtime to return
|
155
168
|
#test = resource.get
|
156
169
|
#if test.code.to_s == 200
|
@@ -187,15 +200,20 @@ module Fluent
|
|
187
200
|
pollingStart = Engine.now.to_i
|
188
201
|
if @state_store.last_records.has_key?("spectrum")
|
189
202
|
alertStartTime = @state_store.last_records['spectrum']
|
190
|
-
|
203
|
+
if @debug_mode
|
204
|
+
$log.info "Spectrum :: Got time record from state_store - #{alertStartTime}"
|
205
|
+
end
|
191
206
|
else
|
192
207
|
alertStartTime = (pollingStart.to_i - @interval.to_i)
|
193
|
-
|
208
|
+
if @debug_mode
|
209
|
+
$log.info "Spectrum :: Got time record from initial config - #{alertStartTime}"
|
210
|
+
end
|
194
211
|
end
|
195
212
|
pollingEnd = ''
|
196
213
|
pollingDuration = ''
|
197
|
-
|
198
|
-
|
214
|
+
if @debug_mode
|
215
|
+
$log.info "Spectrum :: Polling alerts for time period < #{alertStartTime.to_i}"
|
216
|
+
end
|
199
217
|
# Format XML for spectrum post
|
200
218
|
@xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
201
219
|
<rs:alarm-request throttlesize=\"#{select_limit}\"
|
@@ -219,7 +237,9 @@ module Fluent
|
|
219
237
|
# Post to Spectrum and parse results
|
220
238
|
begin
|
221
239
|
res=resource.post @xml,:content_type => 'application/xml',:accept => 'application/json'
|
222
|
-
|
240
|
+
if @debug_mode
|
241
|
+
$log.info "Spectrum :: Response code #{res.code.to_s}"
|
242
|
+
end
|
223
243
|
body = JSON.parse(res.body)
|
224
244
|
pollingEnd = Engine.now.to_i
|
225
245
|
@state_store.last_records['spectrum'] = pollingEnd
|
@@ -236,7 +256,7 @@ module Fluent
|
|
236
256
|
raw_array = Array.new # temp hash to hold attributes of alarm for raw
|
237
257
|
record_hash['event_type'] = @tag.to_s
|
238
258
|
record_hash['intermediary_source'] = @endpoint.to_s
|
239
|
-
record_hash['
|
259
|
+
record_hash['receive_time_input'] = pollingEnd.to_s
|
240
260
|
# iterate though alarm attributes
|
241
261
|
alarm['ns1.attribute'].each do |attribute|
|
242
262
|
key,value = parseAttributes(attribute)
|
@@ -259,7 +279,7 @@ module Fluent
|
|
259
279
|
raw_array = Array.new # temp hash to hold attributes of alarm for raw
|
260
280
|
record_hash['event_type'] = @tag.to_s
|
261
281
|
record_hash['intermediary_source'] = @endpoint.to_s
|
262
|
-
record_hash['
|
282
|
+
record_hash['receive_time_input'] = pollingEnd.to_s
|
263
283
|
# iterate though alarm attributes and add to temp hash
|
264
284
|
body['ns1.alarm-response-list']['ns1.alarm-responses']['ns1.alarm']['ns1.attribute'].each do |attribute|
|
265
285
|
key,value = parseAttributes(attribute)
|
data/test/helper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
require 'rubygems'
|
2
1
|
require 'bundler'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'fluent/test'
|
4
|
+
|
3
5
|
begin
|
4
6
|
Bundler.setup(:default, :development)
|
5
7
|
rescue Bundler::BundlerError => e
|
@@ -7,11 +9,10 @@ rescue Bundler::BundlerError => e
|
|
7
9
|
$stderr.puts "Run `bundle install` to install missing gems"
|
8
10
|
exit e.status_code
|
9
11
|
end
|
10
|
-
require 'test/unit'
|
11
12
|
|
12
13
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
13
14
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
14
|
-
|
15
|
+
|
15
16
|
unless ENV.has_key?('VERBOSE')
|
16
17
|
nulllogger = Object.new
|
17
18
|
nulllogger.instance_eval {|obj|
|
@@ -1,24 +1,33 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class SpectrumInputTest < Test::Unit::TestCase
|
4
|
+
|
4
5
|
def setup
|
5
6
|
Fluent::Test.setup
|
6
7
|
end
|
7
8
|
|
8
9
|
CONFIG = %[
|
10
|
+
username test_username
|
11
|
+
password test_password
|
12
|
+
endpoint test.endpoint.com
|
9
13
|
]
|
10
14
|
|
11
|
-
def create_driver(conf=CONFIG)
|
15
|
+
def create_driver(conf = CONFIG)
|
12
16
|
Fluent::Test::InputTestDriver.new(Fluent::SpectrumInput).configure(conf)
|
13
17
|
end
|
14
18
|
|
15
19
|
def test_configure
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
assert_nothing_raised { create_driver }
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_params
|
24
|
+
d = create_driver
|
25
|
+
assert_equal "test.endpoint.com", d.instance.endpoint
|
26
|
+
assert_equal "test_username", d.instance.username
|
27
|
+
assert_equal "test_password", d.instance.password
|
28
|
+
assert_equal "10".to_i, d.instance.interval
|
21
29
|
assert_equal "false", d.instance.include_raw
|
22
30
|
assert_equal 'alert.spectrum', d.instance.tag
|
23
31
|
end
|
32
|
+
|
24
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-spectrum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Pena
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -16,81 +16,87 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
20
|
-
|
19
|
+
version: '10.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
21
25
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0
|
26
|
+
version: '10.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
23
34
|
type: :development
|
24
35
|
prerelease: false
|
25
36
|
version_requirements: !ruby/object:Gem::Requirement
|
26
37
|
requirements:
|
27
38
|
- - "~>"
|
28
39
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
30
|
-
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: test-unit
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
31
53
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0
|
54
|
+
version: '3.0'
|
33
55
|
- !ruby/object:Gem::Dependency
|
34
56
|
name: fluentd
|
35
57
|
requirement: !ruby/object:Gem::Requirement
|
36
58
|
requirements:
|
37
59
|
- - "~>"
|
38
60
|
- !ruby/object:Gem::Version
|
39
|
-
version: '0.
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 0.10.52
|
61
|
+
version: '0.12'
|
43
62
|
type: :runtime
|
44
63
|
prerelease: false
|
45
64
|
version_requirements: !ruby/object:Gem::Requirement
|
46
65
|
requirements:
|
47
66
|
- - "~>"
|
48
67
|
- !ruby/object:Gem::Version
|
49
|
-
version: '0.
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 0.10.52
|
68
|
+
version: '0.12'
|
53
69
|
- !ruby/object:Gem::Dependency
|
54
70
|
name: json
|
55
71
|
requirement: !ruby/object:Gem::Requirement
|
56
72
|
requirements:
|
57
73
|
- - "~>"
|
58
74
|
- !ruby/object:Gem::Version
|
59
|
-
version: '1.
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 1.8.2
|
75
|
+
version: '1.8'
|
63
76
|
type: :runtime
|
64
77
|
prerelease: false
|
65
78
|
version_requirements: !ruby/object:Gem::Requirement
|
66
79
|
requirements:
|
67
80
|
- - "~>"
|
68
81
|
- !ruby/object:Gem::Version
|
69
|
-
version: '1.
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 1.8.2
|
82
|
+
version: '1.8'
|
73
83
|
- !ruby/object:Gem::Dependency
|
74
84
|
name: rest-client
|
75
85
|
requirement: !ruby/object:Gem::Requirement
|
76
86
|
requirements:
|
77
87
|
- - "~>"
|
78
88
|
- !ruby/object:Gem::Version
|
79
|
-
version: '1.
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 1.7.3
|
89
|
+
version: '1.8'
|
83
90
|
type: :runtime
|
84
91
|
prerelease: false
|
85
92
|
version_requirements: !ruby/object:Gem::Requirement
|
86
93
|
requirements:
|
87
94
|
- - "~>"
|
88
95
|
- !ruby/object:Gem::Version
|
89
|
-
version: '1.
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
description: Fluentd plugin for pulling monitoring alerts from CA Spectrum
|
96
|
+
version: '1.8'
|
97
|
+
description: Fluentd input/output plugin for managing monitoring alerts from CA Spectrum.
|
98
|
+
Input supports polling CA Spectrum APIs. Output currently only supports updating
|
99
|
+
events retrieved from Spectrum.
|
94
100
|
email:
|
95
101
|
- pena.alex@gmail.com
|
96
102
|
executables: []
|
@@ -132,7 +138,7 @@ rubyforge_project:
|
|
132
138
|
rubygems_version: 2.4.5
|
133
139
|
signing_key:
|
134
140
|
specification_version: 4
|
135
|
-
summary: Fluentd
|
141
|
+
summary: Fluentd plugin for managing monitoring alerts from CA Spectrum
|
136
142
|
test_files:
|
137
143
|
- test/helper.rb
|
138
144
|
- test/plugin/test_in_spectrum.rb
|