class Heroku::Helpers::LogDisplayer

Constants

COLORS
COLOR_CODES

Attributes

app[R]
force_colors[R]
heroku[R]
opts[R]

Public Class Methods

new(heroku, app, opts, force_colors = false) click to toggle source
# File lib/heroku/helpers/log_displayer.rb, line 10
def initialize(heroku, app, opts, force_colors = false)
  @heroku, @app, @opts, @force_colors = heroku, app, opts, force_colors
end

Public Instance Methods

colorize(chunk) click to toggle source
# File lib/heroku/helpers/log_displayer.rb, line 37
def colorize(chunk)
  lines = []
  chunk.split("\n").map do |line|
    if parsed_line = parse_log(line)
      header, identifier, body = parsed_line
      @assigned_colors[identifier] ||= COLORS[@assigned_colors.size % COLORS.size]
      lines << [
        "\e[#{COLOR_CODES[@assigned_colors[identifier]]}m",
        header,
        "\e[0m",
        body,
      ].join("")
    elsif not line.empty?
      lines << line
    end
  end
  lines.join("\n")
end
display_logs() click to toggle source
# File lib/heroku/helpers/log_displayer.rb, line 14
def display_logs
  @assigned_colors = {}
  @line_start = true
  @token = nil

  heroku.read_logs(app, opts) do |chunk|
    display(display_colors? ? colorize(chunk) : chunk) unless chunk.empty?
  end
rescue Errno::EPIPE
rescue Interrupt => interrupt
  display("\e[0m") if display_colors?
  raise(interrupt)
end
parse_log(log) click to toggle source
# File lib/heroku/helpers/log_displayer.rb, line 56
def parse_log(log)
  return unless parsed = log.match(/^(.*?\[([\w-]+)([\d\.]+)?\]:)(.*)?$/)
  [1, 2, 4].map { |i| parsed[i] }
end

Private Instance Methods

display_colors?() click to toggle source
# File lib/heroku/helpers/log_displayer.rb, line 63
def display_colors?
  force_colors || (STDOUT.isatty && ENV.has_key?("TERM"))
end