sidekiq 7.3.0 → 8.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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/Changes.md +158 -0
  3. data/README.md +16 -13
  4. data/bin/sidekiqload +31 -22
  5. data/bin/webload +69 -0
  6. data/lib/active_job/queue_adapters/sidekiq_adapter.rb +120 -0
  7. data/lib/generators/sidekiq/job_generator.rb +2 -0
  8. data/lib/sidekiq/api.rb +184 -71
  9. data/lib/sidekiq/capsule.rb +11 -9
  10. data/lib/sidekiq/cli.rb +16 -20
  11. data/lib/sidekiq/client.rb +28 -11
  12. data/lib/sidekiq/component.rb +62 -2
  13. data/lib/sidekiq/config.rb +42 -18
  14. data/lib/sidekiq/deploy.rb +2 -0
  15. data/lib/sidekiq/embedded.rb +4 -1
  16. data/lib/sidekiq/iterable_job.rb +3 -0
  17. data/lib/sidekiq/job/interrupt_handler.rb +2 -0
  18. data/lib/sidekiq/job/iterable/active_record_enumerator.rb +3 -3
  19. data/lib/sidekiq/job/iterable.rb +82 -7
  20. data/lib/sidekiq/job_logger.rb +15 -27
  21. data/lib/sidekiq/job_retry.rb +17 -5
  22. data/lib/sidekiq/job_util.rb +7 -1
  23. data/lib/sidekiq/launcher.rb +3 -2
  24. data/lib/sidekiq/logger.rb +19 -70
  25. data/lib/sidekiq/manager.rb +0 -1
  26. data/lib/sidekiq/metrics/query.rb +73 -45
  27. data/lib/sidekiq/metrics/shared.rb +23 -9
  28. data/lib/sidekiq/metrics/tracking.rb +22 -12
  29. data/lib/sidekiq/middleware/current_attributes.rb +12 -4
  30. data/lib/sidekiq/middleware/modules.rb +2 -0
  31. data/lib/sidekiq/monitor.rb +2 -1
  32. data/lib/sidekiq/paginator.rb +14 -1
  33. data/lib/sidekiq/processor.rb +26 -19
  34. data/lib/sidekiq/profiler.rb +72 -0
  35. data/lib/sidekiq/rails.rb +44 -55
  36. data/lib/sidekiq/redis_client_adapter.rb +0 -1
  37. data/lib/sidekiq/redis_connection.rb +22 -4
  38. data/lib/sidekiq/ring_buffer.rb +2 -0
  39. data/lib/sidekiq/systemd.rb +2 -0
  40. data/lib/sidekiq/testing.rb +7 -7
  41. data/lib/sidekiq/version.rb +6 -2
  42. data/lib/sidekiq/web/action.rb +124 -69
  43. data/lib/sidekiq/web/application.rb +355 -377
  44. data/lib/sidekiq/web/config.rb +120 -0
  45. data/lib/sidekiq/web/helpers.rb +64 -33
  46. data/lib/sidekiq/web/router.rb +61 -74
  47. data/lib/sidekiq/web.rb +52 -150
  48. data/lib/sidekiq.rb +5 -4
  49. data/sidekiq.gemspec +6 -6
  50. data/web/assets/javascripts/application.js +6 -13
  51. data/web/assets/javascripts/base-charts.js +30 -16
  52. data/web/assets/javascripts/chartjs-adapter-date-fns.min.js +7 -0
  53. data/web/assets/javascripts/dashboard-charts.js +2 -0
  54. data/web/assets/javascripts/dashboard.js +7 -1
  55. data/web/assets/javascripts/metrics.js +16 -34
  56. data/web/assets/stylesheets/style.css +766 -0
  57. data/web/locales/ar.yml +1 -0
  58. data/web/locales/cs.yml +1 -0
  59. data/web/locales/da.yml +1 -0
  60. data/web/locales/de.yml +1 -0
  61. data/web/locales/el.yml +1 -0
  62. data/web/locales/en.yml +9 -1
  63. data/web/locales/es.yml +24 -2
  64. data/web/locales/fa.yml +1 -0
  65. data/web/locales/fr.yml +1 -1
  66. data/web/locales/gd.yml +1 -1
  67. data/web/locales/he.yml +1 -0
  68. data/web/locales/hi.yml +1 -0
  69. data/web/locales/it.yml +40 -1
  70. data/web/locales/ja.yml +1 -1
  71. data/web/locales/ko.yml +1 -0
  72. data/web/locales/lt.yml +1 -0
  73. data/web/locales/nb.yml +1 -0
  74. data/web/locales/nl.yml +1 -0
  75. data/web/locales/pl.yml +1 -0
  76. data/web/locales/{pt-br.yml → pt-BR.yml} +3 -3
  77. data/web/locales/pt.yml +1 -0
  78. data/web/locales/ru.yml +1 -0
  79. data/web/locales/sv.yml +1 -0
  80. data/web/locales/ta.yml +1 -0
  81. data/web/locales/tr.yml +2 -2
  82. data/web/locales/uk.yml +25 -1
  83. data/web/locales/ur.yml +1 -0
  84. data/web/locales/vi.yml +1 -0
  85. data/web/locales/{zh-cn.yml → zh-CN.yml} +85 -74
  86. data/web/locales/{zh-tw.yml → zh-TW.yml} +2 -2
  87. data/web/views/_footer.erb +31 -34
  88. data/web/views/_job_info.erb +91 -89
  89. data/web/views/_metrics_period_select.erb +13 -10
  90. data/web/views/_nav.erb +14 -21
  91. data/web/views/_paging.erb +23 -21
  92. data/web/views/_poll_link.erb +2 -2
  93. data/web/views/_summary.erb +16 -16
  94. data/web/views/busy.erb +124 -122
  95. data/web/views/dashboard.erb +63 -64
  96. data/web/views/dead.erb +31 -27
  97. data/web/views/filtering.erb +3 -4
  98. data/web/views/layout.erb +13 -29
  99. data/web/views/metrics.erb +75 -82
  100. data/web/views/metrics_for_job.erb +45 -46
  101. data/web/views/morgue.erb +61 -70
  102. data/web/views/profiles.erb +43 -0
  103. data/web/views/queue.erb +54 -52
  104. data/web/views/queues.erb +43 -41
  105. data/web/views/retries.erb +66 -75
  106. data/web/views/retry.erb +32 -27
  107. data/web/views/scheduled.erb +59 -55
  108. data/web/views/scheduled_job_info.erb +1 -1
  109. metadata +27 -29
  110. data/web/assets/stylesheets/application-dark.css +0 -147
  111. data/web/assets/stylesheets/application-rtl.css +0 -163
  112. data/web/assets/stylesheets/application.css +0 -758
  113. data/web/assets/stylesheets/bootstrap-rtl.min.css +0 -9
  114. data/web/assets/stylesheets/bootstrap.css +0 -5
  115. data/web/views/_status.erb +0 -4
