lex-tasker 0.1.0 → 0.1.1

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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +61 -0
  3. data/.rubocop.yml +34 -0
  4. data/Gemfile +0 -3
  5. data/README.md +2 -13
  6. data/legion-extensions-tasker.gemspec +6 -5
  7. data/lib/legion/extensions/tasker.rb +1 -73
  8. data/lib/legion/extensions/tasker/actors/check_subtask.rb +21 -0
  9. data/lib/legion/extensions/tasker/actors/fetch_delayed.rb +13 -0
  10. data/lib/legion/extensions/tasker/actors/fetch_delayed_push.rb +29 -0
  11. data/lib/legion/extensions/tasker/actors/log.rb +17 -0
  12. data/lib/legion/extensions/tasker/actors/updater.rb +17 -0
  13. data/lib/legion/extensions/tasker/runners/check_subtask.rb +110 -0
  14. data/lib/legion/extensions/tasker/runners/fetch_delayed.rb +51 -0
  15. data/lib/legion/extensions/tasker/runners/log.rb +50 -0
  16. data/lib/legion/extensions/tasker/runners/updater.rb +25 -0
  17. data/lib/legion/extensions/tasker/transport.rb +26 -0
  18. data/lib/legion/extensions/tasker/transport/exchanges/task.rb +8 -0
  19. data/lib/legion/extensions/tasker/transport/messages/fetch_delayed.rb +11 -0
  20. data/lib/legion/extensions/tasker/transport/queues/check_subtask.rb +15 -0
  21. data/lib/legion/extensions/tasker/transport/queues/fetch_delayed.rb +11 -0
  22. data/lib/legion/extensions/tasker/transport/queues/lex_register.rb +15 -0
  23. data/lib/legion/extensions/tasker/transport/queues/subtask.rb +11 -0
  24. data/lib/legion/extensions/tasker/transport/queues/task_log.rb +11 -0
  25. data/lib/legion/extensions/tasker/transport/queues/updater.rb +11 -0
  26. data/lib/legion/extensions/tasker/version.rb +1 -1
  27. metadata +62 -21
  28. data/.idea/encodings.xml +0 -4
  29. data/.idea/legion-extensions-tasker.iml +0 -8
  30. data/.idea/misc.xml +0 -7
  31. data/.idea/modules.xml +0 -8
  32. data/.idea/workspace.xml +0 -7
  33. data/.travis.yml +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d9d7b6c4260668d01072b22b500fb5fa97be8cf806717a229d35e8f02487e616
4
- data.tar.gz: d7154ec42ccece3309fe1003e50d9defeaffdcfe82f6658af7816e9ed0a1a3b2
3
+ metadata.gz: 66a34f6cf6d57469672d12a3985bd2cb6c6fb923255e462c7b4c62e501cc1d50
4
+ data.tar.gz: 5ecf2cc2e2e10a7883f83531a6d2671eda1df0046958309f4cdd9e95df135137
5
5
  SHA512:
