zabbirc 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 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