sidekiq 8.1.1 → 8.1.6

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/Changes.md +49 -2
  3. data/README.md +1 -1
  4. data/bin/kiq +17 -0
  5. data/lib/active_job/queue_adapters/sidekiq_adapter.rb +8 -8
  6. data/lib/sidekiq/api.rb +110 -35
  7. data/lib/sidekiq/capsule.rb +0 -1
  8. data/lib/sidekiq/cli.rb +2 -3
  9. data/lib/sidekiq/client.rb +8 -1
  10. data/lib/sidekiq/component.rb +3 -0
  11. data/lib/sidekiq/config.rb +4 -8
  12. data/lib/sidekiq/job.rb +14 -1
  13. data/lib/sidekiq/job_retry.rb +1 -1
  14. data/lib/sidekiq/launcher.rb +1 -1
  15. data/lib/sidekiq/manager.rb +2 -1
  16. data/lib/sidekiq/paginator.rb +8 -2
  17. data/lib/sidekiq/profiler.rb +1 -1
  18. data/lib/sidekiq/redis_client_adapter.rb +6 -2
  19. data/lib/sidekiq/scheduled.rb +2 -5
  20. data/lib/sidekiq/testing.rb +1 -0
  21. data/lib/sidekiq/tui/controls.rb +53 -0
  22. data/lib/sidekiq/tui/filtering.rb +53 -0
  23. data/lib/sidekiq/tui/tabs/base_tab.rb +204 -0
  24. data/lib/sidekiq/tui/tabs/busy.rb +118 -0
  25. data/lib/sidekiq/tui/tabs/dead.rb +19 -0
  26. data/lib/sidekiq/tui/tabs/home.rb +144 -0
  27. data/lib/sidekiq/tui/tabs/metrics.rb +131 -0
  28. data/lib/sidekiq/tui/tabs/queues.rb +95 -0
  29. data/lib/sidekiq/tui/tabs/retries.rb +19 -0
  30. data/lib/sidekiq/tui/tabs/scheduled.rb +19 -0
  31. data/lib/sidekiq/tui/tabs/set_tab.rb +96 -0
  32. data/lib/sidekiq/tui/tabs.rb +15 -0
  33. data/lib/sidekiq/tui.rb +276 -913
  34. data/lib/sidekiq/version.rb +1 -1
  35. data/lib/sidekiq/web/action.rb +2 -2
  36. data/lib/sidekiq/web/application.rb +14 -1
  37. data/lib/sidekiq/web/helpers.rb +34 -9
  38. data/lib/sidekiq/web/router.rb +2 -2
  39. data/lib/sidekiq.rb +1 -1
  40. data/sidekiq.gemspec +2 -2
  41. data/web/assets/stylesheets/style.css +2 -0
  42. data/web/locales/ar.yml +1 -1
  43. data/web/locales/fa.yml +1 -1
  44. data/web/locales/gd.yml +12 -2
  45. data/web/locales/he.yml +1 -1
  46. data/web/locales/pt-BR.yml +1 -1
  47. data/web/locales/ur.yml +1 -1
  48. data/web/locales/zh-TW.yml +1 -1
  49. data/web/views/_job_info.html.erb +8 -0
  50. data/web/views/_paging.html.erb +1 -1
  51. data/web/views/busy.html.erb +49 -40
  52. data/web/views/retries.html.erb +3 -0
  53. metadata +17 -4
  54. data/bin/tui +0 -5
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sidekiq
4
- VERSION = "8.1.1"
4
+ VERSION = "8.1.6"
5
5
  MAJOR = 8
6
6
 
7
7
  def self.gem_version
@@ -24,8 +24,8 @@ module Sidekiq
24
24
  @request ||= ::Rack::Request.new(env)
25
25
  end
26
26
 
27
- def halt(res)
28
- throw :halt, [res, {"content-type" => "text/plain"}, [res.to_s]]
27
+ def halt(res, msg = nil)
28
+ throw :halt, [res, {"content-type" => "text/plain"}, [msg || res.to_s]]
29
29
  end
30
30
 
31
31
  # external redirect
