euston-daemons 1.1.0-java → 1.2.0-java

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 (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,10 +1,6 @@
1
- describe 'command buffer publisher client', :purge_event_store do
2
- require 'euston-daemons/message_buffer_daemon/lib/clients/euston_exchange_accessors'
3
- require 'euston-daemons/message_buffer_daemon/lib/clients/mongo_model_accessors'
4
- require 'euston-daemons/message_buffer_daemon/lib/clients/message_buffer_publisher'
5
- require 'euston-daemons/message_buffer_daemon/lib/clients/command_buffer_publisher'
6
- require 'euston-daemons/message_buffer_daemon/lib/mongo_models/message_buffer'
7
- require 'euston-daemons/message_buffer_daemon/lib/mongo_models/command_buffer'
1
+ describe 'message buffer component', :purge_event_store do
2
+ require 'euston-daemons/pipeline/lib/message_buffer/buffer'
3
+ require 'euston-daemons/pipeline/lib/message_buffer/component'
8
4
 
9
5
  let(:logger) { Euston::NullLogger.instance }
10
6
  let(:channel) { double('channel').as_null_object }
@@ -12,8 +8,8 @@ describe 'command buffer publisher client', :purge_event_store do
12
8
  let(:exchange) { double('exchange').as_null_object }
13
9
  let(:published) { [] }
14
10
  let(:collection) { @event_store_database[buffer.name] }
15
- let(:buffer) { Euston::MessageBufferDaemon::MongoModel::CommandBuffer.new @event_store_database }
16
- let(:publisher) { Euston::MessageBufferDaemon::CommandBufferPublisher.new channel }
11
+ let(:buffer) { Euston::Daemons::Pipeline::MessageBuffer::Buffer.new @event_store_database }
12
+ let(:component) { Euston::Daemons::Pipeline::MessageBuffer::Component.new channel }
17
13
 
18
14
  module Euston
19
15
  class DaemonEnvironment
@@ -36,8 +32,8 @@ describe 'command buffer publisher client', :purge_event_store do
36
32
  it { should == 0 }
37
33
  end
38
34
 
39
- context 'the publisher runs' do
40
- before { publisher.run }
35
+ context 'the component runs' do
36
+ before { component.run }
41
37
 
42
38
  describe 'published commands' do
43
39
  subject { published }
@@ -49,7 +45,7 @@ describe 'command buffer publisher client', :purge_event_store do
49
45
  context 'there is a due command' do
50
46
 
51
47
  before do
52
- buffer.buffer_new_message command
48
+ buffer.enqueue :commands, command
53
49
  end
54
50
 
55
51
  describe 'command buffer size' do
@@ -57,8 +53,8 @@ describe 'command buffer publisher client', :purge_event_store do
57
53
  it { should == 1 }
58
54
  end
59
55
 
60
- context 'the publisher runs' do
61
- before { publisher.run }
56
+ context 'the component runs' do
57
+ before { component.run }
62
58
 
63
59
  describe 'published commands' do
64
60
  subject { published }
@@ -71,20 +67,20 @@ describe 'command buffer publisher client', :purge_event_store do
71
67
  end
72
68
 
73
69
  describe 'buffered command' do
74
- subject { collection.find_one }
75
- its(['next_attempt']) { should > Time.now.to_f + 2 }
70
+ subject { collection.count }
71
+ it { should == 0 }
76
72
  end
77
73
  end
78
74
  end
79
75
 
80
76
  context 'there is a command that is not yet due' do
81
77
  before do
82
- buffer.buffer_new_message command
83
- collection.update({}, { '$set' => { 'next_attempt' => Time.now.to_f + 1000 } }, { :safe => true })
78
+ buffer.enqueue :commands, command
79
+ collection.update({}, { '$set' => { 'dispatch_at' => Time.now.to_f + 1000 } }, { :safe => true })
84
80
  end
85
81
 
86
- context 'the publisher runs' do
87
- before { publisher.run }
82
+ context 'the component runs' do
83
+ before { component.run }
88
84
 
89
85
  describe 'published commands' do
90
86
  subject { published }
@@ -95,11 +91,11 @@ describe 'command buffer publisher client', :purge_event_store do
95
91
 
96
92
  context 'a command is buffered for dispatch in the future' do
97
93
  before do
98
- buffer.buffer_new_message command, Time.now.to_f + 1000
94
+ buffer.enqueue :commands, command, Time.now.to_f + 1000
99
95
  end
100
96
 
101
- context 'the publisher runs' do
102
- before { publisher.run }
97
+ context 'the component runs' do
98
+ before { component.run }
103
99
 
104
100
  describe 'published commands' do
105
101
  subject { published }
@@ -1,9 +1,9 @@
1
- describe 'snapshot client', :purge_event_store, :euston_event_store do
2
- require 'euston-daemons/snapshot_daemon/lib/clients/snapshotter'
1
+ describe 'snapshotter component', :purge_event_store, :euston_event_store do
2
+ require 'euston-daemons/pipeline/lib/snapshotter/component'
3
3
 
4
4
  let(:logger) { Euston::NullLogger.instance }
5
5
  let(:threshold) { 2 }
6
- let(:snapshotter) { Euston::SnapshotDaemon::Snapshotter.new @event_store, threshold, logger }
6
+ let(:snapshotter) { Euston::Daemons::Pipeline::Snapshotter::Component.new @event_store, threshold, logger }
7
7
  let(:commands) { [] }
8
8
  let(:counter_id) { Uuid.generate }
9
9
 
@@ -55,8 +55,6 @@ describe 'snapshot client', :purge_event_store, :euston_event_store do
55
55
  end
56
56
 
57
57
  context 'multiple snapshots taken over time' do
58
- # let(:logger) { Logger.new(STDOUT) }
59
-
60
58
  let(:commands) { [ Factory.build(:create_counter_command, :id => counter_id),
61
59
  Factory.build(:increment_counter_command, :counter_id => counter_id, :amount => 1),
62
60
  Factory.build(:increment_counter_command, :counter_id => counter_id, :amount => 2) ] }
data/spec/spec_helper.rb CHANGED
@@ -10,6 +10,7 @@ require 'cranky'
10
10
  require 'ffaker'
11
11
  require 'mongo' unless jruby
12
12
  require 'jmongo' if jruby
13
+ require 'hot_bunnies' if jruby
13
14
  require 'safely'
14
15
 
15
16
  specs_path = File.dirname __FILE__
@@ -26,18 +27,21 @@ Safely.configure do |config|
26
27
  config.strategies = [ Safely::Strategy::Log ]
27
28
  end
28
29
 
29
- amqp_config = { :host => 'localhost', :vhost => 'euston-daemons-test', :user => 'euston-daemons-test-user', :pass => 'password' }
30
+ amqp_config = { :host => 'localhost',
31
+ :virtual_host => 'euston-daemons-test',
32
+ :username => 'euston-daemons-test-user',
33
+ :password => 'password' }
30
34
 
31
- mongo_connection = Mongo::Connection.from_uri 'mongodb://0.0.0.0:27017/', :safe => true, :fsync => true, :journal => true
32
- event_store_database = Mongo::DB.new 'euston-daemons-test-event-store', mongo_connection
33
- read_model_database = Mongo::DB.new 'euston-daemons-test-read-model', mongo_connection
35
+ mongo_connection = Mongo::Connection.from_uri 'mongodb://0.0.0.0:27017/?safe=true;fsync=true;autoconnectretry=true;w=1;'
36
+ event_store_database = Mongo::DB.new 'euston-daemons-test-event-store', mongo_connection
37
+ projections_database = Mongo::DB.new 'euston-daemons-test-projections', mongo_connection
34
38
 
35
39
  RSpec.configure do |config|
36
40
  config.treat_symbols_as_metadata_keys_with_true_values = true
37
41
 
38
42
  config.before(:each) do
39
43
  @event_store_database = event_store_database
40
- @read_model_database = read_model_database
44
+ @projections_database = projections_database
41
45
  end
42
46
 
43
47
  config.before(:each, :euston_event_store) do
@@ -63,15 +67,25 @@ RSpec.configure do |config|
63
67
 
64
68
  config.before(:each, :purge_mongo) do
65
69
  purge_database event_store_database
66
- purge_database read_model_database
70
+ purge_database projections_database
67
71
  end
68
72
 
69
73
  config.before(:each, :purge_rabbitmq) do
70
74
  initialize_rabbitmq amqp_config
71
- initialize_amqp amqp_config
72
75
  end
73
76
 
74
- config.before(:each, :purge_read_model) do
75
- purge_database read_model_database
77
+ config.before(:all, :purge_rabbitmq) do
78
+ @amqp_connection = HotBunnies.connect amqp_config
79
+
80
+ initialize_amqp @amqp_connection
81
+ end
82
+
83
+ config.before(:each, :purge_projections) do
84
+ purge_database projections_database
85
+ end
86
+
87
+ config.after(:all, :purge_rabbitmq) do
88
+ @channel.close
89
+ @amqp_connection.close
76
90
  end
77
91
  end
@@ -1,12 +1,11 @@
1
- def initialize_amqp config
2
- AMQP.settings.merge! config
3
- @channel = AMQP::Channel.new
1
+ def initialize_amqp connection
2
+ @channel = connection.create_channel
4
3
  end
5
4
 
6
5
  def initialize_rabbitmq config
7
6
  @rabbitmqadmin = RabbitMqAdminCli.new
8
- @rabbitmqadmin.initialize_vhost config[:vhost]
9
- @rabbitmqadmin.initialize_user config[:vhost], config[:user], config[:pass]
7
+ @rabbitmqadmin.initialize_vhost config[:virtual_host]
8
+ @rabbitmqadmin.initialize_user config[:virtual_host], config[:username], config[:password]
10
9
  end
11
10
 
12
11
  def purge_database database
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: euston-daemons
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.1.0
5
+ version: 1.2.0
6
6
  platform: java
7
7
  authors:
8
8
  - Lee Henson
@@ -10,194 +10,205 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-03 00:00:00.000000000 +01:00
13
+ date: 2011-10-12 00:00:00.000000000 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activemodel
18
- version_requirements: &2198 !ruby/object:Gem::Requirement
18
+ version_requirements: &2216 !ruby/object:Gem::Requirement
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
22
  version: 3.0.0
23
23
  none: false
24
- requirement: *2198
24
+ requirement: *2216
25
25
  prerelease: false
26
26
  type: :runtime
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
- version_requirements: &2216 !ruby/object:Gem::Requirement
29
+ version_requirements: &2234 !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: 3.0.0
34
34
  none: false
35
- requirement: *2216
35
+ requirement: *2234
36
36
  prerelease: false
37
37
  type: :runtime
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: erb-yaml
40
- version_requirements: &2232 !ruby/object:Gem::Requirement
40
+ version_requirements: &2250 !ruby/object:Gem::Requirement
41
41
  requirements:
42
42
  - - ~>
43
43
  - !ruby/object:Gem::Version
44
44
  version: 1.0.0
45
45
  none: false
46
- requirement: *2232
46
+ requirement: *2250
47
47
  prerelease: false
48
48
  type: :runtime
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: euston
51
- version_requirements: &2248 !ruby/object:Gem::Requirement
51
+ version_requirements: &2266 !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ~>
54
54
  - !ruby/object:Gem::Version
55
- version: 1.1.0
55
+ version: 1.2.0
56
56
  none: false
57
- requirement: *2248
57
+ requirement: *2266
58
58
  prerelease: false
59
59
  type: :runtime
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: euston-eventstore
62
- version_requirements: &2264 !ruby/object:Gem::Requirement
62
+ version_requirements: &2282 !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - ~>
65
65
  - !ruby/object:Gem::Version
66
- version: 1.1.0
66
+ version: 1.2.0
67
67
  none: false
68
- requirement: *2264
68
+ requirement: *2282
69
69
  prerelease: false
70
70
  type: :runtime
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: euston-rabbitmq
73
- version_requirements: &2280 !ruby/object:Gem::Requirement
73
+ version_requirements: &2298 !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 1.1.0
77
+ version: 1.2.0
78
78
  none: false
79
- requirement: *2280
79
+ requirement: *2298
80
80
  prerelease: false
81
81
  type: :runtime
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: hollywood
84
- version_requirements: &2296 !ruby/object:Gem::Requirement
84
+ version_requirements: &2314 !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - ~>
87
87
  - !ruby/object:Gem::Version
88
88
  version: 1.0.0
89
89
  none: false
90
- requirement: *2296
90
+ requirement: *2314
91
91
  prerelease: false
92
92
  type: :runtime
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: i18n
95
- version_requirements: &2312 !ruby/object:Gem::Requirement
95
+ version_requirements: &2330 !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - ~>
98
98
  - !ruby/object:Gem::Version
99
99
  version: 0.5.0
100
100
  none: false
101
- requirement: *2312
101
+ requirement: *2330
102
+ prerelease: false
103
+ type: :runtime
104
+ - !ruby/object:Gem::Dependency
105
+ name: macaddr
106
+ version_requirements: &2346 !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 1.4.0
111
+ none: false
112
+ requirement: *2346
102
113
  prerelease: false
103
114
  type: :runtime
104
115
  - !ruby/object:Gem::Dependency
105
116
  name: safely
106
- version_requirements: &2328 !ruby/object:Gem::Requirement
117
+ version_requirements: &2362 !ruby/object:Gem::Requirement
107
118
  requirements:
108
119
  - - ~>
109
120
  - !ruby/object:Gem::Version
110
121
  version: 0.3.0
111
122
  none: false
112
- requirement: *2328
123
+ requirement: *2362
113
124
  prerelease: false
114
125
  type: :runtime
115
126
  - !ruby/object:Gem::Dependency
116
- name: jessica
117
- version_requirements: &2344 !ruby/object:Gem::Requirement
127
+ name: hot_bunnies
128
+ version_requirements: &2378 !ruby/object:Gem::Requirement
118
129
  requirements:
119
130
  - - ~>
120
131
  - !ruby/object:Gem::Version
121
- version: 1.0.0
132
+ version: 1.3.0.pre1
122
133
  none: false
123
- requirement: *2344
134
+ requirement: *2378
124
135
  prerelease: false
125
136
  type: :runtime
126
137
  - !ruby/object:Gem::Dependency
127
138
  name: jmongo
128
- version_requirements: &2360 !ruby/object:Gem::Requirement
139
+ version_requirements: &2394 !ruby/object:Gem::Requirement
129
140
  requirements:
130
141
  - - ~>
131
142
  - !ruby/object:Gem::Version
132
143
  version: 1.1.0
133
144
  none: false
134
- requirement: *2360
145
+ requirement: *2394
135
146
  prerelease: false
136
147
  type: :runtime
137
148
  - !ruby/object:Gem::Dependency
138
149
  name: awesome_print
139
- version_requirements: &2376 !ruby/object:Gem::Requirement
150
+ version_requirements: &2410 !ruby/object:Gem::Requirement
140
151
  requirements:
141
152
  - - ~>
142
153
  - !ruby/object:Gem::Version
143
154
  version: 0.4.0
144
155
  none: false
145
- requirement: *2376
156
+ requirement: *2410
146
157
  prerelease: false
147
158
  type: :development
148
159
  - !ruby/object:Gem::Dependency
149
160
  name: cranky
150
- version_requirements: &2394 !ruby/object:Gem::Requirement
161
+ version_requirements: &2428 !ruby/object:Gem::Requirement
151
162
  requirements:
152
163
  - - ~>
153
164
  - !ruby/object:Gem::Version
154
165
  version: 0.2.0
155
166
  none: false
156
- requirement: *2394
167
+ requirement: *2428
157
168
  prerelease: false
158
169
  type: :development
159
170
  - !ruby/object:Gem::Dependency
160
171
  name: ffaker
161
- version_requirements: &2410 !ruby/object:Gem::Requirement
172
+ version_requirements: &2444 !ruby/object:Gem::Requirement
162
173
  requirements:
163
174
  - - ~>
164
175
  - !ruby/object:Gem::Version
165
176
  version: 1.8.0
166
177
  none: false
167
- requirement: *2410
178
+ requirement: *2444
168
179
  prerelease: false
169
180
  type: :development
170
181
  - !ruby/object:Gem::Dependency
171
182
  name: fuubar
172
- version_requirements: &2426 !ruby/object:Gem::Requirement
183
+ version_requirements: &2460 !ruby/object:Gem::Requirement
173
184
  requirements:
174
185
  - - ~>
175
186
  - !ruby/object:Gem::Version
176
187
  version: 0.0.0
177
188
  none: false
178
- requirement: *2426
189
+ requirement: *2460
179
190
  prerelease: false
180
191
  type: :development
181
192
  - !ruby/object:Gem::Dependency
182
193
  name: rabbitmqadmin-cli
183
- version_requirements: &2442 !ruby/object:Gem::Requirement
194
+ version_requirements: &2476 !ruby/object:Gem::Requirement
184
195
  requirements:
185
196
  - - ~>
186
197
  - !ruby/object:Gem::Version
187
198
  version: 1.0.2
188
199
  none: false
189
- requirement: *2442
200
+ requirement: *2476
190
201
  prerelease: false
191
202
  type: :development
192
203
  - !ruby/object:Gem::Dependency
193
204
  name: rspec
194
- version_requirements: &2458 !ruby/object:Gem::Requirement
205
+ version_requirements: &2492 !ruby/object:Gem::Requirement
195
206
  requirements:
196
207
  - - ~>
197
208
  - !ruby/object:Gem::Version
198
209
  version: 2.6.0
199
210
  none: false
200
- requirement: *2458
211
+ requirement: *2492
201
212
  prerelease: false
202
213
  type: :development
203
214
  description: ''
@@ -213,59 +224,33 @@ files:
213
224
  - Rakefile
214
225
  - euston-daemons.gemspec
215
226
  - lib/euston-daemons.rb
216
- - lib/euston-daemons/command_processor_daemon/config/environment.rb
217
- - lib/euston-daemons/command_processor_daemon/lib/clients/command_handler.rb
218
- - lib/euston-daemons/command_processor_daemon/lib/command_handlers/retry_failed_message.rb
219
- - lib/euston-daemons/command_processor_daemon/lib/daemon.rb
220
- - lib/euston-daemons/command_processor_daemon/lib/mongo_models/failed_message.rb
221
- - lib/euston-daemons/command_processor_daemon/rake_task.rb
222
227
  - lib/euston-daemons/euston/daemon.rb
223
- - lib/euston-daemons/euston/daemon_client.rb
224
228
  - lib/euston-daemons/euston/daemon_component.rb
229
+ - lib/euston-daemons/euston/daemon_component_host.rb
225
230
  - lib/euston-daemons/euston/daemon_environment.rb
226
- - lib/euston-daemons/event_processor_daemon/config/environment.rb
227
- - lib/euston-daemons/event_processor_daemon/lib/clients/event_handler.rb
228
- - lib/euston-daemons/event_processor_daemon/lib/daemon.rb
229
- - lib/euston-daemons/event_processor_daemon/lib/event_handlers/message_failure.rb
230
- - lib/euston-daemons/event_processor_daemon/rake_task.rb
231
- - lib/euston-daemons/message_buffer_daemon/config/environment.rb
232
- - lib/euston-daemons/message_buffer_daemon/lib/clients/command_buffer_cleanup.rb
233
- - lib/euston-daemons/message_buffer_daemon/lib/clients/command_buffer_publisher.rb
234
- - lib/euston-daemons/message_buffer_daemon/lib/clients/command_logger.rb
235
- - lib/euston-daemons/message_buffer_daemon/lib/clients/euston_exchange_accessors.rb
236
- - lib/euston-daemons/message_buffer_daemon/lib/clients/event_buffer_cleanup.rb
237
- - lib/euston-daemons/message_buffer_daemon/lib/clients/event_buffer_publisher.rb
238
- - lib/euston-daemons/message_buffer_daemon/lib/clients/event_logger.rb
239
- - lib/euston-daemons/message_buffer_daemon/lib/clients/event_store_dispatcher.rb
240
- - lib/euston-daemons/message_buffer_daemon/lib/clients/message_buffer_cleanup.rb
241
- - lib/euston-daemons/message_buffer_daemon/lib/clients/message_buffer_publisher.rb
242
- - lib/euston-daemons/message_buffer_daemon/lib/clients/message_logger.rb
243
- - lib/euston-daemons/message_buffer_daemon/lib/clients/mongo_model_accessors.rb
244
- - lib/euston-daemons/message_buffer_daemon/lib/daemon.rb
245
- - lib/euston-daemons/message_buffer_daemon/lib/mongo_models/command_buffer.rb
246
- - lib/euston-daemons/message_buffer_daemon/lib/mongo_models/command_log.rb
247
- - lib/euston-daemons/message_buffer_daemon/lib/mongo_models/event_buffer.rb
248
- - lib/euston-daemons/message_buffer_daemon/lib/mongo_models/event_log.rb
249
- - lib/euston-daemons/message_buffer_daemon/lib/mongo_models/message_buffer.rb
250
- - lib/euston-daemons/message_buffer_daemon/lib/mongo_models/message_log.rb
251
- - lib/euston-daemons/message_buffer_daemon/rake_task.rb
231
+ - lib/euston-daemons/euston/exceptions.rb
232
+ - lib/euston-daemons/euston/stopwatch.rb
233
+ - lib/euston-daemons/pipeline/config/environment.rb
234
+ - lib/euston-daemons/pipeline/lib/command_logger/component.rb
235
+ - lib/euston-daemons/pipeline/lib/command_logger/log.rb
236
+ - lib/euston-daemons/pipeline/lib/command_processor/component.rb
237
+ - lib/euston-daemons/pipeline/lib/command_processor/default_handlers/retry_failed_message.rb
238
+ - lib/euston-daemons/pipeline/lib/command_processor/failed_message.rb
239
+ - lib/euston-daemons/pipeline/lib/daemon.rb
240
+ - lib/euston-daemons/pipeline/lib/event_processor/component.rb
241
+ - lib/euston-daemons/pipeline/lib/event_processor/default_handlers/message_failure.rb
242
+ - lib/euston-daemons/pipeline/lib/event_store_dispatcher/component.rb
243
+ - lib/euston-daemons/pipeline/lib/message_buffer/buffer.rb
244
+ - lib/euston-daemons/pipeline/lib/message_buffer/component.rb
245
+ - lib/euston-daemons/pipeline/lib/snapshotter/component.rb
246
+ - lib/euston-daemons/pipeline/rake_task.rb
252
247
  - lib/euston-daemons/rake_task.rb
253
248
  - lib/euston-daemons/rake_tasks.rb
254
- - lib/euston-daemons/snapshot_daemon/lib/clients/snapshotter.rb
255
249
  - lib/euston-daemons/version.rb
256
- - sample/Rakefile
257
- - sample/amqp_config.yml
258
- - sample/command_handlers.rb
259
- - sample/command_processor_daemon_config.yml
260
- - sample/event_handlers.rb
261
- - sample/event_processor_daemon_config.yml
262
- - sample/message_buffer_daemon_config.yml
263
- - sample/mongoid_config.yml
264
- - sample/pids/.placeholder
265
- - spec/daemons/command_buffer_publisher_spec.rb
266
- - spec/daemons/command_handler_spec.rb
267
- - spec/daemons/event_handler_spec.rb
268
- - spec/daemons/snapshot_client_spec.rb
250
+ - spec/daemons/command_processor_spec.rb
251
+ - spec/daemons/event_processor_spec.rb
252
+ - spec/daemons/message_buffer_spec.rb
253
+ - spec/daemons/snapshotter_spec.rb
269
254
  - spec/spec_helper.rb
270
255
  - spec/support/factories/commands.rb
271
256
  - spec/support/factories/commit.rb
@@ -1,34 +0,0 @@
1
- require 'jessica'
2
- require 'euston-rabbitmq'
3
-
4
- require 'euston-daemons/command_processor_daemon/lib/mongo_models/failed_message'
5
- require 'euston-daemons/command_processor_daemon/lib/command_handlers/retry_failed_message'
6
- require 'euston-daemons/command_processor_daemon/lib/clients/command_handler'
7
- require 'euston-daemons/command_processor_daemon/lib/daemon'
8
-
9
- module Euston
10
- module CommandProcessorDaemon
11
- class DaemonEnvironment < Euston::DaemonEnvironment
12
- class << self
13
- attr_accessor :command_handler_namespaces, :client_instances
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
- self.class.client_instances = @daemon_config[:client_instances]
23
- self.class.command_handler_namespaces = data[:command_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
- end
32
- end
33
- end
34
- end
@@ -1,37 +0,0 @@
1
- module Euston
2
- module CommandProcessorDaemon
3
- class CommandHandler < Euston::DaemonClient
4
- def initialize channel, handlers, logger
5
- @channel = channel
6
- @channel.prefetch 1
7
- @handlers = handlers
8
- @log = logger
9
- end
10
-
11
- private
12
-
13
- def next_iteration
14
- message_received = Proc.new do |message|
15
- command_headers = CommandHeaders.from_hash(message[:headers]).freeze
16
- command_body = message[:body].freeze
17
-
18
- handler_type = command_headers.type.to_s.camelize.to_sym
19
- handler_method_name = "__version__#{command_headers.version}"
20
- reference = @handlers.find { |reference| reference.name == handler_type }
21
-
22
- if reference.nil?
23
- @log.debug "Delivering command #{command_headers} to command bus"
24
- Euston::CommandBus.publish command_headers, command_body
25
- else
26
- @log.debug "Delivering command #{command_headers} to #{reference.name}.#{handler_method_name}"
27
- reference.handler.new.send handler_method_name, command_headers, command_body
28
- end
29
- end
30
-
31
- Euston::RabbitMq::RetryingSubscription.new(@channel, :command_handlers, @log)
32
- .when(:message_received => message_received)
33
- .subscribe
34
- end
35
- end
36
- end
37
- end
@@ -1,35 +0,0 @@
1
- module Euston
2
- module CommandProcessorDaemon
3
- module CommandHandlers
4
- class RetryFailedMessage
5
- include Euston::CommandHandler
6
-
7
- version 1 do |headers, command|
8
- model = MongoModel::FailedMessage.new DaemonEnvironment.event_store_mongodb
9
- message = model.get_by_id command[:id]
10
-
11
- unless message.nil?
12
- routing_key = message['routing_key']
13
- exchange = routing_key.split('.').first
14
-
15
- headers = message['headers'].merge(:id => command[:id],
16
- :type => message['type'],
17
- :version => message['version'] )
18
-
19
- if exchange == 'commands'
20
- buffer = MessageBufferDaemon::MongoModel::CommandBuffer
21
- elsif exchange == 'events'
22
- buffer = MessageBufferDaemon::MongoModel::EventBuffer
23
- end
24
-
25
- buffer = buffer.new DaemonEnvironment.event_store_mongodb
26
- buffer.push :headers => headers,
27
- :body => message['body']
28
-
29
- model.remove_by_id command[:id]
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,22 +0,0 @@
1
- module Euston
2
- module CommandProcessorDaemon
3
- class Daemon < Euston::Daemon
4
- private
5
-
6
- def pre_registration_setup
7
- handler_finder = Euston::RabbitMq::HandlerFinder.new [Euston::CommandHandler]
8
- handler_finder.namespaces.push Euston::CommandProcessorDaemon::CommandHandlers, *DaemonEnvironment.command_handler_namespaces
9
- @handlers = handler_finder.find
10
-
11
- binder = Euston::RabbitMq::CommandHandlerBinder.new @handlers
12
- binder.ensure_bindings_exist
13
- end
14
-
15
- def register_components
16
- (1..DaemonEnvironment.client_instances).each do |i|
17
- register_component "command_handler_#{i}".to_sym, CommandHandler.new(AMQP::Channel.new, @handlers, @log)
18
- end
19
- end
20
- end
21
- end
22
- end