fluent-plugin-xymon 0.0.0 → 0.0.1

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: 05a444f11d59b73e6c13cbdabd095ef3ac6ef4ce
4
- data.tar.gz: 09d58df76a427ca0e44110841c491733a63f44d1
3
+ metadata.gz: fd92cc021f3265eab81dc7686fb83e38fd264c90
4
+ data.tar.gz: ef2af36358feff0305086e5203ae306ff58349e0
5
5
  SHA512:
6
- metadata.gz: f47b7bea07822227bae6d9547c29ef700a8016489bc4eb6efb0231933e948fd6f8b0958868bd9b0059fe91bb34740876185640995d2ad64e4fd3c8c56ce2f174
7
- data.tar.gz: 542d9765ef316010b966cf390d013963bd8f876ba449be65939bbdfe41d9785e71edfdcc6830a1c7f7b26fa7cea53e27033ff6053a1ea00e4636abb19dead023
6
+ metadata.gz: 0083c8f3517f050d65b254314f110838c94e73b4b6ef4e9fcc06454796a8b5276bafc9c21fb93b8171d69be89b4f9b104fd6ab6743555d154f69cb21b08626fc
7
+ data.tar.gz: 777017a4b5d5923aa2244539a98b99e6acb8fcddd0f5358e5b0f74a5f30bdbfc9f56b145dfc266a351e9b7413d0d4a7f52d1920a14760773eae9478012b27188
data/README.md CHANGED
@@ -6,7 +6,9 @@ Fluentd output plugin to post message to xymon
6
6
 
7
7
  Install gem
8
8
 
9
- fluent-gem install fluent-plugin-xymon
9
+ ````
10
+ fluent-gem install fluent-plugin-xymon
11
+ ````
10
12
 
11
13
  ## config
12
14
 
@@ -14,10 +16,57 @@ Install gem
14
16
  config_param :xymon_server, :string
15
17
  config_param :xymon_port, :string, :default => '1984'
16
18
  config_param :color, :string, :default => 'green'
17
- config_param :host, :string
18
- config_param :column, :string
19
+ config_param :hostname, :string
20
+ config_param :testname, :string
19
21
  config_param :name_key, :string
22
+ config_param :custom_determine_color_code, :string, :default => nil
23
+ ````
24
+
25
+ ### example
26
+
27
+ <store>
28
+ type xymon
29
+ xymon_server 127.0.0.1
30
+ xymon_port 1984
31
+ color green
32
+ hostname web-server-01
33
+ testname CPU
34
+ name_key CPUUtilization
35
+ custom_determine_color_code if value.to_i > 90; 'red'; else 'green'; end
36
+ </store>
37
+
38
+ ## config_param :custom_determine_color_code
39
+
40
+ set ruby code of determinate color to custom_determine_color_code.
41
+
42
+ ### Parameter
43
+
44
+ time, record, value
45
+
46
+ ### Example
47
+
48
+ #### everytime 'green'
49
+
50
+ ````
51
+ custom_determine_color_code return 'green'
52
+ ````
53
+
54
+ #### if value > 90 then 'red' else 'green'
55
+
56
+ ````
57
+ custom_determine_color_code if value > 90; 'red'; else 'green'; end
20
58
  ````
59
+ ### config_param :color
60
+
61
+ ignore :color if custom_determine_color_code is exist and valid.
62
+ use :color if custom_determine_color_code is noting or invalid
63
+
64
+ ### If raise some exception
65
+
66
+ server didn't respond
67
+
68
+ - use config color value
69
+ - write warn log
21
70
 
22
71
  ## Contributing
23
72
 
@@ -26,3 +75,7 @@ Install gem
26
75
  3. Commit your changes (`git commit -am 'Add some feature'`)
27
76
  4. Push to the branch (`git push origin my-new-feature`)
28
77
  5. Create new Pull Request