@@ -90,7 +90,18 @@ module Sidekiq
90
90
 
91
91
  get "/busy" do
92
92
  @count = (url_params("count") || 100).to_i
93
- (@current_page, @total_size, @workset) = page_items(workset, url_params("page"), @count)
93
+
94
+ # Use /busy?only=(jobs|processes) to limit page data
95
+ only = url_params("only")
96
+ halt 401, "Invalid value for only" unless only.nil? || only == "jobs" || only == "processes"
97
+
98
+ @show_jobs = (only != "processes")
99
+ @show_processes = (only != "jobs")
100
+
101
+ if @show_jobs
102
+ (@current_page, @total_size, @workset) = page_items(workset, url_params("page"), @count)
103
+ @iterable_states = Sidekiq::IterableJobQuery.new(workset.map { |_, _, work| work.job.jid })
104
+ end
94
105
 
95
106
  erb(:busy)
96
107
  end
@@ -226,6 +237,8 @@ module Sidekiq
226
237
  @retries = @retries.map { |msg, score| Sidekiq::SortedEntry.new(nil, score, msg) }
227
238
  end
228
239
 
240
+ @iterable_states = Sidekiq::IterableJobQuery.new(@retries.map(&:jid))
241
+
229
242
  erb(:retries)
230
243
  end
231
244
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "uri"
4
- require "yaml"
5
4
  require "cgi/escape"
6
5
 
7
6
  module Sidekiq
@@ -73,12 +72,37 @@ module Sidekiq
73
72
  # so extensions can be localized
74
73
  @@strings[lang] ||= config.locales.each_with_object({}) do |path, global|
75
74
  find_locale_files(lang).each do |file|
76
- strs = YAML.safe_load_file(file)
75
+ strs = parse_yaml(file)
77
76
  global.merge!(strs[lang])
78
77
  end
79
78
  end
80
79
  end
81
80
 
81
+ def parse_yaml(path)
82
+ locale = nil
83
+ map = {}
84
+ IO.readlines(path, chomp: true).each do |line|
85
+ case line
86
+ when /\A\s*\#.*/
87
+ # line comment
88
+ when !locale && /\A([a-zA-Z\-_]+):/
89
+ locale = $1
90
+ map[locale] = {}
91
+ when /\A\s+(\w+):\s+(.+)\z/
92
+ # A few values have double quotes to include special characters in YAML.
93
+ # Strip them off manually as our greedy match will include them.
94
+ key = $1
95
+ s = $2
96
+ s = s[1..] if s[0] == "\""
97
+ s = s[0..-2] if s[-1] == "\""
98
+ map[locale][key] = s
99
+ else
100
+ raise ArgumentError, "unable to parse #{path}: #{line}"
101
+ end
102
+ end
103
+ map
104
+ end
105
+
82
106
  def to_json(x)
83
107
  Sidekiq.dump_json(x)
84
108
  end
@@ -126,17 +150,18 @@ module Sidekiq
126
150
  erb(:filtering, locals: {which:, placeholder_key:, label_key:})
127
151
  end
128
152
 
129
- def filter_link(jid, within = "retries")
153
+ def filter_link(str, within = "retries")
154
+ hstr = h(str)
130
155
  if within.nil?
131
- ::Rack::Utils.escape_html(jid)
156
+ hstr
132
157
  else
133
- "<a href='#{root_path}#{within}?substr=#{jid}'>#{::Rack::Utils.escape_html(jid)}</a>"
158
+ "<a href='#{root_path}#{within}?substr=#{hstr}'>#{hstr}</a>"
134
159
  end
135
160
  end
136
161
 
137
162
  def display_tags(job, within = "retries")
138
163
  job.tags.map { |tag|
139
- "<span class='label label-info jobtag jobtag-#{Rack::Utils.escape_html(tag)}'>#{filter_link(tag, within)}</span>"
164
+ "<span class='label label-info jobtag jobtag-#{h(tag)}'>#{filter_link(tag, within)}</span>"
140
165
  }.join(" ")
141
166
  end
142
167
 
@@ -294,7 +319,7 @@ module Sidekiq
294
319
  else
