legionio 0.3.4 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +136 -0
  3. data/.gitignore +15 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +94 -0
  6. data/CHANGELOG.md +47 -0
  7. data/Dockerfile +9 -0
  8. data/Gemfile +3 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +161 -0
  11. data/Rakefile +32 -0
  12. data/bitbucket-pipelines.yml +19 -0
  13. data/docker_deploy.rb +10 -0
  14. data/exe/legion +4 -0
  15. data/exe/legionio +53 -0
  16. data/exe/lex_gen +5 -0
  17. data/legionio.gemspec +64 -0
  18. data/lib/legion.rb +25 -0
  19. data/lib/legion/cli.rb +56 -0
  20. data/lib/legion/cli/chain.rb +35 -0
  21. data/lib/legion/cli/cohort.rb +10 -0
  22. data/lib/legion/cli/function.rb +41 -0
  23. data/lib/legion/cli/lex/actor.rb +31 -0
  24. data/lib/legion/cli/lex/exchange.rb +32 -0
  25. data/lib/legion/cli/lex/message.rb +32 -0
  26. data/lib/legion/cli/lex/queue.rb +45 -0
  27. data/lib/legion/cli/lex/runner.rb +70 -0
  28. data/lib/legion/cli/lex/templates/actor.erb +6 -0
  29. data/lib/legion/cli/lex/templates/actor_spec.erb +0 -0
  30. data/lib/legion/cli/lex/templates/base/bitbucket.yml.erb +69 -0
  31. data/lib/legion/cli/lex/templates/base/gemfile.erb +3 -0
  32. data/lib/legion/cli/lex/templates/base/gemspec.erb +26 -0
  33. data/lib/legion/cli/lex/templates/base/gitignore.erb +11 -0
  34. data/lib/legion/cli/lex/templates/base/lex.erb +9 -0
  35. data/lib/legion/cli/lex/templates/base/lex_spec.erb +5 -0
  36. data/lib/legion/cli/lex/templates/base/lic.erb +21 -0
  37. data/lib/legion/cli/lex/templates/base/rakefile.erb +6 -0
  38. data/lib/legion/cli/lex/templates/base/readme.md.erb +2 -0
  39. data/lib/legion/cli/lex/templates/base/rubocop.yml.erb +15 -0
  40. data/lib/legion/cli/lex/templates/base/spec_helper.rb.erb +11 -0
  41. data/lib/legion/cli/lex/templates/base/version.erb +7 -0
  42. data/lib/legion/cli/lex/templates/exchange.erb +11 -0
  43. data/lib/legion/cli/lex/templates/exchange_spec.erb +0 -0
  44. data/lib/legion/cli/lex/templates/message.erb +23 -0
  45. data/lib/legion/cli/lex/templates/message_spec.erb +0 -0
  46. data/lib/legion/cli/lex/templates/queue.erb +12 -0
  47. data/lib/legion/cli/lex/templates/queue_helper.erb +24 -0
  48. data/lib/legion/cli/lex/templates/queue_spec.erb +11 -0
  49. data/lib/legion/cli/lex/templates/runner.erb +11 -0
  50. data/lib/legion/cli/lex/templates/runner_spec.erb +11 -0
  51. data/lib/legion/cli/relationship.rb +22 -0
  52. data/lib/legion/cli/task.rb +49 -0
  53. data/lib/legion/cli/trigger.rb +88 -0
  54. data/lib/legion/cli/version.rb +5 -0
  55. data/lib/legion/extensions.rb +219 -0
  56. data/lib/legion/extensions/actors/base.rb +47 -0
  57. data/lib/legion/extensions/actors/defaults.rb +28 -0
  58. data/lib/legion/extensions/actors/every.rb +48 -0
  59. data/lib/legion/extensions/actors/loop.rb +32 -0
  60. data/lib/legion/extensions/actors/nothing.rb +15 -0
  61. data/lib/legion/extensions/actors/once.rb +40 -0
  62. data/lib/legion/extensions/actors/poll.rb +87 -0
  63. data/lib/legion/extensions/actors/subscription.rb +139 -0
  64. data/lib/legion/extensions/builders/actors.rb +61 -0
  65. data/lib/legion/extensions/builders/base.rb +36 -0
  66. data/lib/legion/extensions/builders/helpers.rb +24 -0
  67. data/lib/legion/extensions/builders/runners.rb +58 -0
  68. data/lib/legion/extensions/core.rb +131 -0
  69. data/lib/legion/extensions/data.rb +58 -0
  70. data/lib/legion/extensions/data/migrator.rb +28 -0
  71. data/lib/legion/extensions/data/model.rb +8 -0
  72. data/lib/legion/extensions/helpers/base.rb +82 -0
  73. data/lib/legion/extensions/helpers/cache.rb +23 -0
  74. data/lib/legion/extensions/helpers/core.rb +41 -0
  75. data/lib/legion/extensions/helpers/data.rb +23 -0
  76. data/lib/legion/extensions/helpers/lex.rb +48 -0
  77. data/lib/legion/extensions/helpers/logger.rb +44 -0
  78. data/lib/legion/extensions/helpers/task.rb +60 -0
  79. data/lib/legion/extensions/helpers/transport.rb +44 -0
  80. data/lib/legion/extensions/transport.rb +159 -0
  81. data/lib/legion/lex.rb +89 -0
  82. data/lib/legion/process.rb +124 -0
  83. data/lib/legion/runner.rb +55 -0
  84. data/lib/legion/runner/log.rb +10 -0
  85. data/lib/legion/runner/status.rb +69 -0
  86. data/lib/legion/service.rb +130 -0
  87. data/lib/legion/supervision.rb +15 -0
  88. data/lib/legion/version.rb +3 -0
  89. metadata +244 -39
