legionio 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +98 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +38 -8
  5. data/CHANGELOG.md +7 -0
  6. data/Gemfile +12 -9
  7. data/LICENSE.txt +21 -0
  8. data/README.md +46 -0
  9. data/Rakefile +1 -1
  10. data/bin/console +3 -2
  11. data/bin/legion +9 -6
  12. data/bin/test +28 -1
  13. data/bitbucket-pipelines.yml +13 -8
  14. data/legion.gemspec +27 -21
  15. data/lib/legion.rb +14 -5
  16. data/lib/legion/exceptions/handled_task.rb +6 -0
  17. data/lib/legion/exceptions/missingargument.rb +2 -2
  18. data/lib/legion/extensions.rb +151 -0
  19. data/lib/legion/extensions/actors/base.rb +53 -0
  20. data/lib/legion/extensions/actors/every.rb +50 -0
  21. data/lib/legion/extensions/actors/loop.rb +34 -0
  22. data/lib/legion/extensions/actors/nothing.rb +15 -0
  23. data/lib/legion/extensions/actors/once.rb +42 -0
  24. data/lib/legion/extensions/actors/poll.rb +90 -0
  25. data/lib/legion/extensions/actors/subscription.rb +120 -0
  26. data/lib/legion/extensions/builders/actors.rb +62 -0
  27. data/lib/legion/extensions/builders/base.rb +38 -0
  28. data/lib/legion/extensions/builders/helpers.rb +26 -0
  29. data/lib/legion/extensions/builders/runners.rb +54 -0
  30. data/lib/legion/extensions/core.rb +84 -0
  31. data/lib/legion/extensions/helpers/base.rb +88 -0
  32. data/lib/legion/extensions/helpers/core.rb +20 -0
  33. data/lib/legion/extensions/helpers/lex.rb +22 -0
  34. data/lib/legion/extensions/helpers/logger.rb +48 -0
  35. data/lib/legion/extensions/helpers/task.rb +42 -0
  36. data/lib/legion/extensions/helpers/transport.rb +45 -0
  37. data/lib/legion/extensions/transport.rb +156 -0
  38. data/lib/legion/process.rb +8 -3
  39. data/lib/legion/runner.rb +57 -0
  40. data/lib/legion/runner/log.rb +12 -0
  41. data/lib/legion/runner/status.rb +72 -0
  42. data/lib/legion/service.rb +44 -27
  43. data/lib/legion/supervison.rb +10 -24
  44. data/lib/legion/version.rb +1 -1
  45. metadata +184 -46
  46. data/lib/legion/extension/loader.rb +0 -96
  47. data/lib/legion/runners/runner.rb +0 -58
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3cd9e6bd148a8733cf8c186fb864bd35d6d6595e
4
- data.tar.gz: e0b3a6fe44495dd6d9de61785501e8e11c987d60
2
+ SHA256:
3
+ metadata.gz: 422da0782965ca0f944ebb9579fc1e794ae656c59f9ad22c26b84949f1846f9b
4
+ data.tar.gz: 169445db597ca9717dd46dfe38f8d02ecb57b08800bcd1a0177eea2512b80069
5
5
  SHA512:
