sidekiq 6.5.1 → 7.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/Changes.md +376 -12
  3. data/README.md +43 -35
  4. data/bin/multi_queue_bench +271 -0
  5. data/bin/sidekiq +3 -8
  6. data/bin/sidekiqload +213 -118
  7. data/bin/sidekiqmon +3 -0
  8. data/lib/active_job/queue_adapters/sidekiq_adapter.rb +88 -0
  9. data/lib/generators/sidekiq/job_generator.rb +2 -0
  10. data/lib/sidekiq/api.rb +378 -173
  11. data/lib/sidekiq/capsule.rb +132 -0
  12. data/lib/sidekiq/cli.rb +61 -63
  13. data/lib/sidekiq/client.rb +89 -40
  14. data/lib/sidekiq/component.rb +6 -2
  15. data/lib/sidekiq/config.rb +305 -0
  16. data/lib/sidekiq/deploy.rb +64 -0
  17. data/lib/sidekiq/embedded.rb +63 -0
  18. data/lib/sidekiq/fetch.rb +11 -14
  19. data/lib/sidekiq/iterable_job.rb +55 -0
  20. data/lib/sidekiq/job/interrupt_handler.rb +24 -0
  21. data/lib/sidekiq/job/iterable/active_record_enumerator.rb +53 -0
  22. data/lib/sidekiq/job/iterable/csv_enumerator.rb +47 -0
  23. data/lib/sidekiq/job/iterable/enumerators.rb +135 -0
  24. data/lib/sidekiq/job/iterable.rb +294 -0
  25. data/lib/sidekiq/job.rb +382 -10
  26. data/lib/sidekiq/job_logger.rb +8 -7
  27. data/lib/sidekiq/job_retry.rb +89 -46
  28. data/lib/sidekiq/job_util.rb +53 -15
  29. data/lib/sidekiq/launcher.rb +77 -69
  30. data/lib/sidekiq/logger.rb +2 -27
  31. data/lib/sidekiq/manager.rb +9 -11
  32. data/lib/sidekiq/metrics/query.rb +158 -0
  33. data/lib/sidekiq/metrics/shared.rb +106 -0
  34. data/lib/sidekiq/metrics/tracking.rb +148 -0
  35. data/lib/sidekiq/middleware/chain.rb +84 -48
  36. data/lib/sidekiq/middleware/current_attributes.rb +87 -20
  37. data/lib/sidekiq/middleware/modules.rb +2 -0
  38. data/lib/sidekiq/monitor.rb +19 -5
  39. data/lib/sidekiq/paginator.rb +11 -3
  40. data/lib/sidekiq/processor.rb +67 -56
  41. data/lib/sidekiq/rails.rb +22 -16
  42. data/lib/sidekiq/redis_client_adapter.rb +31 -71
  43. data/lib/sidekiq/redis_connection.rb +44 -117
  44. data/lib/sidekiq/ring_buffer.rb +2 -0
  45. data/lib/sidekiq/scheduled.rb +62 -35
  46. data/lib/sidekiq/systemd.rb +2 -0
  47. data/lib/sidekiq/testing.rb +37 -46
  48. data/lib/sidekiq/transaction_aware_client.rb +11 -5
  49. data/lib/sidekiq/version.rb +6 -1
  50. data/lib/sidekiq/web/action.rb +15 -5
  51. data/lib/sidekiq/web/application.rb +94 -24
  52. data/lib/sidekiq/web/csrf_protection.rb +10 -7
  53. data/lib/sidekiq/web/helpers.rb +118 -45
  54. data/lib/sidekiq/web/router.rb +5 -2
  55. data/lib/sidekiq/web.rb +67 -15
  56. data/lib/sidekiq/worker_compatibility_alias.rb +13 -0
  57. data/lib/sidekiq.rb +78 -266
  58. data/sidekiq.gemspec +12 -10
  59. data/web/assets/javascripts/application.js +46 -1
  60. data/web/assets/javascripts/base-charts.js +106 -0
  61. data/web/assets/javascripts/chart.min.js +13 -0
  62. data/web/assets/javascripts/chartjs-plugin-annotation.min.js +7 -0
  63. data/web/assets/javascripts/dashboard-charts.js +192 -0
  64. data/web/assets/javascripts/dashboard.js +11 -250
  65. data/web/assets/javascripts/metrics.js +298 -0
  66. data/web/assets/stylesheets/application-dark.css +4 -0
  67. data/web/assets/stylesheets/application-rtl.css +10 -89
  68. data/web/assets/stylesheets/application.css +98 -295
  69. data/web/locales/ar.yml +70 -70
  70. data/web/locales/cs.yml +62 -62
  71. data/web/locales/da.yml +60 -53
  72. data/web/locales/de.yml +65 -65
  73. data/web/locales/el.yml +43 -24
  74. data/web/locales/en.yml +83 -69
  75. data/web/locales/es.yml +68 -68
  76. data/web/locales/fa.yml +65 -65
  77. data/web/locales/fr.yml +80 -67
  78. data/web/locales/gd.yml +98 -0
  79. data/web/locales/he.yml +65 -64
  80. data/web/locales/hi.yml +59 -59
  81. data/web/locales/it.yml +85 -54
  82. data/web/locales/ja.yml +72 -68
  83. data/web/locales/ko.yml +52 -52
  84. data/web/locales/lt.yml +66 -66
  85. data/web/locales/nb.yml +61 -61
  86. data/web/locales/nl.yml +52 -52
  87. data/web/locales/pl.yml +45 -45
  88. data/web/locales/pt-br.yml +78 -69
  89. data/web/locales/pt.yml +51 -51
  90. data/web/locales/ru.yml +67 -66
  91. data/web/locales/sv.yml +53 -53
  92. data/web/locales/ta.yml +60 -60
  93. data/web/locales/tr.yml +100 -0
  94. data/web/locales/uk.yml +85 -61
  95. data/web/locales/ur.yml +64 -64
  96. data/web/locales/vi.yml +67 -67
  97. data/web/locales/zh-cn.yml +42 -16
  98. data/web/locales/zh-tw.yml +41 -8
  99. data/web/views/_footer.erb +17 -2
  100. data/web/views/_job_info.erb +18 -2
  101. data/web/views/_metrics_period_select.erb +12 -0
  102. data/web/views/_nav.erb +1 -1
  103. data/web/views/_paging.erb +2 -0
  104. data/web/views/_poll_link.erb +1 -1
  105. data/web/views/_summary.erb +7 -7
  106. data/web/views/busy.erb +49 -33
  107. data/web/views/dashboard.erb +28 -6
  108. data/web/views/filtering.erb +6 -0
  109. data/web/views/layout.erb +6 -6
  110. data/web/views/metrics.erb +90 -0
  111. data/web/views/metrics_for_job.erb +59 -0
  112. data/web/views/morgue.erb +5 -9
  113. data/web/views/queue.erb +15 -15
  114. data/web/views/queues.erb +9 -3
  115. data/web/views/retries.erb +5 -9
  116. data/web/views/scheduled.erb +12 -13
  117. metadata +61 -26
  118. data/lib/sidekiq/.DS_Store +0 -0
  119. data/lib/sidekiq/delay.rb +0 -43
  120. data/lib/sidekiq/extensions/action_mailer.rb +0 -48
  121. data/lib/sidekiq/extensions/active_record.rb +0 -43
  122. data/lib/sidekiq/extensions/class_methods.rb +0 -43
  123. data/lib/sidekiq/extensions/generic_proxy.rb +0 -33
  124. data/lib/sidekiq/worker.rb +0 -367
  125. /data/{LICENSE → LICENSE.txt} +0 -0
