arask 1.1.3 → 1.2.4
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 +5 -5
- data/README.md +13 -4
- data/lib/arask.rb +19 -13
- data/lib/arask/arask_job.rb +3 -0
- data/lib/arask/initialize.rb +5 -0
- data/lib/arask/railtie.rb +4 -0
- data/lib/arask/setup.rb +7 -4
- data/lib/arask/version.rb +1 -1
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 124439fc5b51273732a02efb953350c77953bfd4c2fe120460d6bb74b8762f02
|
4
|
+
data.tar.gz: a6c54e857d937e5d4e87a38b50c2c75a8beeb1d3e708e903047b15de2e6a74af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9b78ff561bb8e9dfcc1850f70f52550e045b6fee4a3fba4e2e687e9bce3d83f6e8032cd222dc07c45da5580fdad5f7a82065e8ce971628c8bea75003327c19f
|
7
|
+
data.tar.gz: 1a075fc84d7cf53155725221774277822da02adfe06e418443fd6d825bdae0eb440bf41ee17c11504ab1325291b6c5bc7422d8ef5210e37cd3f4af2ff25c8435
|
data/README.md
CHANGED
@@ -49,6 +49,11 @@ arask.create script: 'Attachment.process_new', interval: 5.hours, run_first_time
|
|
49
49
|
|
50
50
|
# On exceptions, send email with details
|
51
51
|
arask.on_exception email: 'errors@example.com'
|
52
|
+
|
53
|
+
# Run code on exceptions
|
54
|
+
arask.on_exception do |exception, arask_job|
|
55
|
+
MyExceptionHandler.new(exception)
|
56
|
+
end
|
52
57
|
```
|
53
58
|
|
54
59
|
### About cron
|
@@ -61,15 +66,19 @@ The interval starts when the task has started running. If a task with the interv
|
|
61
66
|
|
62
67
|
## Todos
|
63
68
|
* Have a "try again" feature. For instance `arask.create script: 'raise "I failed"', interval: :daily, fail_retry: 5.minutes, retry_at_most: 2`
|
64
|
-
* Be able to run a block when an exception occurs. `arask.on_exception do <code> end`
|
65
69
|
* Be able to specify line and number that failed for an exception:
|
66
70
|
```ruby
|
67
|
-
file,line,_ = caller.first.split('
|
71
|
+
file,line,_ = caller.first.split(':')
|
68
72
|
fileline = File.readlines(file)[line.to_i - 1].strip
|
69
73
|
```
|
70
74
|
|
71
|
-
##
|
72
|
-
|
75
|
+
## Special environments
|
76
|
+
|
77
|
+
### Heroku
|
78
|
+
Nothing special to setup. But if you use a hobby dyno and it falls to sleep, so will Arask. As soon as the dyno wakes up, Arask will run any pending jobs.
|
79
|
+
|
80
|
+
### Docker
|
81
|
+
Nothing special to setup.
|
73
82
|
|
74
83
|
## Caveats
|
75
84
|
If you reload a database dump, your jobs could be run again.
|
data/lib/arask.rb
CHANGED
@@ -5,26 +5,32 @@ require "arask/setup"
|
|
5
5
|
require 'fugit' # To parse cron
|
6
6
|
|
7
7
|
module Arask
|
8
|
-
class << self; attr_accessor :jobs_touched, :exception_email, :exception_email_from; end
|
8
|
+
class << self; attr_accessor :jobs_touched, :exception_email, :exception_email_from, :exception_block, :jobs_block; end
|
9
9
|
|
10
|
-
def self.setup
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
10
|
+
def self.setup(force_run = false, &block)
|
11
|
+
Arask.jobs_block = block
|
12
|
+
# Make sure we only run setup now if we are testing.
|
13
|
+
# Else we would run them at every cli execution.
|
14
|
+
# railtie.rb inits the jobs when the server is ready
|
15
|
+
Arask.init_jobs if force_run
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.init_jobs
|
19
|
+
Arask.jobs_touched = []
|
20
|
+
Arask.jobs_block.call(Setup)
|
21
|
+
Arask.jobs_block = nil
|
22
|
+
begin
|
23
|
+
AraskJob.all.where.not(id: Arask.jobs_touched).delete_all
|
24
|
+
Arask.jobs_touched = nil
|
25
|
+
Arask.queue_self
|
26
|
+
rescue
|
21
27
|
end
|
22
28
|
end
|
23
29
|
|
24
30
|
def self.queue_self
|
25
31
|
begin
|
26
32
|
next_job_run = AraskJob.order(execute_at: :asc).first.try(:execute_at)
|
27
|
-
# At least check database for jobs every
|
33
|
+
# At least check database for jobs every day
|
28
34
|
next_job_run = 1.day.from_now if next_job_run.nil? or (next_job_run - DateTime.now)/60/60 > 24
|
29
35
|
RunJobs.set(wait_until: next_job_run).perform_later
|
30
36
|
rescue
|
data/lib/arask/arask_job.rb
CHANGED
data/lib/arask/initialize.rb
CHANGED
data/lib/arask/railtie.rb
CHANGED
data/lib/arask/setup.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
module Arask
|
2
2
|
class Setup
|
3
|
-
def self.on_exception(email: nil, from: 'robot@server')
|
4
|
-
Arask.exception_email = email
|
5
|
-
Arask.exception_email_from = from
|
6
|
-
puts "Arask could not parse parameter for on_exception!" unless email.class == String
|
3
|
+
def self.on_exception(email: nil, from: 'robot@server', &block)
|
4
|
+
Arask.exception_email = email unless email.nil?
|
5
|
+
Arask.exception_email_from = from unless from.nil?
|
6
|
+
puts "Arask could not parse parameter for on_exception!" unless email.nil? or email.class == String
|
7
|
+
if block_given?
|
8
|
+
Arask.exception_block = block
|
9
|
+
end
|
7
10
|
end
|
8
11
|
|
9
12
|
def self.create(script: nil, task: nil, job: nil, interval: nil, cron: nil, run_first_time: false)
|
data/lib/arask/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arask
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Esben Damgaard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '5.
|
19
|
+
version: '5.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '5.
|
26
|
+
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: fugit
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,8 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
requirements: []
|
93
|
-
|
94
|
-
rubygems_version: 2.6.11
|
93
|
+
rubygems_version: 3.2.3
|
95
94
|
signing_key:
|
96
95
|
specification_version: 4
|
97
96
|
summary: Automatic RAils taSKs (with minimal setup)
|