@@ -1,95 +1,106 @@
1
1
  # elements like %{queue} are variables and should not be translated
2
- zh-cn: # <---- change this to your locale code
3
- Dashboard: 信息板
4
- Status: 状态
5
- Time: 时间
6
- Namespace: 命名空间
7
- Realtime: 实时
8
- History: 历史记录
2
+ zh-CN: # <---- change this to your locale code
3
+ LanguageName: 中文
4
+ Actions: 操作
5
+ AddToQueue: 添加至队列
6
+ AreYouSure: 你确定?
7
+ AreYouSureDeleteJob: 你确定要删除这个任务么?
8
+ AreYouSureDeleteQueue: 你确定要删除 %{queue} 队列吗?这将删除当前队列中的所有任务,当新的任务添加到该队列时,它会重新出现。
9
+ Arguments: 参数
10
+ BackToApp: 返回首页
9
11
  Busy: 执行中
10
- Utilization: 利用率
11
- Processed: 已处理
12
- Failed: 已失败
13
- Scheduled: 已计划
14
- Retries: 重试
15
- Enqueued: 已进入队列
16
- Worker: 工人
17
- LivePoll: 实时轮询
18
- StopPolling: 停止轮询
19
- Queue: 队列
20
12
  Class: 类别
21
- Job: 任务
22
- Arguments: 参数
23
- Extras: 额外的
24
- Started: 已开始
25
- ShowAll: 显示全部
26
- CurrentMessagesInQueue: 目前在<span class='title'>%{queue}</span>的任务
13
+ Connections: 连接
14
+ CreatedAt: 创建时间
15
+ CurrentMessagesInQueue: 目前在 <span class='title'>%{queue}</span> 队列中的任务
16
+ Dashboard: 信息板
17
+ Dead: 已停滞
18
+ DeadJobs: 已停滞任务
27
19
  Delete: 删除
