Sha256: fe5f4f20b65f4b822f401906e7370a3695c4e4c3bae6bf3e5d574e450517a2c3

Contents?: true

Size: 1.84 KB

Versions: 4

Compression:

Stored size: 1.84 KB

Contents

require_relative '../helpers/application_helper'
module CapistranoMulticonfigParallel
  # class used to display the progress of each worker on terminal screen using a table
  class TerminalTable
    include Celluloid
    include Celluloid::Notifications
    include Celluloid::Logger
    include CapistranoMulticonfigParallel::ApplicationHelper
    def self.topic
      'sshkit_terminal'
    end

    def initialize(manager, job_manager)
      @manager = manager
      @job_manager = job_manager
      async.run
    rescue => ex
      rescue_exception(ex)
    end

    def run
      subscribe(CapistranoMulticonfigParallel::TerminalTable.topic, :notify_time_change)
    end

    def notify_time_change(_topic, _message)
      table = Terminal::Table.new(title: 'Deployment Status Table', headings: ['Job ID', 'Job UUID', 'App/Stage', 'Action', 'ENV Variables', 'Current Task'])
      jobs = @manager.alive? ? @manager.jobs.dup : []
      setup_table_jobs(table, jobs)
      display_table_on_terminal(table)
    end

    def rescue_exception(ex)
      log_to_file("Terminal Table client disconnected due to error #{ex.inspect}")
      log_error(ex, 'stderr')
      terminate
    end

    def display_table_on_terminal(table)
      terminal_clear
      puts "\n#{table}\n"
      signal_complete
    end

    def setup_table_jobs(table, jobs)
      jobs.each_with_index do |(_job_id, job), count|
        table.add_row(job.terminal_row(count))
        table.add_separator
      end
    end

    def show_confirmation(message, default)
      exclusive do
        ask_confirm(message, default)
      end
    end

    def signal_complete
      return if !@job_manager.alive? || @manager.alive?
      @job_manager.condition.signal('completed') if @manager.all_workers_finished?
    end

    def terminal_clear
      system('cls') || system('clear') || puts("\e[H\e[2J")
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
capistrano_multiconfig_parallel-0.23.2 lib/capistrano_multiconfig_parallel/celluloid/terminal_table.rb
capistrano_multiconfig_parallel-0.23.1 lib/capistrano_multiconfig_parallel/celluloid/terminal_table.rb
capistrano_multiconfig_parallel-0.23.0 lib/capistrano_multiconfig_parallel/celluloid/terminal_table.rb
capistrano_multiconfig_parallel-0.22.0 lib/capistrano_multiconfig_parallel/celluloid/terminal_table.rb