legionio 0.1.1 → 0.2.0

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 (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