6
- metadata.gz: 4a26f1ae61130d7657e504fc8ca8601d11855faa2189abff936b339dc277ea72a0cf15b55fd932a87f17e1f93cd42c27bf378cfbdc475accf20af211542995b1
7
- data.tar.gz: 40600eb8530b9b79edb4a583f15cf6fc93e10185555053a30a06c4770c7f2725257ccdc5d0d87e705355267945ec03d788cc3115df7588eeaa033eb2c38dda6c
6
+ metadata.gz: 83ccbfc89f17cfe6df72366e8c81b2d7a3dc4aa6808b18ec1e3ca96d96e679f3d2f3bdaf022c502b48daea980f09dd76200d695ec0a1790b359e69fbd2b36616
7
+ data.tar.gz: 5b6c3f87eeadaebbea428b80eb2c5ffa6a0408f28b298120206304b9dc2a11521231f32257ec5ef43eb264996b7447a588bb1c1123070c560b77bc1bfd0d2fa0
@@ -0,0 +1,61 @@
1
+ version: 2.1
2
+ orbs:
3
+ ruby: circleci/ruby@0.2.1
4
+
5
+ jobs:
6
+ "rubocop":
7
+ docker:
8
+ - image: circleci/ruby:2.5-node
9
+ steps:
10
+ - checkout
11
+ - ruby/load-cache
12
+ - ruby/install-deps
13
+ - run:
14
+ name: Run Rubocop
15
+ command: bundle exec rubocop
16
+ - ruby/save-cache
17
+ "ruby-two-five":
18
+ docker:
19
+ - image: circleci/ruby:2.5
20
+ - image: memcached:1.5-alpine
21
+ steps:
22
+ - checkout
23
+ - ruby/load-cache
24
+ - ruby/install-deps
25
+ - ruby/run-tests
26
+ - ruby/save-cache
27
+ "ruby-two-six":
28
+ docker:
29
+ - image: circleci/ruby:2.6
30
+ - image: memcached:1.5-alpine
31
+ steps:
32
+ - checkout
33
+ - ruby/load-cache
34
+ - ruby/install-deps
35
+ - ruby/run-tests
36
+ - ruby/save-cache
37
+ "ruby-two-seven":
38
+ docker:
39
+ - image: circleci/ruby:2.7
40
+ - image: memcached:1.5-alpine
41
+ steps:
42
+ - checkout
43
+ - ruby/load-cache
44
+ - ruby/install-deps
45
+ - ruby/run-tests
46
+ - ruby/save-cache
47
+
48
+ workflows:
49
+ version: 2
50
+ rubocop-rspec:
51
+ jobs:
52
+ - rubocop
53
+ - ruby-two-five:
54
+ requires:
55
+ - rubocop
56
+ - ruby-two-six:
57
+ requires:
58
+ - ruby-two-five
59
+ - ruby-two-seven:
60
+ requires:
61
+ - ruby-two-five
@@ -0,0 +1,34 @@
1
+ Layout/LineLength:
2
+ Max: 120
3
+ Metrics/MethodLength:
4
+ Max: 100
5
+ Metrics/ClassLength:
6
+ Max: 1500
7
+ Metrics/BlockLength:
8
+ Max: 50
9
+ Metrics/CyclomaticComplexity:
10
+ Max: 20
11
+ Metrics/AbcSize:
12
+ Max: 100
13
+ Metrics/PerceivedComplexity:
14
+ Max: 50
15
+ Metrics/ParameterLists:
16
+ Max: 20
17
+ Layout/SpaceAroundEqualsInParameterDefault:
18
+ EnforcedStyle: space
19
+ Style/SymbolArray:
20
+ Enabled: true
21
+ Layout/HashAlignment:
22
+ EnforcedHashRocketStyle: table
23
+ EnforcedColonStyle: table
24
+ Style/Documentation:
25
+ Enabled: false
26
+ AllCops:
27
+ TargetRubyVersion: 2.5
28
+ NewCops: enable
29
+ Style/FrozenStringLiteralComment:
30
+ Enabled: false
31
+ Naming/FileName:
32
+ Enabled: false
33
+ Style/ClassAndModuleChildren:
34
+ Enabled: false
data/Gemfile CHANGED
@@ -1,7 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'legion-extensions', path: '~/legion-io/legion-extensions'
4
- gem 'legion-transport', path: '~/legion-io/legion-transport'
5
-
6
3
  # Specify your gem's dependencies in legion-extensions-tasker.gemspec
7
4
  gemspec
data/README.md CHANGED
@@ -2,14 +2,13 @@
2
2
 
3
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 into a gem. Put your Ruby code in the file `lib/legion/extensions/tasker`. To experiment with that code, run `bin/console` for an interactive prompt.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
6
5
 
7
6
  ## Installation
8
7
 
9
8
  Add this line to your application's Gemfile:
10
9
 