295
320
  # DEPRECATED Backwards compatibility with older processes.
296
321
  # 'capsules' element added in v8.0.9
297
- process.queues.join(", ")
322
+ pro.queues.join(", ")
298
323
  end
299
324
  end
300
325
 
@@ -307,7 +332,7 @@ module Sidekiq
307
332
  [score.to_f, jid]
308
333
  end
309
334
 
310
- SAFE_QPARAMS = %w[page direction]
335
+ SAFE_QPARAMS = %w[page direction only]
311
336
 
312
337
  # Merge options with current params, filter safe params, and stringify to query string
313
338
  def qparams(options)
@@ -390,7 +415,7 @@ module Sidekiq
390
415
  end
391
416
 
392
417
  def h(text)
393
- ::Rack::Utils.escape_html(text.to_s)
418
+ ::CGI.escapeHTML(text.to_s)
394
419
  rescue ArgumentError => e
395
420
  raise unless e.message.eql?("invalid byte sequence in UTF-8")
396
421
  text.encode!("UTF-16", "UTF-8", invalid: :replace, replace: "").encode!("UTF-8", "UTF-16")
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rack"
3
+ require "uri"
4
4
 
5
5
  module Sidekiq
6
6
  class Web
@@ -28,7 +28,7 @@ module Sidekiq
28
28
 
29
29
  def match(env)
30
30
  request_method = env["REQUEST_METHOD"].downcase.to_sym
31
- path_info = ::Rack::Utils.unescape_path env["PATH_INFO"]
31
+ path_info = ::URI::RFC2396_PARSER.unescape env["PATH_INFO"]
32
32
 
33
33
  # There are servers which send an empty string when requesting the root.
34
34
  # These servers should be ashamed of themselves.
data/lib/sidekiq.rb CHANGED
@@ -48,7 +48,7 @@ module Sidekiq
48
48
  end
49
49
 
50
50
  def self.testing!(mode = :fake, &block)
51
- raise "Unknown testing mode: #{mode}" unless %i[fake disabled inline].include?(mode)
51
+ raise "Unknown testing mode: #{mode}" unless %i[fake disable inline].include?(mode)
52
52
 
53
53
  require "sidekiq/test_api"
54
54
  Sidekiq::Testing.__set_test_mode(mode, &block)
data/sidekiq.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
8
8
  gem.homepage = "https://sidekiq.org"
9
9
  gem.license = "LGPL-3.0"
10
10
 
11
- gem.executables = ["sidekiq", "sidekiqmon"]
11
+ gem.executables = ["sidekiq", "sidekiqmon", "kiq"]
12
12
  gem.files = %w[sidekiq.gemspec README.md Changes.md LICENSE.txt] + `git ls-files | grep -E '^(bin|lib|web)'`.split("\n")
13
13
  gem.name = "sidekiq"
14
14
  gem.version = Sidekiq::VERSION
@@ -23,7 +23,7 @@ Gem::Specification.new do |gem|
23
23
  "rubygems_mfa_required" => "true"
24
24
  }
25
25
 
26
- gem.add_dependency "redis-client", ">= 0.26.0"
26
+ gem.add_dependency "redis-client", ">= 0.29.0"
27
27
  gem.add_dependency "connection_pool", ">= 3.0.0"
28
28
  gem.add_dependency "rack", ">= 3.2.0"
29
29
  gem.add_dependency "json", ">= 2.16.0"
@@ -534,6 +534,8 @@ input[type="checkbox"] { accent-color: var(--color-primary); }
534
534
 
535
535
  .pagination a { text-decoration: none; }
536
536
 
537
+ .pagination .active a { color: var(--color-primary); font-weight: 700; }
538
+
537
539
  .pagination .disabled { opacity: 0.3; }
538
540
 
539
541
  div:has(.pagination.pull-right) { margin-left: auto; }
data/web/locales/ar.yml CHANGED
@@ -74,7 +74,7 @@ ar:
74
74
  Stop: إيقاف
75
75
  StopAll: إيقاف الكل
76
76
  StopPolling: إيقاف الاستعلامات
