legionio 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +98 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +38 -8
  5. data/CHANGELOG.md +7 -0
  6. data/Gemfile +12 -9
  7. data/LICENSE.txt +21 -0
  8. data/README.md +46 -0
  9. data/Rakefile +1 -1
  10. data/bin/console +3 -2
  11. data/bin/legion +9 -6
  12. data/bin/test +28 -1
  13. data/bitbucket-pipelines.yml +13 -8
  14. data/legion.gemspec +27 -21
  15. data/lib/legion.rb +14 -5
  16. data/lib/legion/exceptions/handled_task.rb +6 -0
  17. data/lib/legion/exceptions/missingargument.rb +2 -2
  18. data/lib/legion/extensions.rb +151 -0
  19. data/lib/legion/extensions/actors/base.rb +53 -0
  20. data/lib/legion/extensions/actors/every.rb +50 -0
  21. data/lib/legion/extensions/actors/loop.rb +34 -0
  22. data/lib/legion/extensions/actors/nothing.rb +15 -0
  23. data/lib/legion/extensions/actors/once.rb +42 -0
  24. data/lib/legion/extensions/actors/poll.rb +90 -0
  25. data/lib/legion/extensions/actors/subscription.rb +120 -0
  26. data/lib/legion/extensions/builders/actors.rb +62 -0
  27. data/lib/legion/extensions/builders/base.rb +38 -0
  28. data/lib/legion/extensions/builders/helpers.rb +26 -0
  29. data/lib/legion/extensions/builders/runners.rb +54 -0
  30. data/lib/legion/extensions/core.rb +84 -0
  31. data/lib/legion/extensions/helpers/base.rb +88 -0
  32. data/lib/legion/extensions/helpers/core.rb +20 -0
  33. data/lib/legion/extensions/helpers/lex.rb +22 -0
  34. data/lib/legion/extensions/helpers/logger.rb +48 -0
  35. data/lib/legion/extensions/helpers/task.rb +42 -0
  36. data/lib/legion/extensions/helpers/transport.rb +45 -0
  37. data/lib/legion/extensions/transport.rb +156 -0
  38. data/lib/legion/process.rb +8 -3
  39. data/lib/legion/runner.rb +57 -0
  40. data/lib/legion/runner/log.rb +12 -0
  41. data/lib/legion/runner/status.rb +72 -0
  42. data/lib/legion/service.rb +44 -27
  43. data/lib/legion/supervison.rb +10 -24
  44. data/lib/legion/version.rb +1 -1
  45. metadata +184 -46
  46. data/lib/legion/extension/loader.rb +0 -96
  47. data/lib/legion/runners/runner.rb +0 -58
@@ -1,63 +1,80 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Legion
4
- # Used for creating the actual legion service
5
4
  class Service
6
- def initialize(_options = {})
7
- setup_logging
5
+ def modules
6
+ [Legion::Crypt, Legion::Transport, Legion::Cache, Legion::Data, Legion::Supervision].freeze
7
+ end
8
+
9
+ def initialize(transport: true, cache: true, data: true, supervision: true, extensions: true, crypt: true, log_level: 'info') # rubocop:disable Metrics/ParameterLists
10
+ setup_logging(log_level)
8
11
  Legion::Logging.debug('Starting Legion::Service')
9
12
  setup_settings
10
- setup_transport
11
- setup_sequel
12
- setup_supervision
13
- sleep(0.1)
14
- load_extensions
13
+ Legion::Logging.info "node name: #{Legion::Settings[:client][:name]}"
14
+
15
+ require 'legion/crypt' if crypt
16
+ Legion::Crypt.start if crypt
17
+ setup_transport if transport
18
+ setup_cache if cache
19
+ setup_data if data
20
+ setup_supervision if supervision
21
+ require 'legion/runner'
22
+
23
+ load_extensions if extensions
24
+ Legion::Crypt.setup_safe if crypt
25
+
26
+ Legion::Settings[:client][:ready] = true
27
+ end
28
+
29
+ def setup_cache
30
+ require 'legion/cache'
31
+ Legion::Cache.setup
15
32
  end
16
33
 
17
- def setup_sequel
18
- require 'legion/data/connection'
19
- Legion::Data::Connection.new
20
- Legion::Data::Connection.new
21
- Legion::Data::Connection.new
22
- @connected = true
34
+ def setup_data
35
+ require 'legion/data'
36
+ Legion::Settings.merge_settings(:data, Legion::Data::Settings.default)
37
+ Legion::Data.setup
23
38
  end