@@ -0,0 +1,124 @@
1
+ require 'fileutils'
2
+
3
+ module Legion
4
+ class Process
5
+ def self.run!(options)
6
+ Legion::Process.new(options).run!
7
+ end
8
+
9
+ attr_reader :options, :quit, :service
10
+
11
+ def initialize(options)
12
+ @options = options
13
+ options[:logfile] = File.expand_path(logfile) if logfile?
14
+ options[:pidfile] = File.expand_path(pidfile) if pidfile?
15
+ end
16
+
17
+ def daemonize?
18
+ options[:daemonize]
19
+ end
20
+
21
+ def logfile
22
+ options[:logfile]
23
+ end
24
+
25
+ def pidfile
26
+ options[:pidfile]
27
+ end
28
+
29
+ def logfile?
30
+ !logfile.nil?
31
+ end
32
+
33
+ def pidfile?
34
+ !pidfile.nil?
35
+ end
36
+
37
+ def info(msg)
38
+ puts "[#{::Process.pid}] [#{Time.now}] #{msg}"
39
+ end
40
+
41
+ def run!
42
+ start_time = Time.now
43
+ @options[:time_limit] = @options[:time_limit].to_i if @options.key? :time_limit
44
+ @quit = false
45
+ check_pid
46
+ daemonize if daemonize?
47
+ write_pid
48
+ trap_signals
49
+
50
+ until quit
51
+ sleep(1)
52
+ @quit = true if @options.key?(:time_limit) && Time.now - start_time > @options[:time_limit]
53
+ end
54
+ Legion::Logging.info('Legion is shutting down!')
55
+ Legion.shutdown
56
+ Legion::Logging.info('Legion has shutdown. Goodbye!')
57
+
58
+ exit
59
+ end
60
+
61
+ #==========================================================================
62
+ # DAEMONIZING, PID MANAGEMENT, and OUTPUT REDIRECTION
63
+ #==========================================================================
64
+
65
+ def daemonize
66
+ exit if fork
67
+ ::Process.setsid
68
+ exit if fork
69
+ Dir.chdir '/'
70
+ end
71
+
72
+ def write_pid
73
+ if pidfile?
74
+ begin
75
+ File.open(pidfile, ::File::CREAT | ::File::EXCL | ::File::WRONLY) { |f| f.write(::Process.pid.to_s) }
76
+ at_exit { File.delete(pidfile) if File.exist?(pidfile) }
77
+ rescue Errno::EEXIST
78
+ check_pid
79
+ retry
80
+ end
81
+ end
82
+ false
83
+ end
84
+
85
+ def check_pid
86
+ if pidfile?
87
+ case pid_status(pidfile)
88
+ when :running, :not_owned
89
+ exit(1)
90
+ when :dead
91
+ File.delete(pidfile)
92
+ end
93
+ end
94
+ false
95
+ end
96
+
97
+ def pid_status(pidfile)
98
+ return :exited unless File.exist?(pidfile)
99
+
100
+ pid = ::File.read(pidfile).to_i
101
+ return :dead if pid.zero?
102
+
103
+ ::Process.kill(0, pid)
104
+ :running
105
+ rescue Errno::ESRCH
106
+ :dead
107
+ rescue Errno::EPERM
108
+ :not_owned
109
+ end
110
+
111
+ def trap_signals
112
+ trap('SIGTERM') do
113
+ info 'sigterm'
114
+ end
115
+
116
+ trap('SIGHUP') do
117
+ info 'sithup'
118
+ end
119
+ trap('SIGINT') do
120
+ @quit = true
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,55 @@
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
@@ -0,0 +1,10 @@
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
@@ -0,0 +1,69 @@
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
@@ -0,0 +1,130 @@
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
+ setup_supervision if supervision
24
+ require 'legion/runner'
25
+ load_extensions if extensions
26
+
27
+ Legion::Crypt.cs if crypt
28
+ Legion::Settings[:client][:ready] = true
29
+ end
30
+
31
+ def setup_data
32
+ if RUBY_ENGINE == 'truffleruby'
33
+ Legion::Logging.error 'Legion::Data does not support truffleruby, please use MRI for any LEX that require it '
34
+ Legion::Settings[:data][:connected] = false
35
+ return false
36
+ end
37
+
38
+ require 'legion/data'
39
+ Legion::Settings.merge_settings(:data, Legion::Data::Settings.default)
40
+ Legion::Data.setup
41
+ rescue LoadError
42
+ Legion::Logging.info 'Legion::Data gem is not installed, please install it manually with gem install legion-data'
43
+ rescue StandardError => e
44
+ Legion::Logging.warn "Legion::Data failed to load, starting without it. e: #{e.message}"
45
+ end
46
+
47
+ # noinspection RubyArgCount
48
+ def default_paths
49
+ [
50
+ '/etc/legionio',
51
+ "#{ENV['home']}/legionio",
52
+ '~/legionio',
53
+ './settings'
54
+ ]
55
+ end
56
+
57
+ def setup_settings(default_dir = __dir__)
58
+ require 'legion/settings'
59
+ config_directory = default_dir
60
+ default_paths.each do |path|
61
+ next unless Dir.exist? path
62
+
63
+ Legion::Logging.info "Using #{path} for settings"
64
+ config_directory = path
65
+ break
66
+ end
67
+
68
+ Legion::Logging.info "Using directory #{config_directory} for settings"
69
+ Legion::Settings.load(config_dir: config_directory)
70
+ Legion::Logging.info('Legion::Settings Loaded')
71
+ end
72
+
73
+ def setup_logging(log_level: 'info', **_opts)
74
+ require 'legion/logging'
75
+ Legion::Logging.setup(log_level: log_level, level: log_level, trace: true)
76
+ end
77
+
78
+ def setup_transport
79
+ require 'legion/transport'
80
+ Legion::Settings.merge_settings('transport', Legion::Transport::Settings.default)
81
+ Legion::Transport::Connection.setup
82
+ end
83
+
84
+ def setup_supervision
85
+ require 'legion/supervision'
86
+ @supervision = Legion::Supervision.setup
87
+ end
88
+
89
+ def shutdown
90
+ Legion::Logging.info('Legion::Service.shutdown was called')
91
+ @shutdown = true
92
+ Legion::Settings[:client][:shutting_down] = true
93
+ sleep(0.5)
94
+ Legion::Extensions.shutdown
95
+ sleep(1)
96
+ Legion::Data.shutdown if Legion::Settings[:data][:connected]
97
+ Legion::Cache.shutdown
98
+ Legion::Transport::Connection.shutdown
99
+ Legion::Crypt.shutdown
100
+ end
101
+
102
+ def reload
103
+ Legion::Logging.info 'Legion::Service.reload was called'
104
+ Legion::Extensions.shutdown
105
+ sleep(1)
106
+ Legion::Data.shutdown
107
+ Legion::Cache.shutdown
108
+ Legion::Transport::Connection.shutdown
109
+ Legion::Crypt.shutdown
110
+ Legion::Settings[:client][:ready] = false
111
+
112
+ sleep(5)
113
+ setup_settings
114
+ Legion::Crypt.start
115
+ setup_transport
116
+ setup_data
117
+ setup_supervision
118
+ load_extensions
119
+
120
+ Legion::Crypt.cs
121
+ Legion::Settings[:client][:ready] = true
122
+ Legion::Logging.info 'Legion has been reloaded'
123
+ end
124
+
125
+ def load_extensions
126
+ require 'legion/runner'
127
+ Legion::Extensions.hook_extensions
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,15 @@
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
@@ -0,0 +1,3 @@
1
+ module Legion
2
+ VERSION = '0.4.3'.freeze
3
+ end
metadata CHANGED
@@ -1,17 +1,87 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legionio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-16 00:00:00.000000000 Z
11
+ date: 2021-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: concurrent-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.7
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.7
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: concurrent-ruby-ext
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.7
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.7
41
+ - !ruby/object:Gem::Dependency
42
+ name: daemons
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.3.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.3.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: oj
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '3.10'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '3.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '1'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: legion-cache
15
85
  requirement: !ruby/object:Gem::Requirement
