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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +61 -0
- data/.rubocop.yml +34 -0
- data/Gemfile +0 -3
- data/README.md +2 -13
- data/legion-extensions-tasker.gemspec +6 -5
- data/lib/legion/extensions/tasker.rb +1 -73
- data/lib/legion/extensions/tasker/actors/check_subtask.rb +21 -0
- data/lib/legion/extensions/tasker/actors/fetch_delayed.rb +13 -0
- data/lib/legion/extensions/tasker/actors/fetch_delayed_push.rb +29 -0
- data/lib/legion/extensions/tasker/actors/log.rb +17 -0
- data/lib/legion/extensions/tasker/actors/updater.rb +17 -0
- data/lib/legion/extensions/tasker/runners/check_subtask.rb +110 -0
- data/lib/legion/extensions/tasker/runners/fetch_delayed.rb +51 -0
- data/lib/legion/extensions/tasker/runners/log.rb +50 -0
- data/lib/legion/extensions/tasker/runners/updater.rb +25 -0
- data/lib/legion/extensions/tasker/transport.rb +26 -0
- data/lib/legion/extensions/tasker/transport/exchanges/task.rb +8 -0
- data/lib/legion/extensions/tasker/transport/messages/fetch_delayed.rb +11 -0
- data/lib/legion/extensions/tasker/transport/queues/check_subtask.rb +15 -0
- data/lib/legion/extensions/tasker/transport/queues/fetch_delayed.rb +11 -0
- data/lib/legion/extensions/tasker/transport/queues/lex_register.rb +15 -0
- data/lib/legion/extensions/tasker/transport/queues/subtask.rb +11 -0
- data/lib/legion/extensions/tasker/transport/queues/task_log.rb +11 -0
- data/lib/legion/extensions/tasker/transport/queues/updater.rb +11 -0
- data/lib/legion/extensions/tasker/version.rb +1 -1
- metadata +62 -21
- data/.idea/encodings.xml +0 -4
- data/.idea/legion-extensions-tasker.iml +0 -8
- data/.idea/misc.xml +0 -7
- data/.idea/modules.xml +0 -8
- data/.idea/workspace.xml +0 -7
- data/.travis.yml +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 66a34f6cf6d57469672d12a3985bd2cb6c6fb923255e462c7b4c62e501cc1d50
|
|
4
|
+
data.tar.gz: 5ecf2cc2e2e10a7883f83531a6d2671eda1df0046958309f4cdd9e95df135137
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
data/.rubocop.yml
ADDED
|
@@ -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
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 '
|
|
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
|
|
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
|
|
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'
|
|
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.
|
|
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::
|
|
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,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 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
|
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.
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Miverson
|
|
8
|
-
autorequire:
|
|
9
|
-
bindir:
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
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: '
|
|
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: '
|
|
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:
|
|
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: :
|
|
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
|
-
- ".
|
|
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:
|
|
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
|
-
|
|
113
|
-
|
|
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: []
|
data/.idea/encodings.xml
DELETED
|
@@ -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>
|
data/.idea/misc.xml
DELETED
|
@@ -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>
|
data/.idea/modules.xml
DELETED
|
@@ -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>
|
data/.idea/workspace.xml
DELETED
|
@@ -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>
|