78
+
79
+ ## releases
80
+ 2013/08/09 0.0.0 1st release
81
+ 2013/08/10 0.0.1 https://github.com/bash0C7/fluent-plugin-xymon/pull/1
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "fluent-plugin-xymon"
7
- spec.version = '0.0.0'
7
+ spec.version = '0.0.1'
8
8
  spec.authors = ["bash0C7"]
9
9
  spec.email = ["koshiba+github@4038nullpointer.com"]
10
10
  spec.description = "Fluentd output plugin to post message to xymon"
@@ -10,12 +10,21 @@ module Fluent
10
10
  config_param :xymon_server, :string
11
11
  config_param :xymon_port, :string, :default => '1984'
12
12
  config_param :color, :string, :default => 'green'
13
- config_param :host, :string
14
- config_param :column, :string
13
+ config_param :hostname, :string
14
+ config_param :testname, :string
15
15
  config_param :name_key, :string
16
+ config_param :custom_determine_color_code, :string, :default => nil
16
17
 
17
18
  def configure(conf)
18
19
  super
20
+
21
+ @custom_determine_color = nil
22
+ begin
23
+ @custom_determine_color = eval("lambda {|time, record, value| #{@custom_determine_color_code}}") if @custom_determine_color_code
24
+ rescue Exception
25
+ raise Fluent::ConfigError, "custom_determine_color_code: #{$!.class}, '#{$!.message}'"
26
+ end
27
+
19
28
  end
20
29
 
21
30
  def start
@@ -31,7 +40,7 @@ module Fluent
31
40
  es.each {|time,record|
32
41
  next unless value = record[@name_key]
33
42
 
34
- messages.push build_message(time, value)
43
+ messages.push build_message(time, record, value)
35
44
  }
36
45
  messages.each do |message|
37
46
  post(message)
@@ -40,9 +49,16 @@ module Fluent
40
49
  chain.next
41
50
  end
42
51
 
43
- def build_message time, value
52
+ def build_message time, record, value
53
+ begin
54
+ color = @custom_determine_color.call(time, record, value) if @custom_determine_color
55
+ rescue Exception
56
+ $log.warn "raises exception: #{$!.class}, '#{$!.message}', '#{@custom_determine_color_code}', '#{time}', '#{record}', '#{value}'"
57
+ end
58
+
59
+ color ||= @color
44
60
  body = "#{@name_key}=#{value}"
45
- message = "status #{@host}.#{@column} #{@color} #{Time.at(time)} #{@column} #{body}\n\n#{body}"
61
+ message = "status #{@hostname}.#{@testname} #{color} #{Time.at(time)} #{@testname} #{body}\n\n#{body}"
46
62
 
47
63
  message
48
64
  end
@@ -61,4 +77,4 @@ module Fluent
61
77
  end
62
78
 
63
79
  end
64
- end
80
+ end
@@ -1,88 +1,209 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe do
4
- let(:config) {
5
- %[
4
+ let(:driver) {Fluent::Test::OutputTestDriver.new(Fluent::XymonOutput, 'test.metrics').configure(config)}
5
+ let(:instance) {driver.instance}
6
+
7
+ describe 'config' do
8
+ let(:config) {
9
+ %[
6
10
  xymon_server 127.0.0.1
7
11
  xymon_port 1984
8
- color red
9
- host host1
10
- column column1
12
+ color red
13
+ hostname host1
14
+ testname column1
11
15
  name_key field1
12
- ]
13
- }
14
-
15
- let(:driver) {
16
- Fluent::Test::OutputTestDriver.new(Fluent::XymonOutput, 'test.metrics').configure(config)
17
- }
18
-
19
- describe 'config' do
16
+ ]
17
+ }
18
+
20
19
  context do
21
- subject {driver.instance.xymon_server}
20
+ subject {instance.xymon_server}
22
21
  it{should == '127.0.0.1'}
23
22
  end
24
23
 
25
24
  context do
26
- subject {driver.instance.xymon_port}
25
+ subject {instance.xymon_port}
27
26
  it{should == '1984'}