16
86
  requirements:
17
87
  - - ">="
@@ -25,7 +95,21 @@ dependencies:
25
95
  - !ruby/object:Gem::Version
26
96
  version: '0'
27
97
  - !ruby/object:Gem::Dependency
28
- name: legion-data
98
+ name: legion-crypt
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 0.2.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 0.2.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: legion-exceptions
29
113
  requirement: !ruby/object:Gem::Requirement
30
114
  requirements:
31
115
  - - ">="
@@ -39,7 +123,7 @@ dependencies:
39
123
  - !ruby/object:Gem::Version
40
124
  version: '0'
41
125
  - !ruby/object:Gem::Dependency
42
- name: legion-transport
126
+ name: legion-json
43
127
  requirement: !ruby/object:Gem::Requirement
44
128
  requirements:
45
129
  - - ">="
@@ -53,7 +137,7 @@ dependencies:
53
137
  - !ruby/object:Gem::Version
54
138
  version: '0'
55
139
  - !ruby/object:Gem::Dependency
56
- name: oj
140
+ name: legion-logging
57
141
  requirement: !ruby/object:Gem::Requirement
58
142
  requirements:
59
143
  - - ">="
@@ -67,7 +151,7 @@ dependencies:
67
151
  - !ruby/object:Gem::Version