6
- metadata.gz: 321681e4833fa124fc0be0e4223cec3aa253332b6d17bb31eeec176b83dd0d6a77eb7c828987e5f0385e40027dd1b56fde528fe58de1a3c0d4b7a1c53e56da75
7
- data.tar.gz: 430ac9288323876d2035a5edf406c199e203220f46d3a1ac599dc7f66a68af82680df4b904c0f0dd6715cd0aad791d5df354a74f8065d90706731631ef90fd9a
6
+ metadata.gz: de64ef4fd36950f9d2e74b3b3a0007decb9d7765119524c327fc57237101f9fd593362a67dc88d0e0bcc157e69b44b574bfc153c5f34d872a421bb4bf9ddf3bf
7
+ data.tar.gz: 212834c354a6bb0d3060bde1f442cf302f490be84a1af1c183d61d65d9bff59e5ffdb6e595192ec70f8fcd82f52bd069eacba0030a32858253243367fff33df0
@@ -0,0 +1,98 @@
1
+ version: 2.1 # use CircleCI 2.0
2
+ jobs:
3
+ "rubocop":
4
+ docker:
5
+ - image: circleci/ruby:2.5-node
6
+ steps:
7
+ - checkout
8
+ - run: gem install rubocop
9
+ - run:
10
+ name: Run Rubocop
11
+ command: rubocop
12
+ - store_test_results:
13
+ path: test_results
14
+
15
+ "ruby-two-seven":
16
+ docker:
17
+ - image: circleci/ruby:2.7-node
18
+ - image: mysql:5.7
19
+ environment:
20
+ MYSQL_DATABASE: 'legion'
21
+ MYSQL_ROOT_PASSWORD: 'legion'
22
+ MYSQL_USER: 'legion'
23
+ MYSQL_PASSWORD: 'legion'
24
+ - image: rabbitmq:3.7
25
+ steps:
26
+ - checkout
27
+ - run:
28
+ name: Bundle Install
29
+ command: bundle install
30
+ - run:
31
+ name: Run RSpec
32
+ command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
33
+ when: always
34
+ - store_test_results:
35
+ path: test-results
36
+ "ruby-two-five":
37
+ docker:
38
+ - image: circleci/ruby:2.5-node
39
+ - image: mysql:5.7
40
+ environment:
41
+ MYSQL_DATABASE: 'legion'
42
+ MYSQL_ROOT_PASSWORD: 'legion'
43
+ MYSQL_USER: 'legion'
44
+ MYSQL_PASSWORD: 'legion'
45
+ - image: rabbitmq:3.7
46
+ steps:
47
+ - checkout
48
+ - run:
49
+ name: Bundle Install
50
+ command: bundle install
51
+ - run:
52
+ name: Run RSpec
53
+ command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
54
+ when: always
55
+ - store_test_results:
56
+ path: test-results
57
+ "ruby-two-six":
58
+ docker:
59
+ - image: circleci/ruby:2.6-node
60
+ - image: mysql:5.7
61
+ environment:
62
+ MYSQL_DATABASE: 'legion'
63
+ MYSQL_ROOT_PASSWORD: 'legion'
64
+ MYSQL_USER: 'legion'
65
+ MYSQL_PASSWORD: 'legion'
66
+ - image: rabbitmq:3.7
67
+ steps:
68
+ - checkout
69
+ - run:
70
+ name: Bundle Install
71
+ command: bundle install
72
+ - run:
73
+ name: Run RSpec
74
+ command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
75
+ when: always
76
+ - store_test_results:
77
+ path: test-results
78
+
79
+ workflows:
80
+ version: 2
81
+ cop_rake_deploy:
82
+ jobs:
83
+ - rubocop
84
+ - ruby-two-seven:
85
+ requires:
86
+ - ruby-two-five
87
+ filters:
88
+ branches:
89
+ only: /\bdevelop\b|\bmaster\b/
90
+ - ruby-two-five:
91
+ requires:
92
+ - rubocop
93
+ - ruby-two-six:
94
+ requires:
95
+ - ruby-two-five
96
+ filters:
97
+ branches:
98
+ only: /\bdevelop\b|\bmaster\b/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -1,25 +1,55 @@
1
- Metrics/LineLength:
2
- Max: 120
1
+ Layout/LineLength:
2
+ Max: 160
3
+ IgnoredPatterns:
4
+ - .unknown
5
+ - .fatal
6
+ - .error
7
+ - .warn
8
+ - .info
9
+ - .debug
10
+ - .trace
11
+ Metrics:
12
+ IgnorePatterns:
13
+ - .unknown
14
+ - .fatal
15
+ - .error
16
+ - .warn
17
+ - .info
18
+ - .debug
19
+ - .trace
3
20
  Metrics/MethodLength:
4
- Max: 30
21
+ Max: 50
5
22
  Metrics/ClassLength:
6
23
  Max: 1500
24
+ Metrics/ModuleLength:
25
+ Max: 1500
7
26
  Metrics/BlockLength:
27
+ Max: 40
28
+ Metrics/AbcSize:
8
29
  Max: 50
9
- Exclude:
30
+ Metrics/CyclomaticComplexity:
31
+ Max: 15
32
+ Metrics/PerceivedComplexity:
33
+ Max: 15
10
34
  Layout/SpaceAroundEqualsInParameterDefault:
11
35
  EnforcedStyle: space
12
36
  Style/SymbolArray:
13
37
  Enabled: true
14
- Layout/AlignHash:
38
+ Layout/HashAlignment:
15
39
  EnforcedHashRocketStyle: table
16
40
  EnforcedColonStyle: table
17
- Style/HashSyntax:
18
- EnforcedStyle: ruby19_no_mixed_keys
19
41
  Style/Documentation:
20
42
  Enabled: false
21
43
  AllCops:
22
- TargetRubyVersion: 2.4
44
+ TargetRubyVersion: 2.6
45
+ IgnoredPatterns:
46
+ - .unknown
47
+ - .fatal
48
+ - .error
49
+ - .warn
50
+ - .info
51
+ - .debug
52
+ - .trace
23
53
  Style/FrozenStringLiteralComment:
