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.
Files changed (34) hide show
  1. data/Gemfile +4 -0
  2. data/Gemfile.lock +96 -0
  3. data/LICENSE +19 -0
  4. data/Rakefile +161 -0
  5. data/euston-daemons.gemspec +72 -0
  6. data/lib/euston-daemons/command_processor_daemon/config/environment.rb +17 -0
  7. data/lib/euston-daemons/command_processor_daemon/lib/components/command_handler_component.rb +55 -0
  8. data/lib/euston-daemons/command_processor_daemon/lib/daemon.rb +43 -0
  9. data/lib/euston-daemons/command_processor_daemon/lib/settings.rb +19 -0
  10. data/lib/euston-daemons/command_processor_daemon/rake_task.rb +31 -0
  11. data/lib/euston-daemons/event_processor_daemon/config/environment.rb +23 -0
  12. data/lib/euston-daemons/event_processor_daemon/lib/components/event_handler_component.rb +72 -0
  13. data/lib/euston-daemons/event_processor_daemon/lib/daemon.rb +72 -0
  14. data/lib/euston-daemons/event_processor_daemon/lib/settings.rb +22 -0
  15. data/lib/euston-daemons/event_processor_daemon/rake_task.rb +37 -0
  16. data/lib/euston-daemons/framework/basic_component.rb +33 -0
  17. data/lib/euston-daemons/framework/component_shutdown.rb +22 -0
  18. data/lib/euston-daemons/framework/daemon.rb +27 -0
  19. data/lib/euston-daemons/framework/queue.rb +71 -0
  20. data/lib/euston-daemons/message_buffer_daemon/config/environment.rb +30 -0
  21. data/lib/euston-daemons/message_buffer_daemon/lib/components/buffer_component.rb +74 -0
  22. data/lib/euston-daemons/message_buffer_daemon/lib/components/event_store_component.rb +51 -0
  23. data/lib/euston-daemons/message_buffer_daemon/lib/daemon.rb +48 -0
  24. data/lib/euston-daemons/message_buffer_daemon/lib/message_logger.rb +54 -0
  25. data/lib/euston-daemons/message_buffer_daemon/lib/publisher.rb +56 -0
  26. data/lib/euston-daemons/message_buffer_daemon/lib/read_model/message_buffer.rb +54 -0
  27. data/lib/euston-daemons/message_buffer_daemon/lib/read_model/message_log.rb +36 -0
  28. data/lib/euston-daemons/message_buffer_daemon/lib/settings.rb +14 -0
  29. data/lib/euston-daemons/message_buffer_daemon/lib/subscriber.rb +60 -0
  30. data/lib/euston-daemons/message_buffer_daemon/rake_task.rb +30 -0
  31. data/lib/euston-daemons/rake_task.rb +116 -0
  32. data/lib/euston-daemons/version.rb +5 -0
  33. data/lib/euston-daemons.rb +17 -0
  34. 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,5 @@
1
+ module Euston
2
+ module Daemons
3
+ VERSION = "1.0.1"
4
+ end
5
+ 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: []