68
152
  version: '0'
69
153
  - !ruby/object:Gem::Dependency
70
- name: concurrent-ruby
154
+ name: legion-settings
71
155
  requirement: !ruby/object:Gem::Requirement
72
156
  requirements:
73
157
  - - ">="
@@ -81,7 +165,21 @@ dependencies:
81
165
  - !ruby/object:Gem::Version
82
166
  version: '0'
83
167
  - !ruby/object:Gem::Dependency
84
- name: daemons
168
+ name: legion-transport
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: 1.1.9
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: 1.1.9
181
+ - !ruby/object:Gem::Dependency
182
+ name: lex-node
85
183
  requirement: !ruby/object:Gem::Requirement
86
184
  requirements:
87
185
  - - ">="
@@ -95,13 +193,13 @@ dependencies:
95
193
  - !ruby/object:Gem::Version
96
194
  version: '0'
97
195
  - !ruby/object:Gem::Dependency
98
- name: hashdiff
196
+ name: codecov
99
197
  requirement: !ruby/object:Gem::Requirement
100
198
  requirements:
101
199
  - - ">="
102
200
  - !ruby/object:Gem::Version
103
201
  version: '0'
104
- type: :runtime
202
+ type: :development
105
203
  prerelease: false
106
204
  version_requirements: !ruby/object:Gem::Requirement
107
205
  requirements:
@@ -109,13 +207,13 @@ dependencies:
109
207
  - !ruby/object:Gem::Version
110
208
  version: '0'
111
209
  - !ruby/object:Gem::Dependency
112
- name: bunny
210
+ name: legion-data
113
211
  requirement: !ruby/object:Gem::Requirement
114
212
  requirements:
115
213
  - - ">="
116
214
  - !ruby/object:Gem::Version
117
215
  version: '0'
118
- type: :runtime
216
+ type: :development
119
217
  prerelease: false
120
218
  version_requirements: !ruby/object:Gem::Requirement
121
219
  requirements:
@@ -123,13 +221,13 @@ dependencies:
123
221
  - !ruby/object:Gem::Version
124
222
  version: '0'
125
223
  - !ruby/object:Gem::Dependency
126
- name: legion-cache
224
+ name: rake
127
225
  requirement: !ruby/object:Gem::Requirement
128
226
  requirements:
