Class: Sidekiq::TUI::BaseTab
- Inherits:
-
Object
- Object
- Sidekiq::TUI::BaseTab
- Includes:
- Controls
- Defined in:
- lib/sidekiq/tui/tabs/base_tab.rb
Direct Known Subclasses
Tabs::Busy, Tabs::Dead, Tabs::Home, Tabs::Metrics, Tabs::Queues, Tabs::Retries, Tabs::Scheduled
Constant Summary
Constants included from Controls
Controls::GLOBAL, Controls::SHARED
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
- #each_selection(unselect: true) ⇒ Object
- #error ⇒ Object
- #error=(e) ⇒ Object
- #filtering? ⇒ Boolean
- #format_memory(rss_kb) ⇒ Object
-
#initialize(parent) ⇒ BaseTab
constructor
A new instance of BaseTab.
-
#navigate_row(direction) ⇒ Object
Navigate the row selection up or down in the current tab’s table.
- #next_page ⇒ Object
-
#number_with_delimiter(number, options = {}) ⇒ Object
TODO Implement I18n delimiter.
- #prev_page ⇒ Object
- #refresh_data_for_stats ⇒ Object
- #render_stats_section(tui, frame, area) ⇒ Object
- #render_table(tui, frame, area) ⇒ Object
- #reset_data ⇒ Object
- #selected?(entry) ⇒ Boolean
- #t ⇒ Object
- #toggle_select(which = :current) ⇒ Object
Methods included from Controls
Constructor Details
#initialize(parent) ⇒ BaseTab
Returns a new instance of BaseTab.
9 10 11 12 13 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 9 def initialize(parent) @parent = parent @name = self.class.name.split("::").last reset_data end |
Instance Attribute Details
#data ⇒ Object (readonly)
Returns the value of attribute data.
7 8 9 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 7 def data @data end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
6 7 8 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 6 def name @name end |
Instance Method Details
#each_selection(unselect: true) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 39 def each_selection(unselect: true, &) sel = @data[:selected] finished = [] if !sel.empty? sel.each do |id| yield id # When processing multiple items in bulk, we want to unselect # each row if its operation succeeds so our UI will not # re-process rows 1-3 if row 4 fails. finished << id end else ids = @data.dig(:table, :row_ids) return if !ids || ids.empty? yield ids[@data[:selected_row_index]] end ensure @data[:selected] = sel - finished if unselect end |
#error ⇒ Object
23 24 25 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 23 def error @data[:error] end |
#error=(e) ⇒ Object
27 28 29 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 27 def error=(e) @data[:error] = e end |
#filtering? ⇒ Boolean
35 36 37 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 35 def filtering? false end |
#format_memory(rss_kb) ⇒ Object
174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 174 def format_memory(rss_kb) return "0" if rss_kb.nil? || rss_kb == 0 if rss_kb < 100_000 "#{number_with_delimiter(rss_kb)} KB" elsif rss_kb < 10_000_000 "#{number_with_delimiter((rss_kb / 1024.0).to_i)} MB" else "#{number_with_delimiter(rss_kb / (1024.0 * 1024.0), precision: 1)} GB" end end |
#navigate_row(direction) ⇒ Object
Navigate the row selection up or down in the current tab’s table.
61 62 63 64 65 66 67 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 61 def navigate_row(direction) ids = @data.dig(:table, :row_ids) return if !ids || ids.empty? index_change = (direction == :down) ? 1 : -1 @data[:selected_row_index] = (@data[:selected_row_index] + index_change) % ids.count end |
#next_page ⇒ Object
77 78 79 80 81 82 83 84 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 77 def next_page np = @data.dig(:table, :next_page) return unless np opts = @data.dig(:table, :pager) return unless opts @data[:table][:pager] = Sidekiq::TUI::PageOptions.new(np, opts.size) end |
#number_with_delimiter(number, options = {}) ⇒ Object
TODO Implement I18n delimiter
169 170 171 172 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 169 def number_with_delimiter(number, = {}) precision = [:precision] || 0 number.round(precision) end |
#prev_page ⇒ Object
69 70 71 72 73 74 75 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 69 def prev_page opts = @data.dig(:table, :pager) return unless opts return if opts.page < 2 @data[:table][:pager] = Sidekiq::TUI::PageOptions.new(opts.page - 1, opts.size) end |
#refresh_data_for_stats ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 104 def refresh_data_for_stats stats = Sidekiq::Stats.new @data[:stats] = { processed: stats.processed, failed: stats.failed, busy: stats.workers_size, enqueued: stats.enqueued, retries: stats.retry_size, scheduled: stats.scheduled_size, dead: stats.dead_size } end |
#render_stats_section(tui, frame, area) ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 141 def render_stats_section(tui, frame, area) stats = @data[:stats] keys = ["Processed", "Failed", "Busy", "Enqueued", "Retries", "Scheduled", "Dead"] values = [ stats[:processed], stats[:failed], stats[:busy], stats[:enqueued], stats[:retries], stats[:scheduled], stats[:dead] ] # Format keys and values with spacing keys_line = keys.map { |k| t(k).to_s.ljust(12) }.join(" ") values_line = values.map { |v| v.to_s.ljust(12) }.join(" ") frame.( tui.paragraph( text: [keys_line, values_line], block: tui.block(title: "Statistics", borders: [:all]) ), area ) end |
#render_table(tui, frame, area) ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 117 def render_table(tui, frame, area) page = @data.dig(:table, :current_page) || 1 rows = @data.dig(:table, :rows) || [] total = @data.dig(:table, :total) || 0 = ["", "Page: #{page}", "Count: #{rows.size}", "Total: #{total}"] << "Selected: #{@data[:selected].size}" unless @data[:selected].empty? defaults = { title: "TableName", footer: } if features.include?(:selectable) defaults.merge!({ highlight_symbol: "➡️", selected_row: @data[:selected_row_index], row_highlight_style: tui.style(fg: :white, bg: :blue) }) end hash = defaults.merge(yield) hash[:block] ||= tui.block(title: hash.delete(:title), borders: :all) table = tui.table(**hash) frame.(table, area) end |
#reset_data ⇒ Object
19 20 21 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 19 def reset_data @data = {selected: [], selected_row_index: 0} end |
#selected?(entry) ⇒ Boolean
31 32 33 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 31 def selected?(entry) @data[:selected].index(entry.id) end |
#t ⇒ Object
15 16 17 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 15 def t(*) @parent.t(*) end |
#toggle_select(which = :current) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/sidekiq/tui/tabs/base_tab.rb', line 86 def toggle_select(which = :current) sel = @data[:selected] # log(which, sel) if which == :current x = @data[:table][:row_ids][@data[:selected_row_index]] if sel.index(x) # already checked, uncheck it sel.delete(x) else sel << x end elsif sel.empty? @data[:selected] = @data[:table][:row_ids] else sel.clear end end |