data/web/locales/vi.yml CHANGED
@@ -1,83 +1,83 @@
1
1
  # elements like %{queue} are variables and should not be translated
2
- vi: # <---- change this to your locale code
3
- Dashboard: Bảng điều khiển
4
- Status: Trạng thái
5
- Time: Thời gian
6
- Namespace: Không gian tên
7
- Realtime: Thời gian thực
8
- History: Lịch sử
2
+ vi:
3
+ Actions: Những hành động
4
+ AddToQueue: Thêm vào hàng đợi
5
+ AreYouSure: Bạn chắc chứ?
6
+ AreYouSureDeleteJob: Bạn chắc là muốn xóa tác vụ này?
7
+ AreYouSureDeleteQueue: Bạn chắc là muốn xóa %{queue} này?
8
+ Arguments: Tham số
9
+ BackToApp: Trở về ứng dụng
9
10
  Busy: Bận rộn
10
- Processed: Đã xử lí
11
- Failed: Đã thất bại
12
- Scheduled: Đã lên lịch
13
- Retries: Số lần thử
14
- Enqueued: Đã xếp hàng đợi
15
- Worker: Máy xử lí
16
- LivePoll: Thăm dò trực tiếp
17
- StopPolling: Ngừng thăm dò
18
- Queue: Hàng đợi
19
11
  Class: Lớp
20
- Job: Tác vụ
21
- Arguments: Tham số
22
- Extras: Thêm
23
- Started: Đã bắt đầu
24
- ShowAll: Hiện tất cả
12
+ Connections: Các kết nối
13
+ CreatedAt: Được tạo vào lúc
25
14
  CurrentMessagesInQueue: Số lượng công việc trong <span class='title'>%{queue}</span>
15
+ Dashboard: Bảng điều khiển
16
+ Dead: Chết
17
+ DeadJobs: Những tác vụ đã chết
26
18
  Delete: Xóa