11
10
  ```ruby
12
- gem 'legion-extensions-tasker'
11
+ gem 'lex-tasker'
13
12
  ```
14
13
 
15
14
  And then execute:
@@ -18,22 +17,12 @@ And then execute:
18
17
 
19
18
  Or install it yourself as:
20
19
 
21
- $ gem install legion-extensions-tasker
20
+ $ gem install lex-tasker
22
21
 
23
22
  ## Usage
24
23
 
25
24
  TODO: Write usage instructions here
26
25
 
27
- ## Development
28
-
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
-
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
-
33
- ## Contributing
34
-
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/legion-extensions-tasker.
36
-
37
26
  ## License
38
27
 
39
28
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -12,19 +12,20 @@ Gem::Specification.new do |spec|
12
12
  spec.description = 'This LEX keeps track of tasks and their status'
13
13
  spec.homepage = 'https://bitbucket.org/legion-io/lex-tasker'
14
14
  spec.license = 'MIT'
15
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
15
16
 
16
17
  # Specify which files should be added to the gem when it is released.
17
18
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
19
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
19
20
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
21
  end
21
- spec.bindir = 'exe'
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_development_dependency 'bundler', '~> 1'
25
+ spec.add_development_dependency 'bundler'
26
+ spec.add_development_dependency 'codecov'
26
27
  spec.add_development_dependency 'rake'
27
28
  spec.add_development_dependency 'rspec'
28
-
29
- spec.add_dependency 'legion-extensions'
29
+ spec.add_development_dependency 'rubocop'
30
+ spec.add_development_dependency 'rubocop-performance'
30
31
  end
@@ -1,82 +1,10 @@
1
1
  require 'legion/extensions/tasker/version'
2
2
  require 'legion/extensions'
3
- require 'legion/extensions/tasker/actors/task_update'
4
- require 'legion/extensions/tasker/actors/task_log'
5
- require 'legion/extensions/tasker/actors/lex_register'
6
- require 'legion/extensions/tasker/actors/task_subtask'
7
- require 'legion/extensions/tasker/actors/task_check_subtask'
8
3
 
9
4
  module Legion
10
5
  module Extensions
11
6
  module Tasker
12
- extend Legion::Extensions::Default
13
- attr_reader :actors, :requirements, :default_settings, :autobuild
14
- def self.actors
15
- [
16
- {
17
- path: path + 'actors/task_update',
18
- class: klass::Actor::TaskUpdater,
19
- group_name: 'taskupdater'
20
- },
21
- {
22
- path: path + 'actors/task_log',
23
- class: klass::Actor::TaskLog,
24
- group_name: 'task_logger'
25
- }, {
26
- path: path + 'actors/lex_register',
27
- class: klass::Actor::LexRegister,
28
- group_name: 'lex_register'
29
- }, {
30
- path: path + 'actors/task_check_subtask',
31
- class: klass::Actor::TaskCheckSubtask,
32
- group_name: 'task_check_subtask'
33
- }
34
- ]
35
- end
36
-
37
- def self.lex_methods
38
- [{
39
- namespace: 'legion::extensions::tasker::runners::tasklog',
40
- queue: 'task.log',
41
- uri: 'task_log',
42
- class_methods: {
43
- add_log: {},
44
- delete_log: {},
45
- delete_all_task_logs: {}
46
- }
47
- }, {
48
- namespace: 'legion::extensions::tasker::runners::taskupdater',
49
- queue: 'task',
50
- uri: 'task',
51
- class_methods: {
52
- update_status: {}
53
- }
54
- }, {
55
- namespace: 'legion::extensions::tasker::runners::lexregister',
56
- queue: 'lex.register',
57
- uri: 'lex_register',
58
- class_methods: {
59
- save: {},
60
- save_namespace: {},
61
- save_funciton: {}
62
- }
63
- }]
64
- end
65
-
66
- def self.requirements
67
- # ['legion-transport', 'legion-data']
68
- ['legion-transport']
69
- end
70
-
71
- def self.klass
72
- Legion::Extensions::Tasker
73
- end
74
-
75
- def self.path
76
- 'legion/extensions/tasker/'
77
- end
78
-
79
- module_function
7
+ extend Legion::Extensions::Core
80
8
  end
