euston-daemons 1.1.0-java → 1.2.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/Gemfile +1 -0
  2. data/euston-daemons.gemspec +27 -52
  3. data/lib/euston-daemons/euston/daemon.rb +7 -1
  4. data/lib/euston-daemons/euston/daemon_component.rb +9 -49
  5. data/lib/euston-daemons/euston/daemon_component_host.rb +66 -0
  6. data/lib/euston-daemons/euston/daemon_environment.rb +10 -5
  7. data/lib/euston-daemons/euston/exceptions.rb +9 -0
  8. data/lib/euston-daemons/euston/stopwatch.rb +15 -0
  9. data/lib/euston-daemons/pipeline/config/environment.rb +74 -0
  10. data/lib/euston-daemons/pipeline/lib/command_logger/component.rb +54 -0
  11. data/lib/euston-daemons/pipeline/lib/command_logger/log.rb +31 -0
  12. data/lib/euston-daemons/pipeline/lib/command_processor/component.rb +50 -0
  13. data/lib/euston-daemons/pipeline/lib/command_processor/default_handlers/retry_failed_message.rb +34 -0
  14. data/lib/euston-daemons/pipeline/lib/command_processor/failed_message.rb +36 -0
  15. data/lib/euston-daemons/pipeline/lib/daemon.rb +77 -0
  16. data/lib/euston-daemons/pipeline/lib/event_processor/component.rb +67 -0
  17. data/lib/euston-daemons/pipeline/lib/event_processor/default_handlers/message_failure.rb +30 -0
  18. data/lib/euston-daemons/pipeline/lib/event_store_dispatcher/component.rb +68 -0
  19. data/lib/euston-daemons/pipeline/lib/message_buffer/buffer.rb +85 -0
  20. data/lib/euston-daemons/pipeline/lib/message_buffer/component.rb +59 -0
  21. data/lib/euston-daemons/pipeline/lib/snapshotter/component.rb +48 -0
  22. data/lib/euston-daemons/pipeline/rake_task.rb +45 -0
  23. data/lib/euston-daemons/rake_task.rb +40 -19
  24. data/lib/euston-daemons/rake_tasks.rb +1 -3
  25. data/lib/euston-daemons/version.rb +1 -1
  26. data/lib/euston-daemons.rb +3 -1
  27. data/spec/daemons/{command_handler_spec.rb → command_processor_spec.rb} +3 -3
  28. data/spec/daemons/{event_handler_spec.rb → event_processor_spec.rb} +2 -2
  29. data/spec/daemons/{command_buffer_publisher_spec.rb → message_buffer_spec.rb} +19 -23
  30. data/spec/daemons/{snapshot_client_spec.rb → snapshotter_spec.rb} +3 -5
  31. data/spec/spec_helper.rb +23 -9
  32. data/spec/support/filters.rb +4 -5
  33. metadata +73 -88
  34. data/lib/euston-daemons/command_processor_daemon/config/environment.rb +0 -34
  35. data/lib/euston-daemons/command_processor_daemon/lib/clients/command_handler.rb +0 -37
  36. data/lib/euston-daemons/command_processor_daemon/lib/command_handlers/retry_failed_message.rb +0 -35
  37. data/lib/euston-daemons/command_processor_daemon/lib/daemon.rb +0 -22
  38. data/lib/euston-daemons/command_processor_daemon/lib/mongo_models/failed_message.rb +0 -34
  39. data/lib/euston-daemons/command_processor_daemon/rake_task.rb +0 -36
  40. data/lib/euston-daemons/euston/daemon_client.rb +0 -24
  41. data/lib/euston-daemons/event_processor_daemon/config/environment.rb +0 -36
  42. data/lib/euston-daemons/event_processor_daemon/lib/clients/event_handler.rb +0 -42
  43. data/lib/euston-daemons/event_processor_daemon/lib/daemon.rb +0 -24
  44. data/lib/euston-daemons/event_processor_daemon/lib/event_handlers/message_failure.rb +0 -27
  45. data/lib/euston-daemons/event_processor_daemon/rake_task.rb +0 -39
  46. data/lib/euston-daemons/message_buffer_daemon/config/environment.rb +0 -42
  47. data/lib/euston-daemons/message_buffer_daemon/lib/clients/command_buffer_cleanup.rb +0 -9
  48. data/lib/euston-daemons/message_buffer_daemon/lib/clients/command_buffer_publisher.rb +0 -9
  49. data/lib/euston-daemons/message_buffer_daemon/lib/clients/command_logger.rb +0 -9
  50. data/lib/euston-daemons/message_buffer_daemon/lib/clients/euston_exchange_accessors.rb +0 -15
  51. data/lib/euston-daemons/message_buffer_daemon/lib/clients/event_buffer_cleanup.rb +0 -9
  52. data/lib/euston-daemons/message_buffer_daemon/lib/clients/event_buffer_publisher.rb +0 -9
  53. data/lib/euston-daemons/message_buffer_daemon/lib/clients/event_logger.rb +0 -9
  54. data/lib/euston-daemons/message_buffer_daemon/lib/clients/event_store_dispatcher.rb +0 -25
  55. data/lib/euston-daemons/message_buffer_daemon/lib/clients/message_buffer_cleanup.rb +0 -52
  56. data/lib/euston-daemons/message_buffer_daemon/lib/clients/message_buffer_publisher.rb +0 -37
  57. data/lib/euston-daemons/message_buffer_daemon/lib/clients/message_logger.rb +0 -45
  58. data/lib/euston-daemons/message_buffer_daemon/lib/clients/mongo_model_accessors.rb +0 -21
  59. data/lib/euston-daemons/message_buffer_daemon/lib/daemon.rb +0 -17
  60. data/lib/euston-daemons/message_buffer_daemon/lib/mongo_models/command_buffer.rb +0 -11
  61. data/lib/euston-daemons/message_buffer_daemon/lib/mongo_models/command_log.rb +0 -11
  62. data/lib/euston-daemons/message_buffer_daemon/lib/mongo_models/event_buffer.rb +0 -11
  63. data/lib/euston-daemons/message_buffer_daemon/lib/mongo_models/event_log.rb +0 -11
  64. data/lib/euston-daemons/message_buffer_daemon/lib/mongo_models/message_buffer.rb +0 -57
  65. data/lib/euston-daemons/message_buffer_daemon/lib/mongo_models/message_log.rb +0 -29
  66. data/lib/euston-daemons/message_buffer_daemon/rake_task.rb +0 -32
  67. data/lib/euston-daemons/snapshot_daemon/lib/clients/snapshotter.rb +0 -43
  68. data/sample/Rakefile +0 -63
  69. data/sample/amqp_config.yml +0 -14
  70. data/sample/command_handlers.rb +0 -17
  71. data/sample/command_processor_daemon_config.yml +0 -9
  72. data/sample/event_handlers.rb +0 -21
  73. data/sample/event_processor_daemon_config.yml +0 -8
  74. data/sample/message_buffer_daemon_config.yml +0 -8
  75. data/sample/mongoid_config.yml +0 -13
  76. data/sample/pids/.placeholder +0 -0
