Class: Kettle::Family::WorkflowProgress
- Inherits:
-
Object
- Object
- Kettle::Family::WorkflowProgress
- Defined in:
- lib/kettle/family/workflow_progress.rb
Constant Summary collapse
- MEMBER_WIDTH =
24- FORMAT =
"%<member>-#{MEMBER_WIDTH}.#{MEMBER_WIDTH}s :events :status"- EVENT_WIDTH =
30- MIN_STATUS_WIDTH =
12- DEFAULT_TERMINAL_WIDTH =
80- ELLIPSIS =
"..."
Instance Method Summary collapse
- #advance(member, status:, success: true, mark: nil) ⇒ Object
- #finish_member(member, success:, status:) ⇒ Object
-
#initialize(io:, label:, total:, jobs:, members: [], enabled: true) ⇒ WorkflowProgress
constructor
A new instance of WorkflowProgress.
- #start ⇒ Object
- #start_member(member, total:, status:) ⇒ Object
- #stop ⇒ Object
- #summary(message) ⇒ Object
- #tty? ⇒ Boolean
- #update(member, status:, mark: nil) ⇒ Object
Constructor Details
#initialize(io:, label:, total:, jobs:, members: [], enabled: true) ⇒ WorkflowProgress
Returns a new instance of WorkflowProgress.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/kettle/family/workflow_progress.rb', line 16 def initialize(io:, label:, total:, jobs:, members: [], enabled: true) @io = io @label = label @total = total.to_i @jobs = jobs.to_i @enabled = enabled && !!io @bars = {} @line_order = members.map(&:name) @started = false @stopped = false @member_totals = {} @member_events = Hash.new("") @member_statuses = Hash.new("") @mutex = Mutex.new @tty = @enabled && io.respond_to?(:tty?) && io.tty? @multibar = @tty ? TTY::ProgressBar::Multi.new(output: io, frequency: 0) : nil end |
Instance Method Details
#advance(member, status:, success: true, mark: nil) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/kettle/family/workflow_progress.rb', line 59 def advance(member, status:, success: true, mark: nil) return unless @enabled synchronize do event_mark = mark || (success ? "." : "F") if @tty append_event(member, event_mark) render(member, status: status) else write_line("[#{member.name}] #{event_mark} #{status}") end end end |
#finish_member(member, success:, status:) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/kettle/family/workflow_progress.rb', line 87 def finish_member(member, success:, status:) return unless @enabled synchronize do if @tty render(member, status: status) else write_line("[#{member.name}] #{success ? "done" : "failed"} #{status}") end end end |
#start ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/kettle/family/workflow_progress.rb', line 34 def start return unless @enabled synchronize do next if @started write_line("#{@label} #{@total} member#{plural(@total)} with #{@jobs} job#{plural(@jobs)}:") @started = true @line_order.each { |member_name| render_name(member_name, status: "") } if @tty end end |
#start_member(member, total:, status:) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/kettle/family/workflow_progress.rb', line 46 def start_member(member, total:, status:) return unless @enabled synchronize do @member_totals[member.name] = total.to_i if @tty render(member, status: status) else write_line("[#{member.name}] > #{status}") end end end |
#stop ⇒ Object
99 100 101 102 103 104 105 106 107 108 |
# File 'lib/kettle/family/workflow_progress.rb', line 99 def stop return unless @enabled synchronize do next if @stopped @multibar&.stop @stopped = true end end |
#summary(message) ⇒ Object
114 115 116 117 118 119 120 121 |
# File 'lib/kettle/family/workflow_progress.rb', line 114 def summary() return unless @enabled synchronize do @io.puts unless @tty write_line() end end |
#tty? ⇒ Boolean
110 111 112 |
# File 'lib/kettle/family/workflow_progress.rb', line 110 def tty? @tty end |
#update(member, status:, mark: nil) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/kettle/family/workflow_progress.rb', line 73 def update(member, status:, mark: nil) return unless @enabled return if status.to_s.empty? synchronize do if @tty append_event(member, mark) if mark render(member, status: status) else write_line("[#{member.name}] #{mark || ">"} #{status}") end end end |