quark 0.0.2 → 0.0.3

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.
@@ -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: []