77
- TextDirection: 'rtl'
77
+ TextDirection: rtl
78
78
  Thread: نيسب
79
79
  Threads: نياسب
80
80
  ThreeMonths: ثلاثة أشهر
data/web/locales/fa.yml CHANGED
@@ -69,7 +69,7 @@ fa:
69
69
  Stop: توقف
70
70
  StopAll: توقف همه
71
71
  StopPolling: Stop Polling
72
- TextDirection: 'rtl'
72
+ TextDirection: rtl
73
73
  Thread: رشته
74
74
  Threads: رشته ها
75
75
  ThreeMonths: ۳ ماه
data/web/locales/gd.yml CHANGED
@@ -1,6 +1,6 @@
1
- # elements like %{queue} are variables and should not be translated
1
+ # elements like %{queue} are variables and should not be translated
2
2
  gd:
3
- LanguageName: Gaeilge
3
+ LanguageName: Gàidhlig
4
4
  Actions: Gnìomhan
5
5
  AddToQueue: Cuir ris a’ chiutha
6
6
  AddAllToQueue: Cuir a h-uile ris a’ chiutha
@@ -36,6 +36,8 @@ gd:
36
36
  Jobs: Obraichean
37
37
  Kill: Marbh
38
38
  KillAll: Marbh na h-uile
39
+ Language: Cànan
40
+ LastDashboardUpdateTemplateLiteral: "An t-ath-nuadhachadh mu dheireadh: Air pròiseasadh: PROCESSED_COUNT. Air fàilligeadh: FAILED_COUNT."
39
41
  LastRetry: An oidhirp mu dheireadh
40
42
  Latency: Foillidheachd
41
43
  LivePoll: Ath-nuadhachadh beò
@@ -55,6 +57,7 @@ gd:
55
57
  PeakMemoryUsage: Bàrr cleachdadh a’ chuimhne
56
58
  Plugins: Plugain
57
59
  PollingInterval: Eadaramh an ath-nuadhachaidh
60
+ PollingIntervalMilliseconds: Milidiogan eadaramh an ath-nuadhachaidh
58
61
  Process: Pròiseas
59
62
  Processed: Air pròiseasadh
60
63
  Processes: Pròiseasan
@@ -98,3 +101,10 @@ gd:
98
101
  AvgExecutionTime: Ùine cuibheasach nan gnìomhan
99
102
  Context: Co-theacsa
100
103
  NoJobMetricsFound: Cha deach meatraigeachd o chionn goirid air obair a lorg
104
+ Filter: Criathraich
105
+ AnyJobContent: Susbaint obrach sam bith
106
+ Profiles: Pròifilean
107
+ Data: Dàta
108
+ View: Seall
109
+ Token: Tòcan
110
+ ElapsedTime: An ùine a chaidh seachad
data/web/locales/he.yml CHANGED
@@ -69,7 +69,7 @@ he:
69
69
  Stop: עצור
70
70
  StopAll: עצור הכל
71
71
  StopPolling: עצור תשאול
72
- TextDirection: 'rtl'
72
+ TextDirection: rtl
73
73
  Thread: חוט
74
74
  Threads: חוטים
75
75
  ThreeMonths: 3 חדשים
@@ -1,4 +1,4 @@
1
- "pt-BR":
1
+ pt-BR:
2
2
  LanguageName: Português (Brasil)
3
3
  Actions: Ações
4
4
  AddToQueue: Adicionar à fila
data/web/locales/ur.yml CHANGED
@@ -69,7 +69,7 @@ ur:
69
69
  Stop: بند کرو
70
70
  StopAll: ﺗﻤﺎﻡ ﺑﻨﺪ کﺭﻭ
71
71
  StopPolling: ﺑﺮاﮦ ﺭاﺳﺖ روکيے
72
- TextDirection: 'rtl'
72
+ TextDirection: rtl
73
73
  Thread: موضوع
74
74
  Threads: موضوع
75
75
  ThreeMonths: تین ماہ
@@ -1,6 +1,6 @@
1
1
  # elements like %{queue} are variables and should not be translated
