zabbirc 0.0.10 → 0.0.11

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: 9709c2587dc9ede55cf578ac23dd8cdab18a0a39
4
- data.tar.gz: 384e3abc02e685d19e1db41575ee4343cdd80753
3
+ metadata.gz: af897ba02297f7617cf59c4e8e3566ad2dcadd1d
4
+ data.tar.gz: ca9355720c51cc0105dcc535392729a545a5bd78
5
5
  SHA512:
6
- metadata.gz: ff594056094dd32781b14022e6b87bbd1ff7981b81d73d4989c44ad8bb6018141e2f5521c09286e0dd93e05b87dbb6a3e479cba341e51359743735e3d9f66c4f
7
- data.tar.gz: f63c3689718110f00ffde34a5cd2ca244077e4ecb147fdc58cb7acfb56ab80cf83dd3e581c8c9f9f32b4f8cdbe48552a1e79457f6cc575f39b4b96a452f97559
6
+ metadata.gz: 528f8d9b60be512037ff03aca50c6f0c2424e5ac830230260fb3e332d7d9de8ddbed2f4d8e3ab7137f490494937fe48acae3aecc615e38c38e319e9abb466205
7
+ data.tar.gz: 46e162cbaaf6d118fcf98cf7880d2fa77e753d6e0120b6ebc16efe5a4c3d634ca160869274424454e2a3c1f8c404f276e468cc16e9c84af9c0ba3934ce4f0690
@@ -0,0 +1,73 @@
1
+ module Zabbirc
2
+ class IdShortener
3
+ CHAR_SET = ("A".."Z").to_a + (2..9).to_a.collect(&:to_s)
4
+
5
+ IdTranslation = Struct.new(:id, :shorten_id, :used_at) do
6
+ def touch
7
+ self.used_at = Time.now
8
+ end
9
+ end
10
+
11
+ def initialize max_cache_size=10_000, shorten_id_length = 3
12
+ @max_cache_size = max_cache_size
13
+ @shorten_id_length = shorten_id_length
14
+ @mutex = Mutex.new
15
+ @ids = {}
16
+ @shorten_ids = {}
17
+ end
18
+
19
+ def get_id shorten_id
20
+ @mutex.synchronize do
21
+ translation = @shorten_ids[shorten_id.upcase]
22
+ if translation
23
+ translation.touch
24
+ translation.id
25
+ else
26
+ nil
27
+ end
28
+ end
29
+ end
30
+
31
+ def get_shorten_id id
32
+ @mutex.synchronize do
33
+ translation = @ids[id]
34
+ return translation.shorten_id if translation
35
+ begin
36
+ shorten_id = generate_shorten_id
37
+ end while @shorten_ids.key?(shorten_id)
38
+ translation = register_translation id, shorten_id
39
+ translation.shorten_id.upcase
40
+ end
41
+ end
42
+
43
+ def cache_size
44
+ @ids.size
45
+ end
46
+
47
+ private
48
+
49
+ def register_translation id, shorten_id
50
+ cleanup_translations
51
+ translation = IdTranslation.new(id, shorten_id, Time.now)
52
+ @ids[id] = translation
53
+ @shorten_ids[shorten_id] = translation
54
+ end
55
+
56
+ def generate_shorten_id
57
+ shorten_id = ""
58
+ @shorten_id_length.times do
59
+ shorten_id << CHAR_SET[rand(CHAR_SET.size)]
60
+ end
61
+ shorten_id
62
+ end
63
+
64
+ def cleanup_translations
65
+ return if cache_size < @max_cache_size
66
+ translations_to_delete = Array.wrap(@ids.values.sort{|x,y| y.used_at <=> x.used_at }[@max_cache_size-1..-1])
67
+ translations_to_delete.each do |translation|
68
+ @ids.delete(translation.id)
69
+ @shorten_ids.delete(translation.shorten_id)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -33,7 +33,7 @@ module Zabbirc
33
33
 
34
34
  # ACK
35
35
  register_help "ack", "Acknowledges event with message. Usage: !ack <event-id> <ack-message>"
36
- match /ack (\d+) (.*)/, method: :acknowledge_event
36
+ match /ack ([a-zA-Z0-9]+) (.*)/, method: :acknowledge_event
37
37
  match /(ack)\s*$/, method: :zabbirc_help_detail
38
38
  match /(ack) (?:[^ ]+)\s*$/, method: :zabbirc_help_detail
39
39
  end
@@ -220,12 +220,17 @@ module Zabbirc
220
220
  false
221
221
  end
222
222
 
223
- def find_event m, eventid
223
+ def find_event m, short_eventid
224
224
  op = get_op m
225
225
  begin
226
+ eventid = Zabbirc.events_id_shortener.get_id short_eventid
227
+ unless eventid
228
+ m.reply "#{op.nick}: Bad event id `#{short_eventid}`"
229
+ return false
230
+ end
226
231
  event = Zabbix::Event.find(eventid, {selectHosts: :extend, selectRelatedObject: :extend})