27
- AddToQueue: Thêm vào hàng đợi
28
- AreYouSureDeleteJob: Bạn có chắc là muốn xóa tác vụ này?
29
- AreYouSureDeleteQueue: Bạn có chắc là muốn xóa %{queue} này?
30
- Queues: Các hàng đợi
31
- Size: Kích thước
32
- Actions: Những hành động
33
- NextRetry: Lần thử lại tiếp theo
34
- RetryCount: Số lần thử lại
35
- RetryNow: Thử lại ngay bây giờ
36
- Kill: Giết
37
- LastRetry: Lần thử cuối
38
- OriginallyFailed: Đã thất bại từ đầu
39
- AreYouSure: Bạn chắc chứ?
40
19
  DeleteAll: Xóa hết
41
- RetryAll: Thử lại tất cả
42
- KillAll: Giết hết
43
- NoRetriesFound: Không có lần thử nào được tìm thấy
20
+ Enqueued: Đã xếp hàng đợi
44
21
  Error: Lỗi
22
+ ErrorBacktrace: Dấu vết của lỗi
45
23
  ErrorClass: Lớp lỗi
46
24
  ErrorMessage: Tin nhắn lỗi
47
- ErrorBacktrace: Dấu vết của lỗi
25
+ Extras: Thêm
26
+ Failed: Đã thất bại
27
+ Failures: Các thất bại
48
28
  GoBack: ← Trở lại
49
- NoScheduledFound: Không có tác vụ đã lên lịch nào được tìm thấy
50
- When: Khi nào
51
- ScheduledJobs: Những Tác Vụ Được Hẹn
52
- idle: Đang chờ
53
- active: Đang hoạt động
54
- Version: Phiên bản
55
- Connections: Các kết nối
29
+ History: Lịch sử
30
+ Job: Tác vụ
31
+ Jobs: Các tác vụ
32
+ Kill: Giết
33
+ KillAll: Giết hết
34
+ LastRetry: Lần thử cuối
35
+ Latency: Độ trễ
36
+ LivePoll: Thăm dò trực tiếp
56
37
  MemoryUsage: Lượng bộ nhớ sử dụng
57
- PeakMemoryUsage: Lượng bộ nhớ sử dụng đỉnh điểm
58
- Uptime: Thời gian hệ thống đã online (days)
59
- OneWeek: 1 tuần
60
- OneMonth: 1 tháng
61
- ThreeMonths: 3 tháng
62
- SixMonths: 6 tháng
63
- Failures: Các thất bại
64
- DeadJobs: Những tác vụ đã chết
38
+ Namespace: Không gian tên
39
+ NextRetry: Lần thử lại tiếp theo
65
40
  NoDeadJobsFound: Không có tác vụ đã chết nào được tìm thấy
66
- Dead: Chết
67
- Processes: Tiến trình xử
68
- Thread: Luồng xử
69
- Threads: Những luồng xử lí
70
- Jobs: Các tác vụ
41
+ NoRetriesFound: Không có lần thử nào được tìm thấy
42
+ NoScheduledFound: Không tác vụ đã lên lịch nào được tìm thấy
43
+ NotYetEnqueued: Chưa được bỏ vào hàng đợi
44
+ OneMonth: 1 tháng
45
+ OneWeek: 1 tuần
46
+ OriginallyFailed: Đã thất bại từ đầu
47
+ Pause: Tạm dừng
71
48
  Paused: Đã tạm dừng
72
- Stop: Dừng Lại
49
+ PeakMemoryUsage: Lượng bộ nhớ sử dụng đỉnh điểm
50
+ Plugins: Hệ thống đính kèm
51
+ PollingInterval: Khoảng thời gian giữa các lần thăm dò
52
+ Processed: Đã xử lí
53
+ Processes: Tiến trình xử lí
54
+ Queue: Hàng đợi
55
+ Queues: Các hàng đợi
73
56
  Quiet: Im lặng
74
- StopAll: Dừng lại tất cả
75
57
  QuietAll: Làm cho tất cả im lặng
76
- PollingInterval: Khoảng thời gian giữa các lần thăm dò
77
- Plugins: Hệ thống đính kèm
78
- NotYetEnqueued: Chưa được bỏ vào hàng đợi
79
- CreatedAt: Được tạo vào lúc
80
- BackToApp: Trở về ứng dụng
81
- Latency: Độ trễ
82
- Pause: Tạm dừng
58
+ Realtime: Thời gian thực
59
+ Retries: Số lần thử
60
+ RetryAll: Thử lại tất cả
61
+ RetryCount: Số lần thử lại
62
+ RetryNow: Thử lại ngay bây giờ
63
+ Scheduled: Đã lên lịch
64
+ ScheduledJobs: Những Tác Vụ Được Hẹn
65
+ ShowAll: Hiện tất cả
66
+ SixMonths: 6 tháng
67
+ Size: Kích thước
68
+ Started: Đã bắt đầu
69
+ Status: Trạng thái
70
+ Stop: Dừng Lại
71
+ StopAll: Dừng lại tất cả
72
+ StopPolling: Ngừng thăm dò
73
+ Thread: Luồng xử lí
74
+ Threads: Những luồng xử lí
75
+ ThreeMonths: 3 tháng
76
+ Time: Thời gian
83
77
  Unpause: Hủy tạm dừng
