Method: Fasten::UI::Curses#ui_tasks

Defined in:
lib/fasten/ui/curses.rb

#ui_tasksObject



251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
# File 'lib/fasten/ui/curses.rb', line 251

def ui_tasks
  workers.each do |worker|
    worker.spinner = (worker.spinner + 1) % SPINNER_LEN if worker.running?
  end

  cur = Time.new

  count_done = tasks.done.count
  count_total = tasks.count
  tl = count_total.to_s.length
  percentstr = count_total.positive? && " #{(count_done * 100 / count_total).to_i}%"
  elapsed_str = format ' %.2f s', (dif = cur - runner.ini) if runner.ini

  @stat_str ||= begin
    @runner_last_avg = runner.last_avg
    if runner.last_avg && runner.last_err
      format '≈ %.2f s ± %.2f', runner.last_avg, runner.last_err
    elsif runner.last_avg
      format '≈ %.2f s', runner.last_avg
    end
  end

  end_str = [elapsed_str, @stat_str].compact.join(' ')

  if @runner_last_avg
    a = dif
    b = @runner_last_avg
  else
    a = count_done
    b = count_total
  end

  col_ini = ui_text_aligned(2, :left, format("Tasks %#{tl}d/%d%s", count_done, count_total, percentstr)) + 1
  col_fin = n_cols - 1 - end_str.length
  ui_text_aligned(2, :right, end_str)

  ui_progressbar(2, col_ini, col_fin, a, b)

  max = 2
  list = tasks.sort_by.with_index { |x, index| [x.run_score, index] }
  list.each_with_index do |task, index|
    next if 3 + index >= n_rows

    x = ui_task_string(task, 3 + index, 2, icon: true)
    max = x if x > max
  end

  list.each_with_index do |task, index|
    next if 3 + index >= n_rows

    if task.depends && !task.depends.empty?
      x = max
      x = ui_task_string(task, 3 + index, x, str: ':') + 1
      task.depends.each do |dependant_task|
        x = ui_task_string(dependant_task, 3 + index, x) + 1
      end
    else
      x = max + 1
      last_avg = task.last_avg
      last_err = task.last_err
      if task.dif
        str = format '  %.2f s', task.dif
      elsif last_avg && last_err
        str = format '%s ≈ %.2f s ± %.2f %s', ui_task_clock(task, cur, last_avg), last_avg, last_err, task.worker&.name
      elsif last_avg
        str = format '%s ≈ %.2f s %s', ui_task_clock(task, cur, last_avg), last_avg, task.worker&.name
      else
        str = ui_task_clock(task, cur, 0)
      end
      ui_task_string(task, 3 + index, x, str: str) if str
    end
  end
end