28
- AddToQueue: 添加至队列
29
- AreYouSureDeleteJob: 你确定要删除这个任务么?
30
- AreYouSureDeleteQueue: 你确定要删除%{queue}这个队列?
31
- Queues: 队列
32
- Size: 容量
33
- Actions: 动作
34
- NextRetry: 下次重试
35
- RetryCount: 重试次数
36
- RetryNow: 现在重试
37
- Kill: 终止
38
- LastRetry: 上次重试
39
- OriginallyFailed: 首次失败
40
- AreYouSure: 你确定?
41
20
  DeleteAll: 全部删除
42
- RetryAll: 全部重试
43
- KillAll: 全部终止
44
- NoRetriesFound: 没有发现可重试
21
+ Deploy: 部署
22
+ Enqueued: 已进入队列
45
23
  Error: 错误
46
- ErrorClass: 错误类别
47
- ErrorMessage: 错误消息
48
24
  ErrorBacktrace: 错误细节
25
+ ErrorClass: 错误类别
26
+ ErrorMessage: 错误信息
27
+ ExecutionTime: 执行时间
28
+ Extras: 附加信息
29
+ Failed: 失败
30
+ Failures: 失败记录
31
+ Failure: 失败
49
32
  GoBack: ← 返回
50
- NoScheduledFound: 没有发现计划任务
51
- When:
52
- ScheduledJobs: 计划任务
53
- idle: 闲置
54
- active: 活动中
55
- Version: 版本
56
- Connections: 连接
33
+ History: 历史记录
34
+ Job: 任务
35
+ Jobs: 任务
36
+ Kill: 终止
37
+ KillAll: 全部终止
38
+ LastRetry: 上次重试
39
+ Latency: 延迟
40
+ LivePoll: 实时轮询
57
41
  MemoryUsage: 内存占用
42
+ Name: 名称
43
+ Namespace: 命名空间
44
+ NextRetry: 下次重试
45
+ NoDeadJobsFound: 没有发现已停滞任务
46
+ NoRetriesFound: 没有发现可重试任务
47
+ NoScheduledFound: 没有发现计划任务
48
+ NotYetEnqueued: 尚未进入队列
49
+ OneMonth: 1个月
50
+ OneWeek: 1周
51
+ OriginallyFailed: 首次失败
52
+ Pause: 暂停
53
+ Paused: 已暂停
58
54
  PeakMemoryUsage: 内存占用峰值
59
- Uptime: 上线时间 (天数)
60
- OneWeek: 一周
61
- OneMonth: 一个月
62
- ThreeMonths: 三个月
63
- SixMonths: 六个月
64
- Failures: 失败
65
- DeadJobs: 已停滞任务
66
- NoDeadJobsFound: 没有发现任何已停滞的任务
67
- Dead: 已停滞
55
+ Plugins: 插件
56
+ PollingInterval: 轮询周期
68
57
  Process: 进程
