legionio 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +21 -0
- data/.gitignore +1 -1
- data/.rubocop.yml +42 -9
- data/CHANGELOG.md +9 -0
- data/Gemfile +0 -12
- data/Rakefile +1 -1
- data/bin/legion +6 -17
- data/exe/legion +10 -18
- data/legion.gemspec +9 -10
- data/lib/legion.rb +2 -2
- data/lib/legion/exceptions/invalidjson.rb +0 -3
- data/lib/legion/exceptions/missingargument.rb +0 -2
- data/lib/legion/exceptions/wrongtypes/array.rb +0 -3
- data/lib/legion/exceptions/wrongtypes/hash.rb +0 -3
- data/lib/legion/exceptions/wrongtypes/integer.rb +0 -3
- data/lib/legion/exceptions/wrongtypes/string.rb +0 -3
- data/lib/legion/extensions.rb +25 -12
- data/lib/legion/extensions/actors/base.rb +2 -6
- data/lib/legion/extensions/actors/every.rb +0 -2
- data/lib/legion/extensions/actors/loop.rb +0 -2
- data/lib/legion/extensions/actors/once.rb +0 -2
- data/lib/legion/extensions/actors/poll.rb +1 -3
- data/lib/legion/extensions/actors/subscription.rb +20 -10
- data/lib/legion/extensions/builders/actors.rb +4 -5
- data/lib/legion/extensions/builders/base.rb +0 -2
- data/lib/legion/extensions/builders/helpers.rb +0 -2
- data/lib/legion/extensions/builders/runners.rb +2 -3
- data/lib/legion/extensions/core.rb +15 -5
- data/lib/legion/extensions/data.rb +10 -0
- data/lib/legion/extensions/helpers/base.rb +1 -7
- data/lib/legion/extensions/helpers/core.rb +24 -3
- data/lib/legion/extensions/helpers/lex.rb +0 -2
- data/lib/legion/extensions/helpers/logger.rb +3 -4
- data/lib/legion/extensions/helpers/task.rb +1 -3
- data/lib/legion/extensions/helpers/transport.rb +0 -2
- data/lib/legion/extensions/transport.rb +4 -5
- data/lib/legion/process.rb +1 -13
- data/lib/legion/runner.rb +1 -3
- data/lib/legion/runner/log.rb +0 -2
- data/lib/legion/runner/status.rb +0 -3
- data/lib/legion/service.rb +18 -20
- data/lib/legion/{supervison.rb → supervision.rb} +1 -0
- data/lib/legion/version.rb +1 -3
- data/settings/client.json +14 -0
- metadata +22 -49
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 732846134f79449f2a5c0141e57e40379015403485296374f39263c2dcda4060
|
4
|
+
data.tar.gz: 7867fa05990668a0d4742134ba017fcdc19f5a00a2272f750b07e2810539e516
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 932ab867c3212b6893b414e35051c90117e38ed0036301a5559f77c38f4574953a127e5194c199cff099d74336fdbaca41e3709887d465d0940a4034c830daae
|
7
|
+
data.tar.gz: b9d6af4416f0261cee4df3d6111eb4ec09b324ae64e7efef6f8f09f76b67db1a9897fe1e82405a80cd82b7f65ef48b4e21ea1628a2cf688ceec6c03750581c76
|
data/.circleci/config.yml
CHANGED
@@ -75,6 +75,27 @@ jobs:
|
|
75
75
|
when: always
|
76
76
|
- store_test_results:
|
77
77
|
path: test-results
|
78
|
+
"jruby-nine-two":
|
79
|
+
docker:
|
80
|
+
- image: circleci/jruby:9.2-jra
|
81
|
+
- image: mysql:5.7
|
82
|
+
environment:
|
83
|
+
MYSQL_DATABASE: 'legion'
|
84
|
+
MYSQL_ROOT_PASSWORD: 'legion'
|
85
|
+
MYSQL_USER: 'legion'
|
86
|
+
MYSQL_PASSWORD: 'legion'
|
87
|
+
- image: rabbitmq:3.7
|
88
|
+
steps:
|
89
|
+
- checkout
|
90
|
+
- run:
|
91
|
+
name: Bundle Install
|
92
|
+
command: bundle install
|
93
|
+
- run:
|
94
|
+
name: Run RSpec
|
95
|
+
command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
|
96
|
+
when: always
|
97
|
+
- store_test_results:
|
98
|
+
path: test-results
|
78
99
|
|
79
100
|
workflows:
|
80
101
|
version: 2
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -19,18 +19,58 @@ Metrics:
|
|
19
19
|
- .trace
|
20
20
|
Metrics/MethodLength:
|
21
21
|
Max: 50
|
22
|
+
ExcludedMethods:
|
23
|
+
- .unknown
|
24
|
+
- .fatal
|
25
|
+
- .error
|
26
|
+
- .warn
|
27
|
+
- .info
|
28
|
+
- .debug
|
29
|
+
- .trace
|
22
30
|
Metrics/ClassLength:
|
23
31
|
Max: 1500
|
24
32
|
Metrics/ModuleLength:
|
25
33
|
Max: 1500
|
26
34
|
Metrics/BlockLength:
|
27
35
|
Max: 40
|
36
|
+
ExcludedMethods:
|
37
|
+
- .unknown
|
38
|
+
- .fatal
|
39
|
+
- .error
|
40
|
+
- .warn
|
41
|
+
- .info
|
42
|
+
- .debug
|
43
|
+
- .trace
|
28
44
|
Metrics/AbcSize:
|
29
45
|
Max: 50
|
46
|
+
IgnoredMethods:
|
47
|
+
- .unknown
|
48
|
+
- .fatal
|
49
|
+
- .error
|
50
|
+
- .warn
|
51
|
+
- .info
|
52
|
+
- .debug
|
53
|
+
- .trace
|
30
54
|
Metrics/CyclomaticComplexity:
|
31
55
|
Max: 15
|
56
|
+
IgnoredMethods:
|
57
|
+
- .unknown
|
58
|
+
- .fatal
|
59
|
+
- .error
|
60
|
+
- .warn
|
61
|
+
- .info
|
62
|
+
- .debug
|
63
|
+
- .trace
|
32
64
|
Metrics/PerceivedComplexity:
|
33
65
|
Max: 15
|
66
|
+
IgnoredMethods:
|
67
|
+
- .unknown
|
68
|
+
- .fatal
|
69
|
+
- .error
|
70
|
+
- .warn
|
71
|
+
- .info
|
72
|
+
- .debug
|
73
|
+
- .trace
|
34
74
|
Layout/SpaceAroundEqualsInParameterDefault:
|
35
75
|
EnforcedStyle: space
|
36
76
|
Style/SymbolArray:
|
@@ -41,15 +81,8 @@ Layout/HashAlignment:
|
|
41
81
|
Style/Documentation:
|
42
82
|
Enabled: false
|
43
83
|
AllCops:
|
44
|
-
TargetRubyVersion: 2.
|
45
|
-
|
46
|
-
- .unknown
|
47
|
-
- .fatal
|
48
|
-
- .error
|
49
|
-
- .warn
|
50
|
-
- .info
|
51
|
-
- .debug
|
52
|
-
- .trace
|
84
|
+
TargetRubyVersion: 2.5
|
85
|
+
NewCops: enable
|
53
86
|
Style/FrozenStringLiteralComment:
|
54
87
|
Enabled: false
|
55
88
|
Naming/FileName:
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Legion Changelog
|
2
2
|
|
3
|
+
## v0.3.0
|
4
|
+
* Updating dependencies based on if we are using `JRUBY` or not
|
5
|
+
* Cleaning up some files and rubocop errors
|
6
|
+
* Adding new settings option for a lex definition with functionality to add it to the override settings stack
|
7
|
+
* Fixing supervision filename
|
8
|
+
* Cleaning up `Legion::Service`
|
9
|
+
* Cleaning up rogue comments
|
10
|
+
* Updating exe/legion to match bin/legion
|
11
|
+
|
3
12
|
## v0.1.1
|
4
13
|
Testing
|
5
14
|
|
data/Gemfile
CHANGED
@@ -1,15 +1,3 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
3
|
gemspec
|
4
|
-
|
5
|
-
gem 'lex-conditioner', path: '~/Rubymine/lex/lex-conditioner'
|
6
|
-
gem 'lex-health', path: '~/Rubymine/lex/lex-health'
|
7
|
-
gem 'lex-influxdb', path: '~/Rubymine/lex/lex-influxdb'
|
8
|
-
gem 'lex-lex', path: '~/Rubymine/lex/lex-lex'
|
9
|
-
gem 'lex-log', path: '~/Rubymine/lex/lex-log'
|
10
|
-
gem 'lex-memcached', path: '~/Rubymine/lex/legion-extensions-memcached'
|
11
|
-
gem 'lex-node', path: '~/Rubymine/lex/lex-node'
|
12
|
-
gem 'lex-sleepiq', path: '~/Rubymine/lex/lex-sleepiq'
|
13
|
-
gem 'lex-tasker', path: '~/Rubymine/lex/lex-tasker'
|
14
|
-
gem 'lex-transformer', path: '~/Rubymine/lex/lex-transformer'
|
15
|
-
|
data/Rakefile
CHANGED
data/bin/legion
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
|
-
|
3
|
+
|
4
4
|
require 'optparse'
|
5
5
|
|
6
6
|
options = { action: :run }
|
@@ -28,11 +28,11 @@ op.on('-t', '--time 10', time_help) { |value| options[:time_limit] = va
|
|
28
28
|
|
29
29
|
op.separator ''
|
30
30
|
op.separator 'Ruby options:'
|
31
|
-
op.on('-I', '--include PATH', include_help)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
31
|
+
op.on('-I', '--include PATH', include_help) do |value|
|
32
|
+
$LOAD_PATH.unshift(*value.split(':').map do |v|
|
33
|
+
File.expand_path(v)
|
34
|
+
end)
|
35
|
+
end
|
36
36
|
op.on('--debug', debug_help) { $DEBUG = true }
|
37
37
|
op.on('--warn', warn_help) { $-w = true }
|
38
38
|
|
@@ -44,18 +44,7 @@ op.on('-v', '--version') { options[:action] = :version }
|
|
44
44
|
op.separator ''
|
45
45
|
op.parse!(ARGV)
|
46
46
|
|
47
|
-
#==============================================================================
|
48
|
-
# EXECUTE script
|
49
|
-
#==============================================================================
|
50
|
-
|
51
47
|
require File.expand_path('lib/legion.rb') unless options[:action] == :help
|
52
48
|
Legion.start
|
53
49
|
require File.expand_path('lib/legion/process.rb') unless options[:action] == :help
|
54
|
-
# case options[:action]
|
55
|
-
# when :help then puts op.to_s
|
56
|
-
# when :version then puts Legion::VERSION
|
57
|
-
# else
|
58
|
-
# Legion::Process.run!(options)
|
59
|
-
# end
|
60
|
-
|
61
50
|
Legion::Process.new(options).run!
|
data/exe/legion
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
#!/usr/bin/env
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
|
-
|
3
|
+
|
4
4
|
require 'optparse'
|
5
5
|
|
6
6
|
options = { action: :run }
|
@@ -11,6 +11,7 @@ logfile_help = 'the log filename'
|
|
11
11
|
include_help = 'an additional $LOAD_PATH (may be used more than once)'
|
12
12
|
debug_help = 'set $DEBUG to true'
|
13
13
|
warn_help = 'enable warnings'
|
14
|
+
time_help = 'only run legion for X seconds'
|
14
15
|
|
15
16
|
op = OptionParser.new
|
16
17
|
op.banner = 'An example of how to daemonize a long running Ruby process.'
|
@@ -23,14 +24,15 @@ op.separator 'Process options:'
|
|
23
24
|
op.on('-d', '--daemonize', daemonize_help) { options[:daemonize] = true }
|
24
25
|
op.on('-p', '--pid PIDFILE', pidfile_help) { |value| options[:pidfile] = value }
|
25
26
|
op.on('-l', '--log LOGFILE', logfile_help) { |value| options[:logfile] = value }
|
27
|
+
op.on('-t', '--time 10', time_help) { |value| options[:time_limit] = value }
|
26
28
|
|
27
29
|
op.separator ''
|
28
30
|
op.separator 'Ruby options:'
|
29
|
-
op.on('-I', '--include PATH', include_help)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
op.on('-I', '--include PATH', include_help) do |value|
|
32
|
+
$LOAD_PATH.unshift(*value.split(':').map do |v|
|
33
|
+
File.expand_path(v)
|
34
|
+
end)
|
35
|
+
end
|
34
36
|
op.on('--debug', debug_help) { $DEBUG = true }
|
35
37
|
op.on('--warn', warn_help) { $-w = true }
|
36
38
|
|
@@ -42,17 +44,7 @@ op.on('-v', '--version') { options[:action] = :version }
|
|
42
44
|
op.separator ''
|
43
45
|
op.parse!(ARGV)
|
44
46
|
|
45
|
-
#==============================================================================
|
46
|
-
# EXECUTE script
|
47
|
-
#==============================================================================
|
48
|
-
|
49
47
|
require File.expand_path('lib/legion.rb') unless options[:action] == :help
|
48
|
+
Legion.start
|
50
49
|
require File.expand_path('lib/legion/process.rb') unless options[:action] == :help
|
51
|
-
case options[:action]
|
52
|
-
when :help then puts op.to_s
|
53
|
-
when :version then puts Legion::VERSION
|
54
|
-
else
|
55
|
-
Legion::Process.run!(options)
|
56
|
-
end
|
57
|
-
|
58
50
|
Legion::Process.new(options).run!
|
data/legion.gemspec
CHANGED
@@ -14,6 +14,7 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.description = 'Legion Core runs Legion Framwork'
|
15
15
|
spec.homepage = 'https://bitbucket.org/legion-io/legion/'
|
16
16
|
spec.license = 'MIT'
|
17
|
+
spec.required_ruby_version = '>= 2.5.0'
|
17
18
|
|
18
19
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
20
|
f.match(%r{^(test|spec|features)/})
|
@@ -23,35 +24,33 @@ Gem::Specification.new do |spec|
|
|
23
24
|
spec.require_paths = ['lib']
|
24
25
|
|
25
26
|
if RUBY_ENGINE == 'jruby'
|
27
|
+
spec.add_dependency 'jrjackson'
|
26
28
|
spec.add_dependency 'legion-data-java'
|
27
|
-
spec.add_dependency 'legion-json-java'
|
28
|
-
spec.add_dependency 'legion-settings-java'
|
29
29
|
spec.add_dependency 'legion-transport-java'
|
30
|
+
spec.add_dependency 'march_hare'
|
30
31
|
else
|
32
|
+
spec.add_dependency 'concurrent-ruby-ext'
|
31
33
|
spec.add_dependency 'legion-data'
|
32
|
-
spec.add_dependency 'legion-json'
|
33
|
-
spec.add_dependency 'legion-settings'
|
34
34
|
spec.add_dependency 'legion-transport'
|
35
|
+
spec.add_dependency 'oj'
|
35
36
|
end
|
36
37
|
|
37
38
|
spec.add_dependency 'concurrent-ruby'
|
38
|
-
spec.add_dependency 'concurrent-ruby-ext'
|
39
39
|
spec.add_dependency 'daemons'
|
40
40
|
spec.add_dependency 'hashdiff'
|
41
|
-
spec.add_dependency 'vault'
|
42
41
|
|
42
|
+
spec.add_dependency 'bunny'
|
43
43
|
spec.add_dependency 'legion-cache'
|
44
44
|
spec.add_dependency 'legion-crypt'
|
45
45
|
spec.add_dependency 'legion-exceptions'
|
46
|
+
spec.add_dependency 'legion-json'
|
46
47
|
spec.add_dependency 'legion-logging'
|
48
|
+
spec.add_dependency 'legion-settings'
|
47
49
|
|
48
|
-
spec.add_dependency '
|
50
|
+
spec.add_dependency 'lex-node'
|
49
51
|
|
50
52
|
spec.add_development_dependency 'bundler'
|
51
|
-
spec.add_development_dependency 'cli-tree'
|
52
53
|
spec.add_development_dependency 'codecov'
|
53
|
-
spec.add_development_dependency 'memory_profiler'
|
54
|
-
spec.add_development_dependency 'pry'
|
55
54
|
spec.add_development_dependency 'rake'
|
56
55
|
spec.add_development_dependency 'rspec'
|
57
56
|
spec.add_development_dependency 'rspec_junit_formatter'
|
data/lib/legion.rb
CHANGED
data/lib/legion/extensions.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
require 'legion/extensions/core'
|
4
2
|
require 'legion/runner'
|
5
3
|
|
@@ -23,11 +21,13 @@ module Legion
|
|
23
21
|
end
|
24
22
|
|
25
23
|
def shutdown
|
24
|
+
return nil if @loaded_extensions.nil?
|
25
|
+
|
26
26
|
@subscription_tasks.each do |task|
|
27
27
|
task[:threadpool].shutdown
|
28
|
-
task[:threadpool].wait_for_termination(
|
29
|
-
task[:threadpool].kill
|
28
|
+
task[:threadpool].kill unless task[:threadpool].wait_for_termination(5)
|
30
29
|
end
|
30
|
+
|
31
31
|
@loop_tasks.each { |task| task[:running_class].cancel if task[:running_class].respond_to?(:cancel) }
|
32
32
|
@once_tasks.each { |task| task[:running_class].cancel if task[:running_class].respond_to?(:cancel) }
|
33
33
|
@timer_tasks.each { |task| task[:running_class].cancel if task[:running_class].respond_to?(:cancel) }
|
@@ -79,7 +79,7 @@ module Legion
|
|
79
79
|
extension.log.debug("hooking literal actor: #{actor}") if has_logger
|
80
80
|
hook_actor(**actor)
|
81
81
|
end
|
82
|
-
extension.log.info
|
82
|
+
extension.log.info "Loaded v#{extension::VERSION}"
|
83
83
|
rescue StandardError => e
|
84
84
|
Legion::Logging.error e.message
|
85
85
|
Legion::Logging.error e.backtrace
|
@@ -87,12 +87,20 @@ module Legion
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def hook_actor(extension:, extension_name:, actor_class:, size: 1, **opts)
|
90
|
-
size =
|
90
|
+
size = if Legion::Settings[:extensions].key?(extension_name.to_sym) && Legion::Settings[:extensions][extension_name.to_sym].key?(:workers)
|
91
|
+
Legion::Settings[:extensions][extension_name.to_sym][:workers]
|
92
|
+
elsif size.is_a? Integer
|
93
|
+
size
|
94
|
+
else
|
95
|
+
1
|
96
|
+
end
|
97
|
+
|
91
98
|
extension_hash = {
|
92
|
-
extension:
|
93
|
-
extension_name:
|
94
|
-
actor_class:
|
95
|
-
size:
|
99
|
+
extension: extension,
|
100
|
+
extension_name: extension_name,
|
101
|
+
actor_class: actor_class,
|
102
|
+
size: size,
|
103
|
+
fallback_policy: :abort,
|
96
104
|
**opts
|
97
105
|
}
|
98
106
|
extension_hash[:running_class] = if actor_class.ancestors.include? Legion::Extensions::Actors::Subscription
|
@@ -110,10 +118,15 @@ module Legion
|
|
110
118
|
elsif actor_class.ancestors.include? Legion::Extensions::Actors::Poll
|
111
119
|
@poll_tasks.push(extension_hash)
|
112
120
|
elsif actor_class.ancestors.include? Legion::Extensions::Actors::Subscription
|
113
|
-
extension_hash[:threadpool] = Concurrent::FixedThreadPool.new(
|
121
|
+
extension_hash[:threadpool] = Concurrent::FixedThreadPool.new(size)
|
114
122
|
size.times do
|
115
123
|
extension_hash[:threadpool].post do
|
116
|
-
actor_class.new
|
124
|
+
klass = actor_class.new
|
125
|
+
if klass.respond_to?(:async)
|
126
|
+
klass.async.subscribe
|
127
|
+
else
|
128
|
+
klass.subscribe
|
129
|
+
end
|
117
130
|
end
|
118
131
|
end
|
119
132
|
@subscription_tasks.push(extension_hash)
|