zabbirc 0.0.5 → 0.0.6

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: d9d8c1091728d3264d635cc99793e3045d22b470
4
- data.tar.gz: 36ae7b2cf8b1abad8b80da24c27151fb654646f7
3
+ metadata.gz: 0442b2c7c53bf6dafea3ea822c5782d94b7ba20f
4
+ data.tar.gz: c04aa4f8923eba8a611e44fd3192d0f63c287045
5
5
  SHA512:
6
- metadata.gz: c0074a1b17ee56e6fd2d5624838e966b15a9ce4b264bb12e8d18ebd4d801701a41bcb3bc59bf6b41c320bc45b4c0b83133617a94a23a6231b202e34e8f10c51b
7
- data.tar.gz: 62b9cda3a95029d4378844269885a7a0f9a324d87cc51385545b2614b01acadbc65fcd51907de343767bae30ca6d29b91cef10cde7c53685953fa1b7be747b28
6
+ metadata.gz: a77d8bab630b1fea6945384de58ed5e884fcc8689de3304a73ff8cdfff57358f14bc439a319333690fbf8228e28ddfa694921dcee152866bc94142d3c91e8c96
7
+ data.tar.gz: 170bd4acf9dd5acf23ac20bab8c63391416328d2458ea2860acdbd081d078580af681f27ab84b4181feb5bf2d101f28117f7a496ad51c4f7a32b39b16c6885d0
@@ -9,9 +9,9 @@ module Zabbirc
9
9
  listen_to :join, method: :sync_ops
10
10
  listen_to :leaving, method: :sync_ops
11
11
 
12
- match /zabbirc help\s*/, method: :zabbirc_help
13
- match /zabbirc help (.+)/, method: :zabbirc_help_detail
14
- match /zabbirc status\s*/, method: :zabbirc_status
12
+ match /zabbirc help\s*$/, method: :zabbirc_help
13
+ match /zabbirc help (.+)\s*$/, method: :zabbirc_help_detail
14
+ match /zabbirc status\s*$/, method: :zabbirc_status
15
15
 
16
16
  # Settings
17
17
  register_help "settings", "Show your op specific settings. Usage: !settings"
@@ -15,6 +15,8 @@ module Zabbirc
15
15
  end
16
16
  msg << "#{m.user.nick}: Identified ops: #{ops_msg.join(", ")}"
17
17
  m.reply msg.join("\n")
18
+ rescue Zabbix::NotConnected => e
19
+ rescue_not_connected m, e
18
20
  end
19
21
 
20
22
  def acknowledge_event m, eventid, message
@@ -28,6 +30,8 @@ module Zabbirc
28
30
  else
29
31
  m.reply "#{op.nick}: Could not acknowledge event `#{event.label}`"
30
32
  end
33
+ rescue Zabbix::NotConnected => e
34
+ rescue_not_connected m, e
31
35
  end
32
36
 
33
37
  def host_status m, host
@@ -48,6 +52,8 @@ module Zabbirc
48
52
  end
49
53
  end
50
54
  m.reply msg.join("\n")
55
+ rescue Zabbix::NotConnected => e
56
+ rescue_not_connected m, e
51
57
  end
52
58
 
53
59
  def host_latest m, host, limit
@@ -68,6 +74,8 @@ module Zabbirc
68
74
  end
69
75
  end
70
76
  m.reply msg.join("\n")
77
+ rescue Zabbix::NotConnected => e
78
+ rescue_not_connected m, e
71
79
  end
72
80
 
73
81
  def sync_ops m, u=nil
@@ -111,7 +119,7 @@ module Zabbirc
111
119
  m.reply "#{op.nick}: uknown value `#{value}`. Allowed values: true, on, 1, false, off, 0"
112
120
  return
113
121
  end
114
- m.reply "#{op.nick}: setting `notify` was set to `#{op.setting.get :notify}`"
122
+ m.reply "#{op.nick}: setting `notify` has been set to `#{op.setting.get :notify}`"
115
123
  end
116
124
 
117
125
  def set_events_priority m, op, value
@@ -127,7 +135,7 @@ module Zabbirc
127
135
  return
128
136
  end
129
137
  op.setting.set :events_priority, priority.code