58
+ Processed: 已处理
69
59
  Processes: 进程
70
- Name: 名称
71
- Thread: 线程
72
- Threads: 线程
73
- Jobs: 任务
74
- Paused: 已暂停
75
- Stop: 强制暂停
60
+ Queue: 队列
61
+ Queues: 队列
76
62
  Quiet: 暂停
77
- StopAll: 全部强制暂停
78
63
  QuietAll: 全部暂停
79
- PollingInterval: 轮询周期
80
- Plugins: 插件
81
- NotYetEnqueued: 尚未进入队列
82
- CreatedAt: 建立时间
83
- BackToApp: 回首頁
84
- Latency: 延迟
85
- Pause: 暂停
64
+ Realtime: 实时
65
+ Retries: 重试
66
+ RetryAll: 全部重试
67
+ RetryCount: 重试次数
68
+ RetryNow: 立即重试
69
+ Scheduled: 已计划
70
+ ScheduledJobs: 计划任务
71
+ Seconds: 秒
72
+ ShowAll: 显示全部
73
+ SixMonths: 6个月
74
+ Size: 大小
75
+ Started: 已启动
76
+ Status: 状态
77
+ Stop: 强制暂停
78
+ StopAll: 全部强制暂停
79
+ StopPolling: 停止轮询
80
+ Success: 成功
81
+ Summary: 概览
82
+ Thread: 线程
83
+ Threads: 线程
84
+ ThreeMonths: 3个月
85
+ Time: 时间
86
86
  Unpause: 取消暂停
87
+ Uptime: 运行时间(天)
88
+ Utilization: 利用率
89
+ Version: 版本
90
+ When: 当
91
+ Worker: 线程
92
+ active: 活动中
93
+ idle: 闲置
87
94
  Metrics: 指标
88
95
  NoDataFound: 无数据
89
96
  TotalExecutionTime: 总执行时间
90
97
  AvgExecutionTime: 平均执行时间
91
98
  Context: 上下文
92
- Bucket: 桶
93
99
  NoJobMetricsFound: 无任务相关指标数据
94
- Success: 成功
95
- Failure: 失败
100
+ Filter: 过滤
101
+ AnyJobContent: 任何任务内容
102
+ Profiles: 性能分析
103
+ Data: 数据
104
+ View: 查看
105
+ Token: 标记
106
+ ElapsedTime: 已用时间
@@ -1,5 +1,6 @@
1
1
  # elements like %{queue} are variables and should not be translated
2
- zh-tw: # <---- change this to your locale code
2
+ zh-TW: # <---- change this to your locale code
3
+ LanguageName: 臺灣話
3
4
  Dashboard: 資訊主頁
4
5
  Status: 狀態
5
6
  Time: 時間
@@ -98,5 +99,4 @@ zh-tw: # <---- change this to your locale code
98
99
  TotalExecutionTime: 總執行時間
99
100
  AvgExecutionTime: 平均執行時間
100
101
  Context: 上下文
101
- Bucket: 桶
102
102
  NoJobMetricsFound: 找無工作相關計量資料
