sidekiq 8.0.8 → 8.1.0

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/Changes.md +42 -0
  3. data/README.md +15 -0
  4. data/bin/lint-herb +13 -0
  5. data/lib/generators/sidekiq/templates/job.rb.erb +1 -1
  6. data/lib/sidekiq/api.rb +28 -5
  7. data/lib/sidekiq/capsule.rb +4 -0
  8. data/lib/sidekiq/cli.rb +16 -4
  9. data/lib/sidekiq/config.rb +8 -2
  10. data/lib/sidekiq/fetch.rb +1 -0
  11. data/lib/sidekiq/job/iterable.rb +2 -2
  12. data/lib/sidekiq/job.rb +2 -0
  13. data/lib/sidekiq/job_logger.rb +4 -2
  14. data/lib/sidekiq/job_retry.rb +7 -3
  15. data/lib/sidekiq/launcher.rb +18 -9
  16. data/lib/sidekiq/middleware/i18n.rb +2 -0
  17. data/lib/sidekiq/monitor.rb +4 -8
  18. data/lib/sidekiq/profiler.rb +1 -0
  19. data/lib/sidekiq/redis_connection.rb +2 -2
  20. data/lib/sidekiq/ring_buffer.rb +1 -0
  21. data/lib/sidekiq/scheduled.rb +7 -5
  22. data/lib/sidekiq/version.rb +1 -1
  23. data/lib/sidekiq/web/action.rb +1 -1
  24. data/lib/sidekiq/web/application.rb +10 -0
  25. data/lib/sidekiq/web/config.rb +3 -6
  26. data/lib/sidekiq/web/helpers.rb +3 -11
  27. data/lib/sidekiq/web.rb +23 -4
  28. data/sidekiq.gemspec +5 -5
  29. data/web/assets/javascripts/application.js +17 -1
  30. data/web/assets/stylesheets/style.css +17 -2
  31. data/web/locales/ar.yml +1 -0
  32. data/web/locales/cs.yml +1 -0
  33. data/web/locales/da.yml +1 -0
  34. data/web/locales/de.yml +1 -0
  35. data/web/locales/el.yml +1 -0
  36. data/web/locales/en.yml +1 -0
  37. data/web/locales/es.yml +1 -0
  38. data/web/locales/fa.yml +1 -0
  39. data/web/locales/fr.yml +2 -1
  40. data/web/locales/gd.yml +1 -0
  41. data/web/locales/he.yml +1 -0
  42. data/web/locales/hi.yml +1 -0
  43. data/web/locales/it.yml +1 -0
  44. data/web/locales/ja.yml +1 -0
  45. data/web/locales/ko.yml +1 -0
  46. data/web/locales/lt.yml +1 -0
  47. data/web/locales/nb.yml +1 -0
  48. data/web/locales/nl.yml +1 -0
  49. data/web/locales/pl.yml +1 -0
  50. data/web/locales/pt-BR.yml +1 -0
  51. data/web/locales/pt.yml +1 -0
  52. data/web/locales/ru.yml +1 -0
  53. data/web/locales/sv.yml +1 -0
  54. data/web/locales/ta.yml +1 -0
  55. data/web/locales/tr.yml +1 -0
  56. data/web/locales/uk.yml +1 -0
  57. data/web/locales/ur.yml +1 -0
  58. data/web/locales/vi.yml +1 -0
  59. data/web/locales/zh-CN.yml +1 -0
  60. data/web/locales/zh-TW.yml +1 -0
  61. data/web/views/{_footer.erb → _footer.html.erb} +1 -1
  62. data/web/views/{_metrics_period_select.erb → _metrics_period_select.html.erb} +1 -1
  63. data/web/views/{_paging.erb → _paging.html.erb} +0 -1
  64. data/web/views/_poll_link.html.erb +4 -0
  65. data/web/views/{busy.erb → busy.html.erb} +4 -8
  66. data/web/views/{dashboard.erb → dashboard.html.erb} +3 -3
  67. data/web/views/{dead.erb → dead.html.erb} +3 -3
  68. data/web/views/filtering.html.erb +6 -0
  69. data/web/views/{layout.erb → layout.html.erb} +7 -7
  70. data/web/views/{metrics.erb → metrics.html.erb} +9 -8
  71. data/web/views/{morgue.erb → morgue.html.erb} +8 -4
  72. data/web/views/{queue.erb → queue.html.erb} +2 -2
  73. data/web/views/{queues.erb → queues.html.erb} +4 -4
  74. data/web/views/{retries.erb → retries.html.erb} +9 -5
  75. data/web/views/{retry.erb → retry.html.erb} +2 -2
  76. data/web/views/{scheduled.erb → scheduled.html.erb} +8 -4
  77. data/web/views/{scheduled_job_info.erb → scheduled_job_info.html.erb} +2 -2
  78. metadata +34 -34
  79. data/lib/sidekiq/web/csrf_protection.rb +0 -183
  80. data/web/views/_poll_link.erb +0 -4
  81. data/web/views/filtering.erb +0 -6
  82. /data/web/views/{_job_info.erb → _job_info.html.erb} +0 -0
  83. /data/web/views/{_nav.erb → _nav.html.erb} +0 -0
  84. /data/web/views/{_summary.erb → _summary.html.erb} +0 -0
  85. /data/web/views/{metrics_for_job.erb → metrics_for_job.html.erb} +0 -0
  86. /data/web/views/{profiles.erb → profiles.html.erb} +0 -0