130
- m.reply "#{op.nick}: setting `events_priority` was set to `#{op.setting.get :events_priority}`"
138
+ m.reply "#{op.nick}: setting `events_priority` has been set to `#{op.setting.get :events_priority}`"
131
139
  end
132
140
 
133
141
  def set_primary_channel m, op, value
@@ -143,7 +151,7 @@ module Zabbirc
143
151
  m.reply "#{op.nick}: uknown value `#{value}`. Allowed values: #{channel_names.join(", ")}"
144
152
  return
145
153
  end
146
- m.reply "#{op.nick}: setting `primary_channel` was set to `#{op.setting.get :primary_channel}`"
154
+ m.reply "#{op.nick}: setting `primary_channel` has been set to `#{op.setting.get :primary_channel}`"
147
155
  end
148
156
 
149
157
  ### Events
@@ -159,6 +167,8 @@ module Zabbirc
159
167
  "#{op.nick}: No last events"
160
168
  end
161
169
  m.reply msg
170
+ rescue Zabbix::NotConnected => e
171
+ rescue_not_connected m, e
162
172
  end
163
173
 
164
174
  def ops
@@ -217,6 +227,12 @@ module Zabbirc
217
227
  false
218
228
  end
219
229
  end
230
+
231
+ def rescue_not_connected m, e
232
+ op = get_op m
233
+ return unless op
234
+ m.reply "#{op.nick}: #{e.to_s}"
235
+ end
220
236
  end
221
237
  end
222
238
  end
data/lib/zabbirc/op.rb CHANGED
@@ -70,6 +70,7 @@ module Zabbirc
70
70
 
71
71
  def event_notified event
72
72
  @notified_events[event.id] = Time.now
73
+ clear_notified_events
73
74
  end
74
75
 
75
76
  private
@@ -32,9 +32,9 @@ module Zabbirc
32
32
  def remove op
33
33
  case op
34
34
  when String
35
- @ops[op] = nil
35
+ @ops.delete(op)
36
36
  when Op
37
- @ops[op.login] = nil
37
+ @ops.delete(op.login)
38
38
  else
39
39
  raise ArgumentError, "Stirng or Op expected"
40
40
  end
@@ -48,16 +48,22 @@ module Zabbirc
48
48
  self.class.new(find_all{ |op| op.interested_in? event })
49
49
  end
50
50
 
51
- def notify event
51
+ def interested
52
+ self.class.new(find_all{ |op| op.setting.get :notify })
53
+ end
54
+
55
+ def notify object
56
+ message = case object
57
+ when String
58
+ object
59
+ when Zabbix::Event
60
+ object.label
61
+ end
52
62
  group_by(&:primary_channel).each do |channel, ops|
53
- begin
54
- next if channel.nil?
55
- op_targets = ops.collect{|op| "#{op.nick}:" }.join(" ")
56
- channel.send "#{op_targets} #{event.label}"
57
- ops.each{ |op| op.event_notified event }
58
- rescue =>e
59
- binding.pry
60
- end
63
+ next if channel.nil?
64
+ op_targets = ops.collect{|op| "#{op.nick}:" }.join(" ")
65
+ channel.send "#{op_targets} #{message}"
66
+ ops.each{ |op| op.event_notified object } if object.is_a? Zabbix::Event
61
67
  end
62
68
  end
63
69
 
@@ -10,6 +10,11 @@ module Zabbirc
10
10
  @service.ops.interested_in(event).notify event
11
11
  end
12
12
  end
13
+ rescue Zabbix::NotConnected => e
14
+ if Zabbix::Connection.up?
15
+ @service.ops.interested.notify e.to_s
16
+ Zabbix::Connection.down!
17
+ end
13
18
  end
14
19
 
15
20
  private
@@ -20,12 +25,6 @@ module Zabbirc
20
25
  events.sort_by{|e| e.created_at }.last
21
26
  end
22
27
  end
23
-
24
- def send_notifications op, events
25
- events.each do |event|
26
- op.notify event
27
- end
28
- end
29
28
  end
30
29
  end
31
30
  end
@@ -3,6 +3,11 @@ module Zabbirc
3
3
  class Ops < Base
4
4
  def iterate
5
5
  sync_ops