@@ -1,35 +1,32 @@
1
- <div class="navbar navbar-fixed-bottom navbar-inverse ltr">
2
- <div class="navbar-inner">
3
- <div class="container text-center">
4
- <ul class="nav">
5
- <li>
6
- <p class="navbar-text product-version"><%= product_version %></p>
7
- </li>
8
- <li>
9
- <p class="navbar-text redis-url" title="<%= redis_url %>"><%= redis_url %></p>
10
- </li>
11
- <li>
12
- <p id="serverUtcTime" class="navbar-text server-utc-time"><%= server_utc_time %></p>
13
- </li>
14
- <li>
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>
31
- </li>
32
- </ul>
33
- </div>
1
+ <footer>
2
+ <div class="container">
3
+ <ul class="nav">
4
+ <li>
5
+ <p><b><%= product_version %></b></p>
6
+ </li>
7
+ <li>
8
+ <p title="<%= redis_url %>"><%= redis_url %></p>
9
+ </li>
10
+ <li>
11
+ <p id="serverUtcTime"><%= server_utc_time %></p>
12
+ </li>
13
+ <li>
14
+ <p><a rel=help href="https://github.com/sidekiq/sidekiq/wiki">docs</a></p>
15
+ </li>
16
+ <li>
17
+ <form id="locale-form" action="<%= root_path %>change_locale" method="post">
18
+ <%= csrf_tag %>
19
+ <select id="locale-select" aria-label="<%= t("Language") %>" class="form-control" name="locale">
20
+ <% available_locales.each do |locale_option| %>
21
+ <% if locale_option == locale %>
22
+ <option selected value="<%= locale_option %>"><%= language_name(locale_option) %></option>
23
+ <% else %>
24
+ <option value="<%= locale_option %>"><%= language_name(locale_option) %></option>
25
+ <% end %>
26
+ <% end %>
27
+ </select>
28
+ </form>
29
+ </li>
30
+ </ul>
34
31
  </div>
35
- </div>
32
+ </footer>
@@ -1,105 +1,107 @@
1
- <div class="header-container">
2
- <h3><%= t('Job') %></h3>
3
- </div>
1
+ <section>
2
+ <header>
3
+ <h1><%= t('Job') %></h1>
4
+ </header>
4
5
 
5
- <div class="table_container">
6
- <table class="table table-bordered table-striped table-hover">
7
- <tbody>
8
- <tr>
9
- <th><%= t('Queue') %></th>
10
- <td>
11
- <a href="<%= root_path %>queues/<%= job.queue %>"><%= job.queue %></a>
12
- </td>
13
- </tr>
14
- <tr>
15
- <th><%= t('Job') %></th>
16
- <td>
17
- <%= job.display_class %>
18
- <%= display_tags(job) %>
19
- </td>
20
- </tr>
21
- <tr>
22
- <th><%= t('Arguments') %></th>
23
- <td>
24
- <code class="code-wrap">
25
- <!-- We don't want to truncate any job arguments when viewing a single job's status page -->
26
- <div class="args-extended"><%= display_args(job.display_args, nil) %></div>
27
- </code>
28
- </td>
29
- </tr>
30
- <tr>
31
- <th>JID</th>
32
- <td>
33
- <code><%= job.jid %></code>
34
- </td>
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 %>
44
- <tr>
45
- <th><%= t('CreatedAt') %></th>
46
- <td><%= relative_time(job.created_at) %></td>
47
- </tr>
48
- <tr>
49
- <th><%= t('Enqueued') %></th>
50
- <td><%= (enqueued_at = job.enqueued_at) ? relative_time(enqueued_at) : t('NotYetEnqueued') %></td>
51
- </tr>
52
- <% unless retry_extra_items(job).empty? %>
6
+ <div class="table_container">
7
+ <table>
8
+ <tbody>
53
9
  <tr>
54
- <th><%= t('Extras') %></th>
10
+ <th><%= t('Queue') %></th>
55
11
  <td>
56
- <code>
57
- <%= retry_extra_items(job).inspect %>
12
+ <a href="<%= root_path %>queues/<%= job.queue %>"><%= job.queue %></a>
13
+ </td>
14
+ </tr>
15
+ <tr>
16
+ <th><%= t('Job') %></th>
17
+ <td>
18
+ <%= job.display_class %>
19
+ <%= display_tags(job) %>
20
+ </td>
21
+ </tr>
22
+ <tr>
23
+ <th><%= t('Arguments') %></th>
24
+ <td>
25
+ <code class="code-wrap">
26
+ <!-- We don't want to truncate any job arguments when viewing a single job's status page -->
27
+ <div class="args-extended"><%= display_args(job.display_args, nil) %></div>
58
28
  </code>
