quark 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,6 +8,10 @@ require 'quark/config'
8
8
 
9
9
 
10
10
  module Quark
11
+ class Error < Exception; end
12
+ class ArgumentError < Error; end
13
+ class InvalidCommand < Error; end
14
+
11
15
  module SocketServer
12
16
  Dir[File.join(File.dirname(__FILE__), "quark", "commands", "*.rb")].each do |rb|
13
17
  require "#{rb.gsub(/\.rb$/,'')}"
@@ -26,22 +30,50 @@ module Quark
26
30
  def receive_data(data)
27
31
  command, arguments = data.chomp.split(' ',2)
28
32
 
29
- if methods.include?(:"process_command_#{command.downcase}")
30
- rv = send(:"process_command_#{command.downcase}", arguments)
31
- if rv.nil?
32
- send_data(MultiJson.dump({
33
- :success => true
34
- })+"\n")
33
+ begin
34
+ if methods.include?(:"process_command_#{command.downcase}")
35
+ rv = send(:"process_command_#{command.downcase}", arguments)
36
+ if rv.nil?
37
+ send_json({
38
+ :success => true
39
+ })
40
+ else
41
+ send_json({
42
+ :success => true,
43
+ :command => data.chomp,
44
+ :results => rv
45
+ })
46
+ end
35
47
  else
36
- send_data(MultiJson.dump({
37
- :success => true,
38
- :command => data.chomp,
39
- :results => rv
40
- })+"\n")
48
+ raise Quark::InvalidCommand.new("Unknown command '#{command.upcase}'")
41
49
  end
50
+ rescue Quark::Error => e
51
+ send_json({
52
+ :success => false,
53
+ :command => data.chomp,
54
+ :error => {
55
+ :class => e.class.name,
56
+ :message => e.message
57
+ }
58
+ })
59
+
60
+ rescue Exception => e
61
+ send_json({
62
+ :success => false,
63
+ :command => data.chomp,
64
+ :error => {
65
+ :class => e.class.name,
66
+ :message => e.message,
67
+ :backtrace => e.backtrace
68
+ }
69
+ })
42
70
  end
43
71
  end
44
72
 
73
+ def send_json(data)
74
+ send_data(MultiJson.dump(data)+"\n")
75
+ end
76
+
45
77
  def unbind()
46
78
  end
47
79
  end
@@ -1,6 +1,8 @@
1
1
  module Quark
2
2
  module SocketServer
3
3
  def process_command_fetch(data)
4
+ raise Quark::ArgumentError.new("FETCH command requires at least 1 argument") if data.nil? or data.empty?
5
+
4
6
  rv = {}
5
7
  keys, from, to = data.split(' ')
6
8
  now = (Time.now.to_f * 1000).to_i
@@ -17,6 +19,10 @@ module Quark
17
19
  # if not set, to defaults to now
18
20
  to ||= now
19
21
 
22
+
23
+ raise Quark::ArgumentError.new("FETCH 'from' argument must be numeric") if not from.nil? and (Integer(from) rescue false) === false
24
+ raise Quark::ArgumentError.new("FETCH 'to' argument must be numeric") if not to.nil? and (Integer(to) rescue false) === false
25
+
20
26
  # find all matching keys from all blocks
21
27
  @redis.keys("#{@_prefix}:#{keys}:*").each do |key|
22
28
  x, name, block = key.split(':',3)
@@ -0,0 +1,13 @@
1
+ module Quark
2
+ module SocketServer
3
+ require 'socket'
4
+
5
+ def process_command_ping(data)
6
+ return {
7
+ :alive => true,
8
+ :hostname => Socket.gethostname(),
9
+ :time => (Time.now.to_f * 1000).to_i
10
+ }
11
+ end
12
+ end
13
+ end
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.0.2
4
+ version: 0.0.3
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: &13898660 !ruby/object:Gem::Requirement
16
+ requirement: &9517780 !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: *13898660
24
+ version_requirements: *9517780
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: eventmachine
27
- requirement: &13897140 !ruby/object:Gem::Requirement
27
+ requirement: &9507840 !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: *13897140
35
+ version_requirements: *9507840
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: redis
38
- requirement: &13896080 !ruby/object:Gem::Requirement
38
+ requirement: &9506400 !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: *13896080
46
+ version_requirements: *9506400
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: hiredis
49
- requirement: &13894740 !ruby/object:Gem::Requirement
49
+ requirement: &9504900 !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: *13894740
57
+ version_requirements: *9504900
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: em-synchrony
60
- requirement: &13893380 !ruby/object:Gem::Requirement
60
+ requirement: &9502740 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: 1.0.3
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *13893380
68
+ version_requirements: *9502740
69
69
  description: A small service for logging and retrieving timeseries metrics into a
70
70
  Redis server
71
71
  email: garyhetzel@gmail.com
@@ -79,6 +79,7 @@ files:
79
79
  - lib/quark/commands/peek.rb
80
80
  - lib/quark/commands/fetch.rb
81
81
  - lib/quark/commands/observe.rb
82
+ - lib/quark/commands/ping.rb
82
83
  - bin/quark
83
84
  homepage: https://github.com/ghetzel/quark
84
85
  licenses: []