78
+ Uptime: Thời gian hệ thống đã online (days)
79
+ Version: Phiên bản
80
+ When: Khi nào
81
+ Worker: Máy xử lí
82
+ active: Đang hoạt động
83
+ idle: Đang chờ
@@ -7,6 +7,7 @@ zh-cn: # <---- change this to your locale code
7
7
  Realtime: 实时
8
8
  History: 历史记录
9
9
  Busy: 执行中
10
+ Utilization: 利用率
10
11
  Processed: 已处理
11
12
  Failed: 已失败
12
13
  Scheduled: 已计划
@@ -17,36 +18,38 @@ zh-cn: # <---- change this to your locale code
17
18
  StopPolling: 停止轮询
18
19
  Queue: 队列
19
20
  Class: 类别
20
- Job: 作业
21
+ Job: 任务
21
22
  Arguments: 参数
22
23
  Extras: 额外的
23
24
  Started: 已开始
24
25
  ShowAll: 显示全部
25
- CurrentMessagesInQueue: 目前在<span class='title'>%{queue}</span>的作业
26
+ CurrentMessagesInQueue: 目前在<span class='title'>%{queue}</span>的任务
26
27
  Delete: 删除
27
28
  AddToQueue: 添加至队列
28
- AreYouSureDeleteJob: 你确定要删除这个作业么?
29
+ AreYouSureDeleteJob: 你确定要删除这个任务么?
29
30
  AreYouSureDeleteQueue: 你确定要删除%{queue}这个队列?
30
31
  Queues: 队列
31
32
  Size: 容量
32
33
  Actions: 动作
33
34
  NextRetry: 下次重试
34
- RetryCount: 重试次數
35
+ RetryCount: 重试次数
35
36
  RetryNow: 现在重试
36
- LastRetry: 最后一次重试
37
- OriginallyFailed: 原本已失败
37
+ Kill: 终止
38
+ LastRetry: 上次重试
39
+ OriginallyFailed: 首次失败
38
40
  AreYouSure: 你确定?
39
- DeleteAll: 删除全部
40
- RetryAll: 重试全部
41
- NoRetriesFound: 沒有发现可重试
41
+ DeleteAll: 全部删除
42
+ RetryAll: 全部重试
43
+ KillAll: 全部终止
44
+ NoRetriesFound: 没有发现可重试
42
45
  Error: 错误
43
46
  ErrorClass: 错误类别
44
47
  ErrorMessage: 错误消息
45
- ErrorBacktrace: 错误的回调追踪
48
+ ErrorBacktrace: 错误细节
46
49
  GoBack: ← 返回
47
- NoScheduledFound: 沒有发现计划作业
50
+ NoScheduledFound: 没有发现计划任务
48
51
  When: 当
49
- ScheduledJobs: 计划作业
52
+ ScheduledJobs: 计划任务
50
53
  idle: 闲置
51
54
  active: 活动中
52
55
  Version: 版本
@@ -59,10 +62,33 @@ zh-cn: # <---- change this to your locale code
59
62
  ThreeMonths: 三个月
60
63
  SixMonths: 六个月
61
64
  Failures: 失败
62
- DeadJobs: 已停滞作业
63
- NoDeadJobsFound: 沒有发现任何已停滞的作业
65
+ DeadJobs: 已停滞任务
66
+ NoDeadJobsFound: 没有发现任何已停滞的任务
64
67
  Dead: 已停滞
65
- Processes: 处理中
68
+ Process: 进程
69
+ Processes: 进程
70
+ Name: 名称
66
71
  Thread: 线程
67
72
  Threads: 线程
68
- Jobs: 作业
73
+ Jobs: 任务
74
+ Paused: 已暂停
75
+ Stop: 强制暂停
76
+ Quiet: 暂停
77
+ StopAll: 全部强制暂停
78
+ QuietAll: 全部暂停
79
+ PollingInterval: 轮询周期
80
+ Plugins: 插件
81
+ NotYetEnqueued: 尚未进入队列
82
+ CreatedAt: 建立时间
83
+ BackToApp: 回首頁
84
+ Latency: 延迟
85
+ Pause: 暂停
86
+ Unpause: 取消暂停
87
+ Metrics: 指标
88
+ NoDataFound: 无数据
89
+ TotalExecutionTime: 总执行时间
90
+ AvgExecutionTime: 平均执行时间
91
+ Context: 上下文
92
+ NoJobMetricsFound: 无任务相关指标数据
93
+ Success: 成功
94
+ Failure: 失败
@@ -7,6 +7,7 @@ zh-tw: # <---- change this to your locale code
7
7
  Realtime: 即時