6
+ rescue Zabbix::NotConnected => e
7
+ if Zabbix::Connection.up?
8
+ @service.ops.interested.notify e.to_s
9
+ Zabbix::Connection.down!
10
+ end
6
11
  end
7
12
 
8
13
  private
@@ -22,7 +27,7 @@ module Zabbirc
22
27
  sync_irc channel
23
28
  end
24
29
  end
25
- @service.ops.dump_settings
30
+ # @service.ops.dump_settings
26
31
  end
27
32
 
28
33
  def sync_irc channel
@@ -9,11 +9,29 @@ module Zabbirc
9
9
  Thread.current[:zabbix_connection] ||= self.new
10
10
  end
11
11
 
12
+ def self.down!
13
+ @@down = true
14
+ end
15
+
16
+ def self.down?
17
+ @@down == true
18
+ end
19
+
20
+ def self.up!
21
+ @@down = false
22
+ end
23
+
24
+ def self.up?
25
+ @@down == false
26
+ end
27
+
12
28
  def self.test_connection
13
29
  self.new
30
+ self.up!
14
31
  true
15
32
  rescue => e
16
33
  Zabbirc.logger.fatal "Could not connect to zabbix: #{e}"
34
+ self.down!
17
35
  false
18
36
  end
19
37
 
@@ -22,5 +40,16 @@ module Zabbirc
22
40
  @client.user.login(user: Zabbirc.config.zabbix_login, password: Zabbirc.config.zabbix_password)
23
41
  end
24
42
  end
43
+
44
+ class NotConnected < StandardError
45
+ attr_reader :original_exception
46
+ def initialize original_exception
47
+ @original_exception = original_exception
48
+ end
49
+
50
+ def to_s
51
+ "Cannot connect to Zabbix API: #{original_exception{}}"
52
+ end
53
+ end
25
54
  end
26
55
  end
@@ -8,27 +8,33 @@ module Zabbirc
8
8
  :"#{model_name}ids" => id
9
9
  })
10
10
  res = api.send(model_name).get options
11
- if res.size == 0
12
- nil
13
- elsif res.size > 1
14
- raise IDNotUniqueError, "#{model_name.camelize} ID `#{id}` is not unique"
15
- else
16
- self.new res.first
17
- end
11
+ ret = if res.size == 0
12
+ nil
13
+ elsif res.size > 1
14
+ raise IDNotUniqueError, "#{model_name.camelize} ID `#{id}` is not unique"
15
+ else
16
+ self.new res.first
17
+ end
18
18
  rescue Errno::ETIMEDOUT, Errno::ECONNREFUSED => e
19
19
  Zabbirc.logger.error "Zabbix::Resource#find: #{e}"
20
- nil
20
+ raise NotConnected, e
21
+ else
22
+ Connection.up!
23
+ ret
21
24
  end
22
25
 
23
26
  def get *options
24
27
  options = options.extract_options!
25
28
  res = api.send(model_name).get options
26
- res.collect do |obj|
29
+ ret = res.collect do |obj|
27
30
  self.new obj
28
31
  end
29
32
  rescue Errno::ETIMEDOUT, Errno::ECONNREFUSED => e
30
33
  Zabbirc.logger.error "Zabbix::Resource#get: #{e}"
31
- []
34
+ raise NotConnected, e
35
+ else
36
+ Connection.up!
37
+ ret
32
38
  end
33
39
 
34
40
  end
data/spec/bot_spec.rb CHANGED
@@ -154,7 +154,7 @@ describe Zabbirc::Irc::PluginMethods do
154
154
 
155
155
  describe "#set_setting" do
156
156
  shared_examples "set_setting" do |key, value, expected_setting_value|
157
- let(:expected_msg) { "#{mock_nick}: setting `#{key}` was set to `#{expected_setting_value}`" }
157
+ let(:expected_msg) { "#{mock_nick}: setting `#{key}` has been set to `#{expected_setting_value}`" }
158
158
  let(:op) { bot.get_op mock_nick }
159
159
  it "should set #{key} setting to #{value}" do
160
160
  expect(mock_message).to receive(:reply).with(expected_msg)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zabbirc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Filip Zachar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-08 00:00:00.000000000 Z
11
+ date: 2014-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport