kurchatov 0.2.1 → 0.2.2

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: 55eda896c8cdf5d70d2adbf87b0cfc1d1e90cba4
4
- data.tar.gz: 22a52c6bb4245862a6a4c87d6a94ae6db0c79a91
3
+ metadata.gz: 9094918f08537775203d52e22d3669276a8e3cee
4
+ data.tar.gz: d775c33d9a51f5e5fa5e87a0fef7a874218e5657
5
5
  SHA512:
6
- metadata.gz: ef05f87be7f7b55d13a2e4791b3e5ee618176bd11285fabd12ec79489f005ac8103cb7ffbc8d0ade1b360f9173eef8f80fa24603b89d89af035e729984bb7dc5
7
- data.tar.gz: 17aaba1fa5c2d07099919793160e03e3c6ba8717e7cfddec3607e4eed637bd52ab7630b4f70ebbe4d5423f858c1955c6ef594dcac5da2ef25da54da067bb7b2b
6
+ metadata.gz: 7bdf806068549afe1a9f2519ef954effe5561b1ecda9acde8179c7aa210484168de07bb21a503690fc97b4eea2ad46f40ed6fda8c692585b29ff21ac6c7d0857
7
+ data.tar.gz: d6f752f13bc30d1c65707462e078566fe527f3661128551286b0c1ea2bec911c65e288f15dbb509bbd3317bc9329f39b3ed697df653a109433a26078b7b39a68
@@ -5,8 +5,8 @@ module Kurchatov
5
5
  include Kurchatov::Mixin::Queue
6
6
 
7
7
  EVENT_FIELDS = [
8
- :time, :state, :service, :host,
9
- :description, :tags, :ttl, :metric
8
+ :time, :state, :service, :host,
9
+ :description, :tags, :ttl, :metric
10
10
  ]
11
11
 
12
12
  def event(hash = {})
@@ -19,15 +19,22 @@ module Kurchatov
19
19
  protected
20
20
 
21
21
  def normalize_event(hash = {})
22
+
22
23
  hash[:description] = hash[:desc] if hash[:description].nil? && hash[:desc]
23
24
  hash[:metric] = hash[:metric].to_f if hash[:metric].kind_of?(String)
24
25
  if hash[:metric].kind_of?(Float)
25
26
  hash[:metric] = 0.0 if hash[:metric].nan?
26
27
  hash[:metric] = ((hash[:metric] * 100).round/100.to_f) # 1.8.7 round
27
28
  end
29
+
28
30
  set_diff_metric(hash)
31
+ set_bool_metric(hash)
32
+ set_bool_state(hash)
33
+ set_avg_metric(hash)
29
34
  set_event_state(hash)
35
+
30
36
  return false if hash[:miss]
37
+
31
38
  hash.each { |k, _| hash.delete(k) unless EVENT_FIELDS.include?(k) }
32
39
  hash[:service] ||= name
33
40
  hash[:tags] ||= Kurchatov::Config[:tags]
@@ -36,10 +43,6 @@ module Kurchatov
36
43
  end
37
44
 
38
45
  def set_event_state(hash = {})
39
- if hash[:state] == true || hash[:state] == false
40
- hash[:state] = hash[:state] ? 'ok' : 'critical'
41
- return
42
- end
43
46
  return if hash[:state]
44
47
  return if hash[:critical].nil? && hash[:warning].nil?
45
48
  return if hash[:metric].nil?
@@ -49,23 +52,57 @@ module Kurchatov
49
52
  end
50
53
 
51
54
  def set_diff_metric(hash ={})
55
+
52
56
  hash[:diff] ||= hash[:as_diff] if hash[:as_diff]
57
+
53
58
  return if hash[:diff].nil? && !hash[:diff]
54
59
  return if hash[:metric].nil?
55
60
  return if hash[:service].nil?
56
- hash[:metric] = 0 if hash[:metric] == false
57
- hash[:metric] = 1 if hash[:metric] == true
58
61
  @history ||= {}