data/lib/sidekiq/web.rb CHANGED
@@ -13,7 +13,7 @@ module Sidekiq
13
13
  ROOT = File.expand_path("#{File.dirname(__FILE__)}/../../web")
14
14
  VIEWS = "#{ROOT}/views"
15
15
  LOCALES = ["#{ROOT}/locales"]
16
- LAYOUT = "#{VIEWS}/layout.erb"
16
+ LAYOUT = "#{VIEWS}/layout.html.erb"
17
17
  ASSETS = "#{ROOT}/assets"
18
18
 
19
19
  DEFAULT_TABS = {
@@ -42,6 +42,12 @@ module Sidekiq
42
42
  @@config.app_url = url
43
43
  end
44
44
 
45
+ def assets_path=(path)
46
+ @@config.assets_path = path
47
+ end
48
+
49
+ def assets_path = @@config.assets_path
50
+
45
51
  def tabs = @@config.tabs
46
52
 
47
53
  def locales = @@config.locales
@@ -87,13 +93,27 @@ module Sidekiq
87
93
  env[:web_config] = Sidekiq::Web.configure
88
94
  env[:csp_nonce] = SecureRandom.hex(8)
89
95
  env[:redis_pool] = self.class.redis_pool
90
- app.call(env)
96
+ safe_request?(env) ? app.call(env) : deny(env)
91
97
  end
92
98
 
93
99
  def app
94
100
  @app ||= build(@@config)
95
101
  end
96
102
 
103
+ def safe_methods?(env)
104
+ %w[GET HEAD OPTIONS TRACE].include? env["REQUEST_METHOD"]
105
+ end
106
+
107
+ def safe_request?(env)
108
+ return true if safe_methods?(env)
109
+ env["HTTP_SEC_FETCH_SITE"] == "same-origin"
110
+ end
111
+
112
+ def deny(env)
113
+ Sidekiq.logger.warn "attack prevented by #{self.class}"
114
+ [403, {Rack::CONTENT_TYPE => "text/plain"}, ["Forbidden"]]
115
+ end
116
+
97
117
  private
98
118
 
99
119
  def build(cfg)
@@ -105,11 +125,10 @@ module Sidekiq
105
125
 
106
126
  ::Rack::Builder.new do
107
127
  use Rack::Static, urls: ["/stylesheets", "/images", "/javascripts"],
108
- root: ASSETS,
128
+ root: cfg.assets_path,
109
129
  cascade: true,
110
130
  header_rules: rules
111
131
  m.each { |middleware, block| use(*middleware, &block) }
112
- use CsrfProtection if cfg[:csrf]
113
132
  run Sidekiq::Web::Application.new(self.class)
114
133
  end
115
134
  end
data/sidekiq.gemspec CHANGED
@@ -23,9 +23,9 @@ Gem::Specification.new do |gem|
23
23
  "rubygems_mfa_required" => "true"
24
24
  }
25
25
 
26
- gem.add_dependency "redis-client", ">= 0.23.2"
27
- gem.add_dependency "connection_pool", ">= 2.5.0"
28
- gem.add_dependency "rack", ">= 3.1.0"
29
- gem.add_dependency "json", ">= 2.9.0"
30
- gem.add_dependency "logger", ">= 1.6.2"
26
+ gem.add_dependency "redis-client", ">= 0.26.0"
27
+ gem.add_dependency "connection_pool", ">= 3.0.0"
28
+ gem.add_dependency "rack", ">= 3.2.0"
29
+ gem.add_dependency "json", ">= 2.16.0"
30
+ gem.add_dependency "logger", ">= 1.7.0"
31
31
  end
@@ -22,6 +22,7 @@ function addListeners() {
22
22
  node.addEventListener("click", addDataToggleListeners)
23
23
  })
24
24
 
25
+ initializeBulkToggle();
25
26
  addShiftClickListeners();
26
27
  updateFuzzyTimes();
27
28
  updateNumbers();
@@ -63,6 +64,21 @@ function addDataToggleListeners(event) {
63
64
  full.classList.toggle("is-open");
64
65
  }
65
66
 
