sidekiq-status 0.5.2 → 0.5.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6b4364f29e4cebdacba46d6266532b800cd0626
4
- data.tar.gz: cca02102cb3f156fc54ae6bfd7c737e6bbad9d46
3
+ metadata.gz: 8a5a67d1f198977c5c62da1f00d692ea3ccef0be
4
+ data.tar.gz: a8da13f7d2b91592d9cb79f15f65c0702979c342
5
5
  SHA512:
6
- metadata.gz: 4e124dcb4344613124d2d3b8d58f666e7c1bf9a1c41da241db09bce9823de03486bb6e4c916fc4c5f9dbcd3bc73278715092f7709d5cc18d1f7c82b618607bbf
7
- data.tar.gz: e30d1f12e9388db15a59791aabb09e7adba4a461441c24b3a73bf34d4262c4cfb76edf850488bb66ba58800a7bec173b6233dba15412351ea67af8b2996d4ebe
6
+ metadata.gz: 9e0a5f452cf20f979c8ee5032287eaa94366b3cc4016eccfee976909dff2c7c6afd30eef59f02f72d34ea929371d26418505a3f7d948a30658e49e9f138fbecb
7
+ data.tar.gz: f9b9c8f88be162c4e222a4ac1a8e9bb64d96ed459065628b761b280e9a83318f68fdd660e27c9667541a7bd2788b10ae3d19f4a3619b9be53a0436ab3fc6148d
data/CHANGELOG CHANGED
@@ -1,3 +1,4 @@
1
+ Version 0.5.3:Sidekiq some tweaks in web UI, separate redis namespace
1
2
  Version 0.5.2:Sidekiq versions up to 3.3.* supported, jobs sorting options in web UI, more ruby versions
2
3
  Version 0.5.1:dependencies versions requirements relaxed
3
4
  Version 0.5.0:Sidekiq v3 support, redis pools support
data/README.md CHANGED
@@ -163,7 +163,10 @@ To use `sidekiq-status` inlining, require it too in your `{test,spec}_helper.rb`
163
163
  * Jon Moses
164
164
  * Wayne Hoover
165
165
  * Dylan Robinson
166
+ * Dmitry Novotochinov
167
+ * Mohammed Elalj
168
+ * Ben Sharpe
166
169
 
167
170
  ## License
168
171
  MIT License , see LICENSE for more details.
169
- © 2012 - 2014 Evgeniy Tsvigun
172
+ © 2012 - 2015 Evgeniy Tsvigun
@@ -14,8 +14,8 @@ module Sidekiq::Status::Storage
14
14
  def store_for_id(id, status_updates, expiration = nil, redis_pool=nil)
15
15
  redis_connection(redis_pool) do |conn|
16
16
  conn.multi do
17
- conn.hmset id, 'update_time', Time.now.to_i, *(status_updates.to_a.flatten(1))
18
- conn.expire id, (expiration || Sidekiq::Status::DEFAULT_EXPIRY)
17
+ conn.hmset key(id), 'update_time', Time.now.to_i, *(status_updates.to_a.flatten(1))
18
+ conn.expire key(id), (expiration || Sidekiq::Status::DEFAULT_EXPIRY)
19
19
  conn.publish "status_updates", id
20
20
  end[0]
21
21
  end
@@ -43,7 +43,7 @@ module Sidekiq::Status::Storage
43
43
  match = scan_scheduled_jobs_for_jid jobs, job_id
44
44
  unless match.nil?
45
45
  conn.zrem "schedule", match
46
- conn.del job_id
46
+ conn.del key(job_id)
47
47
  return true # Done
48
48
  end
49
49
  scan_options[:offset] += BATCH_LIMIT
@@ -58,7 +58,7 @@ module Sidekiq::Status::Storage
58
58
  # @return [String] Redis operation status code
59
59
  def read_field_for_id(id, field)
60
60
  Sidekiq.redis do |conn|
61
- conn.hmget(id, field)[0]
61
+ conn.hmget(key(id), field)[0]
62
62
  end
63
63
  end
64
64
 
@@ -67,7 +67,7 @@ module Sidekiq::Status::Storage
67
67
  # @return [Hash] Hash stored in redis
68
68
  def read_hash_for_id(id)
69
69
  Sidekiq.redis do |conn|
70
- conn.hgetall id
70
+ conn.hgetall key(id)
71
71
  end
72
72
  end
73
73
 
@@ -108,4 +108,8 @@ module Sidekiq::Status::Storage
108
108
  end