62
+
59
63
  if @history[hash[:service]]
60
64
  old_metric = @history[hash[:service]]
61
65
  @history[hash[:service]] = hash[:metric]
62
66
  hash[:metric] = hash[:metric] - old_metric
63
67
  else
64
68
  @history[hash[:service]] = hash[:metric]
69
+ hash[:metric] = nil
65
70
  hash[:miss] = true
66
71
  end
67
72
  end
68
73
 
74
+ def set_bool_metric(hash ={})
75
+ hash[:metric] = 0 if hash[:metric] == false
76
+ hash[:metric] = 1 if hash[:metric] == true
77
+ end
78
+
79
+ def set_bool_state(hash ={})
80
+ if hash[:state] == true || hash[:state] == false
81
+ hash[:state] = hash[:state] ? 'ok' : 'critical'
82
+ end
83
+ end
84
+
85
+ def set_avg_metric(hash ={})
86
+
87
+ return if hash[:avg].nil? || hash[:avg].to_i != hash[:avg]
88
+ return if hash[:service].nil?
89
+ return if hash[:metric].nil?
90
+
91
+ @history_avg ||= {}
92
+ @history_avg[hash[:service]] ||= []
93
+ @history_avg[hash[:service]] << hash[:metric].to_f
94
+ @history_avg[hash[:service]] = @history_avg[hash[:service]].last(hash[:avg])
95
+
96
+ return if hash[:miss]
97
+
98
+ if @history_avg[hash[:service]].count >= (hash[:avg] / 2) + 1
99
+ hash[:metric] = @history_avg[hash[:service]].reduce(:+).to_f / @history_avg[hash[:service]].count
100
+ else
101
+ hash[:miss] = true
102
+ end
103
+
104
+ end
105
+
69
106
  end
70
107
  end
71
108
  end
@@ -1,3 +1,3 @@
1
1
  module Kurchatov
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
data/tests/data/event.yml CHANGED
@@ -32,17 +32,17 @@ events:
32
32
  :result: critical
33
33
  :service: state FalseClass
34
34
 
35
- - :eval: 'shell("ls /| wc -l | wc -l")'
35
+ - :eval_metric: 'shell("ls /| wc -l | wc -l")'
36
36
  :warning: 0
37
37
  :result: warning
38
38
  :service: Shell test
39
39
 
40
- - :eval: 'rest_get("http://ya.ru").size'
40
+ - :eval_metric: 'rest_get("http://ya.ru").size'
41
41
  :critical: 10
42
42
  :result: critical
43
43
  :service: Http get test
44
44
 
45
- - :eval: 'rest_get("http://127.0.0.1:55755").size'
45
+ - :eval_metric: 'rest_get("http://127.0.0.1:55755").size'
46
46
  :critical: 1
47
47
  :result: critical
48
48
  :service: Http responder
@@ -52,3 +52,54 @@ events:
52
52
  :warning: 1
53
53
  :result: ok
54
54
  :service: round float
55
+
56
+ - :metric: 1.5
57
+ :critical: 2
58
+ :warning: 1
59
+ :avg: 2
60
+ :service: avg
61
+ :time: 1
62
+ :miss_count: true # only for tests
63
+
64
+ - :metric: 0.6
65
+ :result: warning # avg == 2, (1.5 + 0.6)/2 >= 1
66
+ :critical: 2
67
+ :warning: 1
68
+ :avg: 2
69
+ :service: avg
70
+ :time: 2
71
+
72
+ - :metric: 10
73
+ :result: critical # avg == 2, (10 + 0.6)/2 >= critical
74
+ :critical: 2
75
+ :warning: 1
76
+ :avg: 2
77
+ :service: avg
78
+ :time: 3
79
+
80
+ - :metric: 10
81
+ :critical: 2
82
+ :warning: 1
83
+ :avg: 2
84
+ :diff: true
85
+ :service: avg with diff
86
+ :time: 4
87
+ :miss_count: true
88
+
89
+ - :metric: 12
90
+ :critical: 2
91
+ :warning: 1
92
+ :avg: 2
93
+ :diff: true
94
+ :service: avg with diff
95
+ :time: 5
96
+ :miss_count: true
97
+
98
+ - :metric: 14.5
99
+ :critical: 2
100
+ :warning: 1
101
+ :avg: 2
102
+ :diff: true
103
+ :service: avg with diff
104
+ :result: critical
105
+ :time: 6
data/tests/data/sample.rb CHANGED
@@ -4,9 +4,9 @@ always_start true
4
4
  collect do