24
39
 
25
40
  def setup_settings
26
41
  require 'legion/settings'
27
42
  Legion::Logging.debug('Loading Legion::Settings')
28
- @settings = Legion::Settings.load(config_dir: './settings')
43
+ Legion::Settings.load(config_dir: './settings')
29
44
  Legion::Logging.info('Legion::Settings Loaded')
30
45
  end
31
46
 
32
- def setup_logging
47
+ def setup_logging(_log_level = 'info')
33
48
  require 'legion/logging'
34
- Legion::Logging.setup(level: 'info')
49
+ Legion::Logging.setup(level: 'info', trace: true)
35
50
  end
36
51
 
37
52
  def setup_transport
38
53
  require 'legion/transport'
39
- require 'legion/transport/connection'
40
- Legion::Transport::Connection.new
54
+ Legion::Settings.merge_settings(:transport, Legion::Transport::Settings.default)
55
+ Legion::Transport::Connection.setup
41
56
  end
42
57
 
43
58
  def setup_supervision
44
- require 'celluloid/current'
45
- Celluloid.logger = Legion::Logging
46
59
  require_relative('supervison')
47
- @supervision = Legion::Supervision.new
60
+ @supervision = Legion::Supervision.setup
48
61
  end
49
62
 
50
63
  def shutdown
51
64
  Legion::Logging.info('Legion::Service.shutdown was called')
52
65
  @shutdown = true
53
- @supervision.stop_supervision
54
- Celluloid.shutdown
66
+ Legion::Extensions.shutdown
67
+
68
+ sleep(0.2)
69
+ Legion::Data.shutdown
70
+ Legion::Cache.shutdown
71
+ Legion::Transport::Connection.shutdown
72
+ Legion::Crypt.shutdown
55
73
  end
56
74
 
57
75
  def load_extensions
58
- require 'legion/runners/runner'
59
- require 'legion/extension/loader'
60
- Legion::Extension::Loader.new(@supervision).load_extensions
76
+ require 'legion/runner'
77
+ Legion::Extensions.hook_extensions
61
78
  end
62
79
  end
63
80
  end
@@ -1,28 +1,14 @@
1
- require 'celluloid/io'
2
-
3
1
  module Legion
4
- # Used to manage and start Celluloid and Supervisor
5
- class Supervision
6
- attr_accessor :supervision_group
7
- def initialize
8
- Legion::Logging.debug('Initializing Legion::Supervision')
9
- Legion::Logging.info('Starting Celluloid')
10
- Celluloid.logger = Legion::Logging
11
- start_supervision
12
- end
13
-
14
- def start_supervision
15
- Legion::Logging.debug('Starting Celluloid::Supervision::Container.run!')
16
- @supervision_group = Celluloid::Supervision::Container.run!
17
- Legion::Logging.info('Celluloid Supervisor has started')
18
- end
19
-
20
- def stop_supervision
21
- Legion::Logging.info('Shutting down the Supervision group')
22
- @supervision_group.shutdown
23
- sleep(1)
24
- Celluloid.shutdown
25
- Legion::Logging.info('Legion Celluloid Supervision Group has been shutdown')
2
+ module Supervision
3
+ class << self
4
+ attr_accessor :timer_tasks
5
+ def setup
6
+ @timer_tasks = Concurrent::AtomicReference.new([])
7
+ @once_tasks = Concurrent::AtomicReference.new([])
8
+ @loop_tasks = Concurrent::AtomicReference.new([])
9
+ @poll_tasks = Concurrent::AtomicReference.new([])
10
+ @subscriptions = Concurrent::AtomicReference.new([])
11
+ end
26
12
  end
27
13
  end
28
14
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Legion
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legionio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-08 00:00:00.000000000 Z
11
+ date: 2020-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: celluloid
14
+ name: legion-data
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,63 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: celluloid-io
28
+ name: legion-json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: legion-settings
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: legion-transport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: concurrent-ruby
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: concurrent-ruby-ext
29
85
  requirement: !ruby/object:Gem::Requirement
30
86
  requirements:
31
87
  - - ">="
@@ -53,61 +109,61 @@ dependencies:
53
109
  - !ruby/object:Gem::Version
54
110
  version: '0'
55
111
  - !ruby/object:Gem::Dependency
56
- name: legion-data
112
+ name: hashdiff
57
113
  requirement: !ruby/object:Gem::Requirement
58
114
  requirements:
59
- - - "~>"
115
+ - - ">="
60
116
  - !ruby/object:Gem::Version