81
9
  end
82
10
  end
@@ -0,0 +1,21 @@
1
+ module Legion::Extensions::Tasker
2
+ module Actor
3
+ class CheckSubtask < Legion::Extensions::Actors::Subscription
4
+ def runner_function
5
+ 'check_subtasks'
6
+ end
7
+
8
+ def check_subtask?
9
+ false
10
+ end
11
+
12
+ def use_runner?
13
+ false
14
+ end
15
+
16
+ def generate_task?
17
+ false
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module Legion::Extensions::Tasker
2
+ module Actor
3
+ class FetchDelayed < Legion::Extensions::Actors::Subscription
4
+ def runner_function
5
+ 'fetch'
6
+ end
7
+
8
+ def use_runner?
9
+ false
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,29 @@
1
+ module Legion::Extensions::Tasker
2
+ module Actor
3
+ class FetchDelayedPush < Legion::Extensions::Actors::Every
4
+ def runner_function
5
+ 'push'
6
+ end
7
+
8
+ def runner_class
9
+ Legion::Extensions::Tasker::Runners::FetchDelayed
10
+ end
11
+
12
+ def check_subtask?
13
+ false
14
+ end
15
+
16
+ def generate_task?
17
+ false
18
+ end
19
+
20
+ def use_runner?
21
+ false
22
+ end
23
+
24
+ def time
25
+ 1
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,17 @@
1
+ module Legion::Extensions::Tasker
2
+ module Actor
3
+ class Log < Legion::Extensions::Actors::Subscription
4
+ def runner_function
5
+ 'add_log'
6
+ end
7
+
8
+ def check_subtask?
9
+ false
10
+ end
11
+
12
+ def generate_task?
13
+ false
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Legion::Extensions::Tasker
2
+ module Actor
3
+ class Updater < Legion::Extensions::Actors::Subscription
4
+ def runner_function
5
+ 'update_status'
6
+ end
7
+
8
+ def check_subtask?
9
+ false
10
+ end
11
+
12
+ def generate_task?
13
+ false
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,110 @@
1
+ require 'legion/transport/messages/subtask'
2
+
3
+ module Legion::Extensions::Tasker
4
+ module Runners
5
+ module CheckSubtask
6
+ include Legion::Extensions::Helpers::Lex
7
+
8
+ def check_subtasks(runner_class:, function:, **opts)
9
+ runner_record = Legion::Data::Model::Runner.where(namespace: runner_class).first
10
+ return if runner_record.nil?
11
+
12
+ function_record = runner_record.functions_dataset.where(name: function).first
13
+ return if function_record.nil?
14
+
15
+ relationships = function_record.trigger_relationships_dataset.where(:active)
16
+ relationships.where(chain_id: opts[:chain_id] || :allow_new_chains) if opts.key? :chain_id
17
+ return { success: true, count: relationships.count } if relationships.count.zero?
18
+
19
+ relationships.each do |relationship|
20
+ unless relationship.values[:allow_new_chains]
21
+ next if relationship.chain.nil?
22
+ next unless opts.key? :chain_id
23
+ next unless relationship.values[:chain_id] == opts[:chain_id]
24
+ end
25
+
26
+ action_function = relationship.action
27
+ action_runner = action_function.runner
28
+
29
+ status = relationship.values[:delay].zero? ? 'conditioner.queued' : 'task.delayed'
30
+
31
+ task_id_hash = { runner_class: action_runner.values[:namespace],
32
+ function: action_function.values[:name],
33
+ status: status,
34
+ relationship_id: relationship.values[:id] }
35
+ task_id_hash[:payload] = opts
36
+
37
+ if opts.key? :master_id
38
+ task_id_hash[:master_id] = opts[:master_id]
39
+ elsif opts.key? :parent_id
40
+ task_id_hash[:master_id] = opts[:parent_id]
41
+ elsif opts.key? :task_id
42
+ task_id_hash[:master_id] = opts[:task_id]
43
+ end
44
+
45
+ task_id_hash[:parent_id] = opts[:task_id] if opts.key? :task_id
46
+ if opts[:result].is_a? Array
47
+ opts[:result].each do |result|
48
+ send_task(task_id_hash,
49
+ relationship: relationship,
50
+ runner_record: runner_record,
51
+ function_record: function_record,
52
+ action_function: action_function,
53
+ action_runner: action_runner,
54
+ result: result)
55
+ end
56
+ else
57
+ send_task(task_id_hash,
58
+ relationship: relationship,
59
+ runner_record: runner_record,
60
+ function_record: function_record,
61
+ action_function: action_function,
62
+ action_runner: action_runner,
63
+ **opts)
64
+ end
65
+ end
66
+ rescue StandardError => e
67
+ Legion::Logging.fatal e.message
68
+ Legion::Logging.fatal e.backtrace
69
+ Legion::Logging.fatal runner_class
70
+ Legion::Logging.fatal function
71
+ Legion::Logging.fatal opts.keys
72
+ Legion::Logging.fatal opts[:entry]
73
+ end
74
+
75
+ def send_task(task_id_hash, relationship:, runner_record:, function_record:, action_function:, action_runner:, **opts) # rubocop:disable Layout/LineLength
76
+ task_id = Legion::Runner::Status.generate_task_id(**task_id_hash)[:task_id]
77
+
78
+ return { status: true } unless relationship.values[:delay].zero?
79
+
80
+ subtask_hash = {
81
+ relationship_id: relationship.values[:id],
82
+ chain_id: relationship.values[:chain_id],
83
+ trigger_runner_id: runner_record.values[:id],
84
+ trigger_function_id: function_record.values[:id],
85
+ function_id: action_function.values[:id],
86
+ function: action_function.values[:name],
87
+ runner_id: action_runner.values[:id],
88
+ runner_class: action_runner.values[:namespace],
89
+ conditions: relationship.values[:conditions],
90
+ transformation: relationship.values[:transformation],
91
+ debug: relationship.values[:debug] && 1 || 0,
92
+ task_id: task_id,
93
+ results: opts[:result]
94
+ }
95
+
96
+ subtask_hash[:success] = if opts.nil?
97
+ 1
98
+ elsif opts.key?(:result)
99
+ # opts[:result][:success]
100
+ 1
101
+ elsif opts.key?(:success)
102
+ opts[:success]
103
+ else
104
+ 1
105
+ end
106
+ Legion::Transport::Messages::SubTask.new(**subtask_hash).publish
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,51 @@
1
+ module Legion::Extensions::Tasker::Runners
2
+ module FetchDelayed
3
+ include Legion::Extensions::Helpers::Lex
4
+
5
+ def fetch(**_opts)
6
+ tasks = Legion::Data::Model::Task.where(status: 'task.delayed')
7
+ tasks_pushed = []
8
+ log.debug "tasks.count = #{tasks.count}"
9
+ tasks.each do |task|
10
+ relationship = task.relationship
11
+ next if !task.relationship.nil? && Time.now < task.values[:created] + relationship.values[:delay]
12
+ next if Time.now < task.values[:created] + task.values[:delay]
13
+
14
+ subtask = Legion::Transport::Messages::SubTask.new(
15
+ relationship_id: relationship.values[:id],
16
+ chain_id: relationship.values[:chain_id],
17
+ trigger_runner_id: relationship.trigger.runner.values[:id],
18
+ trigger_function_id: relationship.values[:trigger_id],
19
+ function_id: relationship.action.values[:id],
20
+ function: relationship.action.values[:name],
21
+ runner_id: relationship.action.values[:runner_id],
22
+ runner_class: relationship.action.runner.values[:namespace],
23
+ conditions: relationship.values[:conditions],
24
+ transformation: relationship.values[:transformation],
25
+ # debug: relationship.values[:debug],
26
+ task_id: task.values[:id]
27
+ # results: task.values[:payload]
28
+ )
29
+ log.debug 'publishing task'
30
+ subtask.publish
31
+ task.update(status: 'conditioner.queued')
32
+ tasks_pushed.push(task.values[:id])
33
+ rescue StandardError => e
34
+ task.update(status: 'task.push_exception')
35
+ log.error e.message
36
+ log.error e.backtrace
37
+ end
38
+
39
+ { success: true, count: tasks_pushed.count, tasks: tasks_pushed }
40
+ rescue StandardError => e
41
+ Legion::Logging.error e.message
42
+ Legion::Logging.error e.backtrace
43
+ end
44
+
45
+ def push(**_opts)
46
+ log.debug 'push has been called'
47
+ Legion::Extensions::Tasker::Transport::Messages::FetchDelayed.new.publish
48
+ { success: true }
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,50 @@
1
+ module Legion::Extensions::Tasker
2
+ module Runners
3
+ module Log
4
+ include Legion::Extensions::Helpers::Lex
5
+
6
+ def add_log(task_id:, entry:, function: nil, runner_class: nil, **opts)
7
+ entry = JSON.dump(entry) unless entry.is_a? String
8
+ insert = { task_id: task_id, entry: entry }
9
+ if opts.key?(:node_id)
10
+ insert[:node_id] = payload[:node_id]
11
+ elsif opts.key?(:name)
12
+ node = Legion::Data::Model::Node.where(opts[:name]).first
13
+ insert[:node_id] = node.values[:id] unless node.nil?
14
+ end
15
+ insert[:function_id] = opts[:function_id] if opts.key? :function_id
16
+
17
+ unless function.nil? && runner_class.nil?
18
+ runner = Legion::Data::Model::Runner.where(namespace: runner_class).first
19
+ unless runner.values.nil?
20
+ insert[:function_id] = runner.functions_dataset.where(name: function).first.values[:id]
21
+ end
22
+ end
23
+
24
+ id = Legion::Data::Model::TaskLog.insert(insert)
25
+
26
+ { success: !id.nil?, id: id }
27
+ end
28
+
29
+ def delete_log(id:, **_opts)
30
+ delete = Legion::Data::Model::TaskLog[id].delete
31
+ { success: delete.positive?, count: delete, deleted_id: id }
32
+ end
33
+
34
+ def delete_task_logs(task_id:, **_opts)
35
+ delete = Legion::Data::Model::TaskLog.where(task_id: task_id).delete
36
+ { success: delete.positive?, count: delete, deleted_task_id: task_id }
37
+ end
38
+
39
+ def delete_node_logs(node_id:, **_opts)
40
+ delete = Legion::Data::Model::TaskLog.where(node_id: node_id).delete
41
+ { success: delete.positive?, count: delete, deleted_node_id: node_id }
42
+ end
43
+
44
+ def delete_all(**_opts)
45
+ delete = Legion::Data::Model::TaskLog.all.delete
46
+ { success: delete.positive?, count: delete }
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,25 @@
1
+ module Legion::Extensions::Tasker
2
+ module Runners
3
+ module Updater
4
+ include Legion::Extensions::Helpers::Lex
5
+
6
+ def update_status(task_id:, **opts)
7
+ task = Legion::Data::Model::Task[task_id]
8
+ update_hash = {}
9
+ %i[status function_args payload results].each do |column|
10
+ next unless opts.key? column
11
+
12
+ update_hash[column] = if opts[column].is_a? String
13
+ opts[column]
14
+ else
15
+ to_json opts[column]
16
+ end
17
+ end
18
+ { success: true, changed: false, task_id: task_id } if update_hash.count.zero?
19
+ task.update(update_hash)
20
+
21
+ { success: true, changed: true, task_id: task_id, updates: update_hash }
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ require 'legion/transport/exchanges/task'
2
+ require 'legion/extensions/transport'
3
+
4
+ module Legion::Extensions::Tasker
5
+ module Transport
6
+ extend Legion::Extensions::Transport
7
+ def self.e_to_q
8
+ [
9
+ {
10
+ to: 'updater',
11
+ routing_key: 'task.update'
12
+ },
13
+ {
14
+ to: 'log',
15
+ routing_key: 'task.logs.#'
16
+ }, {
17
+ to: 'check_subtask',
18
+ routing_key: 'task.subtask.check'
19
+ }, {
20
+ to: 'fetch_delayed',
21
+ routing_key: 'fetch.delayed'
22
+ }
23
+ ]
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,8 @@
1
+ module Legion::Extensions::Tasker
2
+ module Transport
3
+ module Exchanges
4
+ class Tasker < Legion::Transport::Exchanges::Task
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ module Legion::Extensions::Tasker::Transport::Messages
2
+ class FetchDelayed < Legion::Transport::Message
3
+ def routing_key
4
+ 'fetch.delayed'
5
+ end
6
+
7
+ def expiration
8
+ 5000
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module Legion::Extensions::Tasker
2
+ module Transport
3
+ module Queues
4
+ class CheckSubtask < Legion::Transport::Queue
5
+ def queue_name
6
+ 'task.subtask.check'
7
+ end
8
+
9
+ def queue_options
10
+ { auto_delete: false }
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module Legion::Extensions::Tasker
2
+ module Transport
3
+ module Queues
4
+ class FetchDelayed < Legion::Transport::Queue
5
+ def queue_name
6
+ 'task.fetch_delayed'
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module Legion::Extensions::Tasker
2
+ module Transport
3
+ module Queues
4
+ class LexRegister < Legion::Transport::Queue
5
+ def queue_name
6
+ 'lex.register'
7
+ end
8
+
9
+ def queue_options
10
+ { auto_delete: false }
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module Legion::Extensions::Tasker
2
+ module Transport
3
+ module Queues
4
+ class Subtask < Legion::Transport::Queue
5
+ def queue_name
6
+ 'task.subtask'
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Legion::Extensions::Tasker
2
+ module Transport
3
+ module Queues
4
+ class Log < Legion::Transport::Queue
5
+ def queue_name
6
+ 'task.log'
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Legion::Extensions::Tasker
2
+ module Transport
3
+ module Queues
4
+ class Updater < Legion::Transport::Queue
5
+ def queue_name
6
+ 'task.updater'
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,7 +1,7 @@
1
1
  module Legion
2
2
  module Extensions
3
3
  module Tasker
4
- VERSION = '0.1.0'.freeze
4
+ VERSION = '0.1.1'.freeze
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-tasker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miverson
8
- autorequire:
9
- bindir: exe
8
+ autorequire:
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-08 00:00:00.000000000 Z
11
+ date: 2020-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
18
25
  - !ruby/object:Gem::Version
19
- version: '1'
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: codecov
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '1'
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,13 +67,27 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: legion-extensions
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-performance
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - ">="
60
88
  - !ruby/object:Gem::Version
61
89
  version: '0'
62
- type: :runtime
90
+ type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
@@ -73,14 +101,10 @@ executables: []
73
101
  extensions: []
74
102
  extra_rdoc_files: []
75
103
  files:
104
+ - ".circleci/config.yml"
76
105
  - ".gitignore"
77
- - ".idea/encodings.xml"
78
- - ".idea/legion-extensions-tasker.iml"
79
- - ".idea/misc.xml"
80
- - ".idea/modules.xml"
81
- - ".idea/workspace.xml"
82
106
  - ".rspec"
83
- - ".travis.yml"
107
+ - ".rubocop.yml"
84
108
  - Gemfile
85
109
  - LICENSE.txt
86
110
  - README.md
@@ -89,12 +113,30 @@ files:
89
113
  - bin/setup
90
114
  - legion-extensions-tasker.gemspec
91
115
  - lib/legion/extensions/tasker.rb
116
+ - lib/legion/extensions/tasker/actors/check_subtask.rb
117
+ - lib/legion/extensions/tasker/actors/fetch_delayed.rb
118
+ - lib/legion/extensions/tasker/actors/fetch_delayed_push.rb
119
+ - lib/legion/extensions/tasker/actors/log.rb
120
+ - lib/legion/extensions/tasker/actors/updater.rb
121
+ - lib/legion/extensions/tasker/runners/check_subtask.rb
122
+ - lib/legion/extensions/tasker/runners/fetch_delayed.rb
123
+ - lib/legion/extensions/tasker/runners/log.rb
124
+ - lib/legion/extensions/tasker/runners/updater.rb
125
+ - lib/legion/extensions/tasker/transport.rb
126
+ - lib/legion/extensions/tasker/transport/exchanges/task.rb
127
+ - lib/legion/extensions/tasker/transport/messages/fetch_delayed.rb
128
+ - lib/legion/extensions/tasker/transport/queues/check_subtask.rb
129
+ - lib/legion/extensions/tasker/transport/queues/fetch_delayed.rb
130
+ - lib/legion/extensions/tasker/transport/queues/lex_register.rb
131
+ - lib/legion/extensions/tasker/transport/queues/subtask.rb
132
+ - lib/legion/extensions/tasker/transport/queues/task_log.rb
133
+ - lib/legion/extensions/tasker/transport/queues/updater.rb
92
134
  - lib/legion/extensions/tasker/version.rb