5
5
  data = YAML.load_file('./tests/data/event.yml')
6
6
  data["events"].each do |e|
7
- e[:metric] = eval(e[:eval]) if e.has_key? :eval
7
+ e[:metric] = eval(e[:eval_metric]) if e.has_key? :eval_metric
8
8
  event(e)
9
9
  end
10
- sleep(plugin.sleep.to_f || 0)
11
- exit 0 if plugin.sleep
10
+ sleep(plugin.sleep.to_f)
11
+ exit 0 if plugin.sleep # 1 plugin send exit 0
12
12
  end
data/tests/server.rb CHANGED
@@ -2,6 +2,7 @@ require 'socket'
2
2
  require 'timeout'
3
3
  require 'kurchatov/riemann/client'
4
4
  require 'yaml'
5
+ require_relative 'testreceived'
5
6
 
6
7
  PORT = 5555
7
8
  HOST = '127.0.0.1'
@@ -25,14 +26,5 @@ Timeout::timeout(RECEIVE_INTERVAL) {
25
26
  end
26
27
  }
27
28
 
28
- data = YAML.load_file('./tests/data/event.yml')
29
- events.each do |e|
30
- data["events"].each do |d|
31
- next unless d[:service] == e[:service]
32
- next if d[:result] == e[:state]
33
- raise "Recieved state: #{e[:state]}, data state: #{d[:result]}. \n Data: #{d.inspect} \n Event: #{e.inspect}"
34
- end
35
- end
36
-
37
- raise "Not all events recieved" unless 3 * data["events"].count == events.count
38
- puts "All done!"
29
+ t = TestReceived.new(events, './tests/data/event.yml')
30
+ t.compare!
@@ -0,0 +1,36 @@
1
+ class TestReceived
2
+
3
+ def initialize(events, file)
4
+ @events = events
5
+ @file = file
6
+ end
7
+
8
+ def data
9
+ @data ||= YAML.load_file(@file)
10
+ end
11
+
12
+ def compare!
13
+
14
+ @events.each do |e|
15
+ data["events"].each do |d|
16
+ next unless d[:service] == e[:service]
17
+ next if d[:result] == e[:state]
18
+ next if d[:time] && d[:time] != e[:time]
19
+ raise "Recieved state: #{e[:state].inspect}, data state: #{d[:result].inspect}. \n Data: #{d.inspect} \n Event: #{e.inspect}"
20
+ end
21
+ end
22
+
23
+ from_data = data["events"].select {|x| x[:miss_count] != true }.count
24
+ from_events = @events.count
25
+
26
+ raise "Not all events recieved: from data: #{from_data} and from server: #{from_events}" unless 3 * from_data == from_events # see config.yml (3 copy of sample plugin run)
27
+
28
+ puts "Recieved events:"
29
+ puts "#{@events.inspect}"
30
+ puts "Sample data:"
31
+ puts "#{data.inspect}"
32
+
33
+ puts "All done!"
34
+ end
35
+
36
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kurchatov
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasiliev Dmitry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-21 00:00:00.000000000 Z
11
+ date: 2014-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: beefcake
@@ -197,6 +197,7 @@ files:
197
197
  - tests/data/sample.rb
198
198
  - tests/run.sh
199
199
  - tests/server.rb
200
+ - tests/testreceived.rb
200
201
  homepage: https://github.com/vadv/kurchatov
201
202
  licenses:
202
203
  - MIT