Class: INatGet::App::Server::Console

Inherits:
INatGet::App::Server show all
Defined in:
lib/inat-get/app/core/console.rb

Constant Summary collapse

SEV_ICON =
{
  Logger::Severity::DEBUG => '📓',
  Logger::Severity::INFO  => '📢',
  Logger::Severity::WARN  => '🔔',
  Logger::Severity::ERROR => '🚨',
  Logger::Severity::FATAL => ''
}

Instance Attribute Summary

Attributes inherited from INatGet::App::Server

#config

Instance Method Summary collapse

Methods inherited from INatGet::App::Server

#after_loop, #before_loop, create, #on_error, #process_msg, #run, used?, wait_answer?

Constructor Details

#initialize(socket_path, **params) ⇒ Console

Returns a new instance of Console.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/inat-get/app/core/console.rb', line 13

def initialize socket_path, **params
  super(socket_path, **params)
  @table = IS::Term::StatusTable::instance
  @table.configure do
    column :icon, func: lambda { |row| row[:_active] ? "\e[1m[ ]" : "[✔]" }
    separator '  '
    column :_sender_pid, id: true, align: :right
    separator '  '
    column :name
    separator '  '
    column :status, align: :center
    separator '  '
    column :current, align: :right, summary: :current
    separator ' of '
    column :total, align: :left, summary: :total
    separator '  '
    column :percent, align: :right, func: :percent, format: '%d%%', summary: :percent
    separator '  '
    column :estimated, func: :estimated, align: :right, format: :duration, summary: :elapsed
    separator '  '
    column :speed, func: :speed, format: '%.2f r/s', align: :right, summary: :speed
    separator '  '
    column :message, summary: :value

    summary true, message: ''
  end
  if @config.dig(:logs, :file, :enable)
    filename = @config.dig(:logs, :file, :enable)
    @sys_logger = Logger::new filename, 'daily', 7, level: @config.dig(:logs, :file, :sys)
    @api_logger = Logger::new filename, 'daily', 7, level: @config.dig(:logs, :file, :api)
    @wrk_logger = Logger::new filename, 'daily', 7, level: @config.dig(:logs, :file, :wrk)
  end
  @log_levels = {
    sys: Logger::Severity::coerce(@config.dig(:logs, :screen, :sys)),
    api: Logger::Severity::coerce(@config.dig(:logs, :screen, :api)),
    wrk: Logger::Severity::coerce(@config.dig(:logs, :screen, :wrk))
  }
end

Instance Method Details

#console_log(severity, message, progname, prog_key, pid) ⇒ Object (private)



99
100
101
102
103
104
105
106
107
# File 'lib/inat-get/app/core/console.rb', line 99

def console_log severity, message, progname, prog_key, pid
  if severity >= @log_levels[prog_key]
    if prog_key == :wrk
      @table.update _sender_pid: pid, message: "#{ SEV_ICON[severity] } #{ message }"
    else
      @table.summary message: "#{ SEV_ICON[severity] } [#{ progname }] #{ message }"
    end
  end
end

#file_log(severity, message, progname, prog_key) ⇒ Object (private)



80
81
82
83
84
85
86
87
88
89
# File 'lib/inat-get/app/core/console.rb', line 80

def file_log severity, message, progname, prog_key
  case prog_key
  when :api
    @api_logger.log severity, message, progname
  when :wrk 
    @wrk_logger.log severity, message, progname
  else
    @sys_logger.log severity, message, progname
  end
end

#log(severity, message, progname, **opts) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/inat-get/app/core/console.rb', line 60

def log severity, message, progname, **opts
  key = prog_key progname
  pid = opts[:_sender_pid]
  console_log severity, message, progname, key, pid
  file_log severity, message, progname, key if @config.dig(:logs, :file, :enable)
  true
end

#prog_key(progname) ⇒ Object (private)



70
71
72
73
74
75
76
77
78
# File 'lib/inat-get/app/core/console.rb', line 70

def prog_key progname
  if progname.nil? || progname == ''
    :sys
  elsif progname == 'SYS' || progname == 'API'
    progname.downcase.to_sym
  else
    :wrk
  end
end

#register(**opts) ⇒ Object



52
53
54
# File 'lib/inat-get/app/core/console.rb', line 52

def register **opts
  @table.append(**opts)
end

#update(**opts) ⇒ Object



56
57
58
# File 'lib/inat-get/app/core/console.rb', line 56

def update **opts
  @table.update(**opts)
end