8
8
  History: 歷史資料
9
9
  Busy: 忙碌
10
+ Utilization: 使用率
10
11
  Processed: 已處理
11
12
  Failed: 已失敗
12
13
  Scheduled: 已排程
@@ -25,26 +26,29 @@ zh-tw: # <---- change this to your locale code
25
26
  CurrentMessagesInQueue: 目前在<span class='title'>%{queue}</span>的工作
26
27
  Delete: 刪除
27
28
  AddToQueue: 增加至佇列
28
- AreYouSureDeleteJob: 你確定要刪除這個工作嗎?
29
- AreYouSureDeleteQueue: 你確定要刪除%{queue}這個佇列?
29
+ AreYouSureDeleteJob: 確定要刪除這個工作嗎?
30
+ AreYouSureDeleteQueue: 確定要刪除%{queue}佇列?這會刪除佇列裡的所有工作,佇列將會在有新工作時重新出現。
30
31
  Queues: 佇列
31
32
  Size: 容量
32
33
  Actions: 動作
33
34
  NextRetry: 下次重試
34
35
  RetryCount: 重試次數
35
36
  RetryNow: 馬上重試
37
+ Kill: 取消
36
38
  LastRetry: 最後一次重試
37
39
  OriginallyFailed: 原本已失敗
38
40
  AreYouSure: 你確定?
39
- DeleteAll: 刪除全部
40
- RetryAll: 重試全部
41
- NoRetriesFound: 沒有發現可重試
41
+ DeleteAll: 全部刪除
42
+ RetryAll: 全部重試
43
+ KillAll: 全部取消
44
+ NoRetriesFound: 找無可重試的工作
42
45
  Error: 錯誤
46
+ ErrorBacktrace: 錯誤的回調追踨
43
47
  ErrorClass: 錯誤類別
44
48
  ErrorMessage: 錯誤訊息
45
- ErrorBacktrace: 錯誤的回調追踨
49
+ ErrorBacktrace: 詳細錯誤訊息
46
50
  GoBack: ← 返回
47
- NoScheduledFound: 沒有發現已排程的工作
51
+ NoScheduledFound: 找無已排程的工作
48
52
  When: 當
49
53
  ScheduledJobs: 已排程的工作
50
54
  idle: 閒置
@@ -59,10 +63,39 @@ zh-tw: # <---- change this to your locale code
59
63
  ThreeMonths: 三個月
60
64
  SixMonths: 六個月
61
65
  Failures: 失敗
62
- DeadJobs: 停滯工作
66
+ GoBack: ← 返回
67
+ History: 歷史資料
68
+ Job: 工作
69
+ Jobs: 工作
70
+ LastRetry: 最後一次重試
71
+ LivePoll: 即時輪詢
72
+ MemoryUsage: 記憶體使用量
73
+ Namespace: 命名空間
74
+ NextRetry: 下次重試
63
75
  NoDeadJobsFound: 沒有發現任何停滯的工作
64
76
  Dead: 停滯
77
+ Process: 程序
65
78
  Processes: 處理中
79
+ Name: 名稱
66
80
  Thread: 執行緒
67
81
  Threads: 執行緒
68
82
  Jobs: 工作
83
+ Paused: 已暫停
84
+ Stop: 強制暫停
85
+ Quiet: 暫停
86
+ StopAll: 全部強制暫停
87
+ QuietAll: 全部暫停
88
+ PollingInterval: 輪詢週期
89
+ Plugins: 套件
90
+ NotYetEnqueued: 尚未進入佇列
91
+ CreatedAt: 建立時間
92
+ BackToApp: 回首頁
93
+ Latency: 延時
94
+ Pause: 暫停
95
+ Unpause: 取消暫停
96
+ Metrics: 計量
97
+ NoDataFound: 找無資料
98
+ TotalExecutionTime: 總執行時間
99
+ AvgExecutionTime: 平均執行時間
100
+ Context: 上下文
101
+ NoJobMetricsFound: 找無工作相關計量資料
@@ -6,13 +6,28 @@
6
6
  <p class="navbar-text product-version"><%= product_version %></p>
7
7
  </li>
8
8
  <li>
9
- <p class="navbar-text redis-url" title="<%= redis_connection_and_namespace %>"><%= redis_connection_and_namespace %></p>
9
+ <p class="navbar-text redis-url" title="<%= redis_url %>"><%= redis_url %></p>
10
10
  </li>
11
11
  <li>
12
12
  <p id="serverUtcTime" class="navbar-text server-utc-time"><%= server_utc_time %></p>
13
13
  </li>
14
14
  <li>