61
- version: '0.1'
117
+ version: '0'
62
118
  type: :runtime
63
119
  prerelease: false
64
120
  version_requirements: !ruby/object:Gem::Requirement
65
121
  requirements:
66
- - - "~>"
122
+ - - ">="
67
123
  - !ruby/object:Gem::Version
68
- version: '0.1'
124
+ version: '0'
69
125
  - !ruby/object:Gem::Dependency
70
- name: legion-json
126
+ name: vault
71
127
  requirement: !ruby/object:Gem::Requirement
72
128
  requirements:
73
- - - "~>"
129
+ - - ">="
74
130
  - !ruby/object:Gem::Version
75
- version: '0.1'
131
+ version: '0'
76
132
  type: :runtime
77
133
  prerelease: false
78
134
  version_requirements: !ruby/object:Gem::Requirement
79
135
  requirements:
80
- - - "~>"
136
+ - - ">="
81
137
  - !ruby/object:Gem::Version
82
- version: '0.1'
138
+ version: '0'
83
139
  - !ruby/object:Gem::Dependency
84
- name: legion-settings
140
+ name: legion-cache
85
141
  requirement: !ruby/object:Gem::Requirement
86
142
  requirements:
87
- - - "~>"
143
+ - - ">="
88
144
  - !ruby/object:Gem::Version
89
- version: '0.1'
145
+ version: '0'
90
146
  type: :runtime
91
147
  prerelease: false
92
148
  version_requirements: !ruby/object:Gem::Requirement
93
149
  requirements:
94
- - - "~>"
150
+ - - ">="
95
151
  - !ruby/object:Gem::Version
96
- version: '0.1'
152
+ version: '0'
97
153
  - !ruby/object:Gem::Dependency
98
- name: legion-transport
154
+ name: legion-crypt
99
155
  requirement: !ruby/object:Gem::Requirement
100
156
  requirements:
101
- - - "~>"
157
+ - - ">="
102
158
  - !ruby/object:Gem::Version
103
- version: '0.1'
159
+ version: '0'
104
160
  type: :runtime
105
161
  prerelease: false
106
162
  version_requirements: !ruby/object:Gem::Requirement
107
163
  requirements:
108
- - - "~>"
164
+ - - ">="
109
165
  - !ruby/object:Gem::Version
110
- version: '0.1'
166
+ version: '0'
111
167
  - !ruby/object:Gem::Dependency
112
168
  name: legion-exceptions
113
169
  requirement: !ruby/object:Gem::Requirement
@@ -123,47 +179,61 @@ dependencies:
123
179
  - !ruby/object:Gem::Version
124
180
  version: '0'
125
181
  - !ruby/object:Gem::Dependency
126
- name: legion-extensions
182
+ name: legion-logging
127
183
  requirement: !ruby/object:Gem::Requirement
128
184
  requirements:
129
- - - "~>"
185
+ - - ">="
130
186
  - !ruby/object:Gem::Version
131
- version: '0.1'
187
+ version: '0'
132
188
  type: :runtime
133
189
  prerelease: false
134
190
  version_requirements: !ruby/object:Gem::Requirement
135
191
  requirements:
136
- - - "~>"
192
+ - - ">="
137
193
  - !ruby/object:Gem::Version
138
- version: '0.1'
194
+ version: '0'
139
195
  - !ruby/object:Gem::Dependency
140
- name: legion-logging
196
+ name: sleepiq
141
197
  requirement: !ruby/object:Gem::Requirement
142
198
  requirements:
143
- - - "~>"
199
+ - - ">="
144
200
  - !ruby/object:Gem::Version
145
- version: '0.1'
201
+ version: '0'
146
202
  type: :runtime
147
203
  prerelease: false
148
204
  version_requirements: !ruby/object:Gem::Requirement
149
205
  requirements:
150
- - - "~>"
206
+ - - ">="
151
207
  - !ruby/object:Gem::Version
152
- version: '0.1'
208
+ version: '0'
153
209
  - !ruby/object:Gem::Dependency
154
210
  name: bundler
155
211
  requirement: !ruby/object:Gem::Requirement
156
212
  requirements:
157
- - - "~>"
213
+ - - ">="
158
214
  - !ruby/object:Gem::Version
159
- version: '1'
215
+ version: '0'
160
216
  type: :development
161
217
  prerelease: false
162
218
  version_requirements: !ruby/object:Gem::Requirement
163
219
  requirements:
164
- - - "~>"
220
+ - - ">="
165
221
  - !ruby/object:Gem::Version