109
109
  end
110
110
  end
111
+
112
+ def key(id)
113
+ "sidekiq:status:#{id}"
114
+ end
111
115
  end
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module Status
3
- VERSION = "0.5.2"
3
+ VERSION = '0.5.3'
4
4
  end
5
5
  end
@@ -12,14 +12,14 @@ describe Sidekiq::Status::ClientMiddleware do
12
12
  it "sets queued status" do
13
13
  allow(SecureRandom).to receive(:hex).once.and_return(job_id)
14
14
  expect(StubJob.perform_async(:arg1 => 'val1')).to eq(job_id)
15
- expect(redis.hget(job_id, :status)).to eq('queued')
15
+ expect(redis.hget("sidekiq:status:#{job_id}", :status)).to eq('queued')
16
16
  expect(Sidekiq::Status::queued?(job_id)).to be_truthy
17
17
  end
18
18
 
19
19
  it "sets status hash ttl" do
20
20
  allow(SecureRandom).to receive(:hex).once.and_return(job_id)
21
21
  expect(StubJob.perform_async(:arg1 => 'val1')).to eq(job_id)
22
- expect(1..Sidekiq::Status::DEFAULT_EXPIRY).to cover redis.ttl(job_id)
22
+ expect(1..Sidekiq::Status::DEFAULT_EXPIRY).to cover redis.ttl("sidekiq:status:#{job_id}")
23
23
  end
24
24
 
25
25
  context "when redis_pool passed" do
@@ -20,7 +20,7 @@ describe Sidekiq::Status::ServerMiddleware do
20
20
  "while in #perform, status = working",
21
21
  job_id])
22
22
  end
23
- expect(redis.hget(job_id, :status)).to eq('complete')
23
+ expect(redis.hget("sidekiq:status:#{job_id}", :status)).to eq('complete')
24
24
  expect(Sidekiq::Status::complete?(job_id)).to be_truthy
25
25
  end
26
26
 
@@ -31,14 +31,14 @@ describe Sidekiq::Status::ServerMiddleware do
31
31
  expect(FailingJob.perform_async).to eq(job_id)
32
32
  }).to eq([job_id]*3)
33
33
  end
34
- expect(redis.hget(job_id, :status)).to eq('failed')
34
+ expect(redis.hget("sidekiq:status:#{job_id}", :status)).to eq('failed')
35
35
  expect(Sidekiq::Status::failed?(job_id)).to be_truthy
36
36
  end
37
37
 
38
38
  it "sets status hash ttl" do
39
39
  allow(SecureRandom).to receive(:hex).once.and_return(job_id)
40
40
  expect(StubJob.perform_async(:arg1 => 'val1')).to eq(job_id)
41
- expect(1..Sidekiq::Status::DEFAULT_EXPIRY).to cover redis.ttl(job_id)
41
+ expect(1..Sidekiq::Status::DEFAULT_EXPIRY).to cover redis.ttl("sidekiq:status:#{job_id}")
42
42
  end
43
43
  end
44
44
 
@@ -52,7 +52,7 @@ describe Sidekiq::Status::ServerMiddleware do
52
52
  start_server(:expiration => huge_expiration) do
53
53
  StubJob.perform_async(:arg1 => 'val1')
54
54
  end
55
- expect((Sidekiq::Status::DEFAULT_EXPIRY+1)..huge_expiration).to cover redis.ttl(job_id)
55
+ expect((Sidekiq::Status::DEFAULT_EXPIRY+1)..huge_expiration).to cover redis.ttl("sidekiq:status:#{job_id}")
56
56
  end
57
57
 
58
58
  it "can be overwritten by worker expiration method" do
@@ -61,7 +61,7 @@ describe Sidekiq::Status::ServerMiddleware do
61
61
  start_server(:expiration => huge_expiration) do
62
62
  StubJob.perform_async(:arg1 => 'val1')
63
63
  end
64
- expect((huge_expiration+1)..overwritten_expiration).to cover redis.ttl(job_id)
64
+ expect((huge_expiration+1)..overwritten_expiration).to cover redis.ttl("sidekiq:status:#{job_id}")
65
65
  end
66
66
  end
67
67
  end
@@ -26,7 +26,7 @@ describe 'sidekiq status web' do
26
26
  end
27
27
 
28
28
  get '/statuses'
