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 +4 -4
- data/lib/zabbirc/irc/plugin.rb +3 -3
- data/lib/zabbirc/irc/plugin_methods.rb +19 -3
- data/lib/zabbirc/op.rb +1 -0
- data/lib/zabbirc/op_list.rb +17 -11
- data/lib/zabbirc/services/events.rb +5 -6
- data/lib/zabbirc/services/ops.rb +6 -1
- data/lib/zabbirc/zabbix/connection.rb +29 -0
- data/lib/zabbirc/zabbix/resource/finders.rb +16 -10
- data/spec/bot_spec.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0442b2c7c53bf6dafea3ea822c5782d94b7ba20f
|
4
|
+
data.tar.gz: c04aa4f8923eba8a611e44fd3192d0f63c287045
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a77d8bab630b1fea6945384de58ed5e884fcc8689de3304a73ff8cdfff57358f14bc439a319333690fbf8228e28ddfa694921dcee152866bc94142d3c91e8c96
|
7
|
+
data.tar.gz: 170bd4acf9dd5acf23ac20bab8c63391416328d2458ea2860acdbd081d078580af681f27ab84b4181feb5bf2d101f28117f7a496ad51c4f7a32b39b16c6885d0
|
data/lib/zabbirc/irc/plugin.rb
CHANGED
@@ -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
|
13
|
-
match /zabbirc help (.+)
|
14
|
-
match /zabbirc status\s
|
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`
|
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`
|
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`
|
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
data/lib/zabbirc/op_list.rb
CHANGED
@@ -32,9 +32,9 @@ module Zabbirc
|
|
32
32
|
def remove op
|
33
33
|
case op
|
34
34
|
when String
|
35
|
-
@ops
|
35
|
+
@ops.delete(op)
|
36
36
|
when Op
|
37
|
-
@ops
|
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
|
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
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
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
|
data/lib/zabbirc/services/ops.rb
CHANGED
@@ -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
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
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}`
|
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.
|
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-
|
11
|
+
date: 2014-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|