euston-daemons 1.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.
- data/Gemfile +4 -0
- data/Gemfile.lock +96 -0
- data/LICENSE +19 -0
- data/Rakefile +161 -0
- data/euston-daemons.gemspec +72 -0
- data/lib/euston-daemons/command_processor_daemon/config/environment.rb +17 -0
- data/lib/euston-daemons/command_processor_daemon/lib/components/command_handler_component.rb +55 -0
- data/lib/euston-daemons/command_processor_daemon/lib/daemon.rb +43 -0
- data/lib/euston-daemons/command_processor_daemon/lib/settings.rb +19 -0
- data/lib/euston-daemons/command_processor_daemon/rake_task.rb +31 -0
- data/lib/euston-daemons/event_processor_daemon/config/environment.rb +23 -0
- data/lib/euston-daemons/event_processor_daemon/lib/components/event_handler_component.rb +72 -0
- data/lib/euston-daemons/event_processor_daemon/lib/daemon.rb +72 -0
- data/lib/euston-daemons/event_processor_daemon/lib/settings.rb +22 -0
- data/lib/euston-daemons/event_processor_daemon/rake_task.rb +37 -0
- data/lib/euston-daemons/framework/basic_component.rb +33 -0
- data/lib/euston-daemons/framework/component_shutdown.rb +22 -0
- data/lib/euston-daemons/framework/daemon.rb +27 -0
- data/lib/euston-daemons/framework/queue.rb +71 -0
- data/lib/euston-daemons/message_buffer_daemon/config/environment.rb +30 -0
- data/lib/euston-daemons/message_buffer_daemon/lib/components/buffer_component.rb +74 -0
- data/lib/euston-daemons/message_buffer_daemon/lib/components/event_store_component.rb +51 -0
- data/lib/euston-daemons/message_buffer_daemon/lib/daemon.rb +48 -0
- data/lib/euston-daemons/message_buffer_daemon/lib/message_logger.rb +54 -0
- data/lib/euston-daemons/message_buffer_daemon/lib/publisher.rb +56 -0
- data/lib/euston-daemons/message_buffer_daemon/lib/read_model/message_buffer.rb +54 -0
- data/lib/euston-daemons/message_buffer_daemon/lib/read_model/message_log.rb +36 -0
- data/lib/euston-daemons/message_buffer_daemon/lib/settings.rb +14 -0
- data/lib/euston-daemons/message_buffer_daemon/lib/subscriber.rb +60 -0
- data/lib/euston-daemons/message_buffer_daemon/rake_task.rb +30 -0
- data/lib/euston-daemons/rake_task.rb +116 -0
- data/lib/euston-daemons/version.rb +5 -0
- data/lib/euston-daemons.rb +17 -0
- metadata +201 -0
@@ -0,0 +1,60 @@
|
|
1
|
+
module Euston
|
2
|
+
module MessageBufferDaemon
|
3
|
+
class Subscriber
|
4
|
+
class << self
|
5
|
+
def commands_buffer channel
|
6
|
+
self.new channel, :commands
|
7
|
+
end
|
8
|
+
|
9
|
+
def events_buffer channel
|
10
|
+
self.new channel, :events
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
include Euston::RabbitMq::Exchanges
|
15
|
+
include Euston::RabbitMq::Queues
|
16
|
+
include Hollywood
|
17
|
+
|
18
|
+
def initialize channel, exchange_name
|
19
|
+
@read_model = Euston::MessageBufferDaemon::ReadModel::MessageBuffer.send exchange_name
|
20
|
+
|
21
|
+
@channel = channel
|
22
|
+
@channel.prefetch(1)
|
23
|
+
@exchange = get_exchange @channel, exchange_name
|
24
|
+
@queue = get_queue @channel, "#{exchange_name}_buffer"
|
25
|
+
@queue.bind @exchange, :routing_key => "#{exchange_name}.#"
|
26
|
+
|
27
|
+
@queue.when(:message_decode_failed => method(:log_failure),
|
28
|
+
:message_failed => method(:message_failed),
|
29
|
+
:message_received => method(:remove_message_from_buffer))
|
30
|
+
|
31
|
+
@consumer = @queue.consumer
|
32
|
+
end
|
33
|
+
|
34
|
+
def disconnect
|
35
|
+
@channel.disconnect
|
36
|
+
end
|
37
|
+
|
38
|
+
def dequeue_buffered_messages(timeout) #will block until message or timeout
|
39
|
+
@queue.safe_subscribe_with_timeout(@consumer, timeout)
|
40
|
+
end
|
41
|
+
|
42
|
+
def log_failure message, error
|
43
|
+
text = "A buffer queue subscription failed. [Error] #{error.message} [Payload] #{message}"
|
44
|
+
err = Euston::RabbitMq::MessageDecodeFailedError.new text
|
45
|
+
err.set_backtrace error.backtrace
|
46
|
+
|
47
|
+
Safely.report! err
|
48
|
+
end
|
49
|
+
|
50
|
+
def message_failed(message, error, header)
|
51
|
+
header.ack!
|
52
|
+
log_failure message, error
|
53
|
+
end
|
54
|
+
|
55
|
+
def remove_message_from_buffer message
|
56
|
+
@read_model.remove_published_message message[:headers][:id]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Euston
|
2
|
+
class MessageBufferRakeTask < Euston::Daemons::RakeTask
|
3
|
+
attr_accessor :amqp_config_path, :daemon_config_path, :mongoid_config_path
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
super(:message_buffer_daemon)
|
7
|
+
end
|
8
|
+
|
9
|
+
def before_creating_task
|
10
|
+
@daemon_path = File.expand_path(File.dirname __FILE__) + File::SEPARATOR
|
11
|
+
@daemon_class = 'Euston::MessageBufferDaemon::Daemon'
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize_paths
|
15
|
+
EUSTON_LOG.debug "AMQP config path: #{@amqp_config_path}"
|
16
|
+
Object.const_set :AMQP_CONFIG_PATH, @amqp_config_path
|
17
|
+
|
18
|
+
EUSTON_LOG.debug "Daemon config path: #{@daemon_config_path}"
|
19
|
+
Object.const_set :DAEMON_CONFIG_PATH, @daemon_config_path
|
20
|
+
|
21
|
+
EUSTON_LOG.debug "Mongoid config path: #{@mongoid_config_path}"
|
22
|
+
Object.const_set :MONGOID_CONFIG_PATH, @mongoid_config_path
|
23
|
+
end
|
24
|
+
|
25
|
+
def load_environment
|
26
|
+
EUSTON_LOG.debug "Loading environment"
|
27
|
+
require_rel 'config/environment.rb'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
module Euston
|
2
|
+
module Daemons
|
3
|
+
class RakeTask < ::Rake::TaskLib
|
4
|
+
include ::Rake::DSL if defined?(::Rake::DSL)
|
5
|
+
|
6
|
+
# Name of task.
|
7
|
+
#
|
8
|
+
# default:
|
9
|
+
# :daemon
|
10
|
+
attr_accessor :name
|
11
|
+
|
12
|
+
# Bundler groups. Can be a single symbol or an array of symbols.
|
13
|
+
attr_accessor :bundler_groups
|
14
|
+
|
15
|
+
# Daemon class. Must be supplied as a string.
|
16
|
+
attr_accessor :daemon_class
|
17
|
+
|
18
|
+
# Log file path
|
19
|
+
#
|
20
|
+
# default:
|
21
|
+
# /var/log/euston.log
|
22
|
+
attr_accessor :log_path
|
23
|
+
|
24
|
+
# Use verbose output. If this is set to true, the task will print the
|
25
|
+
# executed command to stdout.
|
26
|
+
#
|
27
|
+
# default:
|
28
|
+
# true
|
29
|
+
attr_accessor :verbose
|
30
|
+
|
31
|
+
def initialize(*args)
|
32
|
+
@name = args.shift || :daemon
|
33
|
+
@log_path = '/var/log/euston.log'
|
34
|
+
@verbose = true
|
35
|
+
|
36
|
+
Object.const_set :EUSTON_ENV, get_environment unless Object.const_defined? :EUSTON_ENV
|
37
|
+
|
38
|
+
yield self if block_given?
|
39
|
+
send :before_creating_task if respond_to? :before_creating_task
|
40
|
+
|
41
|
+
desc("Run a Euston daemon") unless ::Rake.application.last_comment
|
42
|
+
|
43
|
+
task name do
|
44
|
+
RakeFileUtils.send(:verbose, verbose) do
|
45
|
+
initialize_logger
|
46
|
+
log_startup
|
47
|
+
initialize_paths
|
48
|
+
load_framework
|
49
|
+
load_environment
|
50
|
+
launch_and_wait_for_exit
|
51
|
+
log_shutdown
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def get_environment
|
59
|
+
environment = ENV['EUSTON_ENV'].to_s.downcase.to_sym
|
60
|
+
environments = [:development, :test, :staging, :production]
|
61
|
+
environment = :development unless environments.include? environment
|
62
|
+
environment
|
63
|
+
end
|
64
|
+
|
65
|
+
def initialize_logger
|
66
|
+
Object.const_set :EUSTON_LOG, Logger.new(@log_path.gsub(/\.log$/, ".#{EUSTON_ENV}.log"))
|
67
|
+
end
|
68
|
+
|
69
|
+
def initialize_paths
|
70
|
+
# virtual
|
71
|
+
end
|
72
|
+
|
73
|
+
def launch_and_wait_for_exit
|
74
|
+
ns = Object
|
75
|
+
|
76
|
+
@daemon_class.split('::').each do |c|
|
77
|
+
raise "Couldn't find the specified daemon class at #{@daemon_class}" unless ns.const_defined? c
|
78
|
+
ns = ns.const_get c.to_sym
|
79
|
+
end
|
80
|
+
|
81
|
+
daemon = ns.new
|
82
|
+
trap_exit_signals daemon
|
83
|
+
daemon.run
|
84
|
+
end
|
85
|
+
|
86
|
+
def load_framework
|
87
|
+
EUSTON_LOG.debug "Loading framework"
|
88
|
+
require_rel 'framework'
|
89
|
+
end
|
90
|
+
|
91
|
+
def log_shutdown
|
92
|
+
print_log_banner "Daemon shut down: #{@daemon_class}"
|
93
|
+
end
|
94
|
+
|
95
|
+
def log_startup
|
96
|
+
print_log_banner "Starting daemon: #{@daemon_class}"
|
97
|
+
end
|
98
|
+
|
99
|
+
def print_log_banner banner
|
100
|
+
border = '-' * banner.length
|
101
|
+
|
102
|
+
EUSTON_LOG.info ''
|
103
|
+
EUSTON_LOG.info border
|
104
|
+
EUSTON_LOG.info banner
|
105
|
+
EUSTON_LOG.info border
|
106
|
+
EUSTON_LOG.info ''
|
107
|
+
end
|
108
|
+
|
109
|
+
def trap_exit_signals daemon
|
110
|
+
signals = %W(INT TERM) & Signal.list.keys
|
111
|
+
signals.each { |sig| sig.freeze }.freeze
|
112
|
+
signals.each { |sig| Signal.trap(sig) { daemon.queue.push(sig) } }
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'hollywood'
|
2
|
+
require 'logger'
|
3
|
+
require 'rake/tasklib'
|
4
|
+
require 'require_all'
|
5
|
+
|
6
|
+
if RUBY_PLATFORM.to_s == 'java'
|
7
|
+
module Uuid
|
8
|
+
def self.generate
|
9
|
+
Java::JavaUtil::UUID.randomUUID().toString()
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
require_rel 'euston-daemons/rake_task.rb'
|
14
|
+
require_rel 'euston-daemons/command_processor_daemon/rake_task.rb'
|
15
|
+
require_rel 'euston-daemons/event_processor_daemon/rake_task.rb'
|
16
|
+
require_rel 'euston-daemons/message_buffer_daemon/rake_task.rb'
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,201 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: euston-daemons
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Lee Henson
|
9
|
+
- Guy Boertje
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2011-09-16 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activemodel
|
17
|
+
requirement: &81141520 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 3.0.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *81141520
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: activesupport
|
28
|
+
requirement: &80947570 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *80947570
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: erb-yaml
|
39
|
+
requirement: &80947250 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.0.0
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *80947250
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: hollywood
|
50
|
+
requirement: &80947010 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 1.0.0
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *80947010
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: i18n
|
61
|
+
requirement: &80946720 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ~>
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.5.0
|
67
|
+
type: :runtime
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *80946720
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: require_all
|
72
|
+
requirement: &80946410 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.2.0
|
78
|
+
type: :runtime
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *80946410
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: safely
|
83
|
+
requirement: &80946090 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ~>
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.3.0
|
89
|
+
type: :runtime
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *80946090
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: euston
|
94
|
+
requirement: &80945730 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ~>
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 1.0.0
|
100
|
+
type: :runtime
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: *80945730
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: euston-eventstore
|
105
|
+
requirement: &80945150 !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.0.0
|
111
|
+
type: :runtime
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: *80945150
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: mongoid-glue
|
116
|
+
requirement: &80944880 !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ~>
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 1.0.0
|
122
|
+
type: :runtime
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: *80944880
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rspec
|
127
|
+
requirement: &80944560 !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ~>
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 2.6.0
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: *80944560
|
136
|
+
description: ''
|
137
|
+
email:
|
138
|
+
- lee.m.henson@gmail.com
|
139
|
+
- guyboertje@gmail.com
|
140
|
+
executables: []
|
141
|
+
extensions: []
|
142
|
+
extra_rdoc_files: []
|
143
|
+
files:
|
144
|
+
- Gemfile
|
145
|
+
- Gemfile.lock
|
146
|
+
- LICENSE
|
147
|
+
- Rakefile
|
148
|
+
- euston-daemons.gemspec
|
149
|
+
- lib/euston-daemons.rb
|
150
|
+
- lib/euston-daemons/command_processor_daemon/config/environment.rb
|
151
|
+
- lib/euston-daemons/command_processor_daemon/lib/components/command_handler_component.rb
|
152
|
+
- lib/euston-daemons/command_processor_daemon/lib/daemon.rb
|
153
|
+
- lib/euston-daemons/command_processor_daemon/lib/settings.rb
|
154
|
+
- lib/euston-daemons/command_processor_daemon/rake_task.rb
|
155
|
+
- lib/euston-daemons/event_processor_daemon/config/environment.rb
|
156
|
+
- lib/euston-daemons/event_processor_daemon/lib/components/event_handler_component.rb
|
157
|
+
- lib/euston-daemons/event_processor_daemon/lib/daemon.rb
|
158
|
+
- lib/euston-daemons/event_processor_daemon/lib/settings.rb
|
159
|
+
- lib/euston-daemons/event_processor_daemon/rake_task.rb
|
160
|
+
- lib/euston-daemons/framework/basic_component.rb
|
161
|
+
- lib/euston-daemons/framework/component_shutdown.rb
|
162
|
+
- lib/euston-daemons/framework/daemon.rb
|
163
|
+
- lib/euston-daemons/framework/queue.rb
|
164
|
+
- lib/euston-daemons/message_buffer_daemon/config/environment.rb
|
165
|
+
- lib/euston-daemons/message_buffer_daemon/lib/components/buffer_component.rb
|
166
|
+
- lib/euston-daemons/message_buffer_daemon/lib/components/event_store_component.rb
|
167
|
+
- lib/euston-daemons/message_buffer_daemon/lib/daemon.rb
|
168
|
+
- lib/euston-daemons/message_buffer_daemon/lib/message_logger.rb
|
169
|
+
- lib/euston-daemons/message_buffer_daemon/lib/publisher.rb
|
170
|
+
- lib/euston-daemons/message_buffer_daemon/lib/read_model/message_buffer.rb
|
171
|
+
- lib/euston-daemons/message_buffer_daemon/lib/read_model/message_log.rb
|
172
|
+
- lib/euston-daemons/message_buffer_daemon/lib/settings.rb
|
173
|
+
- lib/euston-daemons/message_buffer_daemon/lib/subscriber.rb
|
174
|
+
- lib/euston-daemons/message_buffer_daemon/rake_task.rb
|
175
|
+
- lib/euston-daemons/rake_task.rb
|
176
|
+
- lib/euston-daemons/version.rb
|
177
|
+
homepage: http://github.com/leemhenson/euston-daemons
|
178
|
+
licenses: []
|
179
|
+
post_install_message:
|
180
|
+
rdoc_options: []
|
181
|
+
require_paths:
|
182
|
+
- lib
|
183
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
184
|
+
none: false
|
185
|
+
requirements:
|
186
|
+
- - ! '>='
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
|
+
none: false
|
191
|
+
requirements:
|
192
|
+
- - ! '>='
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
requirements: []
|
196
|
+
rubyforge_project:
|
197
|
+
rubygems_version: 1.8.10
|
198
|
+
signing_key:
|
199
|
+
specification_version: 3
|
200
|
+
summary: Message buffer, command processor and event processor daemons for Euston-RabbitMq
|
201
|
+
test_files: []
|