227
232
  if event.nil?
228
- m.reply "#{op.nick} Could not find event with id `#{eventid}`"
233
+ m.reply "#{op.nick} Could not find event with id `#{short_eventid}`"
229
234
  return false
230
235
  end
231
236
  event
@@ -55,6 +55,10 @@ module Zabbirc
55
55
  end
56
56
  end
57
57
 
58
+ def shorten_id
59
+ @shorten_id ||= Zabbirc.events_id_shortener.get_shorten_id id
60
+ end
61
+
58
62
  alias_method :state, :value
59
63
 
60
64
  def message
@@ -67,7 +71,7 @@ module Zabbirc
67
71
  end
68
72
 
69
73
  def label
70
- format_label "|%id| %time [%priority-code] %msg - %state"
74
+ format_label "|%sid| %time [%priority-code] %msg - %state"
71
75
  end
72
76
 
73
77
  def format_label fmt
@@ -76,6 +80,7 @@ module Zabbirc
76
80
  gsub("%time", "#{created_at.to_formatted_s(:short)}").
77
81
  gsub("%msg", "#{message}").
78
82
  gsub("%id", "#{id}").
83
+ gsub("%sid", "#{shorten_id}").
79
84
  gsub("%state", "#{state}")
80
85
  end
81
86
 
data/lib/zabbirc.rb CHANGED
@@ -17,6 +17,10 @@ module Zabbirc
17
17
  @mutex ||= Mutex.new
18
18
  @mutex.synchronize &block
19
19
  end
20
+
21
+ def self.events_id_shortener
22
+ @events_id_shortener ||= IdShortener.new
23
+ end
20
24
  end
21
25
 
22
26
  require 'zabbirc/configuration'
data/spec/bot_spec.rb CHANGED
@@ -20,8 +20,9 @@ describe Zabbirc::Irc::PluginMethods do
20
20
  end
21
21
 
22
22
  it "should acknowledge event" do
23
+ shorten_id = Zabbirc.events_id_shortener.get_shorten_id event.id
23
24
  expect(mock_message).to receive(:reply).with("#{mock_nick}: Event `#{event.label}` acknowledged with message: #{message}")
24
- bot.acknowledge_event mock_message, event.id, message
25
+ bot.acknowledge_event mock_message, shorten_id, message
25
26
  end
26
27
  end
27
28
 
@@ -0,0 +1,37 @@
1
+ describe Zabbirc::IdShortener do
2
+ let(:cache_size) { 5 }
3
+ let(:shorten_id_length) { 3 }
4
+ let(:id_shortener) { Zabbirc::IdShortener.new(cache_size, shorten_id_length) }
5
+
6
+ it "should generate shorten id" do
7
+ shorten_id = id_shortener.get_shorten_id(1234)
8
+ expect(shorten_id).to be_instance_of(String)
9
+ expect(shorten_id.length).to eq(shorten_id_length)
10
+ end
11
+
12
+ let(:original_id) { 1234 }
13
+ context "retrieving original id" do
14
+ it "should retrieve original id" do
15
+ shorten_id = id_shortener.get_shorten_id(original_id)
16
+ id = id_shortener.get_id(shorten_id)
17
+ expect(id).to eq(original_id)
18
+ end
19
+
20
+ it "should be case insensitive" do
21
+ shorten_id = id_shortener.get_shorten_id(original_id)
22
+ id = id_shortener.get_id(shorten_id.downcase)
23
+ expect(id).to eq(original_id)
24
+ end
25
+ end
26
+
27
+
28
+ it "should clean cache" do
29
+ (cache_size*2).times do |i|
30
+ id_shortener.get_shorten_id(i)
31
+ end
32
+ expect(id_shortener.cache_size).to be <= cache_size
33
+ # ensures that cache is being cleand from the end (oldest used records)
34
+ ids = id_shortener.instance_variable_get(:@ids).keys
35
+ expect(ids).not_to include(1)
36
+ end
37
+ end
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.10
4
+ version: 0.0.11
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-18 00:00:00.000000000 Z
11
+ date: 2015-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -117,6 +117,7 @@ files:
117
117
  - config/config.rb
118
118
  - lib/zabbirc.rb
119
119
  - lib/zabbirc/configuration.rb
120
+ - lib/zabbirc/id_shortener.rb
120
121
  - lib/zabbirc/irc/help.rb
121
122
  - lib/zabbirc/irc/plugin.rb
122
123
  - lib/zabbirc/irc/plugin_methods.rb
@@ -139,6 +140,7 @@ files:
139
140
  - lib/zabbirc/zabbix/trigger.rb
140
141
  - lib/zabbirc/zabbix/user.rb
141
142
  - spec/bot_spec.rb
143
+ - spec/id_shortener_spec.rb
142
144
  - spec/spec_helper.rb
143
145
  - spec/support/mock_bot.rb
144
146
  - templates/zabbirc_config.rb