kwikemon 0.0.1
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 +7 -0
- data/kwikemon.rb +113 -0
- data/monitor.rb +98 -0
- metadata +60 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fce96e65afa48f57198fe53a1d593fae89011ef9
|
4
|
+
data.tar.gz: bb28df5484586c9c3ec64fee04ea17076afd64a2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bc74200cf3e78b49845f498a6e340a25f7b0ff79e049e594fce93f2c8dc09b4f199ec8a14fe36976af7333dbbf74fb50e0fcd7f23c171da5993fd31e7575eff3
|
7
|
+
data.tar.gz: 20f941b14e5176694647798a04d30a6130eb4392093fed6ab4ccdf003d7f732752e7008c0458edec2b890ed36e98c218ea9802fb8b97f12e2655fb578a622cba
|
data/kwikemon.rb
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
# Copyright 2013 Sami Samhuri <sami@samhuri.net>
|
2
|
+
#
|
3
|
+
# MIT License
|
4
|
+
# http://sjs.mit-license.org
|
5
|
+
|
6
|
+
require 'redis'
|
7
|
+
require File.expand_path('../monitor.rb', __FILE__)
|
8
|
+
|
9
|
+
module Kwikemon
|
10
|
+
|
11
|
+
extend self
|
12
|
+
|
13
|
+
include Enumerable
|
14
|
+
|
15
|
+
def redis
|
16
|
+
@redis ||= Redis.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def redis=(redis)
|
20
|
+
@redis = redis
|
21
|
+
end
|
22
|
+
|
23
|
+
def key_prefix
|
24
|
+
@key_prefix ||= "kwikemon"
|
25
|
+
end
|
26
|
+
|
27
|
+
def key_prefix=(key_prefix)
|
28
|
+
@key_prefix = key_prefix
|
29
|
+
end
|
30
|
+
|
31
|
+
def key(x)
|
32
|
+
"#{key_prefix}:#{x}"
|
33
|
+
end
|
34
|
+
|
35
|
+
Monitor.on(:create) do |name|
|
36
|
+
redis.sadd(key('monitors'), name)
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
# Set `name` to `value`.
|
41
|
+
#
|
42
|
+
# @param name [#to_s] name of the monitor
|
43
|
+
# @param text [#to_s] status text
|
44
|
+
def set(name, text)
|
45
|
+
Monitor.new(name, text).save
|
46
|
+
end
|
47
|
+
|
48
|
+
# Check if `name` exists3
|
49
|
+
#
|
50
|
+
# @param name [#to_s] name of the monitor
|
51
|
+
# @return [true, false] true if monitor exists, otherwise false
|
52
|
+
def exists?(name)
|
53
|
+
Monitor.new(name).exists?
|
54
|
+
end
|
55
|
+
|
56
|
+
# Get the value of `name`. Returns `nil` if it doesn't exist.
|
57
|
+
#
|
58
|
+
# @param name [#_tos] name of the monitor
|
59
|
+
# @return [String, nil] status text, or `nil` if it doesn't exist
|
60
|
+
def get(name)
|
61
|
+
Monitor.new(name).text
|
62
|
+
end
|
63
|
+
|
64
|
+
# Get the TTL in seconds of `name`. Returns `nil` if it doesn't exit.
|
65
|
+
#
|
66
|
+
# @param name [#_tos] name of the monitor
|
67
|
+
# @return [String, nil] TTL, or `nil` if it doesn't exist
|
68
|
+
def ttl(name)
|
69
|
+
Monitor.new(name).ttl
|
70
|
+
end
|
71
|
+
|
72
|
+
# Count all monitors.
|
73
|
+
def count
|
74
|
+
redis.scard(key('monitors'))
|
75
|
+
end
|
76
|
+
|
77
|
+
# List all monitor names.
|
78
|
+
def list
|
79
|
+
redis.smembers(key('monitors'))
|
80
|
+
end
|
81
|
+
|
82
|
+
def each
|
83
|
+
list.each { |m| yield(m) }
|
84
|
+
end
|
85
|
+
|
86
|
+
# Get a `Hash` of all monitors.
|
87
|
+
def get_all
|
88
|
+
list.inject({}) do |ms, name|
|
89
|
+
ms[name] = Monitor.new(name).text
|
90
|
+
ms
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# Remove the monitor named `name`.
|
95
|
+
def remove(name)
|
96
|
+
Monitor.new(name).delete
|
97
|
+
end
|
98
|
+
|
99
|
+
# Clear all monitors.
|
100
|
+
def clear
|
101
|
+
list.each do |name|
|
102
|
+
remove(name)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Clean up expired monitors.
|
107
|
+
def sweep
|
108
|
+
list.each do |name|
|
109
|
+
remove(name) unless exists?(name)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
data/monitor.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
# Copyright 2013 Sami Samhuri <sami@samhuri.net>
|
2
|
+
#
|
3
|
+
# MIT License
|
4
|
+
# http://sjs.mit-license.org
|
5
|
+
|
6
|
+
module Kwikemon
|
7
|
+
|
8
|
+
class Monitor
|
9
|
+
|
10
|
+
DefaultTTL = 86400 # 1 day
|
11
|
+
|
12
|
+
attr_accessor :redis
|
13
|
+
attr_reader :name, :text, :ttl, :created, :modified
|
14
|
+
|
15
|
+
@listeners = Hash.new { |h, k| h[k] = [] }
|
16
|
+
|
17
|
+
def Monitor.on(event, &block)
|
18
|
+
@listeners[event] << block
|
19
|
+
end
|
20
|
+
|
21
|
+
def Monitor.emit(event, *args)
|
22
|
+
@listeners[event].each { |handler| handler.call(*args) }
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(name, text = nil)
|
26
|
+
@name = name
|
27
|
+
@text = text
|
28
|
+
end
|
29
|
+
|
30
|
+
def save
|
31
|
+
if exists?
|
32
|
+
update
|
33
|
+
else
|
34
|
+
create
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def exists?
|
39
|
+
redis.exists(key)
|
40
|
+
end
|
41
|
+
|
42
|
+
def create
|
43
|
+
raise MonitorError.new('name cannot be blank') if name.to_s.strip.length == 0
|
44
|
+
redis.hmset(key, *to_a)
|
45
|
+
emit(:create, name)
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
def update(text, ttl = nil)
|
50
|
+
raise MonitorError.new('name cannot be blank') if name.to_s.strip.length == 0
|
51
|
+
redis.hmset(key, 'text', text, 'modified', Time.now.to_i)
|
52
|
+
redis.ttl(key, ttl) if ttl
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
def key
|
57
|
+
Kwikemon.key("monitor:#{name}")
|
58
|
+
end
|
59
|
+
|
60
|
+
def ttl
|
61
|
+
@ttl ||= exists? ? redis.ttl(key) : nil
|
62
|
+
end
|
63
|
+
|
64
|
+
def created
|
65
|
+
@created ||= exists? ? redis.hget(key, 'created').to_i : nil
|
66
|
+
end
|
67
|
+
|
68
|
+
def modified
|
69
|
+
@modified ||= exists? ? redis.hget(key, 'modified').to_i : nil
|
70
|
+
end
|
71
|
+
|
72
|
+
def text
|
73
|
+
@text ||= exists? ? redis.hget(key, 'name')
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def redis
|
80
|
+
Kwikemon.redis
|
81
|
+
end
|
82
|
+
|
83
|
+
def to_hash
|
84
|
+
{ name: name,
|
85
|
+
text: text,
|
86
|
+
ttl: ttl || DefaultTTL,
|
87
|
+
created: created || Time.now.to_i,
|
88
|
+
modified: modified || Time.now_to_i
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
def to_a
|
93
|
+
to_hash.to_a
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kwikemon
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sami Samhuri
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-08-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: redis
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.0.4
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.0.4
|
27
|
+
description: Read & write simple monitors using Redis.
|
28
|
+
email: sami@samhuri.net
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- kwikemon.rb
|
34
|
+
- monitor.rb
|
35
|
+
homepage: https://github.com/samsonjs/kwikemon
|
36
|
+
licenses:
|
37
|
+
- MIT
|
38
|
+
metadata: {}
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- .
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.9.1
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 2.0.3
|
56
|
+
signing_key:
|
57
|
+
specification_version: 4
|
58
|
+
summary: Ruby client for kwikemon.
|
59
|
+
test_files: []
|
60
|
+
has_rdoc:
|