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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +21 -0
  3. data/.gitignore +1 -1
  4. data/.rubocop.yml +42 -9
  5. data/CHANGELOG.md +9 -0
  6. data/Gemfile +0 -12
  7. data/Rakefile +1 -1
  8. data/bin/legion +6 -17
  9. data/exe/legion +10 -18
  10. data/legion.gemspec +9 -10
  11. data/lib/legion.rb +2 -2
  12. data/lib/legion/exceptions/invalidjson.rb +0 -3
  13. data/lib/legion/exceptions/missingargument.rb +0 -2
  14. data/lib/legion/exceptions/wrongtypes/array.rb +0 -3
  15. data/lib/legion/exceptions/wrongtypes/hash.rb +0 -3
  16. data/lib/legion/exceptions/wrongtypes/integer.rb +0 -3
  17. data/lib/legion/exceptions/wrongtypes/string.rb +0 -3
  18. data/lib/legion/extensions.rb +25 -12
  19. data/lib/legion/extensions/actors/base.rb +2 -6
  20. data/lib/legion/extensions/actors/every.rb +0 -2
  21. data/lib/legion/extensions/actors/loop.rb +0 -2
  22. data/lib/legion/extensions/actors/once.rb +0 -2
  23. data/lib/legion/extensions/actors/poll.rb +1 -3
  24. data/lib/legion/extensions/actors/subscription.rb +20 -10
  25. data/lib/legion/extensions/builders/actors.rb +4 -5
  26. data/lib/legion/extensions/builders/base.rb +0 -2
  27. data/lib/legion/extensions/builders/helpers.rb +0 -2
  28. data/lib/legion/extensions/builders/runners.rb +2 -3
  29. data/lib/legion/extensions/core.rb +15 -5
  30. data/lib/legion/extensions/data.rb +10 -0
  31. data/lib/legion/extensions/helpers/base.rb +1 -7
  32. data/lib/legion/extensions/helpers/core.rb +24 -3
  33. data/lib/legion/extensions/helpers/lex.rb +0 -2
  34. data/lib/legion/extensions/helpers/logger.rb +3 -4
  35. data/lib/legion/extensions/helpers/task.rb +1 -3
  36. data/lib/legion/extensions/helpers/transport.rb +0 -2
  37. data/lib/legion/extensions/transport.rb +4 -5
  38. data/lib/legion/process.rb +1 -13
  39. data/lib/legion/runner.rb +1 -3
  40. data/lib/legion/runner/log.rb +0 -2
  41. data/lib/legion/runner/status.rb +0 -3
  42. data/lib/legion/service.rb +18 -20
  43. data/lib/legion/{supervison.rb → supervision.rb} +1 -0
  44. data/lib/legion/version.rb +1 -3
  45. data/settings/client.json +14 -0
  46. metadata +22 -49
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 422da0782965ca0f944ebb9579fc1e794ae656c59f9ad22c26b84949f1846f9b
4
- data.tar.gz: 169445db597ca9717dd46dfe38f8d02ecb57b08800bcd1a0177eea2512b80069
3
+ metadata.gz: 732846134f79449f2a5c0141e57e40379015403485296374f39263c2dcda4060
4
+ data.tar.gz: 7867fa05990668a0d4742134ba017fcdc19f5a00a2272f750b07e2810539e516
5
5
  SHA512:
6
- metadata.gz: de64ef4fd36950f9d2e74b3b3a0007decb9d7765119524c327fc57237101f9fd593362a67dc88d0e0bcc157e69b44b574bfc153c5f34d872a421bb4bf9ddf3bf
7
- data.tar.gz: 212834c354a6bb0d3060bde1f442cf302f490be84a1af1c183d61d65d9bff59e5ffdb6e595192ec70f8fcd82f52bd069eacba0030a32858253243367fff33df0
6
+ metadata.gz: 932ab867c3212b6893b414e35051c90117e38ed0036301a5559f77c38f4574953a127e5194c199cff099d74336fdbaca41e3709887d465d0940a4034c830daae
7
+ data.tar.gz: b9d6af4416f0261cee4df3d6111eb4ec09b324ae64e7efef6f8f09f76b67db1a9897fe1e82405a80cd82b7f65ef48b4e21ea1628a2cf688ceec6c03750581c76
@@ -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
@@ -9,6 +9,6 @@
9
9
  /tmp/
10
10
  /legion/.idea/
11
11
  /.idea/
12
-
12
+ *.key
13
13
  # rspec failure tracking
14
14
  .rspec_status
@@ -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.6
45
- IgnoredPatterns:
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:
@@ -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
@@ -21,7 +21,7 @@ task :start do
21
21
  end
22
22
 
23
23
  namespace :deploy do
24
- require 'legion/version.rb'
24
+ require 'legion/version'
25
25
  desc 'Deploy alpha/test'
26
26
  task :test do
27
27
  Gem.yank_gem('legion', "#{Legion::VERSION}a")
data/bin/legion CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
- # rubocop:disable all
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
- |value| $LOAD_PATH.unshift(*value.split(':').map {
33
- |v| File.expand_path(v)
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 jruby
1
+ #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
- # rubocop:disable all
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
- |value| $LOAD_PATH.unshift(*value.split(':').map {
31
- |v| File.expand_path(v)
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!
@@ -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 'sleepiq'
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'
@@ -1,7 +1,7 @@
1
1
  Process.setproctitle('Legion')
2
- require 'concurrent-ruby'
2
+ require 'concurrent'
3
3
  require 'securerandom'
4
- # require 'legion/exceptions'
4
+ require 'legion/exceptions'
5
5
  require 'legion/version'
6
6
  require 'legion/process'
7
7
  require 'legion/service'
@@ -1,8 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Legion
4
2
  module Exception
5
- # Invalid JSON class
6
3
  class InvalidJson < StandardError; end
7
4
  end
8
5
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Legion
4
2
  module Exception
5
3
  class MissingArgument < StandardError
@@ -1,9 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Legion
4
2
  module Exception
5
3
  module WrongType
6
- # This thing should be an array
7
4
  class Array < TypeError
8
5
  end
9
6
  end
@@ -1,9 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Legion
4
2
  module Exception
5
3
  module WrongType
6
- # This thing should be a hash
7
4
  class Hash < TypeError
8
5
  end
9
6
  end
@@ -1,9 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Legion
4
2
  module Exception
5
3
  module WrongType
6
- # This thing should be an int
7
4
  class Integer < TypeError
8
5
  end
9
6
  end
@@ -1,9 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Legion
4
2
  module Exception
5
3
  module WrongType
6
- # This thing should be a string
7
4
  class String < TypeError
8
5
  end
9
6
  end
@@ -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(2)
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 'Loaded'
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 = 1 unless size.is_a? Integer
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: extension,
93
- extension_name: extension_name,
94
- actor_class: actor_class,
95
- size: 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(100)
121
+ extension_hash[:threadpool] = Concurrent::FixedThreadPool.new(size)
114
122
  size.times do
115
123
  extension_hash[:threadpool].post do
116
- actor_class.new.async.subscribe
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)