59
29
  </td>
60
30
  </tr>
61
- <% end %>
62
- <% if type == :retry %>
63
- <% if job['retry_count'] && job['retry_count'] > 0 %>
31
+ <tr>
32
+ <th>JID</th>
33
+ <td>
34
+ <code><%= job.jid %></code>
35
+ </td>
36
+ </tr>
37
+ <% if job.bid %>
38
+ <tr>
39
+ <th>BID</th>
40
+ <td>
41
+ <a href="<%= root_path %>batches/<%= job.bid %>"><%= job.bid %></a>
42
+ </td>
43
+ </tr>
44
+ <% end %>
45
+ <tr>
46
+ <th><%= t('CreatedAt') %></th>
47
+ <td><%= relative_time(job.created_at) %></td>
48
+ </tr>
49
+ <tr>
50
+ <th><%= t('Enqueued') %></th>
51
+ <td><%= (enqueued_at = job.enqueued_at) ? relative_time(enqueued_at) : t('NotYetEnqueued') %></td>
52
+ </tr>
53
+ <% unless retry_extra_items(job).empty? %>
64
54
  <tr>
65
- <th><%= t('RetryCount') %></th>
66
- <td><%= job['retry_count'] %></td>
55
+ <th><%= t('Extras') %></th>
56
+ <td>
57
+ <code>
58
+ <%= retry_extra_items(job).inspect %>
59
+ </code>
60
+ </td>
67
61
  </tr>
62
+ <% end %>
63
+ <% if type == :retry %>
64
+ <% if job['retry_count'] && job['retry_count'] > 0 %>
65
+ <tr>
66
+ <th><%= t('RetryCount') %></th>
67
+ <td><%= job['retry_count'] %></td>
68
+ </tr>
69
+ <tr>
70
+ <th><%= t('LastRetry') %></th>
71
+ <td><%= relative_time(job.retried_at) %></td>
72
+ </tr>
73
+ <% else %>
74
+ <tr>
75
+ <th><%= t('OriginallyFailed') %></th>
76
+ <td><%= relative_time(job.failed_at) %></td>
77
+ </tr>
78
+ <% end %>
68
79
  <tr>
69
- <th><%= t('LastRetry') %></th>
70
- <td><%= relative_time(Time.at(job['retried_at'])) %></td>
80
+ <th><%= t('NextRetry') %></th>
81
+ <td><%= relative_time(job.at) %></td>
71
82
  </tr>
72
- <% else %>
83
+ <% end %>
84
+ <% if type == :scheduled %>
73
85
  <tr>
74
- <th><%= t('OriginallyFailed') %></th>
75
- <td><%= relative_time(Time.at(job['failed_at'])) %></td>
86
+ <th><%= t('Scheduled') %></th>
87
+ <td><%= relative_time(job.at) %></td>
76
88
  </tr>
77
89
  <% end %>
78
- <tr>
79
- <th><%= t('NextRetry') %></th>
80
- <td><%= relative_time(job.at) %></td>
81
- </tr>
82
- <% end %>
83
- <% if type == :scheduled %>
84
- <tr>
85
- <th><%= t('Scheduled') %></th>
86
- <td><%= relative_time(job.at) %></td>
87
- </tr>
88
- <% end %>
89
- <% if type == :dead %>
90
- <tr>
91
- <th><%= t('LastRetry') %></th>
92
- <td><%= relative_time(job.at) if job['retry_count'] %></td>
93
- </tr>
94
- <% end %>
95
- <% Sidekiq::Web.custom_job_info_rows.each do |helper| %>
96
- <% helper.add_pair(job) do |name, value| %>
90
+ <% if type == :dead %>
97
91
  <tr>