93
135
  homepage: https://bitbucket.org/legion-io/lex-tasker
94
136
  licenses:
95
137
  - MIT
96
138
  metadata: {}
97
- post_install_message:
139
+ post_install_message:
98
140
  rdoc_options: []
99
141
  require_paths:
100
142
  - lib
@@ -102,16 +144,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
144
  requirements:
103
145
  - - ">="
104
146
  - !ruby/object:Gem::Version
105
- version: '0'
147
+ version: 2.5.0
106
148
  required_rubygems_version: !ruby/object:Gem::Requirement
107
149
  requirements:
108
150
  - - ">="
109
151
  - !ruby/object:Gem::Version
110
152
  version: '0'
111
153
  requirements: []
112
- rubyforge_project:
113
- rubygems_version: 2.7.8
114
- signing_key:
154
+ rubygems_version: 3.1.2
155
+ signing_key:
115
156
  specification_version: 4
116
157
  summary: LEX::Tasker manages tasks status from Legion
117
158
  test_files: []
@@ -1,4 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="Encoding" addBOMForNewFiles="with NO BOM" />
4
- </project>
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="RUBY_MODULE" version="4">
3
- <component name="NewModuleRootManager">
4
- <content url="file://$MODULE_DIR$" />
5
- <orderEntry type="jdk" jdkName="RVM: ruby-2.4.5" jdkType="RUBY_SDK" />
6
- <orderEntry type="sourceFolder" forTests="false" />
7
- </component>
8
- </module>
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="JavaScriptSettings">
4
- <option name="languageLevel" value="ES6" />
5
- </component>
6
- <component name="ProjectRootManager" version="2" project-jdk-name="RVM: ruby-2.4.0" project-jdk-type="RUBY_SDK" />
7
- </project>
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/legion-extensions-tasker.iml" filepath="$PROJECT_DIR$/.idea/legion-extensions-tasker.iml" />
6
- </modules>
7
- </component>
8
- </project>
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="PropertiesComponent">
4
- <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
5
- <property name="nodejs_npm_path_reset_for_default_project" value="true" />
6
- </component>
7
- </project>
@@ -1,7 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.4.5
7
- before_install: gem install bundler -v 1.17.3