legionio 0.3.4 → 0.4.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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +136 -0
- data/.gitignore +15 -0
- data/.rspec +2 -0
- data/.rubocop.yml +94 -0
- data/CHANGELOG.md +47 -0
- data/Dockerfile +9 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +21 -0
- data/README.md +161 -0
- data/Rakefile +32 -0
- data/bitbucket-pipelines.yml +19 -0
- data/docker_deploy.rb +10 -0
- data/exe/legion +4 -0
- data/exe/legionio +53 -0
- data/exe/lex_gen +5 -0
- data/legionio.gemspec +64 -0
- data/lib/legion.rb +25 -0
- data/lib/legion/cli.rb +56 -0
- data/lib/legion/cli/chain.rb +35 -0
- data/lib/legion/cli/cohort.rb +10 -0
- data/lib/legion/cli/function.rb +41 -0
- data/lib/legion/cli/lex/actor.rb +31 -0
- data/lib/legion/cli/lex/exchange.rb +32 -0
- data/lib/legion/cli/lex/message.rb +32 -0
- data/lib/legion/cli/lex/queue.rb +45 -0
- data/lib/legion/cli/lex/runner.rb +70 -0
- data/lib/legion/cli/lex/templates/actor.erb +6 -0
- data/lib/legion/cli/lex/templates/actor_spec.erb +0 -0
- data/lib/legion/cli/lex/templates/base/bitbucket.yml.erb +69 -0
- data/lib/legion/cli/lex/templates/base/gemfile.erb +3 -0
- data/lib/legion/cli/lex/templates/base/gemspec.erb +26 -0
- data/lib/legion/cli/lex/templates/base/gitignore.erb +11 -0
- data/lib/legion/cli/lex/templates/base/lex.erb +9 -0
- data/lib/legion/cli/lex/templates/base/lex_spec.erb +5 -0
- data/lib/legion/cli/lex/templates/base/lic.erb +21 -0
- data/lib/legion/cli/lex/templates/base/rakefile.erb +6 -0
- data/lib/legion/cli/lex/templates/base/readme.md.erb +2 -0
- data/lib/legion/cli/lex/templates/base/rubocop.yml.erb +15 -0
- data/lib/legion/cli/lex/templates/base/spec_helper.rb.erb +11 -0
- data/lib/legion/cli/lex/templates/base/version.erb +7 -0
- data/lib/legion/cli/lex/templates/exchange.erb +11 -0
- data/lib/legion/cli/lex/templates/exchange_spec.erb +0 -0
- data/lib/legion/cli/lex/templates/message.erb +23 -0
- data/lib/legion/cli/lex/templates/message_spec.erb +0 -0
- data/lib/legion/cli/lex/templates/queue.erb +12 -0
- data/lib/legion/cli/lex/templates/queue_helper.erb +24 -0
- data/lib/legion/cli/lex/templates/queue_spec.erb +11 -0
- data/lib/legion/cli/lex/templates/runner.erb +11 -0
- data/lib/legion/cli/lex/templates/runner_spec.erb +11 -0
- data/lib/legion/cli/relationship.rb +22 -0
- data/lib/legion/cli/task.rb +49 -0
- data/lib/legion/cli/trigger.rb +88 -0
- data/lib/legion/cli/version.rb +5 -0
- data/lib/legion/extensions.rb +219 -0
- data/lib/legion/extensions/actors/base.rb +47 -0
- data/lib/legion/extensions/actors/defaults.rb +28 -0
- data/lib/legion/extensions/actors/every.rb +48 -0
- data/lib/legion/extensions/actors/loop.rb +32 -0
- data/lib/legion/extensions/actors/nothing.rb +15 -0
- data/lib/legion/extensions/actors/once.rb +40 -0
- data/lib/legion/extensions/actors/poll.rb +87 -0
- data/lib/legion/extensions/actors/subscription.rb +139 -0
- data/lib/legion/extensions/builders/actors.rb +61 -0
- data/lib/legion/extensions/builders/base.rb +36 -0
- data/lib/legion/extensions/builders/helpers.rb +24 -0
- data/lib/legion/extensions/builders/runners.rb +58 -0
- data/lib/legion/extensions/core.rb +131 -0
- data/lib/legion/extensions/data.rb +58 -0
- data/lib/legion/extensions/data/migrator.rb +28 -0
- data/lib/legion/extensions/data/model.rb +8 -0
- data/lib/legion/extensions/helpers/base.rb +82 -0
- data/lib/legion/extensions/helpers/cache.rb +23 -0
- data/lib/legion/extensions/helpers/core.rb +41 -0
- data/lib/legion/extensions/helpers/data.rb +23 -0
- data/lib/legion/extensions/helpers/lex.rb +48 -0
- data/lib/legion/extensions/helpers/logger.rb +44 -0
- data/lib/legion/extensions/helpers/task.rb +60 -0
- data/lib/legion/extensions/helpers/transport.rb +44 -0
- data/lib/legion/extensions/transport.rb +159 -0
- data/lib/legion/lex.rb +89 -0
- data/lib/legion/process.rb +124 -0
- data/lib/legion/runner.rb +55 -0
- data/lib/legion/runner/log.rb +10 -0
- data/lib/legion/runner/status.rb +69 -0
- data/lib/legion/service.rb +130 -0
- data/lib/legion/supervision.rb +15 -0
- data/lib/legion/version.rb +3 -0
- 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,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
|
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
|
+
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:
|
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-
|
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-
|
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:
|
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:
|
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:
|
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:
|
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: :
|
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:
|
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: :
|
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:
|
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: :
|
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:
|
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: :
|
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:
|
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: :
|
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:
|
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: :
|
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:
|
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: :
|
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:
|
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: :
|
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:
|
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: :
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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
|
-
|
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.
|
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: []
|