2
2
  zh-TW: # <---- change this to your locale code
3
- LanguageName: 臺灣話
3
+ LanguageName: 繁體中文
4
4
  Dashboard: 資訊主頁
5
5
  Status: 狀態
6
6
  Time: 時間
@@ -34,6 +34,14 @@
34
34
  <code><%= job.jid %></code>
35
35
  </td>
36
36
  </tr>
37
+ <% if (state = job.iterable_state) %>
38
+ <tr>
39
+ <th>Iteration</th>
40
+ <td>
41
+ <code>cursor=<%= h(state.cursor.inspect) %>; exec=<%= state.executions %>; rt=<%= number_with_delimiter(state.runtime, precision: 3) %>s</code>
42
+ </td>
43
+ </tr>
44
+ <% end %>
37
45
  <% if job.bid %>
38
46
  <tr>
39
47
  <th>BID</th>
@@ -10,7 +10,7 @@
10
10
  <a href="<%= url %>?<%= qparams(page: @current_page - 1) %>"><%= @current_page - 1 %></a>
11
11
  </li>
12
12
  <% end %>
13
- <li class="disabled">
13
+ <li class="active">
14
14
  <a href="<%= url %>?<%= qparams(page: @current_page) %>"><%= @current_page %></a>
15
15
  </li>
16
16
  <% if @total_size > @current_page * @count %>
@@ -27,6 +27,7 @@
27
27
  </div>
28
28
  </section>
29
29
 
30
+ <% if @show_processes %>
30
31
  <section>
31
32
  <header>
32
33
  <h2><%= t('Processes') %></h2>
@@ -102,45 +103,53 @@
102
103
  </table>
103
104
  </div>
104
105
  </section>
106
+ <% end %>
105
107
 
106
- <section>
107
- <header>
108
- <h2><%= t('Jobs') %></h2>
109
- <% if @workset.size > 0 && @total_size > @count %>
110
- <%= erb :_paging, locals: { url: "#{root_path}busy" } %>
111
- <% end %>
112
- </header>
113
-
114
- <div class="table_container">
115
- <table>
116
- <thead>
117
- <th><%= t('Process') %></th>
118
- <th><%= t('TID') %></th>
119
- <th><%= t('JID') %></th>
120
- <th><%= t('Queue') %></th>
121
- <th><%= t('Job') %></th>
122
- <th><%= t('Arguments') %></th>
123
- <th><%= t('Started') %></th>
124
- </thead>
125
- <% @workset.each do |process, thread, work| %>
126
- <% job = work.job %>
127
- <tr>
128
- <td><%= process %></td>
129
- <td><%= thread %></td>
130
- <td><%= job.jid %></td>
131
- <td>
132
- <a href="<%= root_path %>queues/<%= work.queue %>"><%= work.queue %></a>
133
- </td>
134
- <td>
135
- <%= job.display_class %>
136
- <%= display_tags(job, nil) %>
137
- </td>
138
- <td>
139
- <code><div class="args"><%= display_args(job.display_args) %></div></code>
140
- </td>
141
- <td><%= relative_time(work.run_at) %></td>
142
- </tr>
108
+ <% if @show_jobs %>
109
+ <section>
110
+ <header>
111
+ <h2><%= t('Jobs') %></h2>
112
+ <% if @workset.size > 0 && @total_size > @count %>
113
+ <%= erb :_paging, locals: { url: "#{root_path}busy" } %>
143
114
  <% end %>
