jobler 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/jobler/application.js +1 -0
- data/app/assets/javascripts/jobler/jobs.js +7 -5
- data/app/assets/javascripts/jobler/timeago.js +3 -0
- data/app/assets/stylesheets/jobler/application.css +3 -15
- data/app/controllers/jobler/downloads_controller.rb +1 -1
- data/app/controllers/jobler/jobs_controller.rb +3 -2
- data/app/models/jobler/job.rb +19 -1
- data/app/views/jobler/jobs/show.html.erb +16 -7
- data/app/views/layouts/jobler/application.html.erb +25 -3
- data/db/migrate/20170206100737_add_error_message_and_error_backtrace_to_jobs.rb +7 -0
- data/db/migrate/20170206104246_add_slug_to_jobs.rb +6 -0
- data/lib/jobler/job_runner.rb +7 -2
- data/lib/jobler/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc6575214ca69340a22f08224606c5054ede5a4b
|
4
|
+
data.tar.gz: 259b5d8e7f71b30eb3d5af07e22bc6f6e6ff47f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc6428a298bf822a8964ca74ab5bf05d36dca9b289e8108841abf8b319263da810aa4d520c09eed02bc7345801c1fd7a9a741caa18dee61c238e676b5470177d
|
7
|
+
data.tar.gz: 4c23cfe4bf54bd0102cc543dd3ed27ae4651175bc71e11deed63e8a406c23090db6956972c928fb56912e650a4bbfa2896e6de672d00b8c64b55759d884e45a0
|
@@ -7,23 +7,25 @@ function updateJobProgress() {
|
|
7
7
|
|
8
8
|
result = $.parseJSON(data.responseText)
|
9
9
|
|
10
|
-
$(".job-
|
10
|
+
$(".job-headline").text(result.job.state_humanized)
|
11
|
+
$(".progress-bar").text((result.job.progress * 100).toFixed(0) + "%")
|
12
|
+
$(".progress-bar").css({width: (result.job.progress * 100) + "%"})
|
11
13
|
|
12
|
-
if (result.job.state == "completed") {
|
14
|
+
if (result.job.state == "completed" || result.job.state == "error") {
|
13
15
|
console.log("Job is completed - reload!")
|
14
16
|
location.reload()
|
15
17
|
}
|
16
18
|
}})
|
17
19
|
|
18
20
|
if (job.data("state") != "completed") {
|
19
|
-
setTimeout("updateJobProgress()",
|
21
|
+
setTimeout("updateJobProgress()", 2000)
|
20
22
|
}
|
21
23
|
}
|
22
24
|
|
23
25
|
$(document).ready(function() {
|
24
26
|
job = $(".job")
|
25
27
|
|
26
|
-
if (job.data("state") != "completed") {
|
27
|
-
updateJobProgress()
|
28
|
+
if (job.data("state") != "completed" && job.data("state") != "error") {
|
29
|
+
setTimeout("updateJobProgress()", 1000)
|
28
30
|
}
|
29
31
|
})
|
@@ -1,15 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
*
|
5
|
-
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
-
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
-
*
|
8
|
-
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
-
* compiled file so the styles you add here take precedence over styles defined in any styles
|
10
|
-
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
11
|
-
* file per style scope.
|
12
|
-
*
|
13
|
-
*= require_tree .
|
14
|
-
*= require_self
|
15
|
-
*/
|
1
|
+
body {
|
2
|
+
padding-top: 50px;
|
3
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Jobler::JobsController < Jobler::ApplicationController
|
2
2
|
def show
|
3
|
-
@job = Jobler::Job.
|
3
|
+
@job = Jobler::Job.find_by!(slug: params[:id])
|
4
4
|
@result = @job.jobler.result if @job.completed?
|
5
5
|
|
6
6
|
respond_to do |format|
|
@@ -8,7 +8,8 @@ class Jobler::JobsController < Jobler::ApplicationController
|
|
8
8
|
render json: {
|
9
9
|
job: {
|
10
10
|
progress: @job.progress,
|
11
|
-
state: @job.state
|
11
|
+
state: @job.state,
|
12
|
+
state_humanized: @job.state.humanize
|
12
13
|
}
|
13
14
|
}
|
14
15
|
end
|
data/app/models/jobler/job.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
class Jobler::Job < ActiveRecord::Base
|
2
2
|
has_many :results, class_name: "Jobler::Result", dependent: :destroy
|
3
3
|
|
4
|
-
validates :jobler_type, :state, presence: true
|
4
|
+
validates :jobler_type, :slug, :state, presence: true
|
5
|
+
|
6
|
+
before_validation :set_slug
|
5
7
|
|
6
8
|
def jobler
|
7
9
|
user_jobler = jobler_type.constantize.new
|
@@ -13,4 +15,20 @@ class Jobler::Job < ActiveRecord::Base
|
|
13
15
|
def completed?
|
14
16
|
state == "completed"
|
15
17
|
end
|
18
|
+
|
19
|
+
def error?
|
20
|
+
state == "error"
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_param
|
24
|
+
raise "No slug" unless slug?
|
25
|
+
slug
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def set_slug
|
31
|
+
require "securerandom"
|
32
|
+
self.slug ||= SecureRandom.hex
|
33
|
+
end
|
16
34
|
end
|
@@ -1,17 +1,26 @@
|
|
1
1
|
<div class="job" data-id="<%= @job.id %>" data-path="<%= job_path(@job) %>" data-state="<%= @job.state %>"></div>
|
2
2
|
|
3
|
-
|
4
|
-
<h1>Completed</h1>
|
3
|
+
<h1 class="job-headline"><%= @job.state.humanize %></h1>
|
5
4
|
|
5
|
+
<% if @job.completed? %>
|
6
6
|
<% if @result.is_a?(Jobler::FileDownload) %>
|
7
7
|
<%= link_to "Download", download_path(@job) %>
|
8
8
|
<% end %>
|
9
|
+
<% elsif @job.error? %>
|
10
|
+
<div class="well">
|
11
|
+
<%= @job.error_type %>: <%= @job.error_message %>
|
12
|
+
</div>
|
13
|
+
<pre><%= @job.error_backtrace %></pre>
|
9
14
|
<% else %>
|
10
|
-
<
|
15
|
+
Started <time class="timeago" datetime="<%= @job.created_at %>"></time>
|
11
16
|
|
12
|
-
<div class="
|
13
|
-
|
14
|
-
|
15
|
-
|
17
|
+
<div class="row">
|
18
|
+
<div class="col-lg-4 col-md-6 col-sm-8 col-xs-10">
|
19
|
+
<div class="progress">
|
20
|
+
<div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: <%= (@job.progress * 100).to_i %>%;">
|
21
|
+
<%= (@job.progress * 100).to_i %>%
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
</div>
|
16
25
|
</div>
|
17
26
|
<% end %>
|
@@ -2,13 +2,35 @@
|
|
2
2
|
<html>
|
3
3
|
<head>
|
4
4
|
<title>Jobler</title>
|
5
|
+
|
5
6
|
<%= stylesheet_link_tag "jobler/application", media: "all" %>
|
7
|
+
<%= stylesheet_link_tag "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css", integrity: "sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u", crossorigin: "anonymous" %>
|
8
|
+
|
6
9
|
<%= javascript_include_tag "jobler/application" %>
|
10
|
+
<%= javascript_include_tag "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js", integrity: "sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa", crossorigin: "anonymous" %>
|
11
|
+
<%= javascript_include_tag "https://use.fontawesome.com/de02b76735.js" %>
|
12
|
+
<%= javascript_include_tag "https://cdnjs.cloudflare.com/ajax/libs/jquery-timeago/1.5.4/jquery.timeago.min.js" %>
|
13
|
+
|
7
14
|
<%= csrf_meta_tags %>
|
8
15
|
</head>
|
9
16
|
<body class="controller-<%= controller_name %> action-<%= action_name %>">
|
10
|
-
|
11
|
-
|
12
|
-
|
17
|
+
<nav class="navbar navbar-inverse navbar-fixed-top">
|
18
|
+
<div class="container">
|
19
|
+
<div class="navbar-header">
|
20
|
+
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
21
|
+
<span class="sr-only">Toggle navigation</span>
|
22
|
+
<span class="icon-bar"></span>
|
23
|
+
<span class="icon-bar"></span>
|
24
|
+
<span class="icon-bar"></span>
|
25
|
+
</button>
|
26
|
+
<a class="navbar-brand" href="#">Jobler</a>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</nav>
|
30
|
+
<div class="container">
|
31
|
+
<div class="starter-template">
|
32
|
+
<%= yield %>
|
33
|
+
</div>
|
34
|
+
</div>
|
13
35
|
</body>
|
14
36
|
</html>
|
data/lib/jobler/job_runner.rb
CHANGED
@@ -12,8 +12,13 @@ class Jobler::JobRunner < ActiveJob::Base
|
|
12
12
|
|
13
13
|
@job.update_attributes!(ended_at: Time.zone.now, progress: 1.0, state: "completed")
|
14
14
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
15
|
-
@job.update_attributes!(
|
16
|
-
|
15
|
+
@job.update_attributes!(
|
16
|
+
ended_at: Time.zone.now,
|
17
|
+
error_message: e.message,
|
18
|
+
error_type: e.class.name,
|
19
|
+
error_backtrace: e.backtrace.join("\n"),
|
20
|
+
state: "error"
|
21
|
+
)
|
17
22
|
end
|
18
23
|
end
|
19
24
|
|
data/lib/jobler/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jobler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kaspernj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- app/assets/javascripts/jobler.js
|
38
38
|
- app/assets/javascripts/jobler/application.js
|
39
39
|
- app/assets/javascripts/jobler/jobs.js
|
40
|
+
- app/assets/javascripts/jobler/timeago.js
|
40
41
|
- app/assets/stylesheets/jobler/application.css
|
41
42
|
- app/controllers/jobler/application_controller.rb
|
42
43
|
- app/controllers/jobler/downloads_controller.rb
|
@@ -50,6 +51,8 @@ files:
|
|
50
51
|
- db/migrate/20170130220604_create_jobs.rb
|
51
52
|
- db/migrate/20170130220734_create_jobler_results.rb
|
52
53
|
- db/migrate/20170203161045_add_locale_to_jobs.rb
|
54
|
+
- db/migrate/20170206100737_add_error_message_and_error_backtrace_to_jobs.rb
|
55
|
+
- db/migrate/20170206104246_add_slug_to_jobs.rb
|
53
56
|
- lib/jobler.rb
|
54
57
|
- lib/jobler/base_jobler.rb
|
55
58
|
- lib/jobler/engine.rb
|