15
- <p class="navbar-text"><a style="color: gray;" href="https://github.com/mperham/sidekiq/wiki">docs</a></p>
15
+ <p class="navbar-text"><a rel=help href="https://github.com/sidekiq/sidekiq/wiki">docs</a></p>
16
+ </li>
17
+ <li>
18
+ <form id="locale-form" class="form-inline" action="<%= root_path %>change_locale" method="post">
19
+ <%= csrf_tag %>
20
+ <label class="sr-only" for="locale">Language</label>
21
+ <select id="locale-select" class="form-control" name="locale">
22
+ <% available_locales.each do |locale_option| %>
23
+ <% if locale_option == locale %>
24
+ <option selected value="<%= locale_option %>"><%= locale_option %></option>
25
+ <% else %>
26
+ <option value="<%= locale_option %>"><%= locale_option %></option>
27
+ <% end %>
28
+ <% end %>
29
+ </select>
30
+ </form>
16
31
  </li>
17
32
  </ul>
18
33
  </div>
@@ -1,6 +1,6 @@
1
- <header>
1
+ <div class="header-container">
2
2
  <h3><%= t('Job') %></h3>
3
- </header>
3
+ </div>
4
4
 
5
5
  <div class="table_container">
6
6
  <table class="table table-bordered table-striped table-hover">
@@ -33,6 +33,14 @@
33
33
  <code><%= job.jid %></code>
34
34
  </td>
35
35
  </tr>
36
+ <% if job.bid %>
37
+ <tr>
38
+ <th>BID</th>
39
+ <td>
40
+ <a href="<%= root_path %>batches/<%= job.bid %>"><%= job.bid %></a>
41
+ </td>
42
+ </tr>
43
+ <% end %>
36
44
  <tr>
37
45
  <th><%= t('CreatedAt') %></th>
38
46
  <td><%= relative_time(job.created_at) %></td>
@@ -84,6 +92,14 @@
84
92
  <td><%= relative_time(job.at) if job['retry_count'] %></td>
85
93
  </tr>
86
94
  <% end %>
95
+ <% Sidekiq::Web.custom_job_info_rows.each do |helper| %>
96
+ <% helper.add_pair(job) do |name, value| %>
97
+ <tr>
98
+ <th><%= name %></th>
99
+ <td><%= value %></td>
100
+ </tr>
101
+ <% end %>
102
+ <% end %>
87
103
  </tbody>
88
104
  </table>
89
105
  </div>
@@ -0,0 +1,12 @@
1
+ <div>
2
+ <select class="form-control" data-metric-period="<%= path %>">
3
+ <% periods.each_key do |code| %>
4
+
5
+ <% if code == period %>
6
+ <option selected value="<%= code %>"><%= code %></option>
7
+ <% else %>
8
+ <option value="<%= code %>"><%= code %></option>
9
+ <% end %>
10
+ <% end %>
11
+ </select>
12
+ </div>
data/web/views/_nav.erb CHANGED
@@ -1,7 +1,7 @@
1
1
  <div class="navbar navbar-default navbar-fixed-top">
2
2
  <div class="container-fluid">
3
3
  <div class="navbar-header" data-navbar="static">
4
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-menu">
4
+ <button type="button" class="navbar-toggle collapsed" data-toggle="navbar-menu" data-target="#navbar-menu">
5
5
  <span class="icon-bar"></span>
6
6
  <span class="icon-bar"></span>
7
7
  <span class="icon-bar"></span>
@@ -1,3 +1,4 @@
1
+ <div>
1
2
  <% if @total_size > @count %>
2
3
  <ul class="pagination pull-right flip">
3
4
  <li class="<%= 'disabled' if @current_page == 1 %>">
@@ -21,3 +22,4 @@
21
22
  </li>
22
23
  </ul>
23
24
  <% end %>
25
+ </div>
@@ -1,4 +1,4 @@
1
- <% if current_path != '' %>
1
+ <% if pollable? %>
2
2
  <a class="live-poll-start live-poll btn btn-primary"><%= t('LivePoll') %></a>
3
3
  <a class="live-poll-stop live-poll btn btn-primary active"><%= t('StopPolling') %></a>
4
4
  <% end %>
@@ -1,39 +1,39 @@
1
1
  <ul class="list-unstyled summary row">
2
2
  <li class="processed col-sm-1">
3
- <span id="txtProcessed" class="count"><%= number_with_delimiter(stats.processed) %></span>
3
+ <span id="txtProcessed" class="count" data-nwp><%= stats.processed %></span>
4
4
  <span class="desc"><%= t('Processed') %></span>
5
5
  </li>
6
6
  <li class="failed col-sm-1">
7
- <span id="txtFailed" class="count"><%= number_with_delimiter(stats.failed) %></span>
7
+ <span id="txtFailed" class="count" data-nwp><%= stats.failed %></span>
8
8
  <span class="desc"><%= t('Failed') %></span>
9
9
  </li>
