sidekiq-job_monitor 0.1.1 → 0.1.2
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/README.md +6 -0
- data/app/assets/javascripts/sidekiq-job_monitor.coffee +23 -6
- data/app/controllers/sidekiq/job_monitor/job_progress_controller.rb +26 -10
- data/config/routes.rb +5 -1
- data/lib/sidekiq/job_monitor/job.rb +12 -2
- data/lib/sidekiq/job_monitor/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 319d954ebcdf311eb5fa65d407ab02e466512a1e
|
4
|
+
data.tar.gz: 8e5f2abfba3189ec211b5fe2ff0d1dac61b490e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 541469c7e9534e2a55214d4f6066b95a01af869feede6bf6230b0a580821fcb6910e03aa64f1bcdafd09f288bd5fb1bd9a99d5dbe0865c11bad756de4c6e655c
|
7
|
+
data.tar.gz: e59303b4780c868f54e2b5ad0199bb5923ab2f22ccd7d1af7e6e477cda3081fdb6b06ce53855fc993dddfc4d9e5de0d410376578d64c5c1be287b747a36633a5
|
data/README.md
CHANGED
@@ -29,6 +29,12 @@ Mount the engine in your routes.rb :
|
|
29
29
|
mount Sidekiq::JobMonitor::Engine => '/job-monitor', as: :job_monitor
|
30
30
|
```
|
31
31
|
|
32
|
+
Then load the js library by adding the following to your `application.js` :
|
33
|
+
|
34
|
+
```javascript
|
35
|
+
//= require sidekiq-job_monitor
|
36
|
+
```
|
37
|
+
|
32
38
|
## Usage
|
33
39
|
|
34
40
|
The supported workflow for the gem is the following :
|
@@ -5,8 +5,9 @@ class Sidekiq.JobMonitor
|
|
5
5
|
@$el = $(markup)
|
6
6
|
@monitorURL = @$el.data('monitor-url')
|
7
7
|
@monitor()
|
8
|
-
options.onStart?(
|
8
|
+
options.onStart?(this)
|
9
9
|
@$el.on('stop', @stopMonitoring)
|
10
|
+
@$el.on('cancel', @cancelJob)
|
10
11
|
$('body').trigger('start', [this])
|
11
12
|
|
12
13
|
monitorProgress: =>
|
@@ -15,16 +16,15 @@ class Sidekiq.JobMonitor
|
|
15
16
|
.fail(@jobFailed)
|
16
17
|
|
17
18
|
onMonitorProgressData: (data) =>
|
18
|
-
|
19
|
-
@jobComplete(data)
|
20
|
-
|
21
|
-
@monitor()
|
19
|
+
switch data.state
|
20
|
+
when 'complete' then @jobComplete(data)
|
21
|
+
when 'failed' then @jobFailed(data)
|
22
|
+
else @monitor()
|
22
23
|
|
23
24
|
monitor: ->
|
24
25
|
@monitorTimer = setTimeout(@monitorProgress, 1000)
|
25
26
|
|
26
27
|
jobComplete: (data) ->
|
27
|
-
console.log "trigger completion : ", this, data
|
28
28
|
@$el.trigger('complete', [this, data])
|
29
29
|
|
30
30
|
jobFailed: =>
|
@@ -33,6 +33,23 @@ class Sidekiq.JobMonitor
|
|
33
33
|
stopMonitoring: =>
|
34
34
|
clearTimeout(@monitorTimer) if @monitorTimer
|
35
35
|
|
36
|
+
# Canceling job will only work for queued jobs, and not for running ones
|
37
|
+
#
|
38
|
+
# If the job is running, cancelation will be ignored and no error raised
|
39
|
+
#
|
40
|
+
cancelJob: =>
|
41
|
+
$.get(@remoteURL('cancel')).done(@jobCanceled)
|
42
|
+
|
43
|
+
jobCanceled: =>
|
44
|
+
@$el.trigger('canceled', [this])
|
45
|
+
|
46
|
+
remoteURL: (action = null) ->
|
47
|
+
return @monitorURL unless action
|
48
|
+
urlParts = @monitorURL.split('?')
|
49
|
+
url = [urlParts[0], action].join('/')
|
50
|
+
queryParams = urlParts[1]
|
51
|
+
if queryParams then [url, queryParams].join('?') else url
|
52
|
+
|
36
53
|
$.fn.sidekiqJobMonitor = (options = {}) ->
|
37
54
|
@each (i, el) ->
|
38
55
|
$(el).on 'ajax:success', (e, response) ->
|
@@ -1,21 +1,37 @@
|
|
1
1
|
module Sidekiq
|
2
2
|
module JobMonitor
|
3
3
|
class JobProgressController < ApplicationController
|
4
|
+
before_action :load_job
|
5
|
+
|
4
6
|
def show
|
5
|
-
|
7
|
+
render json: data
|
8
|
+
end
|
9
|
+
|
10
|
+
def cancel
|
11
|
+
@job.cancel
|
12
|
+
load_job # Reload job to update state
|
13
|
+
render json: data
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def load_job
|
19
|
+
@job = Sidekiq::JobMonitor::Job.find(params[:id])
|
6
20
|
# Fail and return 404 if no job was found
|
7
|
-
|
21
|
+
head 404 unless @job
|
22
|
+
end
|
23
|
+
|
24
|
+
def data
|
8
25
|
# The only intersting data from the job is its state,
|
9
26
|
# arguments shouldn't be returned to the client
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
27
|
+
{ id: @job.attributes['jid'], state: @job.state }.tap do |data|
|
28
|
+
# Allow the worker class to hook into data serialization by calling
|
29
|
+
# the #monitoring_data instance method with the job arguments and
|
30
|
+
# state as arguments
|
31
|
+
if (monitoring_data = @job.monitoring_data)
|
32
|
+
data.merge!(monitoring_data)
|
33
|
+
end
|
16
34
|
end
|
17
|
-
|
18
|
-
render json: data
|
19
35
|
end
|
20
36
|
end
|
21
37
|
end
|
data/config/routes.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
module Sidekiq
|
2
2
|
module JobMonitor
|
3
3
|
class Job
|
4
|
-
attr_reader :attributes
|
4
|
+
attr_reader :attributes, :original_job
|
5
5
|
|
6
6
|
def initialize(attributes)
|
7
7
|
@attributes = attributes.as_json(only: %w(class jid args state))
|
8
|
+
@original_job = attributes[:original_job]
|
8
9
|
end
|
9
10
|
|
10
11
|
def save
|
@@ -49,12 +50,18 @@ module Sidekiq
|
|
49
50
|
|
50
51
|
def monitoring_data
|
51
52
|
worker_instance = worker.new
|
53
|
+
worker_instance.jid = attributes['jid']
|
52
54
|
|
53
55
|
if worker_instance.respond_to?(:monitoring_data)
|
54
56
|
worker_instance.monitoring_data(*attributes['args'], state)
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
60
|
+
def cancel
|
61
|
+
return unless original_job
|
62
|
+
original_job.delete
|
63
|
+
end
|
64
|
+
|
58
65
|
class << self
|
59
66
|
def find(jid)
|
60
67
|
find_in_queues(jid) || find_in_previous(jid)
|
@@ -68,7 +75,10 @@ module Sidekiq
|
|
68
75
|
|
69
76
|
def find_in_queues(jid)
|
70
77
|
job = Sidekiq::Queue.new.find_job(jid)
|
71
|
-
|
78
|
+
return unless job
|
79
|
+
|
80
|
+
attributes = { original_job: job }.merge(job.item)
|
81
|
+
new(attributes)
|
72
82
|
end
|
73
83
|
|
74
84
|
def find_in_previous(jid)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-job_monitor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- vala
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|