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

#clear(progname, **opts) ⇒ Object



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

def clear progname, **opts
  key = prog_key progname
  pid = opts[:_sender_pid]
  if key == :wrk
    @table.update _sender_pid: pid, message: ''
  else
    @table.summary message: ''
  end
end

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



109
110
111
112
113
114
115
116
117
# File 'lib/inat-get/app/core/console.rb', line 109

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)



90
91
92
93
94
95
96
97
98
99
# File 'lib/inat-get/app/core/console.rb', line 90

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)



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

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