10
10
  <li class="busy col-sm-1">
11
11
  <a href="<%= root_path %>busy">
12
- <span id="txtBusy" class="count"><%= number_with_delimiter(workset.size) %></span>
12
+ <span id="txtBusy" class="count" data-nwp><%= workset.size %></span>
13
13
  <span class="desc"><%= t('Busy') %></span>
14
14
  </a>
15
15
  </li>
16
16
  <li class="enqueued col-sm-1">
17
17
  <a href="<%= root_path %>queues">
18
- <span id="txtEnqueued" class="count"><%= number_with_delimiter(stats.enqueued) %></span>
18
+ <span id="txtEnqueued" class="count" data-nwp><%= stats.enqueued %></span>
19
19
  <span class="desc"><%= t('Enqueued') %></span>
20
20
  </a>
21
21
  </li>
22
22
  <li class="retries col-sm-1">
23
23
  <a href="<%= root_path %>retries">
24
- <span id="txtRetries" class="count"><%= number_with_delimiter(stats.retry_size) %></span>
24
+ <span id="txtRetries" class="count" data-nwp><%= stats.retry_size %></span>
25
25
  <span class="desc"><%= t('Retries') %></span>
26
26
  </a>
27
27
  </li>
28
28
  <li class="scheduled col-sm-1">
29
29
  <a href="<%= root_path %>scheduled">
30
- <span id="txtScheduled" class="count"><%= number_with_delimiter(stats.scheduled_size) %></span>
30
+ <span id="txtScheduled" class="count" data-nwp><%= stats.scheduled_size %></span>
31
31
  <span class="desc"><%= t('Scheduled') %></span>
32
32
  </a>
33
33
  </li>
34
34
  <li class="dead col-sm-1">
35
35
  <a href="<%= root_path %>morgue">
36
- <span id="txtDead" class="count"><%= number_with_delimiter(stats.dead_size) %></span>
36
+ <span id="txtDead" class="count" data-nwp><%= stats.dead_size %></span>
37
37
  <span class="desc"><%= t('Dead') %></span>
38
38
  </a>
39
39
  </li>
data/web/views/busy.erb CHANGED
@@ -1,7 +1,5 @@
1
- <div class="row header">
2
- <div class="col-sm-4 pull-left flip">
3
- <h3><%= t('Status') %></h3>
4
- </div>
1
+ <div class="header-container">
2
+ <h1><%= t('Status') %></h1>
5
3
  </div>
6
4
 
7
5
  <div class="stats-wrapper">
@@ -29,32 +27,31 @@
29
27
  </div>
30
28
  </div>
31
29
 
32
- <div class="row header">
33
- <div class="col-sm-4 pull-left flip">
34
- <h3><%= t('Processes') %></h3>
35
- </div>
36
- <div class="col-sm-3 pull-right flip">
30
+ <div class="header-container">
31
+ <h1><%= t('Processes') %></h1>
32
+ <div>
37
33
  <form method="POST" class="warning-messages">
38
34
  <%= csrf_tag %>
39
35
  <div class="btn-group pull-right flip">
40
- <button class="btn btn-warn" type="submit" name="quiet" value="1" data-confirm="<%= t('AreYouSure') %>"><%= t('QuietAll') %></button>
41
- <button class="btn btn-danger" type="submit" name="stop" value="1" data-confirm="<%= t('AreYouSure') %>"><%= t('StopAll') %></button>
36
+ <input class="btn btn-warn" type="submit" name="quiet" value="<%= t('QuietAll') %>" data-confirm="<%= t('AreYouSure') %>"/>
37
+ <input class="btn btn-danger" type="submit" name="stop" value="<%= t('StopAll') %>" data-confirm="<%= t('AreYouSure') %>"/>
42
38
  </div>
43
39
  </form>
44
40
  </div>
45
41
  </div>
42
+
46
43
  <div class="table_container">
47
44
  <table class="processes table table-hover table-bordered table-striped">
48
45
  <thead>
49
46
  <th><%= t('Name') %></th>
50
47
  <th><%= t('Started') %></th>
51
- <th class="col-sm-1"><%= t('RSS') %><a target="blank" href="https://github.com/mperham/sidekiq/wiki/Memory#rss"><span class="info-circle" title="Click to learn more about RSS">?</span></a></th>
48
+ <th class="col-sm-1"><%= t('RSS') %><a target="blank" href="https://github.com/sidekiq/sidekiq/wiki/Memory#rss"><span class="info-circle" title="Click to learn more about RSS">?</span></a></th>
52
49
  <th class="col-sm-1"><%= t('Threads') %></th>
53
50
  <th class="col-sm-1"><%= t('Busy') %></th>
54
51
  <th>&nbsp;</th>
55
52
  </thead>
56
53
  <% lead = processes.leader %>
57
- <% processes.each do |process| %>
54
+ <% sorted_processes.each do |process| %>
58
55
  <tr>
