legionio 0.3.2 → 0.3.3

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 (90) hide show
  1. checksums.yaml +4 -4
  2. metadata +4 -94
  3. data/.circleci/config.yml +0 -119
  4. data/.gitignore +0 -14
  5. data/.rspec +0 -2
  6. data/.rubocop.yml +0 -89
  7. data/CHANGELOG.md +0 -16
  8. data/Gemfile +0 -3
  9. data/LICENSE.txt +0 -21
  10. data/README.md +0 -49
  11. data/Rakefile +0 -38
  12. data/bin/console +0 -16
  13. data/bin/legion +0 -49
  14. data/bin/setup +0 -8
  15. data/bin/test +0 -32
  16. data/bitbucket-pipelines.yml +0 -55
  17. data/docs/Makefile +0 -20
  18. data/docs/_build/doctrees/environment.pickle +0 -0
  19. data/docs/_build/doctrees/index.doctree +0 -0
  20. data/docs/_build/doctrees/overview.doctree +0 -0
  21. data/docs/_build/html/.buildinfo +0 -4
  22. data/docs/_build/html/_sources/index.rst.txt +0 -28
  23. data/docs/_build/html/_sources/overview.rst.txt +0 -0
  24. data/docs/_build/html/_static/alabaster.css +0 -701
  25. data/docs/_build/html/_static/basic.css +0 -855
  26. data/docs/_build/html/_static/custom.css +0 -1
  27. data/docs/_build/html/_static/doctools.js +0 -315
  28. data/docs/_build/html/_static/documentation_options.js +0 -12
  29. data/docs/_build/html/_static/file.png +0 -0
  30. data/docs/_build/html/_static/jquery-3.5.1.js +0 -10872
  31. data/docs/_build/html/_static/jquery.js +0 -2
  32. data/docs/_build/html/_static/language_data.js +0 -297
  33. data/docs/_build/html/_static/minus.png +0 -0
  34. data/docs/_build/html/_static/plus.png +0 -0
  35. data/docs/_build/html/_static/pygments.css +0 -82
  36. data/docs/_build/html/_static/searchtools.js +0 -514
  37. data/docs/_build/html/_static/underscore-1.3.1.js +0 -999
  38. data/docs/_build/html/_static/underscore.js +0 -31
  39. data/docs/_build/html/genindex.html +0 -101
  40. data/docs/_build/html/index.html +0 -117
  41. data/docs/_build/html/objects.inv +0 -6
  42. data/docs/_build/html/overview.html +0 -98
  43. data/docs/_build/html/search.html +0 -110
  44. data/docs/_build/html/searchindex.js +0 -1
  45. data/docs/conf.py +0 -54
  46. data/docs/index.rst +0 -28
  47. data/docs/make.bat +0 -35
  48. data/exe/legion +0 -52
  49. data/legion.gemspec +0 -59
  50. data/lib/legion.rb +0 -21
  51. data/lib/legion/exceptions/handled_task.rb +0 -6
  52. data/lib/legion/exceptions/invalidjson.rb +0 -5
  53. data/lib/legion/exceptions/missingargument.rb +0 -6
  54. data/lib/legion/exceptions/wrongtype.rb +0 -10
  55. data/lib/legion/exceptions/wrongtypes/array.rb +0 -8
  56. data/lib/legion/exceptions/wrongtypes/hash.rb +0 -8
  57. data/lib/legion/exceptions/wrongtypes/integer.rb +0 -8
  58. data/lib/legion/exceptions/wrongtypes/string.rb +0 -8
  59. data/lib/legion/extensions.rb +0 -185
  60. data/lib/legion/extensions/actors/base.rb +0 -49
  61. data/lib/legion/extensions/actors/every.rb +0 -48
  62. data/lib/legion/extensions/actors/loop.rb +0 -32
  63. data/lib/legion/extensions/actors/nothing.rb +0 -15
  64. data/lib/legion/extensions/actors/once.rb +0 -40
  65. data/lib/legion/extensions/actors/poll.rb +0 -88
  66. data/lib/legion/extensions/actors/subscription.rb +0 -138
  67. data/lib/legion/extensions/builders/actors.rb +0 -61
  68. data/lib/legion/extensions/builders/base.rb +0 -36
  69. data/lib/legion/extensions/builders/helpers.rb +0 -24
  70. data/lib/legion/extensions/builders/runners.rb +0 -58
  71. data/lib/legion/extensions/core.rb +0 -126
  72. data/lib/legion/extensions/data.rb +0 -58
  73. data/lib/legion/extensions/data/migrator.rb +0 -28
  74. data/lib/legion/extensions/data/model.rb +0 -8
  75. data/lib/legion/extensions/helpers/base.rb +0 -82
  76. data/lib/legion/extensions/helpers/cache.rb +0 -23
  77. data/lib/legion/extensions/helpers/core.rb +0 -41
  78. data/lib/legion/extensions/helpers/data.rb +0 -23
  79. data/lib/legion/extensions/helpers/lex.rb +0 -48
  80. data/lib/legion/extensions/helpers/logger.rb +0 -47
  81. data/lib/legion/extensions/helpers/task.rb +0 -60
  82. data/lib/legion/extensions/helpers/transport.rb +0 -44
  83. data/lib/legion/extensions/transport.rb +0 -159
  84. data/lib/legion/process.rb +0 -124
  85. data/lib/legion/runner.rb +0 -55
  86. data/lib/legion/runner/log.rb +0 -10
  87. data/lib/legion/runner/status.rb +0 -69
  88. data/lib/legion/service.rb +0 -99
  89. data/lib/legion/supervision.rb +0 -15
  90. data/lib/legion/version.rb +0 -3