144
- </table>
145
- </div>
146
- </section>
115
+ </header>
116
+
117
+ <div class="table_container">
118
+ <table>
119
+ <thead>
120
+ <th><%= t('Process') %></th>
121
+ <th><%= t('TID') %></th>
122
+ <th><%= t('JID') %></th>
123
+ <th><%= t('Queue') %></th>
124
+ <th><%= t('Job') %></th>
125
+ <th><%= t('Arguments') %></th>
126
+ <th><%= t('Started') %></th>
127
+ </thead>
128
+ <% @workset.each do |process, thread, work| %>
129
+ <% job = work.job %>
130
+ <tr>
131
+ <td><%= process %></td>
132
+ <td><%= thread %></td>
133
+ <td><%= job.jid %></td>
134
+ <td>
135
+ <a href="<%= root_path %>queues/<%= work.queue %>"><%= work.queue %></a>
136
+ </td>
137
+ <td>
138
+ <%= job.display_class %>
139
+ <%= display_tags(job, nil) %>
140
+ </td>
141
+ <td>
142
+ <code><div class="args"><%= display_args(job.display_args) %></div></code>
143
+ </td>
144
+ <td>
145
+ <%= relative_time(work.run_at) %>
146
+ <% if (state = @iterable_states[job.jid]) %>
147
+ <div><small>cursor=<%= h(truncate(state.cursor.inspect, 100)) %>; exec=<%= state.executions %>; rt=<%= number_with_delimiter(state.runtime, precision: 3) %>s</small></div>
148
+ <% end %>
149
+ </td>
150
+ </tr>
151
+ <% end %>
152
+ </table>
153
+ </div>
154
+ </section>
155
+ <% end %>
@@ -52,6 +52,9 @@
52
52
  </td>
53
53
  <td>
54
54
  <div><a href="<%= root_path %>retries/<%= job_params(entry.item, entry.score) %>"><%= h truncate("#{entry['error_class']}: #{entry['error_message']}", 200) %></a></div>
55
+ <% if (state = @iterable_states[entry.jid]) %>
56
+ <div><small>cursor=<%= h(truncate(state.cursor.inspect, 100)) %>; exec=<%= state.executions %>; rt=<%= number_with_delimiter(state.runtime, precision: 3) %>s</small></div>
57
+ <% end %>
55
58
  </td>
56
59
  </tr>
57
60
  <% end %>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.1.1
4
+ version: 8.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Perham
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 0.26.0
18
+ version: 0.29.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 0.26.0
25
+ version: 0.29.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: connection_pool
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -83,6 +83,7 @@ description: Simple, efficient background processing for Ruby.
83
83
  email:
84
84
  - info@contribsys.com
85
85
  executables:
86
+ - kiq
86
87
  - sidekiq
87
88
  - sidekiqmon
88
89
  extensions: []
@@ -91,12 +92,12 @@ files:
91
92
  - Changes.md
92
93
  - LICENSE.txt
93
94
  - README.md
95
+ - bin/kiq
94
96
  - bin/lint-herb
95
97
  - bin/multi_queue_bench
96
98
  - bin/sidekiq
97
99
  - bin/sidekiqload
98
100
  - bin/sidekiqmon
99
- - bin/tui
100
101
  - bin/webload
101
102
  - lib/active_job/queue_adapters/sidekiq_adapter.rb
102
103
  - lib/generators/sidekiq/job_generator.rb
@@ -150,6 +151,18 @@ files:
150
151
  - lib/sidekiq/testing/inline.rb
151
152
  - lib/sidekiq/transaction_aware_client.rb
152
153
  - lib/sidekiq/tui.rb
154
+ - lib/sidekiq/tui/controls.rb
155
+ - lib/sidekiq/tui/filtering.rb
156
+ - lib/sidekiq/tui/tabs.rb
157
+ - lib/sidekiq/tui/tabs/base_tab.rb
158
+ - lib/sidekiq/tui/tabs/busy.rb
159
+ - lib/sidekiq/tui/tabs/dead.rb
160
+ - lib/sidekiq/tui/tabs/home.rb
161
+ - lib/sidekiq/tui/tabs/metrics.rb
162
+ - lib/sidekiq/tui/tabs/queues.rb
163
+ - lib/sidekiq/tui/tabs/retries.rb
164
+ - lib/sidekiq/tui/tabs/scheduled.rb
165
+ - lib/sidekiq/tui/tabs/set_tab.rb
153
166
  - lib/sidekiq/version.rb
154
167
  - lib/sidekiq/web.rb
155
168
  - lib/sidekiq/web/action.rb
data/bin/tui DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require_relative "../lib/sidekiq/tui"
4
-
5
- Sidekiq::TUI.new.run