quark 0.1.0 → 0.1.2
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.
- data/bin/quark +12 -7
- data/lib/quark.rb +44 -7
- metadata +19 -19
data/bin/quark
CHANGED
@@ -19,7 +19,7 @@ module Quark
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# -----------------------------------------------------------------------------
|
22
|
-
opts.on('', '--redis-port PORT', '
|
22
|
+
opts.on('', '--redis-port PORT', 'Port of the Redis server to write to') do |port|
|
23
23
|
Quark::Config.set("redis.port", port)
|
24
24
|
end
|
25
25
|
|
@@ -34,22 +34,22 @@ module Quark
|
|
34
34
|
end
|
35
35
|
|
36
36
|
# -----------------------------------------------------------------------------
|
37
|
-
opts.on('-a', '--address ADDR', 'The IP address for
|
37
|
+
opts.on('-a', '--address ADDR', 'The IP address for all servers to listen on') do |addr|
|
38
38
|
Quark::Config.set("quark.address", addr)
|
39
39
|
end
|
40
40
|
|
41
41
|
# -----------------------------------------------------------------------------
|
42
|
-
opts.on('-p', '--port PORT', 'The TCP port to listen on') do |port|
|
42
|
+
opts.on('-p', '--port PORT', 'The TCP/UDP port to listen on') do |port|
|
43
43
|
Quark::Config.set("quark.port", port)
|
44
44
|
end
|
45
45
|
|
46
46
|
# -----------------------------------------------------------------------------
|
47
|
-
opts.on('
|
47
|
+
opts.on('', '--metric-block-size MSEC', 'The size of metric buckets (in milliseconds) that metrics should be split into') do |blocksize|
|
48
48
|
Quark::Config.set("quark.blocksize", blocksize)
|
49
49
|
end
|
50
50
|
|
51
51
|
# -----------------------------------------------------------------------------
|
52
|
-
opts.on('-T', '--[no-]tcp', '
|
52
|
+
opts.on('-T', '--[no-]tcp', 'Enable/disable TCP server') do |mode|
|
53
53
|
Quark::Config.set("quark.tcp.enabled", mode)
|
54
54
|
end
|
55
55
|
|
@@ -64,7 +64,7 @@ module Quark
|
|
64
64
|
end
|
65
65
|
|
66
66
|
# -----------------------------------------------------------------------------
|
67
|
-
opts.on('-U', '--[no-]udp', '
|
67
|
+
opts.on('-U', '--[no-]udp', 'Enable/disable UDP server') do |mode|
|
68
68
|
Quark::Config.set("quark.udp.enabled", mode)
|
69
69
|
end
|
70
70
|
|
@@ -81,7 +81,7 @@ module Quark
|
|
81
81
|
end
|
82
82
|
|
83
83
|
# -----------------------------------------------------------------------------
|
84
|
-
opts.on('-H', '--[no-]http', '
|
84
|
+
opts.on('-H', '--[no-]http', 'Enable/disable HTTP server') do |mode|
|
85
85
|
Quark::Config.set("quark.http.enabled", mode)
|
86
86
|
end
|
87
87
|
|
@@ -95,6 +95,11 @@ module Quark
|
|
95
95
|
Quark::Config.set("quark.http.port", port)
|
96
96
|
end
|
97
97
|
|
98
|
+
# -----------------------------------------------------------------------------
|
99
|
+
opts.on('', '--[no-]http-cors', 'Enable/disable Cross-Origin Resource Sharing on the HTTP server') do |mode|
|
100
|
+
Quark::Config.set("quark.http.cors", mode)
|
101
|
+
end
|
102
|
+
|
98
103
|
# -----------------------------------------------------------------------------
|
99
104
|
opts.on('-D', '--debug', 'Enable debug mode') do
|
100
105
|
Quark::Config.set("debug", true)
|
data/lib/quark.rb
CHANGED
@@ -19,13 +19,7 @@ module Quark
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def post_init()
|
22
|
-
|
23
|
-
:host => Quark::Config.get("redis.host", "127.0.0.1"),
|
24
|
-
:port => Quark::Config.get("redis.port", 6379).to_i,
|
25
|
-
:db => Quark::Config.get("redis.db", 0).to_i
|
26
|
-
})
|
27
|
-
|
28
|
-
@_prefix = Quark::Config.get("redis.prefix", "quark")
|
22
|
+
self.setup()
|
29
23
|
end
|
30
24
|
|
31
25
|
def receive_data(data)
|
@@ -36,6 +30,11 @@ module Quark
|
|
36
30
|
send_data(MultiJson.dump(data)+"\n")
|
37
31
|
end
|
38
32
|
|
33
|
+
def self.setup(redis, prefix='quark')
|
34
|
+
@redis = redis
|
35
|
+
@_prefix = prefix
|
36
|
+
end
|
37
|
+
|
39
38
|
def self.process_command(data)
|
40
39
|
# if the data perfectly resembles a graphite-formatted metric (without a command prefix)
|
41
40
|
# then assume the command is "observe"
|
@@ -103,6 +102,17 @@ module Quark
|
|
103
102
|
Quark::Config.get("quark.http.cors", false)
|
104
103
|
Quark::Config.set("quark.graphite_compat", true)
|
105
104
|
Quark::Config.set("debug", false)
|
105
|
+
|
106
|
+
@redis = Redis.new({
|
107
|
+
:host => Quark::Config.get("redis.host", "127.0.0.1"),
|
108
|
+
:port => Quark::Config.get("redis.port", 6379).to_i,
|
109
|
+
:db => Quark::Config.get("redis.db", 0).to_i
|
110
|
+
})
|
111
|
+
|
112
|
+
@_prefix = Quark::Config.get("redis.prefix", "quark")
|
113
|
+
|
114
|
+
Quark::SocketServer.setup(@redis, @_prefix)
|
115
|
+
nil
|
106
116
|
end
|
107
117
|
|
108
118
|
def self.run()
|
@@ -157,6 +167,33 @@ module Quark
|
|
157
167
|
end
|
158
168
|
end
|
159
169
|
|
170
|
+
# removes metrics that match keys and (optionally) are older than 'to'
|
171
|
+
# if 'to' is negative, it is assumed to be n-seconds ago
|
172
|
+
#
|
173
|
+
def self.purge(keys, to=nil)
|
174
|
+
keys = [@_prefix, keys, '*'].join(':') if not keys.start_with?(@_prefix)
|
175
|
+
now = (Time.now.to_f * 1000).to_i
|
176
|
+
rv = []
|
177
|
+
|
178
|
+
@redis.keys(keys).each do |key|
|
179
|
+
x, name, block = key.split(':', 3)
|
180
|
+
block = block.to_i
|
181
|
+
|
182
|
+
if ((to = Integer(to)) rescue false)
|
183
|
+
if to < 0
|
184
|
+
to = now - (-1 * to * 1000)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
if to.nil? or block < (to/Quark::Config.get("quark.blocksize")).to_i
|
189
|
+
@redis.del(key)
|
190
|
+
rv << key
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
rv
|
195
|
+
end
|
196
|
+
|
160
197
|
def self.quit()
|
161
198
|
puts "Stopping Quark..."
|
162
199
|
EM.stop()
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quark
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2014-05-06 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
16
|
-
requirement: &
|
16
|
+
requirement: &22466740 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - =
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.7.9
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *22466740
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: eventmachine
|
27
|
-
requirement: &
|
27
|
+
requirement: &22464820 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *22464820
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: redis
|
38
|
-
requirement: &
|
38
|
+
requirement: &22463240 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 3.0.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *22463240
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: hiredis
|
49
|
-
requirement: &
|
49
|
+
requirement: &22483300 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.5.2
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *22483300
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: em-synchrony
|
60
|
-
requirement: &
|
60
|
+
requirement: &22481860 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.0.3
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *22481860
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: hashlib
|
71
|
-
requirement: &
|
71
|
+
requirement: &22507040 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.0.35
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *22507040
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: sinatra
|
82
|
-
requirement: &
|
82
|
+
requirement: &22505980 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *22505980
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: sinatra-cross_origin
|
93
|
-
requirement: &
|
93
|
+
requirement: &22504900 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *22504900
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: thin
|
104
|
-
requirement: &
|
104
|
+
requirement: &22503560 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *22503560
|
113
113
|
description: A small service for logging and retrieving timeseries metrics into a
|
114
114
|
Redis server
|
115
115
|
email: garyhetzel@gmail.com
|