98
- <th><%= name %></th>
99
- <td><%= value %></td>
92
+ <th><%= t('LastRetry') %></th>
93
+ <td><%= relative_time(job.at) if job['retry_count'] %></td>
100
94
  </tr>
101
95
  <% end %>
102
- <% end %>
103
- </tbody>
104
- </table>
105
- </div>
96
+ <% config.custom_job_info_rows&.each do |helper| %>
97
+ <% helper.add_pair(job) do |name, value| %>
98
+ <tr>
99
+ <th><%= name %></th>
100
+ <td><%= value %></td>
101
+ </tr>
102
+ <% end %>
103
+ <% end %>
104
+ </tbody>
105
+ </table>
106
+ </div>
107
+ </section>
@@ -1,12 +1,15 @@
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>
1
+ <div class="filter">
2
+ <form id="metrics-form" class="form-inline" action="<%= path %>" method="get">
3
+ <label for="substr"><%= t('Filter') %></label>
4
+ <input id="class-filter" class="form-control" type="text" name="substr" placeholder="<%= t('Name') %>" value="<%= h url_params("substr") %>">
5
+ <select id="period-selector" class="form-control" name="period">
6
+ <% periods.each_key do |code| %>
7
+ <% if code == period %>
8
+ <option selected value="<%= code %>"><%= code %></option>
9
+ <% else %>
10
+ <option value="<%= code %>"><%= code %></option>
11
+ <% end %>
9
12
  <% end %>
10
- <% end %>
11
- </select>
13
+ </select>
14
+ </form>
12
15
  </div>
data/web/views/_nav.erb CHANGED
@@ -1,52 +1,45 @@
1
- <div class="navbar navbar-default navbar-fixed-top">
2
- <div class="container-fluid">
1
+ <header>
2
+ <div class="container">
3
3
  <div class="navbar-header" data-navbar="static">
4
- <button type="button" class="navbar-toggle collapsed" data-toggle="navbar-menu" data-target="#navbar-menu">
4
+ <button type="button" class="btn navbar-toggle" 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>
8
8
  </button>
9
- <div class="navbar-toggle collapsed navbar-livereload">
9
+ <div class="navbar-livereload">
10
10
  <%= erb :_poll_link %>
11
- <% if Sidekiq::Web.app_url %>
12
- <a class="btn btn-inverse" href="<%= Sidekiq::Web.app_url %>"><%= t('BackToApp') %></a>
11
+ <% if config.app_url %>
12
+ <a class="btn btn-inverse" href="<%= config.app_url %>"><%= t('BackToApp') %></a>
13
13
  <% end %>
14
14
  </div>
15
15
  <a class="navbar-brand" href="<%= root_path %>">
16
16
  <%= Sidekiq::NAME %>
17
- <%= erb :_status %>
18
17
  </a>
19
18
  </div>
20
19
 
21
- <div class="collapse navbar-collapse" id="navbar-menu">
22
- <ul class="nav navbar-nav" data-navbar="static">
23
- <% Sidekiq::Web.default_tabs.each do |title, url| %>
20
+ <div class="navbar-collapse" role="navigation" id="navbar-menu">
21
+ <ul class="nav" data-navbar="static">
22
+ <% config.tabs.each do |title, url| %>
24
23
  <% if url == '' %>
25
24
  <li class="<%= current_path == url ? 'active' : '' %>">
26
- <a href="<%= root_path %><%= url %>"><%= t(title) %></a>
25
+ <a href="<%= root_path %><%= url %>"><%= t(title) %></a>
27
26
  </li>
28
27
  <% else %>
29
28
  <li class="<%= current_path.start_with?(url) ? 'active' : '' %>">
30
- <a href="<%= root_path %><%= url %>"><%= t(title) %></a>
29
+ <a href="<%= root_path %><%= url %>"><%= t(title) %></a>
31
30
  </li>
32
31
  <% end %>
33
32
  <% end %>
34
33
 