@@ -1,34 +0,0 @@
1
- module Euston
2
- module CommandProcessorDaemon
3
- module MongoModel
4
- class FailedMessage
5
- def initialize mongodb
6
- name = 'failed_messages'
7
- mongodb.create_collection name unless mongodb.collection_names.include? name
8
-
9
- @collection = mongodb.collection name
10
- @collection.ensure_index [ ['failure_timestamp', Mongo::ASCENDING] ], :unique => false, :name => 'failed_messages_failure_timestamp_index'
11
- end
12
-
13
- def get_by_id id
14
- @collection.find_one({ '_id' => id })
15
- end
16
-
17
- def find_all
18
- @collection.find({}, { :sort => [ 'failure_timestamp', Mongo::DESCENDING ] })
19
- end
20
-
21
- def log_failure failure
22
- failure.recursive_stringify_keys!
23
- failure['_id'] = failure.delete 'message_id'
24
-
25
- @collection.save(failure, :safe => { :fsync => true })
26
- end
27
-
28
- def remove_by_id id
29
- @collection.remove({ '_id' => id }, :safe => { :fsync => true })
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,36 +0,0 @@
1
- module Euston
2
- class CommandProcessorRakeTask < Euston::Daemons::RakeTask
3
- attr_accessor :amqp_config_path, :command_handler_namespaces, :daemon_config_path, :mongoid_config_path
4
-
5
- def initialize environment
6
- @command_handler_namespaces = []
7
- super environment, :command_processor_daemon
8
- end
9
-
10
- def before_creating_task
11
- @daemon_path = File.expand_path(File.dirname __FILE__) + File::SEPARATOR
12
- @daemon_class = 'Euston::CommandProcessorDaemon::Daemon'
13
- end
14
-
15
- def initialize_settings
16
- @logger.debug "AMQP config path: #{@amqp_config_path}"
17
- @data[:amqp_config_path] = @amqp_config_path
18
-
19
- @logger.debug "Command handler namespaces: #{@command_handler_namespaces}"
20
- @data[:command_handler_namespaces] = @command_handler_namespaces
21
-
22
- @logger.debug "Daemon config path: #{@daemon_config_path}"
23
- @data[:daemon_config_path] = @daemon_config_path
24
-
25
- @logger.debug "Mongoid config path: #{@mongoid_config_path}"
26
- @data[:mongoid_config_path] = @mongoid_config_path
27
- end
28
-
29
- def load_environment
30
- @logger.debug "Loading environment"
31
- require 'euston-daemons/command_processor_daemon/config/environment'
32
-
33
- Euston::CommandProcessorDaemon::DaemonEnvironment.new(@data).setup
34
- end
35
- end
36
- end
@@ -1,24 +0,0 @@
1
- module Euston
2
- class DaemonClient
3
- include Hollywood
4
-
5
- def run
6
- next_iteration unless stopped
7
- end
8
-
9
- def stop
10
- @stopped = true
11
- @channel.disconnect unless @channel.nil? || !@channel.respond_to?(:disconnect)
12
- end
13
-
14
- private
15
-
16
- def next_iteration
17
- # abstract
18
- end
19
-
20
- def stopped
21
- @stopped ||= false
22
- end
23
- end
24
- end
@@ -1,36 +0,0 @@
1
- require 'i18n'
2
- require 'jessica'
3
- require 'euston-rabbitmq'
4
-
5
- require 'euston-daemons/event_processor_daemon/lib/event_handlers/message_failure'
6
- require 'euston-daemons/event_processor_daemon/lib/clients/event_handler'
7
- require 'euston-daemons/event_processor_daemon/lib/daemon'
8
-
9
- module Euston
10
- module EventProcessorDaemon
11
- class DaemonEnvironment < Euston::DaemonEnvironment
12
- class << self
13
- attr_accessor :event_handler_namespaces
14
- end
15
-
16
- def initialize data
17
- @logger = data[:logger]
18
- @amqp_config = ErbYaml.read data[:amqp_config_path], data[:environment]
19
- @daemon_config = ErbYaml.read data[:daemon_config_path], data[:environment]
20
- @mongoid_config = ErbYaml.read data[:mongoid_config_path], data[:environment]
21
-
22
- @i18n_locales_path = data[:i18n_locales_path]
23
- self.class.event_handler_namespaces = data[:event_handler_namespaces]
24
- end
25
-
26
- def setup
27
- setup_safely @daemon_config[:hoptoad_key]
28
- setup_amqp @amqp_config
29
- setup_mongo @mongoid_config
30
- setup_euston @mongoid_config[:event_store_database]
31
-
32
- I18n.load_path += Dir[@i18n_locales_path] unless @i18n_locales_path.nil?
33
- end
34
- end
35
- end
36
- end
@@ -1,42 +0,0 @@
1
- module Euston
2
- module EventProcessorDaemon
3
- class EventHandler < Euston::DaemonClient
4
- def initialize channel, reference, logger
5
- @channel = channel
6
- @channel.prefetch 1
7
- @reference = reference
8
- @log = logger
9
- end
10
-
11
- private
12
-
13
- def next_iteration
14
- message_received = Proc.new do |message|
15
- event_headers = EventHeaders.from_hash message[:headers]
16
- event_body = message[:body]
17
- handler_method_name = "__event_handler__#{event_headers.type}__#{event_headers.version}"
18
-
19
- @log.debug "Delivering message to: #{@reference.handler}.#{handler_method_name}"
20
-
21
- handler_is_aggregate_root = @reference.handler.include? Euston::AggregateRoot
22
-
23
- if handler_is_aggregate_root
24
- id_getter_method = "__id_from_event_#{event_headers.type}__v#{event_headers.version}__"
25
- id = @reference.handler.send id_getter_method, event_body
26
- handler_instance = Euston::Repository.find @reference.handler, id
27
- else
28
- handler_instance = @reference.handler.new
29
- end
30
-
31
- handler_instance.send handler_method_name, event_headers.freeze, event_body.freeze
32
-
33
- Euston::Repository.save handler_instance if handler_is_aggregate_root
34
- end
35
-
36
- Euston::RabbitMq::RetryingSubscription.new(@channel, @reference.name.to_s.underscore, @log)
37
- .when(:message_received => message_received)
38
- .subscribe
39
- end
40
- end
41
- end
42
- end
@@ -1,24 +0,0 @@
1
- module Euston
2
- module EventProcessorDaemon
3
- class Daemon < Euston::Daemon
4
- private
5
-
6
- def pre_registration_setup
7
- handler_finder = Euston::RabbitMq::HandlerFinder.new [Euston::EventHandler]
8
- handler_finder.namespaces.push Euston::EventProcessorDaemon::EventHandlers, *DaemonEnvironment.event_handler_namespaces
9
- @handlers = handler_finder.find
10
-
11
- binder = Euston::RabbitMq::EventHandlerBinder.new @handlers
12
- binder.ensure_bindings_exist
13
- end
14
-
15
- def register_components
16
- env = DaemonEnvironment
17
-
18
- @handlers.each do |reference|
19
- register_component "#{reference.name.to_s.underscore}_event_handler".to_sym, EventHandler.new(AMQP::Channel.new, reference, @log)
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,27 +0,0 @@
1
- module Euston
2
- module EventProcessorDaemon
3
- module EventHandlers
4
- class MessageFailure
5
- include Euston::EventHandler
6
-
7
- subscribes :message_failed, 1 do |headers, event|
8
- headers = event[:message][:headers].dup
9
- failure = { :message_id => headers.delete(:id),
10
- :type => headers.delete(:type),
11
- :version => headers.delete(:version),
12
- :message_timestamp => headers.delete(:timestamp),
13
- :routing_key => event[:routing_key],
14
- :body => event[:message][:body],
15
- :headers => headers,
16
- :error => event[:error],
17
- :backtrace => event[:backtrace],
18
- :failure_timestamp => Time.now.to_f }
19
-
20
- model = Euston::CommandProcessorDaemon::MongoModel::FailedMessage
21
- model = model.new DaemonEnvironment.event_store_mongodb
22
- model.log_failure failure
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,39 +0,0 @@
1
- module Euston
2
- class EventProcessorRakeTask < Euston::Daemons::RakeTask
3
- attr_accessor :amqp_config_path, :daemon_config_path, :event_handler_namespaces, :i18n_locales_path, :mongoid_config_path
4
-
5
- def initialize environment
6
- @event_handler_namespaces = []
7
- super environment, :event_processor_daemon
8
- end
9
-
10
- def before_creating_task
11
- @daemon_path = File.expand_path(File.dirname __FILE__) + File::SEPARATOR
12
- @daemon_class = 'Euston::EventProcessorDaemon::Daemon'
13
- end
14
-
15
- def initialize_settings
16
- @logger.debug "AMQP config path: #{@amqp_config_path}"
17
- @data[:amqp_config_path] = @amqp_config_path
18
-
19
- @logger.debug "Daemon config path: #{@daemon_config_path}"
20
- @data[:daemon_config_path] = @daemon_config_path
21
-
22
- @logger.debug "Event handler namespaces: #{@event_handler_namespaces}"
23
- @data[:event_handler_namespaces] = @event_handler_namespaces
24
-
25
- @logger.debug "i18n locales path: #{@i18n_locales_path}"
26
- @data[:i18n_locales_path] = @i18n_locales_path
27
-
28
- @logger.debug "Mongoid config path: #{@mongoid_config_path}"
29
- @data[:mongoid_config_path] = @mongoid_config_path
30
- end
31
-
32
- def load_environment
33
- @logger.debug "Loading environment"
34
- require 'euston-daemons/event_processor_daemon/config/environment'
35
-
36
- Euston::EventProcessorDaemon::DaemonEnvironment.new(@data).setup
37
- end
38
- end
39
- end
@@ -1,42 +0,0 @@
1
- require 'jessica'
2
- require 'euston-rabbitmq'
3
-
4
- require 'euston-daemons/message_buffer_daemon/lib/mongo_models/message_buffer'
5
- require 'euston-daemons/message_buffer_daemon/lib/mongo_models/message_log'
6
- require 'euston-daemons/message_buffer_daemon/lib/mongo_models/command_buffer'
7
- require 'euston-daemons/message_buffer_daemon/lib/mongo_models/command_log'
8
- require 'euston-daemons/message_buffer_daemon/lib/mongo_models/event_buffer'
9
- require 'euston-daemons/message_buffer_daemon/lib/mongo_models/event_log'
10
- require 'euston-daemons/message_buffer_daemon/lib/clients/euston_exchange_accessors'
11
- require 'euston-daemons/message_buffer_daemon/lib/clients/mongo_model_accessors'
12
- require 'euston-daemons/message_buffer_daemon/lib/clients/message_buffer_cleanup'
13
- require 'euston-daemons/message_buffer_daemon/lib/clients/message_buffer_publisher'
14
- require 'euston-daemons/message_buffer_daemon/lib/clients/message_logger'
15
- require 'euston-daemons/message_buffer_daemon/lib/clients/command_buffer_cleanup'
16
- require 'euston-daemons/message_buffer_daemon/lib/clients/command_buffer_publisher'
17
- require 'euston-daemons/message_buffer_daemon/lib/clients/command_logger'
18
- require 'euston-daemons/message_buffer_daemon/lib/clients/event_buffer_cleanup'
19
- require 'euston-daemons/message_buffer_daemon/lib/clients/event_buffer_publisher'
20
- require 'euston-daemons/message_buffer_daemon/lib/clients/event_logger'
21
- require 'euston-daemons/message_buffer_daemon/lib/clients/event_store_dispatcher'
22
- require 'euston-daemons/message_buffer_daemon/lib/daemon'
23
-
24
- module Euston
25
- module MessageBufferDaemon
26
- class DaemonEnvironment < Euston::DaemonEnvironment
27
- def initialize data
28
- @logger = data[:logger]
29
- @amqp_config = ErbYaml.read data[:amqp_config_path], data[:environment]
30
- @daemon_config = ErbYaml.read data[:daemon_config_path], data[:environment]
31
- @mongoid_config = ErbYaml.read data[:mongoid_config_path], data[:environment]
32
- end
33
-
34
- def setup
35
- setup_safely @daemon_config[:hoptoad_key]
36
- setup_amqp @amqp_config
37
- setup_mongo @mongoid_config
38
- setup_euston @mongoid_config[:event_store_database]
39
- end
40
- end
41
- end
42
- end
@@ -1,9 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- class CommandBufferCleanup < MessageBufferCleanup
4
- def initialize channel
5
- super channel, self.class.commands_exchange(channel), self.class.command_buffer_mongo_model
6
- end
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- class CommandBufferPublisher < MessageBufferPublisher
4
- def initialize channel
5
- super channel, self.class.commands_exchange(channel), self.class.command_buffer_mongo_model
6
- end
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- class CommandLogger < MessageLogger
4
- def initialize channel
5
- super channel, self.class.commands_exchange(channel), self.class.command_log_mongo_model
6
- end
7
- end
8
- end
9
- end
@@ -1,15 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- module EustonExchangeAccessors
4
- include Euston::RabbitMq::Exchanges
5
-
6
- def commands_exchange channel
7
- get_exchange channel, :commands
8
- end
9
-
10
- def events_exchange channel
11
- get_exchange channel, :events
12
- end
13
- end
14
- end
15
- end
@@ -1,9 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- class EventBufferCleanup < MessageBufferCleanup
4
- def initialize channel
5
- super channel, self.class.events_exchange(channel), self.class.event_buffer_mongo_model
6
- end
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- class EventBufferPublisher < MessageBufferPublisher
4
- def initialize channel
5
- super channel, self.class.events_exchange(channel), self.class.event_buffer_mongo_model
6
- end
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- class EventLogger < MessageLogger
4
- def initialize channel
5
- super channel, self.class.events_exchange(channel), self.class.event_log_mongo_model
6
- end
7
- end
8
- end
9
- end
@@ -1,25 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- class EventStoreDispatcher < Euston::DaemonClient
4
- extend MongoModelAccessors
5
-
6
- def initialize
7
- @event_buffer = self.class.event_buffer_mongo_model
8
- @event_store = DaemonEnvironment.event_store
9
- end
10
-
11
- private
12
-
13
- def next_iteration
14
- begin
15
- @commits = @event_store.get_undispatched_commits
16
-
17
- @commits.each do |commit|
18
- commit.events.each { |event| @event_buffer.buffer_new_message event.to_hash }
19
- @event_store.mark_commit_as_dispatched commit
20
- end
21
- end until stopped || @commits.empty?
22
- end
23
- end
24
- end
25
- end
@@ -1,52 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- class MessageBufferCleanup < Euston::DaemonClient
4
- extend EustonExchangeAccessors
5
- extend MongoModelAccessors
6
- include Euston::RabbitMq::Queues
7
-
8
- def initialize channel, exchange, mongo_model
9
- @channel = channel
10
- @mongo_model = mongo_model
11
-
12
- @channel.prefetch(1)
13
- @exchange = exchange
14
- @queue = get_queue @channel, mongo_model.name
15
- @queue.bind @exchange, :routing_key => "#{exchange.name}.#"
16
-
17
- @queue.when(:message_decode_failed => method(:log_failure),
18
- :message_failed => method(:message_failed),
19
- :message_received => method(:remove_message_from_buffer))
20
-
21
- @consumer = @queue.consumer
22
- end
23
-
24
- private
25
-
26
- def log_failure message, error
27
- text = "A(n) #{@exchange.name} buffer queue subscription failed. [Error] #{error.message} [Payload] #{message}"
28
- error = Euston::RabbitMq::MessageDecodeFailedError.new text
29
- error.set_backtrace error.backtrace
30
-
31
- Safely.report! error
32
- end
33
-
34
- def message_failed message, error, reactive_message
35
- reactive_message.ack!
36
- log_failure message, error
37
- end
38
-
39
- def next_iteration
40
- @queue.safe_subscribe_with_timeout @consumer, subscribe_timeout
41
- end
42
-
43
- def remove_message_from_buffer message
44
- @mongo_model.remove_published_message message[:headers][:id]
45
- end
46
-
47
- def subscribe_timeout
48
- @subscribe_timeout ||= 2000
49
- end
50
- end
51
- end
52
- end
@@ -1,37 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- class MessageBufferPublisher < Euston::DaemonClient
4
- extend EustonExchangeAccessors
5
- extend MongoModelAccessors
6
-
7
- def initialize channel, exchange, mongo_model
8
- super()
9
- @channel = channel
10
- @exchange = exchange
11
- @mongo_model = mongo_model
12
- end
13
-
14
- private
15
-
16
- def dispatch_due_messages
17
- dispatched = 0
18
-
19
- @mongo_model.find_due_messages.each do |message|
20
- @mongo_model.set_next_attempt message
21
- @exchange.publish message['json'], self.class.default_publish_options.merge(:routing_key => "#{@exchange.name}.#{message['type']}")
22
- dispatched += 1
23
- end
24
-
25
- dispatched
26
- end
27
-
28
- def next_iteration
29
- @messages_dispatched = 0
30
-
31
- begin
32
- @messages_dispatched = dispatch_due_messages
33
- end until stopped || @messages_dispatched.zero?
34
- end
35
- end
36
- end
37
- end
@@ -1,45 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- class MessageLogger < Euston::DaemonClient
4
- extend EustonExchangeAccessors
5
- extend MongoModelAccessors
6
- include Euston::RabbitMq::Queues
7
-
8
- def initialize channel, exchange, mongo_model
9
- @channel = channel
10
- @exchange = exchange
11
- @mongo_model = mongo_model
12
-
13
- @queue = get_queue channel, mongo_model.name
14
- @queue.bind @exchange, :routing_key => "#{exchange.name}.#"
15
-
16
- @queue.when(:message_decode_failed => method(:log_failure),
17
- :message_failed => method(:message_failed),
18
- :message_received => method(:write_message_to_log))
19
- end
20
-
21
- private
22
-
23
- def log_failure message, error
24
- text = "A log queue subscription failed. [Error] #{error.message} [Payload] #{message}"
25
- err = Euston::RabbitMq::MessageDecodeFailedError.new text
26
- err.set_backtrace error.backtrace
27
-
28
- Safely.report! err
29
- end
30
-
31
- def message_failed message, error, header
32
- log_failure message, error
33
- header.ack
34
- end
35
-
36
- def next_iteration
37
- @queue.safe_subscribe
38
- end
39
-
40
- def write_message_to_log message
41
- @mongo_model.log_new_message message
42
- end
43
- end
44
- end
45
- end
@@ -1,21 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- module MongoModelAccessors
4
- def command_buffer_mongo_model
5
- MongoModel::CommandBuffer.new DaemonEnvironment.event_store_mongodb
6
- end
7
-
8
- def command_log_mongo_model
9
- MongoModel::CommandLog.new DaemonEnvironment.event_store_mongodb
10
- end
11
-
12
- def event_buffer_mongo_model
13
- MongoModel::EventBuffer.new DaemonEnvironment.event_store_mongodb
14
- end
15
-
16
- def event_log_mongo_model
17
- MongoModel::EventLog.new DaemonEnvironment.event_store_mongodb
18
- end
19
- end
20
- end
21
- end
@@ -1,17 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- class Daemon < Euston::Daemon
4
- private
5
-
6
- def register_components
7
- register_component :commands_logger, CommandLogger.new(AMQP::Channel.new)
8
- register_component :events_logger, EventLogger.new(AMQP::Channel.new)
9
- register_component :command_buffer_publisher, CommandBufferPublisher.new(AMQP::Channel.new)
10
- register_component :command_buffer_cleanup, CommandBufferCleanup.new(AMQP::Channel.new)
11
- register_component :event_buffer_publisher, EventBufferPublisher.new(AMQP::Channel.new)
12
- register_component :event_buffer_cleanup, EventBufferCleanup.new(AMQP::Channel.new)
13
- register_component :event_store_dispatcher, EventStoreDispatcher.new
14
- end
15
- end
16
- end
17
- end
@@ -1,11 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- module MongoModel
4
- class CommandBuffer < MessageBuffer
5
- def initialize event_store_mongodb
6
- super 'command_buffer', event_store_mongodb
7
- end
8
- end
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- module MongoModel
4
- class CommandLog < MessageLog
5
- def initialize event_store_mongodb
6
- super 'command_log', event_store_mongodb
7
- end
8
- end
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- module MongoModel
4
- class EventBuffer < MessageBuffer
5
- def initialize event_store_mongodb
6
- super 'event_buffer', event_store_mongodb
7
- end
8
- end
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module Euston
2
- module MessageBufferDaemon
3
- module MongoModel
4
- class EventLog < MessageLog
5
- def initialize event_store_mongodb
6
- super 'event_log', event_store_mongodb
7
- end
8
- end
9
- end
10
- end
11
- end