28
27
  end
29
28
 
30
29
  context do
31
- subject {driver.instance.color}
30
+ subject {instance.color}
32
31
  it{should == 'red'}
33
32
  end
34
33
 
35
34
  context do
36
- subject {driver.instance.host}
35
+ subject {instance.hostname}
37
36
  it{should == 'host1'}
38
37
  end
39
38
 
40
39
  context do
41
- subject {driver.instance.column}
40
+ subject {instance.testname}
42
41
  it{should == 'column1'}
43
42
  end
44
43
 
45
44
  context do
46
- subject {driver.instance.name_key}
45
+ subject {instance.name_key}
47
46
  it{should == 'field1'}
48
47
  end
49
48
 
49
+ describe 'custom_determine_color_code' do
50
+ context 'not_exist' do
51
+ let(:config) {
52
+ %[
53
+ xymon_server 127.0.0.1
54
+ xymon_port 1984
55
+ color red
56
+ hostname host1
57
+ testname column1
58
+ name_key field1
59
+ ]
60
+ }
61
+
62
+ subject {instance.custom_determine_color_code}
63
+ it{should be_nil}
64
+ end
65
+
66
+ context 'exist custom_determine_color_code' do
67
+ let(:config) {
68
+ %[
69
+ xymon_server 127.0.0.1
70
+ xymon_port 1984
71
+ color red
72
+ hostname host1
73
+ testname column1
74
+ name_key field1
75
+ custom_determine_color_code #{custom_determine_color_code}
76
+ ]
77
+ }
78
+ context 'valid syntax' do
79
+ let(:custom_determine_color_code) {"return 'green'"}
80
+
81
+ subject {instance.custom_determine_color_code}
82
+ it{should == custom_determine_color_code}
83
+ end
84
+
85
+ context 'invalid syntax' do
86
+ let(:custom_determine_color_code) {"(><)"}
87
+
88
+ subject {lambda{instance.custom_determine_color_code}}
89
+ it{should raise_error(Fluent::ConfigError)}
90
+ end
91
+ end
92
+ end
50
93
  end
51
94
 
52
95
  describe 'build_message' do
53
- context do
54
- subject {driver.instance.build_message(0, 50)}
55
- it{should == "status #{driver.instance.host}.#{driver.instance.column} #{driver.instance.color} #{Time.at(0)} #{driver.instance.column} #{driver.instance.name_key}=50\n\n#{driver.instance.name_key}=50"}
96
+ let(:name_key) {'field1'}
97
+
98
+ let(:record) {{ name_key => 50, 'otherfield' => 99}}
99
+ let(:time) {0}
100
+ let(:value) {record[name_key]}
101
+
102
+ let(:built) {instance.build_message(time, record, value)}
103
+ context 'empty custom_determine_color_code' do
104
+ let(:config) {
105
+ %[
106
+ xymon_server 127.0.0.1
107
+ xymon_port 1984
108
+ color red
109
+ hostname host1
110
+ testname column1
111
+ name_key field1
112
+ ]
113
+ }
114
+
115
+ subject {built}
116
+ it{should == "status #{instance.hostname}.#{instance.testname} #{instance.color} #{Time.at(0)} #{instance.testname} #{instance.name_key}=50\n\n#{instance.name_key}=50"}
117
+ end
118
+
119
+ context 'exist custom_determine_color_code' do
120
+ let(:config) {
121
+ %[
122
+ xymon_server 127.0.0.1
123
+ xymon_port 1984
124
+ color red
125
+ hostname host1
126
+ testname column1
127
+ name_key #{name_key}
128
+ custom_determine_color_code #{custom_determine_color_code}
129
+ ]
130
+ }
131
+
132
+ context 'valid custom_determine_color_code' do
133
+ let(:custom_determine_color_code) {"if value.to_i > 90; 'red'; else 'green'; end"}
134
+
135
+ subject {built}
136
+ it{should == "status #{instance.hostname}.#{instance.testname} #{'green'} #{Time.at(time)} #{instance.testname} #{instance.name_key}=#{value}\n\n#{instance.name_key}=#{value}"}
137
+ end
138
+
139
+ context 'invalid syntax custom_determine_color_code' do
140
+ let(:custom_determine_color_code) {'Fluent::XymonOutput::UNDEFINED_CONST'}
141
+
142
+ subject {
143
+ mock($log).warn("raises exception: NameError, 'uninitialized constant #{custom_determine_color_code}', 'Fluent::XymonOutput::UNDEFINED_CONST', '#{time}', '#{record.to_s}', '#{record[name_key]}'").times 1
144
+ built
145
+ }
146
+ it{should == "status #{instance.hostname}.#{instance.testname} #{instance.color} #{Time.at(time)} #{instance.testname} #{instance.name_key}=#{value}\n\n#{instance.name_key}=#{value}"}
147
+ end
56
148
  end
