zabbirc 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/config.rb +2 -0
- data/lib/zabbirc/irc/plugin.rb +2 -2
- data/lib/zabbirc/irc/plugin_methods.rb +24 -9
- data/lib/zabbirc/op.rb +1 -0
- data/lib/zabbirc/service.rb +1 -1
- data/lib/zabbirc/services/ops.rb +12 -10
- data/lib/zabbirc/setting.rb +2 -2
- data/lib/zabbirc/zabbix/event.rb +4 -0
- data/lib/zabbirc/zabbix/resource/base.rb +1 -1
- data/lib/zabbirc.rb +1 -4
- data/spec/bot_spec.rb +31 -7
- metadata +2 -3
- data/zabbirc_config.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c14c5732f6e3e5d9209fb9b788cd2f533142eecd
|
4
|
+
data.tar.gz: d868a4bca00497bf01f8e808eb7d8a51165a9f70
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac71f44f93f205561568d147b9467227180c3a79b928f850d861577221f6f73c3cdb78073e6c6b8f1c2a80b0df5f795e060e9c720f9db8a358088b1a81cb6db4
|
7
|
+
data.tar.gz: a7b4006245ccc9004f0b28c21dbb09a7e4755f68c5acc3a7f699e6f8fcefa990a9a4a0d852d9b3cc861eb1c29c5c0b416597bd9c67c403b45d5e0f863ca748f4
|
data/config/config.rb
CHANGED
data/lib/zabbirc/irc/plugin.rb
CHANGED
@@ -21,8 +21,8 @@ module Zabbirc
|
|
21
21
|
match /(settings set)\s*$/, method: :zabbirc_help_detail
|
22
22
|
|
23
23
|
# Events
|
24
|
-
register_help "events", "Show events from last #{Zabbirc.config.notify_about_events_from_last.to_i / 60} minutes
|
25
|
-
match
|
24
|
+
register_help "events", "Show events from last #{Zabbirc.config.notify_about_events_from_last.to_i / 60} minutes filtered by <priority> and <host>. Usage: !events [<priority [<host>]]"
|
25
|
+
match /events(?: ([a-zA-Z0-9\-]+)(?: ([a-zA-Z0-9\-]+))?)?\s*$/, method: :list_events
|
26
26
|
|
27
27
|
# Host
|
28
28
|
register_help "status", "Show status of host. Usage: !status <hostname>"
|
@@ -94,8 +94,8 @@ module Zabbirc
|
|
94
94
|
op = authenticate m
|
95
95
|
return unless op
|
96
96
|
case key
|
97
|
-
when "notify"
|
98
|
-
|
97
|
+
when "notify", "notify_recoveries"
|
98
|
+
set_boolean m, op, key, value
|
99
99
|
when "events_priority"
|
100
100
|
set_events_priority m, op, value
|
101
101
|
when "primary_channel"
|
@@ -105,21 +105,22 @@ module Zabbirc
|
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
|
-
def
|
108
|
+
def set_boolean m, op, key, value
|
109
109
|
if value.nil?
|
110
|
-
m.reply "#{op.nick}:
|
110
|
+
m.reply "#{op.nick}: #{key} allowed values: true, on, 1, false, off, 0"
|
111
111
|
return
|
112
112
|
end
|
113
|
+
|
113
114
|
case value
|
114
115
|
when "true", "on", "1"
|
115
|
-
op.setting.set
|
116
|
+
op.setting.set key, true
|
116
117
|
when "false", "off", "0"
|
117
|
-
op.setting.set
|
118
|
+
op.setting.set key, false
|
118
119
|
else
|
119
120
|
m.reply "#{op.nick}: uknown value `#{value}`. Allowed values: true, on, 1, false, off, 0"
|
120
121
|
return
|
121
122
|
end
|
122
|
-
m.reply "#{op.nick}: setting `
|
123
|
+
m.reply "#{op.nick}: setting `#{key}` has been set to `#{op.setting.get key}`"
|
123
124
|
end
|
124
125
|
|
125
126
|
def set_events_priority m, op, value
|
@@ -155,16 +156,22 @@ module Zabbirc
|
|
155
156
|
end
|
156
157
|
|
157
158
|
### Events
|
158
|
-
def list_events m
|
159
|
+
def list_events m, priority=nil, host=nil
|
159
160
|
op = authenticate m
|
160
161
|
return unless op
|
162
|
+
priority = parse_priority(m, priority || 0)
|
163
|
+
return unless priority
|
164
|
+
|
161
165
|
events = Zabbix::Event.recent
|
166
|
+
events = events.select{|e| e.priority >= priority }
|
167
|
+
events = events.select{|e| e.any_host_matches? /#{host}/ } if host
|
162
168
|
msg = if events.any?
|
163
169
|
events.collect do |e|
|
164
170
|
"#{op.nick}: #{e.label}"
|
165
171
|
end.join("\n")
|
166
172
|
else
|
167
|
-
"
|
173
|
+
host_filter = host ? " and host `#{host}`" : ""
|
174
|
+
"#{op.nick}: No last events for priority `#{priority}`#{host_filter}"
|
168
175
|
end
|
169
176
|
m.reply msg
|
170
177
|
rescue Zabbix::NotConnected => e
|
@@ -228,6 +235,14 @@ module Zabbirc
|
|
228
235
|
end
|
229
236
|
end
|
230
237
|
|
238
|
+
def parse_priority m, priority
|
239
|
+
op = get_op m
|
240
|
+
Priority.new(priority)
|
241
|
+
rescue ArgumentError => e
|
242
|
+
m.reply("#{op.nick}: #{e}")
|
243
|
+
nil
|
244
|
+
end
|
245
|
+
|
231
246
|
def rescue_not_connected m, e
|
232
247
|
op = get_op m
|
233
248
|
return unless op
|
data/lib/zabbirc/op.rb
CHANGED
@@ -65,6 +65,7 @@ module Zabbirc
|
|
65
65
|
def interested_in? event
|
66
66
|
return false unless setting.get :notify
|
67
67
|
return false if @notified_events.key? event.id
|
68
|
+
return false if event.value == :ok and not setting.get :notify_recoveries
|
68
69
|
event.priority >= interesting_priority
|
69
70
|
end
|
70
71
|
|
data/lib/zabbirc/service.rb
CHANGED
data/lib/zabbirc/services/ops.rb
CHANGED
@@ -3,6 +3,18 @@ module Zabbirc
|
|
3
3
|
class Ops < Base
|
4
4
|
def iterate
|
5
5
|
sync_ops
|
6
|
+
synchronize do
|
7
|
+
@service.ops.dump_settings
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def sync_ops
|
12
|
+
synchronize do
|
13
|
+
sync_zabbix
|
14
|
+
@cinch_bot.channels.each do |channel|
|
15
|
+
sync_irc channel
|
16
|
+
end
|
17
|
+
end
|
6
18
|
rescue Zabbix::NotConnected => e
|
7
19
|
if Zabbix::Connection.up?
|
8
20
|
@service.ops.interested.notify e.to_s
|
@@ -20,16 +32,6 @@ module Zabbirc
|
|
20
32
|
channel.users.keys.find { |irc_user| irc_user.user.sub("~","") == login }
|
21
33
|
end
|
22
34
|
|
23
|
-
def sync_ops
|
24
|
-
synchronize do
|
25
|
-
sync_zabbix
|
26
|
-
@cinch_bot.channels.each do |channel|
|
27
|
-
sync_irc channel
|
28
|
-
end
|
29
|
-
end
|
30
|
-
# @service.ops.dump_settings
|
31
|
-
end
|
32
|
-
|
33
35
|
def sync_irc channel
|
34
36
|
logins = channel_logins channel
|
35
37
|
|
data/lib/zabbirc/setting.rb
CHANGED
@@ -2,6 +2,7 @@ module Zabbirc
|
|
2
2
|
class Setting
|
3
3
|
DEFAULTS = ActiveSupport::HashWithIndifferentAccess.new({
|
4
4
|
notify: true,
|
5
|
+
notify_recoveries: true,
|
5
6
|
primary_channel: nil,
|
6
7
|
events_priority: Zabbirc.config.default_events_priority
|
7
8
|
})
|
@@ -14,8 +15,7 @@ module Zabbirc
|
|
14
15
|
stored_options = ActiveSupport::HashWithIndifferentAccess.new stored_options
|
15
16
|
unknown_keys = stored_options.keys - DEFAULTS.keys
|
16
17
|
stored_options.delete_if{|k,_v| unknown_keys.include? k }
|
17
|
-
|
18
|
-
@options = stored_options
|
18
|
+
@options = DEFAULTS.deep_dup.merge(stored_options)
|
19
19
|
end
|
20
20
|
|
21
21
|
def set name, value
|
data/lib/zabbirc/zabbix/event.rb
CHANGED
@@ -28,7 +28,7 @@ module Zabbirc
|
|
28
28
|
|
29
29
|
def initialize attrs
|
30
30
|
@attrs = ActiveSupport::HashWithIndifferentAccess.new attrs
|
31
|
-
raise ArgumentError, "attribute `#{self.class.model_name}id` not found, probably not
|
31
|
+
raise ArgumentError, "attribute `#{self.class.model_name}id` not found, probably not a #{self.class.model_name}" unless @attrs.key? :"#{self.class.model_name}id"
|
32
32
|
end
|
33
33
|
|
34
34
|
def id
|
data/lib/zabbirc.rb
CHANGED
@@ -25,7 +25,4 @@ require_dir "zabbirc/irc/*.rb"
|
|
25
25
|
require 'zabbirc/zabbix/resource/base'
|
26
26
|
require_dir "zabbirc/zabbix/*.rb"
|
27
27
|
require 'zabbirc/services/base'
|
28
|
-
require_dir "zabbirc/services/*.rb"
|
29
|
-
|
30
|
-
# TODO Error message when cannot connect to Zabbix
|
31
|
-
# TODO Dump op specific settings in loop, so it can be loaded on the fatal server failure
|
28
|
+
require_dir "zabbirc/services/*.rb"
|
data/spec/bot_spec.rb
CHANGED
@@ -125,27 +125,51 @@ describe Zabbirc::Irc::PluginMethods do
|
|
125
125
|
let(:recent_events) { [] }
|
126
126
|
|
127
127
|
it "should report no last events" do
|
128
|
-
expect(mock_message).to receive(:reply).with("#{mock_nick}: No last events")
|
128
|
+
expect(mock_message).to receive(:reply).with("#{mock_nick}: No last events for priority `#{Zabbirc::Priority.new(0)}`")
|
129
129
|
bot.list_events mock_message
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
133
|
-
context "
|
134
|
-
let(:
|
135
|
-
let(:
|
136
|
-
let(:
|
133
|
+
context "some last events" do
|
134
|
+
let(:event1_information) { double "Event1", label: "Event 1 label", priority: Zabbirc::Priority.new(:information) }
|
135
|
+
let(:event2_information) { double "Event2", label: "Event 2 label", priority: Zabbirc::Priority.new(:information) }
|
136
|
+
let(:event3_high) { double "Event3", label: "Event 3 label", priority: Zabbirc::Priority.new(:high) }
|
137
|
+
let(:recent_events) { [event1_information, event2_information, event3_high] }
|
137
138
|
let(:expected_msg) { recent_events.collect{|e| "#{mock_nick}: #{e.label}"}.join("\n") }
|
138
139
|
|
139
|
-
|
140
|
+
before do
|
141
|
+
recent_events.each do |e|
|
142
|
+
allow(e).to receive(:any_host_matches?).and_return(false)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should report all last events" do
|
140
147
|
expect(mock_message).to receive(:reply).with(expected_msg)
|
141
148
|
bot.list_events mock_message
|
142
149
|
end
|
150
|
+
|
151
|
+
context "with high priority filtered" do
|
152
|
+
let(:expected_msg) { [event3_high].collect{|e| "#{mock_nick}: #{e.label}"}.join("\n") }
|
153
|
+
it "should report high priority last events" do
|
154
|
+
expect(mock_message).to receive(:reply).with(expected_msg)
|
155
|
+
bot.list_events mock_message, "high"
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
context "with host filtered" do
|
160
|
+
let(:expected_msg) { [event1_information].collect{|e| "#{mock_nick}: #{e.label}"}.join("\n") }
|
161
|
+
it "should report host matched last events" do
|
162
|
+
allow(event1_information).to receive(:any_host_matches?).and_return(true )
|
163
|
+
expect(mock_message).to receive(:reply).with(expected_msg)
|
164
|
+
bot.list_events mock_message, "information", "host1"
|
165
|
+
end
|
166
|
+
end
|
143
167
|
end
|
144
168
|
end
|
145
169
|
|
146
170
|
describe "#show_settings" do
|
147
171
|
let(:mock_user_settings) { {primary_channel: "#channel-1", events_priority: "high", notify: false } }
|
148
|
-
let(:expected_msg) { "#{mock_nick}: notify: false, primary_channel: #channel-1, events_priority: high" }
|
172
|
+
let(:expected_msg) { "#{mock_nick}: notify: false, notify_recoveries: true, primary_channel: #channel-1, events_priority: high" }
|
149
173
|
it "should show settings" do
|
150
174
|
expect(mock_message).to receive(:reply).with(expected_msg)
|
151
175
|
bot.show_settings mock_message
|
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.7
|
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-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -145,7 +145,6 @@ files:
|
|
145
145
|
- tmp/module_test.rb
|
146
146
|
- tmp/playground.rb
|
147
147
|
- tmp/thread_test.rb
|
148
|
-
- zabbirc_config.rb
|
149
148
|
homepage: https://github.com/tulak/zabbirc
|
150
149
|
licenses:
|
151
150
|
- MIT
|
data/zabbirc_config.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
Zabbirc.configure do |config|
|
2
|
-
### Zabbix server configuration
|
3
|
-
config.zabbix_api_url = "https://your.zabbix-server.com/zabbix/api_jsonrpc.php"
|
4
|
-
config.zabbix_login = "zabbirc"
|
5
|
-
config.zabbix_password = "zabbircpass"
|
6
|
-
|
7
|
-
### IRC configurations
|
8
|
-
# config.irc_server = "irc.freenode.org"
|
9
|
-
# config.irc_channels = ["#zabbirc-test", "#zabbirc-test-2"]
|
10
|
-
|
11
|
-
### Zabbirc configurations
|
12
|
-
# config.events_check_interval = 10.seconds
|
13
|
-
# config.notify_about_events_from_last = 5.minutes
|
14
|
-
end
|