legionio 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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)