57
149
  end
58
150
 
59
151
  describe 'emit' do
60
-
152
+ let(:record) {{ 'field1' => 50, 'otherfield' => 99}}
153
+ let(:time) {0}
61
154
  let(:posted) {
62
155
  d = driver
63
156
  mock(IO).popen("nc '#{d.instance.xymon_server}' '#{d.instance.xymon_port}'", 'w').times 1
64
- d.emit({ 'field1' => 50, 'otherfield' => 99})
65
- d.run
157
+ d.emit(record, Time.at(time))
158
+ d.run
66
159
  }
67
160
 
68
- context do
161
+ context 'empty custom_determine_color_code' do
162
+ let(:config) {
163
+ %[
164
+ xymon_server 127.0.0.1
165
+ xymon_port 1984
166
+ color red
167
+ hostname host1
168
+ testname column1
169
+ name_key field1
170
+ ]
171
+ }
172
+
69
173
  subject {posted}
70
174
  it{should_not be_nil}
71
175
  end
72
176
 
73
- # context do
74
- # subject {posted[:data][:message]}
75
- # it{should =~ "status #{driver.instance.host}.#{driver.instance.column} #{driver.instance.color} [^\n]+\n\n#{driver.instance.name_key}=50"}
76
- # end
77
- #
78
- # context do
79
- # subject {posted[:data][:xymon_server]}
80
- # it{should == driver.instance.xymon_server}
81
- # end
82
- #
83
- # context do
84
- # subject {posted[:data][:xymon_port]}
85
- # it{should == driver.instance.xymon_port}
86
- # end
177
+ context 'exist custom_determine_color_code' do
178
+ let(:name_key) {'field1'}
179
+ let(:config) {
180
+ %[
181
+ xymon_server 127.0.0.1
182
+ xymon_port 1984
183
+ color red
184
+ hostname host1
185
+ testname column1
186
+ name_key #{name_key}
187
+ custom_determine_color_code #{custom_determine_color_code}
188
+ ]
189
+ }
190
+
191
+ context 'valid code' do
192
+ let(:custom_determine_color_code) {"if value.to_i > 90; 'red'; else 'green'; end"}
193
+
194
+ subject {posted}
195
+ it{should_not be_nil}
196
+ end
197
+
198
+ context 'runtime error' do
199
+ let(:custom_determine_color_code) {'Fluent::XymonOutput::UNDEFINED_CONST'}
200
+
201
+ subject {
202
+ mock($log).warn("raises exception: NameError, 'uninitialized constant Fluent::XymonOutput::UNDEFINED_CONST', 'Fluent::XymonOutput::UNDEFINED_CONST', '#{time}', '#{record.to_s}', '#{record[name_key]}'").times 1
203
+ posted
204
+ }
205
+ it{should_not be_nil}
206
+ end
207
+ end
87
208
  end
88
- end
209
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-xymon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - bash0C7
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-09 00:00:00.000000000 Z
11
+ date: 2013-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd