mbus 1.0.0
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/README.mediawiki +169 -0
- data/Rakefile +24 -0
- data/bin/console +11 -0
- data/bin/messagebus_swarm +77 -0
- data/lib/messagebus.rb +62 -0
- data/lib/messagebus/client.rb +166 -0
- data/lib/messagebus/cluster_map.rb +161 -0
- data/lib/messagebus/connection.rb +118 -0
- data/lib/messagebus/consumer.rb +447 -0
- data/lib/messagebus/custom_errors.rb +37 -0
- data/lib/messagebus/dottable_hash.rb +113 -0
- data/lib/messagebus/error_status.rb +42 -0
- data/lib/messagebus/logger.rb +45 -0
- data/lib/messagebus/message.rb +168 -0
- data/lib/messagebus/messagebus_types.rb +107 -0
- data/lib/messagebus/producer.rb +187 -0
- data/lib/messagebus/swarm.rb +49 -0
- data/lib/messagebus/swarm/controller.rb +296 -0
- data/lib/messagebus/swarm/drone.rb +195 -0
- data/lib/messagebus/swarm/drone/logging_worker.rb +53 -0
- data/lib/messagebus/validations.rb +68 -0
- data/lib/messagebus/version.rb +36 -0
- data/messagebus.gemspec +29 -0
- data/spec/messagebus/client_spec.rb +157 -0
- data/spec/messagebus/cluster_map_spec.rb +178 -0
- data/spec/messagebus/consumer_spec.rb +338 -0
- data/spec/messagebus/dottable_hash_spec.rb +137 -0
- data/spec/messagebus/message_spec.rb +93 -0
- data/spec/messagebus/producer_spec.rb +147 -0
- data/spec/messagebus/swarm/controller_spec.rb +73 -0
- data/spec/messagebus/validations_spec.rb +71 -0
- data/spec/spec_helper.rb +10 -0
- data/vendor/gems/stomp.rb +23 -0
- data/vendor/gems/stomp/client.rb +360 -0
- data/vendor/gems/stomp/connection.rb +583 -0
- data/vendor/gems/stomp/errors.rb +39 -0
- data/vendor/gems/stomp/ext/hash.rb +24 -0
- data/vendor/gems/stomp/message.rb +68 -0
- metadata +138 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
module Stomp
|
2
|
+
module Error
|
3
|
+
class InvalidFormat < RuntimeError
|
4
|
+
def message
|
5
|
+
"Invalid message - invalid format"
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class InvalidServerCommand < RuntimeError
|
10
|
+
def message
|
11
|
+
"Invalid command from server"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class InvalidMessageLength < RuntimeError
|
16
|
+
def message
|
17
|
+
"Invalid content length received"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class PacketParsingTimeout < RuntimeError
|
22
|
+
def message
|
23
|
+
"Packet parsing timeout"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class PacketReceiptTimeout < RuntimeError
|
28
|
+
def message
|
29
|
+
"Packet receiving timeout"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class MaxReconnectAttempts < RuntimeError
|
34
|
+
def message
|
35
|
+
"Maximum number of reconnection attempts reached"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class ::Hash
|
2
|
+
def uncamelize_and_symbolize_keys
|
3
|
+
self.uncamelize_and_stringify_keys.symbolize_keys
|
4
|
+
end
|
5
|
+
|
6
|
+
def uncamelize_and_stringify_keys
|
7
|
+
uncamelized = {}
|
8
|
+
self.each_pair do |key, value|
|
9
|
+
new_key = key.to_s.split(/(?=[A-Z])/).join('_').downcase
|
10
|
+
uncamelized[new_key] = value
|
11
|
+
end
|
12
|
+
|
13
|
+
uncamelized
|
14
|
+
end
|
15
|
+
|
16
|
+
def symbolize_keys
|
17
|
+
symbolized = {}
|
18
|
+
self.each_pair do |key, value|
|
19
|
+
symbolized[key.to_sym] = value
|
20
|
+
end
|
21
|
+
|
22
|
+
symbolized
|
23
|
+
end unless self.method_defined?(:symbolize_keys)
|
24
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Stomp
|
2
|
+
|
3
|
+
# Container class for frames, misnamed technically
|
4
|
+
class Message
|
5
|
+
attr_accessor :command, :headers, :body, :original
|
6
|
+
|
7
|
+
@@allowed_commands = [ 'CONNECTED', 'MESSAGE', 'RECEIPT', 'ERROR' ]
|
8
|
+
|
9
|
+
def initialize(frame)
|
10
|
+
# p frame
|
11
|
+
# Set default empty values
|
12
|
+
self.command = ''
|
13
|
+
self.headers = {}
|
14
|
+
self.body = ''
|
15
|
+
self.original = frame
|
16
|
+
return self if is_blank?(frame)
|
17
|
+
# Figure out where individual parts of the frame begin and end.
|
18
|
+
command_index = frame.index("\n")
|
19
|
+
raise Stomp::Error::InvalidFormat, 'command index' unless command_index
|
20
|
+
#
|
21
|
+
headers_index = frame.index("\n\n", command_index+1)
|
22
|
+
raise Stomp::Error::InvalidFormat, 'headers index' unless headers_index
|
23
|
+
#
|
24
|
+
lastnull_index = frame.rindex("\0")
|
25
|
+
raise Stomp::Error::InvalidFormat, 'lastnull index' unless lastnull_index
|
26
|
+
|
27
|
+
# Extract working copies of each frame part
|
28
|
+
work_command = frame[0..command_index-1]
|
29
|
+
raise Stomp::Error::InvalidServerCommand, "invalid command: #{work_command.inspect}" unless @@allowed_commands.include?(work_command)
|
30
|
+
#
|
31
|
+
work_headers = frame[command_index+1..headers_index-1]
|
32
|
+
raise Stomp::Error::InvalidFormat, 'nil headers' unless work_headers
|
33
|
+
#
|
34
|
+
work_body = frame[headers_index+2..lastnull_index-1]
|
35
|
+
raise Stomp::Error::InvalidFormat, 'nil body' unless work_body
|
36
|
+
# Set the frame values
|
37
|
+
self.command = work_command
|
38
|
+
work_headers.split("\n").map do |value|
|
39
|
+
parsed_value = value.match /^([\w|-]*):(.*)$/
|
40
|
+
raise Stomp::Error::InvalidFormat, 'parsed header value' unless parsed_value
|
41
|
+
self.headers[parsed_value[1].strip] = parsed_value[2].strip if parsed_value
|
42
|
+
end
|
43
|
+
|
44
|
+
body_length = -1
|
45
|
+
|
46
|
+
if self.headers['content-length']
|
47
|
+
body_length = self.headers['content-length'].to_i
|
48
|
+
raise Stomp::Error::InvalidMessageLength if work_body.length != body_length
|
49
|
+
end
|
50
|
+
self.body = work_body[0..body_length]
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_s
|
55
|
+
"<Stomp::Message headers=#{headers.inspect} body='#{body}' command='#{command}' >"
|
56
|
+
end
|
57
|
+
|
58
|
+
def empty?
|
59
|
+
is_blank?(command) && is_blank?(headers) && is_blank?(body)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
def is_blank?(value)
|
64
|
+
value.nil? || (value.respond_to?(:empty?) && value.empty?)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mbus
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pradeep Jawahar
|
8
|
+
- Lin Zhao
|
9
|
+
- Erik Weathers
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
|
14
|
+
date: 2013-08-19 00:00:00 Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: json
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- &id003
|
22
|
+
- ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: thrift
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.9.0
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rspec
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- *id003
|
43
|
+
type: :development
|
44
|
+
version_requirements: *id004
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: simplecov
|
47
|
+
prerelease: false
|
48
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- *id003
|
51
|
+
type: :development
|
52
|
+
version_requirements: *id005
|
53
|
+
description: Messagebus integration gem
|
54
|
+
email:
|
55
|
+
- pjawahar@groupon.com
|
56
|
+
- lin@groupon.com
|
57
|
+
- eweathers@groupon.com
|
58
|
+
executables:
|
59
|
+
- messagebus_swarm
|
60
|
+
extensions: []
|
61
|
+
|
62
|
+
extra_rdoc_files: []
|
63
|
+
|
64
|
+
files:
|
65
|
+
- bin/messagebus_swarm
|
66
|
+
- bin/console
|
67
|
+
- lib/messagebus.rb
|
68
|
+
- lib/messagebus/custom_errors.rb
|
69
|
+
- lib/messagebus/version.rb
|
70
|
+
- lib/messagebus/cluster_map.rb
|
71
|
+
- lib/messagebus/connection.rb
|
72
|
+
- lib/messagebus/message.rb
|
73
|
+
- lib/messagebus/consumer.rb
|
74
|
+
- lib/messagebus/swarm/controller.rb
|
75
|
+
- lib/messagebus/swarm/drone.rb
|
76
|
+
- lib/messagebus/swarm/drone/logging_worker.rb
|
77
|
+
- lib/messagebus/messagebus_types.rb
|
78
|
+
- lib/messagebus/error_status.rb
|
79
|
+
- lib/messagebus/dottable_hash.rb
|
80
|
+
- lib/messagebus/validations.rb
|
81
|
+
- lib/messagebus/producer.rb
|
82
|
+
- lib/messagebus/client.rb
|
83
|
+
- lib/messagebus/logger.rb
|
84
|
+
- lib/messagebus/swarm.rb
|
85
|
+
- vendor/gems/stomp/connection.rb
|
86
|
+
- vendor/gems/stomp/message.rb
|
87
|
+
- vendor/gems/stomp/ext/hash.rb
|
88
|
+
- vendor/gems/stomp/errors.rb
|
89
|
+
- vendor/gems/stomp/client.rb
|
90
|
+
- vendor/gems/stomp.rb
|
91
|
+
- README.mediawiki
|
92
|
+
- Rakefile
|
93
|
+
- messagebus.gemspec
|
94
|
+
- spec/spec_helper.rb
|
95
|
+
- spec/messagebus/consumer_spec.rb
|
96
|
+
- spec/messagebus/swarm/controller_spec.rb
|
97
|
+
- spec/messagebus/message_spec.rb
|
98
|
+
- spec/messagebus/dottable_hash_spec.rb
|
99
|
+
- spec/messagebus/cluster_map_spec.rb
|
100
|
+
- spec/messagebus/validations_spec.rb
|
101
|
+
- spec/messagebus/producer_spec.rb
|
102
|
+
- spec/messagebus/client_spec.rb
|
103
|
+
homepage: https://github.com/groupon/Message-Bus
|
104
|
+
licenses:
|
105
|
+
- BSD
|
106
|
+
metadata: {}
|
107
|
+
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
|
111
|
+
require_paths:
|
112
|
+
- vendor/gems
|
113
|
+
- lib
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- *id003
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 1.3.6
|
122
|
+
requirements: []
|
123
|
+
|
124
|
+
rubyforge_project:
|
125
|
+
rubygems_version: 2.0.7
|
126
|
+
signing_key:
|
127
|
+
specification_version: 4
|
128
|
+
summary: Messagebus Client
|
129
|
+
test_files:
|
130
|
+
- spec/spec_helper.rb
|
131
|
+
- spec/messagebus/consumer_spec.rb
|
132
|
+
- spec/messagebus/swarm/controller_spec.rb
|
133
|
+
- spec/messagebus/message_spec.rb
|
134
|
+
- spec/messagebus/dottable_hash_spec.rb
|
135
|
+
- spec/messagebus/cluster_map_spec.rb
|
136
|
+
- spec/messagebus/validations_spec.rb
|
137
|
+
- spec/messagebus/producer_spec.rb
|
138
|
+
- spec/messagebus/client_spec.rb
|