166
- version: '1'
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: cli-tree
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
167
237
  - !ruby/object:Gem::Dependency
168
238
  name: codecov
169
239
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +248,34 @@ dependencies:
178
248
  - - ">="
179
249
  - !ruby/object:Gem::Version
180
250
  version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: memory_profiler
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: pry
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
181
279
  - !ruby/object:Gem::Dependency
182
280
  name: rake
183
281
  requirement: !ruby/object:Gem::Requirement
@@ -196,16 +294,30 @@ dependencies:
196
294
  name: rspec
197
295
  requirement: !ruby/object:Gem::Requirement
198
296
  requirements:
199
- - - "~>"
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :development
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ - !ruby/object:Gem::Dependency
308
+ name: rspec_junit_formatter
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
200
312
  - !ruby/object:Gem::Version
201
- version: '3.0'
313
+ version: '0'
202
314
  type: :development
203
315
  prerelease: false
204
316
  version_requirements: !ruby/object:Gem::Requirement
205
317
  requirements:
206
- - - "~>"
318
+ - - ">="
207
319
  - !ruby/object:Gem::Version
208
- version: '3.0'
320
+ version: '0'
209
321
  - !ruby/object:Gem::Dependency
210
322
  name: rubocop
211
323
  requirement: !ruby/object:Gem::Requirement
@@ -242,9 +354,14 @@ executables:
242
354
  extensions: []
243
355
  extra_rdoc_files: []
244
356
  files:
357
+ - ".circleci/config.yml"
245
358
  - ".gitignore"
359
+ - ".rspec"
246
360
  - ".rubocop.yml"
361
+ - CHANGELOG.md
247
362
  - Gemfile
363
+ - LICENSE.txt
364
+ - README.md
248
365
  - Rakefile
249
366
  - bin/console
250
367
  - bin/legion
@@ -254,6 +371,7 @@ files:
254
371
  - exe/legion
255
372
  - legion.gemspec
256
373
  - lib/legion.rb
374
+ - lib/legion/exceptions/handled_task.rb
257
375
  - lib/legion/exceptions/invalidjson.rb
258
376
  - lib/legion/exceptions/missingargument.rb
259
377
  - lib/legion/exceptions/wrongtype.rb
@@ -261,9 +379,30 @@ files:
261
379
  - lib/legion/exceptions/wrongtypes/hash.rb
262
380
  - lib/legion/exceptions/wrongtypes/integer.rb
263
381
  - lib/legion/exceptions/wrongtypes/string.rb
264
- - lib/legion/extension/loader.rb
382
+ - lib/legion/extensions.rb
383
+ - lib/legion/extensions/actors/base.rb
384
+ - lib/legion/extensions/actors/every.rb
385
+ - lib/legion/extensions/actors/loop.rb
386
+ - lib/legion/extensions/actors/nothing.rb
387
+ - lib/legion/extensions/actors/once.rb
388
+ - lib/legion/extensions/actors/poll.rb
389
+ - lib/legion/extensions/actors/subscription.rb
390
+ - lib/legion/extensions/builders/actors.rb
391
+ - lib/legion/extensions/builders/base.rb
392
+ - lib/legion/extensions/builders/helpers.rb
393
+ - lib/legion/extensions/builders/runners.rb
394
+ - lib/legion/extensions/core.rb
395
+ - lib/legion/extensions/helpers/base.rb
396
+ - lib/legion/extensions/helpers/core.rb
397
+ - lib/legion/extensions/helpers/lex.rb
398
+ - lib/legion/extensions/helpers/logger.rb
399
+ - lib/legion/extensions/helpers/task.rb
400
+ - lib/legion/extensions/helpers/transport.rb
401
+ - lib/legion/extensions/transport.rb
265
402
  - lib/legion/process.rb
266
- - lib/legion/runners/runner.rb
403
+ - lib/legion/runner.rb
404
+ - lib/legion/runner/log.rb
405
+ - lib/legion/runner/status.rb
267
406
  - lib/legion/service.rb
268
407
  - lib/legion/supervison.rb
269
408
  - lib/legion/version.rb
@@ -287,8 +426,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
287
426
  - !ruby/object:Gem::Version
288
427
  version: '0'
289
428
  requirements: []
290
- rubyforge_project:
291
- rubygems_version: 2.6.14
429
+ rubygems_version: 3.0.8
292
430
  signing_key:
293
431
  specification_version: 4
294
432
  summary: Legion Core Software to string it all together