129
227
  - - ">="
130
228
  - !ruby/object:Gem::Version
131
229
  version: '0'
132
- type: :runtime
230
+ type: :development
133
231
  prerelease: false
134
232
  version_requirements: !ruby/object:Gem::Requirement
135
233
  requirements:
@@ -137,13 +235,13 @@ dependencies:
137
235
  - !ruby/object:Gem::Version
138
236
  version: '0'
139
237
  - !ruby/object:Gem::Dependency
140
- name: legion-crypt
238
+ name: rspec
141
239
  requirement: !ruby/object:Gem::Requirement
142
240
  requirements:
143
241
  - - ">="
144
242
  - !ruby/object:Gem::Version
145
243
  version: '0'
146
- type: :runtime
244
+ type: :development
147
245
  prerelease: false
148
246
  version_requirements: !ruby/object:Gem::Requirement
149
247
  requirements:
@@ -151,13 +249,13 @@ dependencies:
151
249
  - !ruby/object:Gem::Version
152
250
  version: '0'
153
251
  - !ruby/object:Gem::Dependency
154
- name: legion-exceptions
252
+ name: rspec_junit_formatter
155
253
  requirement: !ruby/object:Gem::Requirement
156
254
  requirements:
157
255
  - - ">="
158
256
  - !ruby/object:Gem::Version
159
257
  version: '0'
160
- type: :runtime
258
+ type: :development
161
259
  prerelease: false
162
260
  version_requirements: !ruby/object:Gem::Requirement
163
261
  requirements:
@@ -165,13 +263,13 @@ dependencies:
165
263
  - !ruby/object:Gem::Version
166
264
  version: '0'
167
265
  - !ruby/object:Gem::Dependency
168
- name: legion-json
266
+ name: rubocop
169
267
  requirement: !ruby/object:Gem::Requirement
170
268
  requirements:
171
269
  - - ">="
172
270
  - !ruby/object:Gem::Version
173
271
  version: '0'
174
- type: :runtime
272
+ type: :development
175
273
  prerelease: false
176
274
  version_requirements: !ruby/object:Gem::Requirement
177
275
  requirements:
@@ -179,13 +277,13 @@ dependencies:
179
277
  - !ruby/object:Gem::Version
180
278
  version: '0'
181
279
  - !ruby/object:Gem::Dependency
182
- name: legion-logging
280
+ name: rubocop-rake
183
281
  requirement: !ruby/object:Gem::Requirement
184
282
  requirements:
185
283
  - - ">="
186
284
  - !ruby/object:Gem::Version
187
285
  version: '0'
188
- type: :runtime
286
+ type: :development
189
287
  prerelease: false
190
288
  version_requirements: !ruby/object:Gem::Requirement
191
289
  requirements:
@@ -193,13 +291,13 @@ dependencies:
193
291
  - !ruby/object:Gem::Version
194
292
  version: '0'
195
293
  - !ruby/object:Gem::Dependency
196
- name: legion-settings
294
+ name: rubocop-rspec
197
295
  requirement: !ruby/object:Gem::Requirement
198
296
  requirements:
199
297
  - - ">="
200
298
  - !ruby/object:Gem::Version
201
299
  version: '0'
202
- type: :runtime
300
+ type: :development
203
301
  prerelease: false
204
302
  version_requirements: !ruby/object:Gem::Requirement
205
303
  requirements:
@@ -207,13 +305,13 @@ dependencies:
207
305
  - !ruby/object:Gem::Version
208
306
  version: '0'
209
307
  - !ruby/object:Gem::Dependency
210
- name: lex-node
308
+ name: simplecov
211
309
  requirement: !ruby/object:Gem::Requirement
212
310
  requirements:
213
311
  - - ">="
214
312
  - !ruby/object:Gem::Version
215
313
  version: '0'
216
- type: :runtime
314
+ type: :development
217
315
  prerelease: false
218
316
  version_requirements: !ruby/object:Gem::Requirement
219
317
  requirements:
@@ -221,7 +319,7 @@ dependencies:
221
319
  - !ruby/object:Gem::Version
222
320
  version: '0'
223
321
  - !ruby/object:Gem::Dependency
224
- name: bundler
322
+ name: lex-conditioner
225
323
  requirement: !ruby/object:Gem::Requirement
226
324
  requirements:
227
325
  - - ">="
@@ -235,7 +333,7 @@ dependencies:
235
333
  - !ruby/object:Gem::Version
