sidekiq-worker_stats 0.0.4 → 0.0.5
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/lib/sidekiq/worker_stats/stats.rb +3 -1
- data/lib/sidekiq/worker_stats/version.rb +1 -1
- data/lib/sidekiq/worker_stats/views/worker_stats.erb +26 -4
- data/lib/sidekiq/worker_stats/views/worker_stats_single.erb +4 -0
- data/lib/sidekiq/worker_stats/web.rb +19 -2
- data/sidekiq-worker_stats.gemspec +1 -0
- data/test/worker_stats/test_middleware.rb +2 -2
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bb6f0d95541e55dced710f53618d681ab08cbcd
|
4
|
+
data.tar.gz: 7f6bf13c356f7901f83233afd1f66a2f16211865
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05035b2cffb1f1ef7de5f3092c436d260355c27ef70d20e1cd731b48016ff23cf533c538ddf685d62f60b48cc1bb238f4264920ee2bcb155d535caf4db0896ad
|
7
|
+
data.tar.gz: a040139ba1722b64264fcebd8c728a10bde02e956d1d0d226688657eb4660cbb08da49612d7eafaf75078d0817a831f5ed7f70f2ec5640239ebc7578ba725dc6
|
@@ -8,6 +8,7 @@ module Sidekiq
|
|
8
8
|
attr_reader :jid
|
9
9
|
attr_reader :queue
|
10
10
|
attr_reader :klass
|
11
|
+
attr_reader :args
|
11
12
|
|
12
13
|
attr_reader :start
|
13
14
|
attr_reader :stop
|
@@ -25,6 +26,7 @@ module Sidekiq
|
|
25
26
|
@klass = worker.class
|
26
27
|
@pid = ::Process.pid
|
27
28
|
@jid = worker.jid
|
29
|
+
@args = msg["args"]
|
28
30
|
@page_size = `getconf PAGESIZE`.to_i
|
29
31
|
start
|
30
32
|
end
|
@@ -51,6 +53,7 @@ module Sidekiq
|
|
51
53
|
jid: @jid,
|
52
54
|
queue: @queue,
|
53
55
|
class: @klass,
|
56
|
+
args: @args,
|
54
57
|
start: @start,
|
55
58
|
stop: @stop,
|
56
59
|
walltime: @walltime,
|
@@ -69,7 +72,6 @@ module Sidekiq
|
|
69
72
|
def memory_measurement
|
70
73
|
@mem = {}
|
71
74
|
mem_sleep = @config.mem_sleep
|
72
|
-
puts mem_sleep
|
73
75
|
@mem_thr = ::Thread.new do
|
74
76
|
while true do
|
75
77
|
@mem[::Time.now.to_f] = current_memory
|
@@ -1,31 +1,53 @@
|
|
1
1
|
<div class="worker_stats">
|
2
2
|
<h2>Worker Stats</h2>
|
3
|
+
<h4>Showing results <%= "#{(@page * @per_page) + 1}" %> to <%= "#{[(@page + 1) * @per_page, @stats_length].min}" %> (Total: <%= "#{@stats_length}" %>)</h4>
|
4
|
+
<br>
|
5
|
+
|
6
|
+
<div style="height: 30px">
|
7
|
+
<% if @page > 0 %>
|
8
|
+
<div style="float: left;">
|
9
|
+
<a href="?page=<%= @page.to_s %>&per_page=<%= @per_page.to_s %>">Previous Page</a>
|
10
|
+
</div>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<% if @page < @max_pages %>
|
14
|
+
<div style="float: right;">
|
15
|
+
<a href="?page=<%= (@page + 2).to_s %>&per_page=<%= @per_page.to_s %>">Next Page</a>
|
16
|
+
</div>
|
17
|
+
<% end %>
|
18
|
+
</div>
|
3
19
|
|
4
20
|
<div class="worker_stats__container">
|
5
21
|
<div class="worker_stats__table">
|
6
|
-
<table class="table table-hover table-bordered table-striped table-white
|
22
|
+
<table class="table table-hover table-bordered table-striped table-white">
|
7
23
|
<thead>
|
8
24
|
<th>Worker</th>
|
25
|
+
<th>Arguments</th>
|
9
26
|
<th>Started at</th>
|
10
27
|
<th>Finished at</th>
|
11
|
-
<th>Runtime</th>
|
28
|
+
<th>Runtime (s)</th>
|
29
|
+
<th>Start Memory</th>
|
12
30
|
<th>Avg. Memory</th>
|
13
31
|
<th>Peak Memory</th>
|
14
32
|
</thead>
|
15
33
|
|
16
34
|
<tbody>
|
17
|
-
<% @
|
35
|
+
<% @workers_stats.each do |key, worker| %>
|
18
36
|
<tr>
|
19
37
|
<td><a href="<%= root_path %>worker_stats/<%= key.to_s %>"><%= worker["class"].to_s %></a></td>
|
38
|
+
<td><%= worker["args"] != nil ? worker["args"].join(", ") : "--" %></td>
|
20
39
|
<td><%= Time.at(worker["start"]).strftime "%Y-%m-%d %H:%M:%S" %></td>
|
21
40
|
<td><%= Time.at(worker["stop"]).strftime "%Y-%m-%d %H:%M:%S" %></td>
|
22
|
-
<td><%= "#{worker["walltime"]}
|
41
|
+
<td><%= "#{worker["walltime"].round(4)}" %></td>
|
42
|
+
<td><%= "#{worker["mem"][worker["mem"].keys.min] / 1024 / 1024} Mb" %></td>
|
23
43
|
<td><%= "#{(worker["mem"].values.inject(:+) / worker["mem"].count) / 1024 / 1024} Mb" %></td>
|
24
44
|
<td><%= "#{(worker["mem"].values.max / 1024 / 1024)} Mb" %></td>
|
25
45
|
</tr>
|
26
46
|
<% end %>
|
27
47
|
</tbody>
|
28
48
|
</table>
|
49
|
+
|
50
|
+
|
29
51
|
</div>
|
30
52
|
</div>
|
31
53
|
</div>
|
@@ -9,14 +9,31 @@ module Sidekiq
|
|
9
9
|
view_path = File.join(File.expand_path('..', __FILE__), 'views')
|
10
10
|
|
11
11
|
app.get '/worker_stats' do
|
12
|
-
@
|
12
|
+
@page = params["page"].to_i || 1
|
13
|
+
@page = @page >= 1 ? @page - 1 : 0
|
14
|
+
|
15
|
+
@per_page = params["per_page"].to_i || 10
|
16
|
+
@per_page = @per_page >= 1 ? @per_page : 10
|
17
|
+
|
18
|
+
@workers_stats = {}
|
19
|
+
|
13
20
|
Sidekiq.redis do |redis|
|
14
21
|
keys = redis.hkeys REDIS_HASH
|
15
22
|
keys.each do |key|
|
16
23
|
worker_stats = redis.hget(REDIS_HASH, key)
|
17
|
-
@
|
24
|
+
@workers_stats[key] = JSON.parse(worker_stats) if worker_stats != nil
|
18
25
|
end
|
19
26
|
end
|
27
|
+
@workers_stats = @workers_stats.sort_by { |k, v| ::Time.at(v["start"]) }.reverse
|
28
|
+
@stats_length = @workers_stats.length
|
29
|
+
|
30
|
+
@max_pages = @workers_stats.length / @per_page
|
31
|
+
@page = @page * @per_page < @workers_stats.length ? @page : @max_pages
|
32
|
+
|
33
|
+
down_limit = @page * @per_page
|
34
|
+
up_limit = ((@page + 1) * @per_page) - 1
|
35
|
+
|
36
|
+
@workers_stats = @workers_stats[down_limit..up_limit] || @workers_stats[0..@per_page-1]
|
20
37
|
|
21
38
|
render(:erb, File.read(File.join(view_path, 'worker_stats.erb')))
|
22
39
|
end
|
@@ -14,7 +14,7 @@ class BasicWorker
|
|
14
14
|
worker_stats_mem_sleep: 1
|
15
15
|
})
|
16
16
|
|
17
|
-
def perform
|
17
|
+
def perform(arg1)
|
18
18
|
# Let's use some memory
|
19
19
|
a = []
|
20
20
|
for i in 1..5000000
|
@@ -56,7 +56,7 @@ class TestMiddleware < Minitest::Test
|
|
56
56
|
|
57
57
|
def test_basic_worker_stats_are_saved
|
58
58
|
Sidekiq::Testing.inline! do
|
59
|
-
BasicWorker.perform_async
|
59
|
+
BasicWorker.perform_async("teste")
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-worker_stats
|
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
|
- Alexandre Jesus
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|
@@ -84,6 +84,20 @@ dependencies:
|
|
84
84
|
- - "~>"
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: '0.6'
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: byebug
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - "~>"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '3.5'
|
94
|
+
type: :development
|
95
|
+
prerelease: false
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - "~>"
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '3.5'
|
87
101
|
description: Save and see on the sidekiq dashboard your workers statistics
|
88
102
|
email:
|
89
103
|
- adbjesus@gmail.com
|