24
54
  Enabled: false
25
55
  Naming/FileName:
@@ -0,0 +1,7 @@
1
+ # Legion Changelog
2
+
3
+ ## v0.1.1
4
+ Testing
5
+
6
+ ## v0.1.0
7
+ Initial Release
data/Gemfile CHANGED
@@ -1,12 +1,15 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # gem 'legion-json', path: '~/legion-io/legion-json'
4
- # gem 'legion-transport', path: '~/legion-io/legion-transport'
5
- # gem 'legion-extensions', path: '~/legion-io/legion-extensions'
6
- # gem 'lex-tasker', path: '~/legion-io/legion-extensions-tasker'
7
- # gem 'lex-conditioner', path: '~/legion-io/legion-extensions-conditioner'
8
- # gem 'lex-transformer', path: '~/legion-io/legion-extensions-transformer'
9
- # gem 'lex-logger', path: '~/legion-io/legion-extensions-logger'
10
-
11
- # Specify your gem's dependencies in legion.gemspec
12
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
+
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 BuildTools
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,46 @@
1
+ # Legion
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library
4
+ into a gem. Put your Ruby code in the file `lib/legion`. To experiment with that code, run `bin/console` for
5
+ an interactive prompt.
6
+
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'legion'
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install legion
23
+
24
+ ## Usage
25
+
26
+ TODO: Write usage instructions here
27
+
28
+ ## Development
29
+
30
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests.
31
+ You can also run `bin/console` for an interactive prompt that will allow you to experiment.
32
+
33
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version,
34
+ update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git
35
+ tag for the version, push git commits and tags, and push the `.gem` file
36
+ to [rubygems.org](https://rubygems.org).
37
+
38
+ ## Contributing
39
+
40
+ Bug reports and pull requests are welcome on GitHub at https://bitbucket.org/whonodes/legion/issues.
41
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are
42
+ expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
43
+
44
+ ## License
45
+
46
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile CHANGED
@@ -24,7 +24,7 @@ namespace :deploy do
24
24
  require 'legion/version.rb'
25
25
  desc 'Deploy alpha/test'
26
26
  task :test do
27
- Gem.yank_gem('legion', "#{Legion::VERSION}a") if false
27
+ Gem.yank_gem('legion', "#{Legion::VERSION}a")
28
28
  puts Gem.query('legion-transport').inspect
29
29
  puts Gem.methods(false)
30
30
  puts Legion::VERSION
@@ -3,13 +3,14 @@
3
3
 
4
4
  require 'bundler/setup'
5
5
  require 'legion'
6
+ Legion::Service.new
6
7
 
7
8
  # You can add fixtures and/or initialization code here to make experimenting
8
9
  # with your gem easier. You can also use a different console, if you like.
9
10
 
10
11
  # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require "pry"
12
- # Pry.start
12
+ require 'pry'
13
+ Pry.start
13
14
 
14
15
  require 'irb'
15
16
  IRB.start(__FILE__)
data/bin/legion CHANGED
@@ -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,6 +24,7 @@ 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:'
@@ -47,12 +49,13 @@ op.parse!(ARGV)
47
49
  #==============================================================================
48
50
 
49
51
  require File.expand_path('lib/legion.rb') unless options[:action] == :help
52
+ Legion.start
50
53
  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
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
57
60
 
58
61
  Legion::Process.new(options).run!
data/bin/test CHANGED
@@ -1,5 +1,32 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
  # rubocop:disable all
4
+ require 'cli-tree'
5
+ # require File.expand_path('lib/legion.rb')
6
+ # Legion.setup
7
+ require 'legion/json'
8
+ require 'legion/logging'
9
+ require 'legion/settings'
10
+ require 'legion/data'
11
+ Legion::Logging.setup(level: 'debug')
12
+ Legion::Settings.load
13
+ Legion::Settings.merge_settings('data', Legion::Data::Settings.default)
14
+ Legion::Data.setup
15
+ extensions = {name: 'extensions', children: []}
16
+ Legion::Data::Model::Extension.each do | extension|
17
+ runners = []
18
+ extension.runners.each do |runner|
19
+ functions = []
20
+ runner.functions.each do |function|
21
+ functions.push function.values[:name]
22
+ end
23
+ # runners.push runner.values[:name]
24
+ runners.push({name: runner.values[:name], children: functions})
25
+ end
26
+ child = {name: extension.values[:name], children: runners}
27
+ # extensions[:children].push extension.values[:name]
28
+ extensions[:children].push child
29
+ end
4
30
 
5
- require File.expand_path('lib/legion.rb')
31
+ tree = TreeNode.from_h(extensions)
32
+ tree.print
@@ -1,6 +1,17 @@
1
- image: ruby:2.4.0
1
+ image: ruby:2.5.0
2
2
 
3
3
  pipelines:
4
+ tags:
5
+ '0.1.0':
6
+ - step:
7
+ caches:
8
+ - bundler
9
+ deployment: rubygems
10
+ script:
11
+ - mkdir -p ~/.gem/credentials
12
+ - (umask 077 ; echo $gem_creds | base64 --decode > ~/.gem/credentials)
13
+ - gem build legion.gemspec
14
+ - gem push legionio-*.gem
4
15
  branches:
5
16
  master:
6
17
  - step:
@@ -26,10 +37,6 @@ pipelines:
26
37
  services:
27
38
  - mysql
28
39
  - broker
29
- - step:
30
- name: Deploy to test
31
- deployment: test
32
- script:
33
40
  definitions:
34
41
  caches:
35
42
  bundler: vendor/bundle
@@ -45,6 +52,4 @@ definitions:
45
52
  image: rabbitmq:3
46
53
  environment:
47
54
  RABBITMQ_DEFAULT_USER: guest
48
- RABBITMQ_DEFAULT_PASS: guest
49
- ports:
50
- - 5672:5672
55
+ RABBITMQ_DEFAULT_PASS: guest
@@ -22,33 +22,39 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- # if RUBY_ENGINE == 'jruby'
26
- # spec.add_dependency 'legion-data-java', '~> 0.1'
27
- # spec.add_dependency 'legion-json-java', '~> 0.1'
28
- # spec.add_dependency 'legion-settings-java', '~> 0.1'
29
- # spec.add_dependency 'legion-transport-java', '~> 0.1'
30
- # else
31
- # spec.add_dependency 'legion-data', '~> 0.1'
32
- # spec.add_dependency 'legion-json', '~> 0.1'
33
- # spec.add_dependency 'legion-settings', '~> 0.1'
34
- # spec.add_dependency 'legion-transport', '~> 0.1'
35
- # end
36
- spec.add_dependency 'celluloid'
37
- spec.add_dependency 'celluloid-io'
25
+ if RUBY_ENGINE == 'jruby'
26
+ spec.add_dependency 'legion-data-java'
27
+ spec.add_dependency 'legion-json-java'
28
+ spec.add_dependency 'legion-settings-java'
29
+ spec.add_dependency 'legion-transport-java'
30
+ else
31
+ spec.add_dependency 'legion-data'
32
+ spec.add_dependency 'legion-json'
33
+ spec.add_dependency 'legion-settings'
34
+ spec.add_dependency 'legion-transport'
35
+ end
36
+
37
+ spec.add_dependency 'concurrent-ruby'
38
+ spec.add_dependency 'concurrent-ruby-ext'
38
39
  spec.add_dependency 'daemons'
39
- spec.add_dependency 'legion-data', '~> 0.1'
40
- spec.add_dependency 'legion-json', '~> 0.1'
41
- spec.add_dependency 'legion-settings', '~> 0.1'
42
- spec.add_dependency 'legion-transport', '~> 0.1'
40
+ spec.add_dependency 'hashdiff'
41
+ spec.add_dependency 'vault'
43
42
 
43
+ spec.add_dependency 'legion-cache'
44
+ spec.add_dependency 'legion-crypt'
44
45
  spec.add_dependency 'legion-exceptions'
45
- spec.add_dependency 'legion-extensions', '~> 0.1'
46
- spec.add_dependency 'legion-logging', '~> 0.1'
46
+ spec.add_dependency 'legion-logging'
47
+
48
+ spec.add_dependency 'sleepiq'
47
49
 
48
- spec.add_development_dependency 'bundler', '~> 1'
50
+ spec.add_development_dependency 'bundler'
51
+ spec.add_development_dependency 'cli-tree'
49
52
  spec.add_development_dependency 'codecov'
53
+ spec.add_development_dependency 'memory_profiler'
54
+ spec.add_development_dependency 'pry'
50
55
  spec.add_development_dependency 'rake'
51
- spec.add_development_dependency 'rspec', '~> 3.0'
56
+ spec.add_development_dependency 'rspec'
57
+ spec.add_development_dependency 'rspec_junit_formatter'
52
58
  spec.add_development_dependency 'rubocop'
53
59
  spec.add_development_dependency 'simplecov'
54
60
  end