236
334
  version: '0'
237
335
  - !ruby/object:Gem::Dependency
238
- name: codecov
336
+ name: lex-health
239
337
  requirement: !ruby/object:Gem::Requirement
240
338
  requirements:
241
339
  - - ">="
@@ -249,7 +347,7 @@ dependencies:
249
347
  - !ruby/object:Gem::Version
250
348
  version: '0'
251
349
  - !ruby/object:Gem::Dependency
252
- name: rake
350
+ name: lex-http
253
351
  requirement: !ruby/object:Gem::Requirement
254
352
  requirements:
255
353
  - - ">="
@@ -263,7 +361,7 @@ dependencies:
263
361
  - !ruby/object:Gem::Version
264
362
  version: '0'
265
363
  - !ruby/object:Gem::Dependency
266
- name: rspec
364
+ name: lex-lex
267
365
  requirement: !ruby/object:Gem::Requirement
268
366
  requirements:
269
367
  - - ">="
@@ -277,7 +375,7 @@ dependencies:
277
375
  - !ruby/object:Gem::Version
278
376
  version: '0'
279
377
  - !ruby/object:Gem::Dependency
280
- name: rspec_junit_formatter
378
+ name: lex-log
281
379
  requirement: !ruby/object:Gem::Requirement
282
380
  requirements:
283
381
  - - ">="
@@ -291,7 +389,7 @@ dependencies:
291
389
  - !ruby/object:Gem::Version
292
390
  version: '0'
293
391
  - !ruby/object:Gem::Dependency
294
- name: rubocop
392
+ name: lex-scheduler
295
393
  requirement: !ruby/object:Gem::Requirement
296
394
  requirements:
297
395
  - - ">="
@@ -305,7 +403,21 @@ dependencies:
305
403
  - !ruby/object:Gem::Version
306
404
  version: '0'
307
405
  - !ruby/object:Gem::Dependency
308
- name: simplecov
406
+ name: lex-tasker
407
+ requirement: !ruby/object:Gem::Requirement
408
+ requirements:
409
+ - - ">="
410
+ - !ruby/object:Gem::Version
411
+ version: '0'
412
+ type: :development
413
+ prerelease: false
414
+ version_requirements: !ruby/object:Gem::Requirement
415
+ requirements:
416
+ - - ">="
417
+ - !ruby/object:Gem::Version
418
+ version: '0'
419
+ - !ruby/object:Gem::Dependency
420
+ name: lex-transformer
309
421
  requirement: !ruby/object:Gem::Requirement
310
422
  requirements:
311
423
  - - ">="
@@ -321,15 +433,108 @@ dependencies:
321
433
  description: Legion Core runs Legion Framwork
322
434
  email:
323
435
  - matthewdiverson@gmail.com
324
- executables: []
436
+ executables:
437
+ - legion
438
+ - legionio
439
+ - lex_gen
325
440
  extensions: []
326
441
  extra_rdoc_files: []