67
+ function toggleBulkButtons() {
68
+ const checkboxes = document.querySelectorAll('.select-item-checkbox, .check-all-items');
69
+ const anyChecked = Array.from(checkboxes).some(cb => cb.checked);
70
+ const buttons = document.querySelectorAll('.bulk-action-buttons');
71
+ buttons.forEach(btn => {
72
+ btn.style.display = anyChecked ? 'none' : 'block';
73
+ });
74
+ }
75
+
76
+ function initializeBulkToggle(){
77
+ document.querySelectorAll('.check-all-items, .select-item-checkbox').forEach(cb => {
78
+ cb.addEventListener('change', toggleBulkButtons);
79
+ });
80
+ }
81
+
66
82
  function addShiftClickListeners() {
67
83
  let checkboxes = Array.from(document.querySelectorAll(".shift_clickable"));
68
84
  let lastChecked = null;
@@ -174,7 +190,7 @@ function updateProgressBars() {
174
190
  function handleConfirmDialog (event) {
175
191
  const target = event.target
176
192
 
177
- if (target.localName !== "input") { return }
193
+ if (target.localName !== "input" && target.localName !== "button" ) { return }
178
194
  const confirmMessage = target.dataset.confirm
179
195
 
180
196
  if (confirmMessage === undefined) { return }
@@ -448,12 +448,14 @@ canvas + .table_container {
448
448
  }
449
449
 
450
450
  .buttons-row {
451
- margin-top: var(--space-3x);
452
451
  display: flex;
453
- flex-wrap: wrap;
454
452
  gap: 8px;
455
453
  }
456
454
 
455
+ .bulk-action-buttons.bulk-lead-button {
456
+ margin-inline-start: auto;
457
+ }
458
+
457
459
  table {
458
460
  background-color: var(--color-elevated);
459
461
  border: 1px solid var(--color-border);
@@ -757,3 +759,16 @@ body > footer .nav {
757
759
  padding: 20px;
758
760
  background: var(--color-success);
759
761
  }
762
+
763
+ .args {
764
+ overflow-y: auto;
765
+ max-height: 50px;
766
+ word-break: break-word
767
+ }
768
+ .args-extended {
769
+ overflow-y: scroll;
770
+ max-height: 500px;
771
+ }
772
+
773
+ .toggle { display: none; }
774
+ .toggle.is-open { display: block; }
data/web/locales/ar.yml CHANGED
@@ -3,6 +3,7 @@ ar:
3
3
  LanguageName: العربية
4
4
  Actions: إجراءات
5
5
  AddToQueue: إضافة إلى الرتل
6
+ AddAllToQueue: إضافة الكل إلى الرتل
6
7
  AreYouSure: هل انت متأكد؟
7
8
  AreYouSureDeleteJob: هل أنت متأكد من حذف الوظيفة؟
8
9
  AreYouSureDeleteQueue: هل أنت متأكد من حذف الرتل %{queue}؟
data/web/locales/cs.yml CHANGED
@@ -3,6 +3,7 @@ cs:
3
3
  LanguageName: Čeština
4
4
  Actions: Akce
5
5
  AddToQueue: Přidat do fronty
6
+ AddAllToQueue: Přidat vše do fronty
6
7
  AreYouSure: Jste si jisti?
7
8
  AreYouSureDeleteJob: Jste si jisti, že chcete odstranit tento úkol?
8
9
  AreYouSureDeleteQueue: Jste si jisti, že chcete odstranit frontu %{queue}?
data/web/locales/da.yml CHANGED
@@ -3,6 +3,7 @@ da:
3
3
  LanguageName: Dansk
4
4
  Actions: Handlinger
5
5
  AddToQueue: Tilføj til kø
6
+ AddAllToQueue: Tilføj alle til kø
6
7
  AreYouSure: Er du sikker?
7
8
  AreYouSureDeleteJob: Er du sikker på at du vil slette dette job?
8
9
  AreYouSureDeleteQueue: Er du sikker på at du vil slette %{queue} køen?
data/web/locales/de.yml CHANGED
@@ -3,6 +3,7 @@ de:
3
3
  LanguageName: Deutsch
4
4
  Actions: Aktionen
5
5
  AddToQueue: In Warteschlange einreihen
6
+ AddAllToQueue: Alle in Warteschlange einreihen
6
7
  AreYouSure: Bist du sicher?
7
8
  AreYouSureDeleteJob: Möchtest du diesen Job wirklich löschen?
8
9
  AreYouSureDeleteQueue: Möchtest du %{queue} wirklich löschen?
data/web/locales/el.yml CHANGED
@@ -26,6 +26,7 @@ el: # <---- change this to your locale code
26
26
  ShowAll: Εμφάνιση Όλων
27
27
  Enqueued: Μπήκαν στην στοίβα
28
28
  AddToQueue: Προσθήκη στην στοίβα
29
+ AddAllToQueue: Προσθήκη όλων στην στοίβα
29
30
  AreYouSureDeleteJob: Θέλετε να διαγράψετε αυτή την εργασία;
30
31
  AreYouSureDeleteQueue: Θέλετε να διαγράψετε την στοίβα %{queue}; Αυτό θα διαγράψει όλες τις εργασίες εντός της στοίβας, θα εμφανιστεί ξανά εάν προωθήσετε περισσότερες εργασίες σε αυτήν στο μέλλον.
31
32
  Queues: Στοίβες
data/web/locales/en.yml CHANGED
@@ -3,6 +3,7 @@ en:
3
3
  LanguageName: English
4
4
  Actions: Actions
5
5
  AddToQueue: Add to queue
6
+ AddAllToQueue: Add All to Queue
6
7
  AreYouSure: Are you sure?
7
8
  AreYouSureDeleteJob: Are you sure you want to delete this job?
8
9
  AreYouSureDeleteQueue: Are you sure you want to delete the %{queue} queue? This will delete all jobs within the queue, it will reappear if you push more jobs to it in the future.
data/web/locales/es.yml CHANGED
@@ -3,6 +3,7 @@ es:
3
3
  LanguageName: Español
4
4
  Actions: Acciones
5
5
  AddToQueue: Añadir a la cola
6
+ AddAllToQueue: Añadir todo a la cola
6
7
  AreYouSure: ¿Estás seguro?
7
8
  AreYouSureDeleteJob: ¿Estás seguro de eliminar este trabajo?
8
9
  AreYouSureDeleteQueue: ¿Estás seguro de eliminar la cola %{queue}?
data/web/locales/fa.yml CHANGED
@@ -3,6 +3,7 @@ fa:
3
3
  LanguageName: فارسى
4
4
  Actions: اعمال
5
5
  AddToQueue: افزودن به صف
6
+ AddAllToQueue: افزودن همه به صف
6
7
  AreYouSure: آیا مطمعن هستید?
7
8
  AreYouSureDeleteJob: آیا شما مطمعن هستید از حذف این کار ؟
8
9
  AreYouSureDeleteQueue: ایا شما مطمعنید از حذف %{queue} ?
data/web/locales/fr.yml CHANGED
@@ -3,11 +3,12 @@ fr:
3
3
  LanguageName: Français
4
4
  Actions: Actions
5
5
  AddToQueue: Ajouter à la queue
6
+ AddAllToQueue: Ajouter tout à la queue
6
7
  AreYouSure: Êtes-vous certain ?
7
8
  AreYouSureDeleteJob: Êtes-vous certain de vouloir supprimer cette tâche ?
8
9
  AreYouSureDeleteQueue: Êtes-vous certain de vouloir supprimer la queue %{queue} ?
9
10
  Arguments: Arguments
10
- Back to App: Retour à l'application
11
+ BackToApp: Retour à l'application
11
12
  Busy: En cours
12
13
  Class: Classe
13
14
  Connections: Connexions
data/web/locales/gd.yml CHANGED
@@ -3,6 +3,7 @@ gd:
3
3
  LanguageName: Gaeilge
4
4
  Actions: Gnìomhan
5
5
  AddToQueue: Cuir ris a’ chiutha
6
+ AddAllToQueue: Cuir a h-uile ris a’ chiutha
6
7
  AreYouSure: A bheil thu cinnteach?
7
8
  AreYouSureDeleteJob: A bheil thu cinnteach gu bheil thu airson an obair seo a sguabadh às?
8
9
  AreYouSureDeleteQueue: A bheil thu cinnteach gu bheil thu airson ciutha %{queue} a sguabadh às? Sguabaidh seo às gach obair sa chiutha seo, nochdaidh e a-rithist nuair a phutas tu barrachd obraichean dha an uairsin.
data/web/locales/he.yml CHANGED
@@ -3,6 +3,7 @@ he:
3
3
  LanguageName: עברית
4
4
  Actions: פעולות
5
5
  AddToQueue: הוסף לתור
6
+ AddAllToQueue: הוסף הכל לתור
6
7
  AreYouSure: אתם בטוחים?
7
8
  AreYouSureDeleteJob: האם אתם בטוחים שברצונכם למחוק את העבודה הזאת?
8
9
  AreYouSureDeleteQueue: האם אתם בטוחים שברצונכם למחוק את התור %{queue}?
data/web/locales/hi.yml CHANGED
@@ -3,6 +3,7 @@ hi:
3
3
  LanguageName: हिन्दी
4
4
  Actions: कार्रवाई
5
5
  AddToQueue: कतार मे जोड़ें
6
+ AddAllToQueue: सभी को कतार मे जोड़ें
6
7
  AreYouSure: क्या आपको यकीन है?
7
8
  AreYouSureDeleteJob: क्या आप इस कार्य को हटाना चाहते है?
8
9
  AreYouSureDeleteQueue: क्या आप %{queue} कतार को हटाना चाहते है?
data/web/locales/it.yml CHANGED
@@ -3,6 +3,7 @@ it:
3
3
  LanguageName: Italiano
4
4
  Actions: Azioni
5
5
  AddToQueue: Aggiungi alla coda
6
+ AddAllToQueue: Aggiungi tutto alla coda
6
7
  AreYouSure: Sei sicuro?
7
8
  AreYouSureDeleteJob: Sei sicuro di voler cancellare questo lavoro?
8
9
  AreYouSureDeleteQueue: Sei sicuro di voler cancellare la coda %{queue}?
data/web/locales/ja.yml CHANGED
@@ -3,6 +3,7 @@ ja:
3
3
  LanguageName: 日本語
4
4
  Actions: アクション
5
5
  AddToQueue: キューに追加
6
+ AddAllToQueue: すべてをキューに追加
6
7
  AreYouSure: よろしいですか?
7
8
  AreYouSureDeleteJob: このジョブを削除しますか?
8
9
  AreYouSureDeleteQueue: この %{queue} キューを削除しますか?
data/web/locales/ko.yml CHANGED
@@ -3,6 +3,7 @@ ko:
3
3
  LanguageName: 한국어
4
4
  Actions: 동작
5
5
  AddToQueue: 큐 추가
6
+ AddAllToQueue: 모든 것을 큐에 추가
6
7
  AreYouSure: 정말입니까?
7
8
  AreYouSureDeleteJob: 이 작업을 삭제하시겠습니까?
8
9
  AreYouSureDeleteQueue: 이 %{queue} 큐를 삭제하시겠습니까?
data/web/locales/lt.yml CHANGED
@@ -3,6 +3,7 @@ lt:
3
3
  LanguageName: Lietuvių
4
4
  Actions: Veiksmai
5
5
  AddToQueue: Pridėti į eilę
6
+ AddAllToQueue: Pridėti viską į eilę
6
7
  AreYouSure: Ar jūs įsitikinę?
7
8
  AreYouSureDeleteJob: Ar tikrai norite pašalinti šį darbą?
8
9
  AreYouSureDeleteQueue: Ar tikrai norite pašalinti šią eilę %{queue}?
data/web/locales/nb.yml CHANGED
@@ -3,6 +3,7 @@ nb:
3
3
  LanguageName: Norsk
4
4
  Actions: Handlinger
5
5
  AddToQueue: Legg til i kø
6
+ AddAllToQueue: Legg alt til i kø
6
7
  AreYouSure: Er du sikker?
7
8
  AreYouSureDeleteJob: Er du sikker på at du vil slette denne jobben?
8
9
  AreYouSureDeleteQueue: Er du sikker på at du vil slette køen %{queue}?
data/web/locales/nl.yml CHANGED
@@ -3,6 +3,7 @@ nl:
3
3
  LanguageName: Nederlands
4
4
  Actions: Acties
5
5
  AddToQueue: Toevoegen aan wachtrij
6
+ AddAllToQueue: Alles toevoegen aan wachtrij
6
7
  AreYouSure: Weet u het zeker?
7
8
  AreYouSureDeleteJob: Weet u zeker dat u deze taak wilt verwijderen?
8
9
  AreYouSureDeleteQueue: Weet u zeker dat u wachtrij %{queue} wilt verwijderen?
data/web/locales/pl.yml CHANGED
@@ -3,6 +3,7 @@ pl:
3
3
  LanguageName: Polski
4
4
  Actions: Akcje
5
5
  AddToQueue: dodaj do kolejki
6
+ AddAllToQueue: dodaj wszystko do kolejki
6
7
  AreYouSure: Na pewno?
7
8
  AreYouSureDeleteJob: Czy na pewno usunąć to zadanie?
8
9
  AreYouSureDeleteQueue: Czy na pewno usunąć kolejkę %{queue}?
@@ -2,6 +2,7 @@
2
2
  LanguageName: Português (Brasil)
3
3
  Actions: Ações
4
4
  AddToQueue: Adicionar à fila
5
+ AddAllToQueue: Adicionar tudo à fila
5
6
  AreYouSure: Tem certeza?
6
7
  AreYouSureDeleteJob: Deseja deletar esta tarefa?
7
8
  AreYouSureDeleteQueue: Deseja deletar a fila %{queue}? Isso irá deletar todas as tarefas desta fila.
data/web/locales/pt.yml CHANGED
@@ -3,6 +3,7 @@ pt:
3
3
  LanguageName: Português
4
4
  Actions: Acções
5
5
  AddToQueue: Adicionar à fila
6
+ AddAllToQueue: Adicionar tudo à fila
6
7
  AreYouSure: Tem a certeza?
7
8
  AreYouSureDeleteJob: Tem a certeza que deseja eliminar esta tarefa?
8
9
  AreYouSureDeleteQueue: Tem a certeza que deseja eliminar a fila %{queue}?
data/web/locales/ru.yml CHANGED
@@ -3,6 +3,7 @@ ru:
3
3
  LanguageName: Русский
4
4
  Actions: Действия
5
5
  AddToQueue: Добавить в очередь
6
+ AddAllToQueue: Добавить все в очередь
6
7
  AreYouSure: Вы уверены?
7
8
  AreYouSureDeleteJob: Вы уверены, что хотите удалить эту задачу?
8
9
  AreYouSureDeleteQueue: Вы уверены, что хотите удалить очередь %{queue}?
data/web/locales/sv.yml CHANGED
@@ -3,6 +3,7 @@ sv:
3
3
  LanguageName: Svenska
4
4
  Actions: Åtgärder
5
5
  AddToQueue: Lägg till i kö
6
+ AddAllToQueue: Lägg till allt i kö
6
7
  AreYouSure: Är du säker?
7
8
  AreYouSureDeleteJob: Är du säker på att du vill ta bort detta jobb?
8
9
  AreYouSureDeleteQueue: Är du säker på att du vill ta bort kön %{queue}?
data/web/locales/ta.yml CHANGED
@@ -3,6 +3,7 @@ ta:
3
3
  LanguageName: தமிழ்
4
4
  Actions: செயல்கள்
5
5
  AddToQueue: வரிசையில் சேர்
6
+ AddAllToQueue: அனைத்தையும் வரிசையில் சேர்
6
7
  AreYouSure: நீங்கள் உறுதியாக இருக்கிறீர்களா?
7
8
  AreYouSureDeleteJob: நீ இந்த வேலையை நீக்க வேண்டும் என்று உறுதியாக இருக்கிறீர்களா?
8
9
  AreYouSureDeleteQueue: நீங்கள் %{queue} வரிசையில் நீக்க வேண்டும் என்பதில் உறுதியாக இருக்கிறீர்களா?
data/web/locales/tr.yml CHANGED
@@ -3,6 +3,7 @@ tr:
3
3
  LanguageName: Türkçe
4
4
  Actions: Eylemler
5
5
  AddToQueue: Kuyruğa ekle
6
+ AddAllToQueue: Hepsini kuyruğa ekle
6
7
  AreYouSure: Emin misiniz?
7
8
  AreYouSureDeleteJob: Bu işi silmek istediğinizden emin misiniz?
8
9
  AreYouSureDeleteQueue: "%{queue} kuyruğunu silmek istediğinizden emin misiniz?"
data/web/locales/uk.yml CHANGED
@@ -3,6 +3,7 @@ uk:
3
3
  LanguageName: Українська
4
4
  Actions: Дії
5
5
  AddToQueue: Додати до черги
6
+ AddAllToQueue: Додати все до черги
6
7
  AreYouSure: Ви впевнені?
7
8
  AreYouSureDeleteJob: Ви впевнені у тому, що хочете видалити задачу?
8
9
  AreYouSureDeleteQueue: Ви впевнені у тому, що хочете видалити чергу %{queue}?
data/web/locales/ur.yml CHANGED
@@ -3,6 +3,7 @@ ur:
3
3
  LanguageName: اردو
4
4
  Actions: ﻋﻮاﻣﻞ
5
5
  AddToQueue: ﻗﻄﺎﺭ ميں شامل کريں
6
+ AddAllToQueue: سب کو ﻗﻄﺎﺭ ميں شامل کريں
6
7
  AreYouSure: کيا یقین ؟
7
8
  AreYouSureDeleteJob: کيا آپ یقین جاب حتم کرنا چاھتے ہيں ؟
8
9
  AreYouSureDeleteQueue: کيا آپ یقین قطار حتم کرنا چاھتے ہيں ؟
data/web/locales/vi.yml CHANGED
@@ -3,6 +3,7 @@ vi:
3
3
  LanguageName: Tiếng Việt
4
4
  Actions: Những hành động
5
5
  AddToQueue: Thêm vào hàng đợi
6
+ AddAllToQueue: Thêm tất cả vào hàng đợi
6
7
  AreYouSure: Bạn chắc chứ?
7
8
  AreYouSureDeleteJob: Bạn có chắc là muốn xóa tác vụ này?
8
9
  AreYouSureDeleteQueue: Bạn có chắc là muốn xóa %{queue} này?
@@ -3,6 +3,7 @@ zh-CN: # <---- change this to your locale code
3
3
  LanguageName: 中文
4
4
  Actions: 操作
5
5
  AddToQueue: 添加至队列
6
+ AddAllToQueue: 添加所有至队列
6
7
  AreYouSure: 你确定?
7
8
  AreYouSureDeleteJob: 你确定要删除这个任务么?
8
9
  AreYouSureDeleteQueue: 你确定要删除 %{queue} 队列吗?这将删除当前队列中的所有任务,当新的任务添加到该队列时,它会重新出现。
@@ -27,6 +27,7 @@ zh-TW: # <---- change this to your locale code
27
27
  CurrentMessagesInQueue: 目前在<span class='title'>%{queue}</span>的工作
28
28
  Delete: 刪除
29
29
  AddToQueue: 增加至佇列
30
+ AddAllToQueue: 增加所有至佇列
30
31
  AreYouSureDeleteJob: 確定要刪除這個工作嗎?
31
32
  AreYouSureDeleteQueue: 確定要刪除%{queue}佇列?這會刪除佇列裡的所有工作,佇列將會在有新工作時重新出現。
32
33
  Queues: 佇列
@@ -11,7 +11,7 @@
11
11
  <p id="serverUtcTime"><%= server_utc_time %></p>
12
12
  </li>
13
13
  <li>
14
- <p><a rel=help href="https://github.com/sidekiq/sidekiq/wiki">docs</a></p>
14
+ <p><a rel="help" href="https://github.com/sidekiq/sidekiq/wiki">docs</a></p>
15
15
  </li>
16
16
  <li>
17
17
  <form id="locale-form" action="<%= root_path %>change_locale" method="post">
@@ -1,7 +1,7 @@
1
1
  <div class="filter">
2
2
  <form id="metrics-form" class="form-inline" action="<%= path %>" method="get">
3
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") %>">
4
+ <input id="class-filter" class="form-control" type="text" name="substr" placeholder="<%= t('Name') %>" value="<%= h url_params("substr") %>" autocomplete="off">
5
5
  <select id="period-selector" class="form-control" name="period">
6
6
  <% periods.each_key do |code| %>
7
7
  <% if code == period %>
@@ -24,4 +24,3 @@
24
24
  </ul>
25
25
  </div>
26
26
  <% end %>
27
-
@@ -0,0 +1,4 @@
1
+ <% if pollable? %>
2
+ <a href="#" class="btn live-poll live-poll-start btn-primary"><%= t('LivePoll') %></a>
3
+ <a href="#" class="btn live-poll live-poll-stop btn-danger"><%= t('StopPolling') %></a>
4
+ <% end %>
@@ -33,8 +33,8 @@
33
33
  <form method="POST" class="filter warning-messages">
34
34
  <%= csrf_tag %>
35
35
  <div class="btn-group pull-right flip">
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') %>"/>
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') %>">
38
38
  </div>
39
39
  </form>
40
40
  </header>
@@ -69,11 +69,7 @@
69
69
  <% end %>
70
70
  <br>
71
71
  <b><%= "#{t('Queues')}: " %></b>
72
- <% if process.weights %>
73
- <%= busy_weights(process.weights) %>
74
- <% else %>
75
- <%= process.queues.sort.join(", ") %>
76
- <% end %>
72
+ <%= process.queues.sort.join(", ") %>
77
73
  <% if process.version != Sidekiq::VERSION %>
78
74
  <br>
79
75
  <b><%= "#{t('Version')}: " %></b>
@@ -92,7 +88,7 @@
92
88
  <% unless process.embedded? %>
93
89
  <form method="POST">
94
90
  <%= csrf_tag %>
95
- <input type="hidden" name="identity" value="<%= process['identity'] %>"/>
91
+ <input type="hidden" name="identity" value="<%= process['identity'] %>">
96
92
 
97
93
  <div class="btn-group">
98
94
  <% unless process.stopping? %><button class="btn btn-warn" type="submit" name="quiet" value="1"><%= t('Quiet') %></button><% end %>
@@ -9,13 +9,13 @@
9
9
  <div class="filter interval-slider">
10
10
  <span class="interval-slider-label"><%= t('PollingInterval') %>:</span>
11
11
  <span id="sldr-text" class="current-interval">5 s</span>
12
- <br/>
13
- <input id="sldr" aria-label="<%= t("PollingIntervalMilliseconds") %>" role="slider" type="range" min="2000" max="20000" step="1000" value="5000"/>
12
+ <br>
13
+ <input id="sldr" aria-label="<%= t("PollingIntervalMilliseconds") %>" role="slider" type="range" min="2000" max="20000" step="1000" value="5000" autocomplete="off">
14
14
  </div>
15
15
  </header>
16
16
 
17
17
  <div class="chart">
18
- <span id="sr-last-dashboard-update-template" hidden="hidden"><%= t("LastDashboardUpdateTemplateLiteral") %></span>
18
+ <span id="sr-last-dashboard-update-template" hidden><%= t("LastDashboardUpdateTemplateLiteral") %></span>
19
19
  <span id="sr-last-dashboard-update" class="sr-only" role="status"></span>
20
20
 
21
21
  <canvas id="realtime-chart">
@@ -32,7 +32,7 @@
32
32
  <form action="<%= root_path %>morgue/<%= job_params(@dead, @dead.score) %>" method="post">
33
33
  <%= csrf_tag %>
34
34
  <a class="btn btn-default" href="<%= root_path %>morgue"><%= t('GoBack') %></a>
35
- <input class="btn btn-primary" type="submit" name="retry" value="<%= t('RetryNow') %>" />
36
- <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>" />
35
+ <input class="btn btn-primary" type="submit" name="retry" value="<%= t('RetryNow') %>">
36
+ <input class="btn btn-danger" type="submit" name="delete" value="<%= t('Delete') %>">
37
37
  </form>
38
- </section>
38
+ </section>
@@ -0,0 +1,6 @@
1
+ <div class="filter">
2
+ <form role="search" method="get" class="form-inline" action="<%= root_path %><%= which %>">
3
+ <label for="substr"><%= t(label_key) %></label>
4
+ <input class="form-control" type="search" name="substr" value="<%= h url_params("substr") %>" placeholder="<%= t(placeholder_key) %>" autocomplete="off">
5
+ </form>
6
+ </div>
@@ -2,14 +2,14 @@
2
2
  <html dir="<%= text_direction %>" lang="<%= locale %>">
3
3
  <head>
4
4
  <title><%= environment_title_prefix %><%= Sidekiq::NAME %></title>
5
- <meta charset="utf-8"/>
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0"/>
7
- <meta name="color-scheme" content="light dark"/>
8
- <link href="<%= root_path %>stylesheets/style.css" media="screen" rel="stylesheet" type="text/css" nonce="<%= csp_nonce %>"/>
9
- <link rel="apple-touch-icon" href="<%= root_path %>images/apple-touch-icon.png"/>
10
- <link rel="shortcut icon" type="image/ico" href="<%= root_path %>images/favicon.ico"/>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
7
+ <meta name="color-scheme" content="light dark">
8
+ <link href="<%= root_path %>stylesheets/style.css" media="screen" rel="stylesheet" type="text/css" nonce="<%= csp_nonce %>">
9
+ <link rel="apple-touch-icon" href="<%= root_path %>images/apple-touch-icon.png">
10
+ <link rel="shortcut icon" type="image/ico" href="<%= root_path %>images/favicon.ico">
11
11
  <script type="text/javascript" src="<%= root_path %>javascripts/application.js" nonce="<%= csp_nonce %>"></script>
12
- <meta name="google" content="notranslate"/>
12
+ <meta name="google" content="notranslate">
13
13
  <%= display_custom_head %>
14
14
  </head>
15
15
  <body class="admin" data-locale="<%= locale %>">
@@ -58,8 +58,9 @@
58
58
  id="<%= id %>"
59
59
  class="metrics-swatch"
60
60
  value="<%= kls %>"
61
- <%= visible_kls.include?(kls) ? 'checked' : '' %>
62
- />
61
+ <% if visible_kls.include?(kls) %>
62
+ checked
63
+ <% end %>>
63
64
  <code><a href="<%= root_path %>metrics/<%= kls %>?period=<%= @period %>"><%= kls %></a></code>
64
65
  </div>
65
66
  </td>
@@ -70,15 +71,15 @@
70
71
  </tr>
71
72
  <% end %>
72
73
  <% else %>
73
- <tr><td colspan=5><%= t("NoDataFound") %></td></tr>
74
+ <tr><td colspan="5"><%= t("NoDataFound") %></td></tr>
74
75
  <% end %>
75
76
  </tbody>
76
77
  </table>
77
78
  </div>
78
79
 
79
- <% if job_results.any? %>
80
- <p><small>Data from <%= @query_result.starts_at %> to <%= @query_result.ends_at %>.<% if @period == "1h" %> Auto-refreshing every 60 seconds.<% end %></small></p>
81
- <% end %>
82
-
80
+ <% if job_results.any? %>
81
+ <p><small>Data from <%= @query_result.starts_at %> to <%= @query_result.ends_at %>.<% if @period == "1h" %> Auto-refreshing every 60 seconds.<% end %></small></p>
82
+ <% end %>
83
83
  </section>
84
- <%= script_tag "javascripts/metrics.js" %>
84
+
85
+ <%= script_tag "javascripts/metrics.js" %>
@@ -16,7 +16,7 @@
16
16
  <tr>
17
17
  <th>
18
18
  <label>
19
- <input type="checkbox" class="check_all" />
19
+ <input type="checkbox" class="check_all check-all-items">
20
20
  </label>
21
21
  </th>
22
22
  <th><%= t('LastRetry') %></th>
@@ -30,7 +30,7 @@
30
30
  <tr>
31
31
  <td>
32
32
  <label>
33
- <input type='checkbox' name='key[]' value='<%= job_params(entry.item, entry.score) %>' class='shift_clickable' />
33
+ <input type="checkbox" name="key[]" value="<%= job_params(entry.item, entry.score) %>" class="shift_clickable select-item-checkbox">
34
34
  </label>
35
35
  </td>
36
36
  <td>
@@ -55,8 +55,12 @@
55
55
  <% end %>
56
56
  </table>
57
57
  </div>
58
- <input class="btn btn-primary pull-left flip" type="submit" name="retry" value="<%= t('RetryNow') %>" />
59
- <input class="btn btn-danger pull-left flip" type="submit" name="delete" value="<%= t('Delete') %>" />
58
+ <div class="buttons-row">
59
+ <input class="btn btn-primary pull-left flip" type="submit" name="retry" value="<%= t('RetryNow') %>">
60
+ <input class="btn btn-danger pull-left flip" type="submit" name="delete" value="<%= t('Delete') %>">
61
+ <button class="btn btn-primary bulk-action-buttons bulk-lead-button" type="submit" name="action" value="retry_all" formaction="<%= "#{root_path}morgue/all/retry" %>"><%= t('RetryAll') %></button>
62
+ <button class="btn btn-danger bulk-action-buttons" type="submit" name="action" value="delete_all" formaction="<%= "#{root_path}morgue/all/delete" %>" data-confirm="<%= t('AreYouSure') %>"><%= t('DeleteAll') %></button>
63
+ </div>
60
64
  </form>
61
65
 
62
66
  <% else %>