59
56
  <td class="box">
60
57
  <%= "#{process['hostname']}:#{process['pid']}" %>
@@ -62,6 +59,9 @@
62
59
  <% process.labels.each do |label| %>
63
60
  <span class="label label-info"><%= label %></span>
64
61
  <% end %>
62
+ <% if process.embedded? %>
63
+ <span class="label label-default">embedded</span>
64
+ <% end %>
65
65
  <% if process.stopping? %>
66
66
  <span class="label label-danger">quiet</span>
67
67
  <% end %>
@@ -70,32 +70,48 @@
70
70
  <% end %>
71
71
  <br>
72
72
  <b><%= "#{t('Queues')}: " %></b>
73
- <%= process.queues.join(", ") %>
73
+ <% if process.weights %>
74
+ <%= busy_weights(process.weights) %>
75
+ <% else %>
76
+ <%= process.queues.sort.join(", ") %>
77
+ <% end %>
78
+ <% if process.version != Sidekiq::VERSION %>
79
+ <br>
80
+ <b><%= "#{t('Version')}: " %></b>
81
+ <% if process.version %>
82
+ <%= process.version %>
83
+ <% else %>
84
+ <%= t('Unknown') %>
85
+ <% end %>
86
+ <% end %>
74
87
  </td>
75
88
  <td><%= relative_time(Time.at(process['started_at'])) %></td>
76
- <td><%= format_memory(process['rss'].to_i) %></td>
77
- <td><%= process['concurrency'] %></td>
78
- <td><%= process['busy'] %></td>
89
+ <td class="num"><%= format_memory(process['rss'].to_i) %></td>
90
+ <td class="num"><%= number_with_delimiter(process['concurrency']) %></td>
91
+ <td class="num"><%= number_with_delimiter(process['busy']) %></td>
79
92
  <td>
80
- <form method="POST">
81
- <%= csrf_tag %>
82
- <input type="hidden" name="identity" value="<%= process['identity'] %>"/>
93
+ <% unless process.embedded? %>
94
+ <form method="POST">
95
+ <%= csrf_tag %>
96
+ <input type="hidden" name="identity" value="<%= process['identity'] %>"/>
83
97
 
84
- <div class="btn-group pull-right flip">
85
- <% unless process.stopping? %><button class="btn btn-xs btn-warn" type="submit" name="quiet" value="1"><%= t('Quiet') %></button><% end %>
86
- <button class="btn btn-xs btn-danger" type="submit" name="stop" value="1"><%= t('Stop') %></button>
87
- </div>
88
- </form>
98
+ <div class="btn-group pull-right flip">
99
+ <% unless process.stopping? %><button class="btn btn-xs btn-warn" type="submit" name="quiet" value="1"><%= t('Quiet') %></button><% end %>
100
+ <button class="btn btn-xs btn-danger" type="submit" name="stop" value="1"><%= t('Stop') %></button>
101
+ </div>
102
+ </form>
103
+ <% end %>
89
104
  </td>
90
105
  </tr>
91
106
  <% end %>
92
107
  </table>
93
108
  </div>
94
109
 
95
- <div class="row header">
96
- <div class="col-sm-7">
97
- <h3><%= t('Jobs') %></h3>
98
- </div>
110
+ <div class="header-container">
111
+ <h1><%= t('Jobs') %></h1>
112
+ <% if @workset.size > 0 && @total_size > @count %>
113
+ <%= erb :_paging, locals: { url: "#{root_path}busy" } %>
114
+ <% end %>
99
115
  </div>
100
116
 
101
117
  <div class="table_container">
@@ -109,14 +125,14 @@
109
125
  <th><%= t('Arguments') %></th>
110
126
  <th><%= t('Started') %></th>
111
127
  </thead>
112
- <% workset.each do |process, thread, msg| %>
113
- <% job = Sidekiq::JobRecord.new(msg['payload']) %>
128
+ <% @workset.each do |process, thread, work| %>
129
+ <% job = work.job %>
114
130
  <tr>
115
131
  <td><%= process %></td>
116
132
  <td><%= thread %></td>
117
133
  <td><%= job.jid %></td>
118
134
  <td>
119
- <a href="<%= root_path %>queues/<%= msg['queue'] %>"><%= msg['queue'] %></a>
135
+ <a href="<%= root_path %>queues/<%= work.queue %>"><%= work.queue %></a>
120
136
  </td>
121
137
  <td>
122
138
  <%= job.display_class %>
@@ -125,7 +141,7 @@
125
141
  <td>
126
142
  <div class="args"><%= display_args(job.display_args) %></div>
127
143
  </td>
128
- <td><%= relative_time(Time.at(msg['run_at'])) %></td>
144
+ <td><%= relative_time(work.run_at) %></td>
129
145
  </tr>
130
146
  <% end %>
131
147
  </table>