327
- files: []
442
+ files:
443
+ - ".circleci/config.yml"
444
+ - ".gitignore"
445
+ - ".rspec"
446
+ - ".rubocop.yml"
447
+ - CHANGELOG.md
448
+ - Dockerfile
449
+ - Gemfile
450
+ - LICENSE.txt
451
+ - README.md
452
+ - Rakefile
453
+ - bitbucket-pipelines.yml
454
+ - docker_deploy.rb
455
+ - exe/legion
456
+ - exe/legionio
457
+ - exe/lex_gen
458
+ - legionio.gemspec
459
+ - lib/legion.rb
460
+ - lib/legion/cli.rb
461
+ - lib/legion/cli/chain.rb
462
+ - lib/legion/cli/cohort.rb
463
+ - lib/legion/cli/function.rb
464
+ - lib/legion/cli/lex/actor.rb
465
+ - lib/legion/cli/lex/exchange.rb
466
+ - lib/legion/cli/lex/message.rb
467
+ - lib/legion/cli/lex/queue.rb
468
+ - lib/legion/cli/lex/runner.rb
469
+ - lib/legion/cli/lex/templates/actor.erb
470
+ - lib/legion/cli/lex/templates/actor_spec.erb
471
+ - lib/legion/cli/lex/templates/base/bitbucket.yml.erb
472
+ - lib/legion/cli/lex/templates/base/gemfile.erb
473
+ - lib/legion/cli/lex/templates/base/gemspec.erb
474
+ - lib/legion/cli/lex/templates/base/gitignore.erb
475
+ - lib/legion/cli/lex/templates/base/lex.erb
476
+ - lib/legion/cli/lex/templates/base/lex_spec.erb
477
+ - lib/legion/cli/lex/templates/base/lic.erb
478
+ - lib/legion/cli/lex/templates/base/rakefile.erb
479
+ - lib/legion/cli/lex/templates/base/readme.md.erb
480
+ - lib/legion/cli/lex/templates/base/rubocop.yml.erb
481
+ - lib/legion/cli/lex/templates/base/spec_helper.rb.erb
482
+ - lib/legion/cli/lex/templates/base/version.erb
483
+ - lib/legion/cli/lex/templates/exchange.erb
484
+ - lib/legion/cli/lex/templates/exchange_spec.erb
485
+ - lib/legion/cli/lex/templates/message.erb
486
+ - lib/legion/cli/lex/templates/message_spec.erb
487
+ - lib/legion/cli/lex/templates/queue.erb
488
+ - lib/legion/cli/lex/templates/queue_helper.erb
489
+ - lib/legion/cli/lex/templates/queue_spec.erb
490
+ - lib/legion/cli/lex/templates/runner.erb
491
+ - lib/legion/cli/lex/templates/runner_spec.erb
492
+ - lib/legion/cli/relationship.rb
493
+ - lib/legion/cli/task.rb
494
+ - lib/legion/cli/trigger.rb
495
+ - lib/legion/cli/version.rb
496
+ - lib/legion/extensions.rb
497
+ - lib/legion/extensions/actors/base.rb
498
+ - lib/legion/extensions/actors/defaults.rb
499
+ - lib/legion/extensions/actors/every.rb
500
+ - lib/legion/extensions/actors/loop.rb
501
+ - lib/legion/extensions/actors/nothing.rb
502
+ - lib/legion/extensions/actors/once.rb
503
+ - lib/legion/extensions/actors/poll.rb
504
+ - lib/legion/extensions/actors/subscription.rb
505
+ - lib/legion/extensions/builders/actors.rb
506
+ - lib/legion/extensions/builders/base.rb
507
+ - lib/legion/extensions/builders/helpers.rb
508
+ - lib/legion/extensions/builders/runners.rb
509
+ - lib/legion/extensions/core.rb
510
+ - lib/legion/extensions/data.rb
511
+ - lib/legion/extensions/data/migrator.rb
512
+ - lib/legion/extensions/data/model.rb
513
+ - lib/legion/extensions/helpers/base.rb
514
+ - lib/legion/extensions/helpers/cache.rb
515
+ - lib/legion/extensions/helpers/core.rb
516
+ - lib/legion/extensions/helpers/data.rb
517
+ - lib/legion/extensions/helpers/lex.rb
518
+ - lib/legion/extensions/helpers/logger.rb
519
+ - lib/legion/extensions/helpers/task.rb
520
+ - lib/legion/extensions/helpers/transport.rb
521
+ - lib/legion/extensions/transport.rb
522
+ - lib/legion/lex.rb
523
+ - lib/legion/process.rb
524
+ - lib/legion/runner.rb
525
+ - lib/legion/runner/log.rb
526
+ - lib/legion/runner/status.rb
527
+ - lib/legion/service.rb
528
+ - lib/legion/supervision.rb
529
+ - lib/legion/version.rb
328
530
  homepage: https://bitbucket.org/legion-io/legion/
329
531
  licenses:
330
532
  - MIT
331
- metadata: {}
332
- post_install_message:
533
+ metadata:
534
+ source_code_uri: https://bitbucket.org/legion-io/legion/src/master/
535
+ documentation_uri: https://legionio.atlassian.net/wiki/spaces/LEGION/overview
536
+ bug_tracker_uri: https://legionio.atlassian.net/browse/LEG
537
+ post_install_message:
333
538
  rdoc_options: []
334
539
  require_paths:
335
540
  - lib
@@ -344,8 +549,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
344
549
  - !ruby/object:Gem::Version
345
550
  version: '0'
346
551
  requirements: []
347
- rubygems_version: 3.1.2
348
- signing_key:
552
+ rubygems_version: 3.1.4
553
+ signing_key:
349
554
  specification_version: 4
350
555
  summary: Legion Core Software to string it all together
351
556
  test_files: []