29
- expect(last_response.status).to eq(200)
29
+ expect(last_response).to be_ok
30
30
  expect(last_response.body).to match(/#{job_id}/)
31
31
  end
32
32
  end
@@ -182,8 +182,8 @@ describe Sidekiq::Status do
182
182
  end
183
183
 
184
184
  def expect_2_jobs_ttl_covers(range)
185
- expect(range).to cover redis.ttl(plain_sidekiq_job_id)
186
- expect(range).to cover redis.ttl(job_id_1)
185
+ expect(range).to cover redis.ttl("sidekiq:status:#{plain_sidekiq_job_id}")
186
+ expect(range).to cover redis.ttl("sidekiq:status:#{job_id_1}")
187
187
  end
188
188
 
189
189
  def expect_2_jobs_are_done_and_status_eq(status)
@@ -34,7 +34,7 @@ end
34
34
  class ConfirmationJob < StubJob
35
35
  def perform(*args)
36
36
  Sidekiq.redis do |conn|
37
- conn.publish "job_messages_#{jid}", "while in #perform, status = #{conn.hget jid, :status}"
37
+ conn.publish "job_messages_#{jid}", "while in #perform, status = #{conn.hget "sidekiq:status:#{jid}", :status}"
38
38
  end
39
39
  end
40
40
  end
@@ -1,36 +1,50 @@
1
+
1
2
  <style>
2
- .sorted_asc:after{
3
- content: " ↑";
3
+ .progress {
4
+ background-color: #C8E1ED;
5
+ }
6
+ .bar {
7
+ background-color: #2897cb;
4
8
  }
5
- .sorted_desc:after{
6
- content: " ↓";
9
+ .message {
10
+ text-shadow: 0 0 5px white;
11
+ font-weight: bold; padding-left: 4px;
12
+ color: #333;
7
13
  }
8
14
  </style>
9
15
 
10
16
  <h3 class="wi">Recent job statuses</h3>
17
+
18
+
11
19
  <table class="table table-striped table-bordered">
12
20
  <tr>
13
- <% @headers.each do |header| %>
14
- <th><a href="<%= header[:url] %>" class="<%= header[:class] %>"><%= header[:name] %></a></th>
15
- <% end %>
21
+ <th>Worker/jid</th>
22
+ <th style='text-align:center;'>Status</th>
23
+ <th style='width: 10%; text-align:center;'>Last Updated</th>
24
+ <th style='width: 50%;'>Progress</th>
16
25
  </tr>
17
26
  <% @statuses.each do |container| %>
18
27
  <tr>
19
- <td>
20
- <%= container.worker %>
21
- <br />
22
- <%= container.jid %>
28
+ <td><span title='<%= container.jid %>'><%= container.worker %></span></td>
29
+ <td style='text-align: center;'><span class='badge'><%= container.status %></span></td>
30
+ <% secs = Time.now.to_i - container.update_time.to_i %>
31
+ <td style='text-align: center;'>
32
+ <% if secs > 0 %>
33
+ <%= secs %> sec<%= secs == 1 ? '' : 's' %> ago
34
+ <% else %>
35
+ Now
36
+ <% end %>
23
37
  </td>
24
- <td><%= container.status %></td>
25
- <td><%= Time.at(container.update_time.to_i) %></td>
26
38
  <td>
27
39
  <div class="progress progress-striped" style="margin-bottom: 0">
28
- <div class="bar" style="width: <%= container.pct_complete %>%; text-shadow: 1px 1px 1px black; background-color: #AD003D;
29
- color: white;">
30
- <%= container.pct_complete %>%
31
- </div>
40
+ <div class='message' style='text-align:right; padding-right:0.5em; background-color: transparent; float:right;'><%= container.message %></div>
41
+ <% if container.pct_complete.to_i > 0 %>
42
+ <div class="bar message" style="width: <%= container.pct_complete %>%; color: white; text-shadow: 0 0 0;">
43
+ <%= container.pct_complete %>%
44
+ </div>
45
+ <% end %>
32
46
  </div>
33
- <td><%= container.message %></td>
47
+ </td>
34
48
  </tr>
35
49
  <% end %>
36
50
  <% if @statuses.empty? %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-status
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeniy Tsvigun
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-09 00:00:00.000000000 Z
11
+ date: 2015-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
140
  version: '0'
141
141
  requirements: []
142
142
  rubyforge_project:
143
- rubygems_version: 2.4.5
143
+ rubygems_version: 2.4.6
144
144
  signing_key:
145
145
  specification_version: 4
146
146
  summary: An extension to the sidekiq message processing to track your jobs