Class: Kettle::Family::WorkflowProgress

Inherits:
Object
  • Object
show all
Defined in:
lib/kettle/family/workflow_progress.rb

Constant Summary collapse

FORMAT =
"%<member>-24s :events :status"
EVENT_WIDTH =
30

Instance Method Summary collapse

Constructor Details

#initialize(io:, label:, total:, jobs:, enabled: true) ⇒ WorkflowProgress

Returns a new instance of WorkflowProgress.



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/kettle/family/workflow_progress.rb', line 11

def initialize(io:, label:, total:, jobs:, enabled: true)
  @io = io
  @label = label
  @total = total.to_i
  @jobs = jobs.to_i
  @enabled = enabled && !!io
  @bars = {}
  @member_totals = {}
  @member_events = Hash.new("")
  @mutex = Mutex.new
  @tty = @enabled && io.respond_to?(:tty?) && io.tty?
  @multibar = @tty ? TTY::ProgressBar::Multi.new(output: io) : nil
end

Instance Method Details

#advance(member, status:, success: true, mark: nil) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/kettle/family/workflow_progress.rb', line 44

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



72
73
74
75
76
77
78
79
80
81
82
# File 'lib/kettle/family/workflow_progress.rb', line 72

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

#startObject



25
26
27
28
29
# File 'lib/kettle/family/workflow_progress.rb', line 25

def start
  return unless @enabled

  write_line("#{@label} #{@total} member#{plural(@total)} with #{@jobs} job#{plural(@jobs)}:")
end

#start_member(member, total:, status:) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/kettle/family/workflow_progress.rb', line 31

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

#stopObject



84
85
86
87
88
# File 'lib/kettle/family/workflow_progress.rb', line 84

def stop
  return unless @enabled

  synchronize { @multibar&.stop }
end

#summary(message) ⇒ Object



94
95
96
97
98
99
100
101
# File 'lib/kettle/family/workflow_progress.rb', line 94

def summary(message)
  return unless @enabled

  synchronize do
    @io.puts unless @tty
    write_line(message)
  end
end

#tty?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/kettle/family/workflow_progress.rb', line 90

def tty?
  @tty
end

#update(member, status:, mark: nil) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/kettle/family/workflow_progress.rb', line 58

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