zabbirc 0.0.6 → 0.0.7
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/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
|