35
- <% Sidekiq::Web.custom_tabs.each do |title, url| %>
36
- <li class="<%= current_path.start_with?(url) ? 'active' : '' %>" data-navbar="custom-tab">
37
- <a href="<%= root_path %><%= url %>"><%= t(title) %></a>
38
- </li>
39
- <% end %>
40
-
41
34
  <li class="navbar-livereload">
42
35
  <div class="poll-wrapper">
43
36
  <%= erb :_poll_link %>
44
- <% if Sidekiq::Web.app_url %>
45
- <a class="btn btn-inverse" href="<%= Sidekiq::Web.app_url %>"><%= t('BackToApp') %></a>
37
+ <% if config.app_url %>
38
+ <a class="btn btn-inverse" href="<%= config.app_url %>"><%= t('BackToApp') %></a>
46
39
  <% end %>
47
40
  </div>
48
41
  </li>
49
42
  </ul>
50
43
  </div>
51
44
  </div>
52
- </div>
45
+ </header>
@@ -1,25 +1,27 @@
1
- <div>
1
+
2
2
  <% if @total_size > @count %>
3
- <ul class="pagination pull-right flip">
4
- <li class="<%= 'disabled' if @current_page == 1 %>">
5
- <a href="<%= url %>?page=1">&laquo;</a>
6
- </li>
7
- <% if @current_page > 1 %>
8
- <li>
9
- <a href="<%= url %>?<%= qparams(page: @current_page - 1) %>"><%= @current_page - 1 %></a>
3
+ <div>
4
+ <ul class="pagination pull-right">
5
+ <li class="<%= 'disabled' if @current_page == 1 %>">
6
+ <a href="<%= url %>?page=1">&laquo;</a>
10
7
  </li>
11
- <% end %>
12
- <li class="disabled">
13
- <a href="<%= url %>?<%= qparams(page: @current_page) %>"><%= @current_page %></a>
14
- </li>
15
- <% if @total_size > @current_page * @count %>
16
- <li>
17
- <a href="<%= url %>?<%= qparams(page: @current_page + 1) %>"><%= @current_page + 1 %></a>
8
+ <% if @current_page > 1 %>
9
+ <li>
10
+ <a href="<%= url %>?<%= qparams(page: @current_page - 1) %>"><%= @current_page - 1 %></a>
11
+ </li>
12
+ <% end %>
13
+ <li class="disabled">
14
+ <a href="<%= url %>?<%= qparams(page: @current_page) %>"><%= @current_page %></a>
18
15
  </li>
19
- <% end %>
20
- <li class="<%= 'disabled' if @total_size <= @current_page * @count %>">
21
- <a href="<%= url %>?<%= qparams(page: (@total_size.to_f / @count).ceil) %>">&raquo;</a>
22
- </li>
23
- </ul>
16
+ <% if @total_size > @current_page * @count %>
17
+ <li>
18
+ <a href="<%= url %>?<%= qparams(page: @current_page + 1) %>"><%= @current_page + 1 %></a>
19
+ </li>
20
+ <% end %>
21
+ <li class="<%= 'disabled' if @total_size <= @current_page * @count %>">
22
+ <a href="<%= url %>?<%= qparams(page: (@total_size.to_f / @count).ceil) %>">&raquo;</a>
23
+ </li>
24
+ </ul>
25
+ </div>
24
26
  <% end %>
25
- </div>
27
+
@@ -1,4 +1,4 @@
1
1
  <% if pollable? %>
2
- <a class="live-poll-start live-poll btn btn-primary"><%= t('LivePoll') %></a>
3
- <a class="live-poll-stop live-poll btn btn-primary active"><%= t('StopPolling') %></a>
2
+ <a class="btn live-poll live-poll-start btn-primary"><%= t('LivePoll') %></a>
3
+ <a class="btn live-poll live-poll-stop btn-danger"><%= t('StopPolling') %></a>
4
4
  <% end %>