@@ -1,55 +0,0 @@
1
- require 'legion/exceptions/handled_task'
2
- require_relative 'runner/log'
3
- require_relative 'runner/status'
4
- require 'legion/transport'
5
- require 'legion/transport/messages/check_subtask'
6
-
7
- module Legion
8
- module Runner
9
- def self.run(runner_class:, function:, task_id: nil, args: nil, check_subtask: true, generate_task: true, parent_id: nil, master_id: nil, **opts) # rubocop:disable Metrics/ParameterLists
10
- runner_class = Kernel.const_get(runner_class) if runner_class.is_a? String
11
-
12
- if task_id.nil? && generate_task
13
- task_gen = Legion::Runner::Status.generate_task_id(
14
- function: function,
15
- runner_class: runner_class,
16
- parent_id: parent_id, master_id: master_id, task_id: task_id, **opts
17
- )
18
- task_id = task_gen[:task_id] unless task_gen.nil?
19
- end
20
-
21
- args = opts if args.nil?
22
- args[:task_id] = task_id unless task_id.nil?
23
- args[:master_id] = master_id unless master_id.nil?
24
- args[:parent_id] = parent_id unless parent_id.nil?
25
-
26
- result = runner_class.send(function, **args)
27
- rescue Legion::Exception::HandledTask
28
- status = 'task.exception'
29
- result = { error: {} }
30
- rescue StandardError => e
31
- runner_class.handle_exception(e,
32
- **opts,
33
- runner_class: runner_class,
34
- args: args,
35
- function: function,
36
- task_id: task_id,
37
- generate_task: generate_task,
38
- check_subtask: check_subtask)
39
- status = 'task.exception'
40
- result = { success: false, status: status, error: { message: e.message, backtrace: e.backtrace } }
41
- else
42
- status = 'task.completed'
43
- ensure
44
- Legion::Runner::Status.update(task_id: task_id, status: status) unless task_id.nil?
45
- if check_subtask && status == 'task.completed'
46
- Legion::Transport::Messages::CheckSubtask.new(runner_class: runner_class,
47
- function: function,
48
- result: result,
49
- original_args: args,
50
- **opts).publish
51
- end
52
- return { success: true, status: status, result: result, task_id: task_id } # rubocop:disable Lint/EnsureReturn
53
- end
54
- end
55
- end
@@ -1,10 +0,0 @@
1
- module Legion
2
- module Runner
3
- module Log
4
- def self.exception(exc, **opts)
5
- Legion::Logging.error exc.message
6
- Legion::Logging.error opts
7
- end
8
- end
9
- end
10
- end
@@ -1,69 +0,0 @@
1
- module Legion
2
- module Runner
3
- module Status
4
- def self.update(task_id:, status: 'task.completed', **opts)
5
- Legion::Logging.debug "Legion::Runner::Status.update called, #{task_id}, status: #{status}, #{opts}"
6
- return if status.nil?
7
-
8
- if Legion::Settings[:data][:connected]
9
- update_db(task_id: task_id, status: status, **opts)
10
- else
11
- update_rmq(task_id: task_id, status: status, **opts)
12
- end
13
- end
14
-
15
- def self.update_rmq(task_id:, status: 'task.completed', **opts)
16
- return if status.nil?
17
-
18
- Legion::Transport::Messages::TaskUpdate.new(task_id: task_id, status: status, **opts).publish
19
- rescue StandardError => e
20
- Legion::Logging.fatal e.message
21
- Legion::Logging.fatal e.backtrace
22
- retries ||= 0
23
- Legion::Logging.fatal 'Will retry in 3 seconds' if retries < 5
24
- sleep(3)
25
- retry if (retries += 1) < 5
26
- end
27
-
28
- def self.update_db(task_id:, status: 'task.completed', **opts)
29
- return if status.nil?
30
-
31
- task = Legion::Data::Model::Task[task_id]
32
- task.update(status: status)
33
- rescue StandardError => e
34
- Legion::Logging.warn e.message
35
- Legion::Logging.warn 'Legion::Runner.update_status_db failed, defaulting to rabbitmq'
36
- Legion::Logging.warn e.backtrace
37
- update_rmq(task_id: task_id, status: status, **opts)
38
- end
39
-
40
- def self.generate_task_id(runner_class:, function:, status: 'task.queued', **opts)
41
- Legion::Logging.debug "Legion::Runner::Status.generate_task_id called, #{runner_class}, #{function}, status: #{status}, #{opts}"
42
- return nil unless Legion::Settings[:data][:connected]
43
-
44
- runner = Legion::Data::Model::Runner.where(namespace: runner_class.to_s.downcase).first
45
- return nil if runner.nil?
46
-
47
- function = Legion::Data::Model::Function.where(runner_id: runner.values[:id], name: function).first
48
- return nil if function.nil?
49
-
50
- insert = { status: status, function_id: function.values[:id] }
51
- insert[:parent_id] = opts[:task_id] if opts.key? :task_id
52
- insert[:master_id] = opts[:task_id] if opts.key? :task_id
53
- insert[:payload] = Legion::JSON.dump(opts[:payload]) if opts.key? :payload
54
-
55
- %i[function_args master_id parent_id relationship_id].each do |column|
56
- next unless opts.key? column
57
-
58
- insert[column] = opts[column].is_a?(Hash) ? Legion::JSON.dump(opts[column]) : opts[column]
59
- end
60
-
61
- { success: true, task_id: Legion::Data::Model::Task.insert(insert), **insert }
62
- rescue StandardError => e
63
- Legion::Logging.error e.message
64
- Legion::Logging.error e.backtrace
65
- raise(e)
66
- end
67
- end
68
- end
69
- end
@@ -1,99 +0,0 @@
1
- module Legion
2
- class Service
3
- def modules
4
- [Legion::Crypt, Legion::Transport, Legion::Cache, Legion::Data, Legion::Supervision].freeze
5
- end
6
-
7
- def initialize(transport: true, cache: true, data: true, supervision: true, extensions: true, crypt: true, log_level: 'info') # rubocop:disable Metrics/ParameterLists
8
- setup_logging(log_level: log_level)
9
- Legion::Logging.debug('Starting Legion::Service')
10
- setup_settings
11
- Legion::Logging.info("node name: #{Legion::Settings[:client][:name]}")
12
-
13
- if crypt
14
- require 'legion/crypt'
15
- Legion::Crypt.start
16
- end
17
-
18
- setup_transport if transport
19
-
20
- require 'legion/cache' if cache
21
-
22
- setup_data if data
23
-
24
- setup_supervision if supervision
25
- require 'legion/runner'
26
- load_extensions if extensions
27
-
28
- Legion::Crypt.cs if crypt
29
- Legion::Settings[:client][:ready] = true
30
- end
31
-
32
- def setup_data
33
- require 'legion/data'
34
- Legion::Settings.merge_settings(:data, Legion::Data::Settings.default)
35
- Legion::Data.setup
36
- end
37
-
38
- # noinspection RubyArgCount
39
- def default_paths
40
- [
41
- '/etc/legionio',
42
- "#{Etc.getpwuid.dir}/legionio",
43
- "#{ENV['home']}/legionio",
44
- '~/legionio',
45
- './settings'
46
- ]
47
- end
48
-
49
- def setup_settings(default_dir = __dir__)
50
- require 'legion/settings'
51
- config_directory = default_dir
52
-
53
- default_paths.each do |path|
54
- next unless Dir.exist? path
55
-
56
- config_directory = path
57
- break
58
- end
59
-
60
- Legion::Logging.info "Using directory #{config_directory} for settings"
61
- Legion::Settings.load(config_dir: config_directory)
62
- Legion::Logging.info('Legion::Settings Loaded')
63
- end
64
-
65
- def setup_logging(log_level: 'info', **_opts)
66
- require 'legion/logging'
67
- Legion::Logging.setup(log_level: log_level, level: log_level, trace: true)
68
- end
69
-
70
- def setup_transport
71
- require 'legion/transport'
72
- Legion::Settings.merge_settings('transport', Legion::Transport::Settings.default)
73
- Legion::Transport::Connection.setup
74
- end
75
-
76
- def setup_supervision
77
- require 'legion/supervision'
78
- @supervision = Legion::Supervision.setup
79
- end
80
-
81
- def shutdown
82
- Legion::Logging.info('Legion::Service.shutdown was called')
83
- @shutdown = true
84
- Legion::Settings[:client][:shutting_down] = true
85
- sleep(0.5)
86
- Legion::Extensions.shutdown
87
- sleep(1)
88
- Legion::Data.shutdown
89
- Legion::Cache.shutdown
90
- Legion::Transport::Connection.shutdown
91
- Legion::Crypt.shutdown
92
- end
93
-
94
- def load_extensions
95
- require 'legion/runner'
96
- Legion::Extensions.hook_extensions
97
- end
98
- end
99
- end
@@ -1,15 +0,0 @@
1
- module Legion
2
- module Supervision
3
- class << self
4
- attr_accessor :timer_tasks
5
-
6
- def setup
7
- @timer_tasks = Concurrent::AtomicReference.new([])
8
- @once_tasks = Concurrent::AtomicReference.new([])
9
- @loop_tasks = Concurrent::AtomicReference.new([])
10
- @poll_tasks = Concurrent::AtomicReference.new([])
11
- @subscriptions = Concurrent::AtomicReference.new([])
12
- end
13
- end
14
- end
15
- end
@@ -1,3 +0,0 @@
1
- module Legion
2
- VERSION = '0.3.2'.freeze
3
- end