Class: Legion::CLI::Doctor

Inherits:
Thor
  • Object
show all
Defined in:
lib/legion/cli/doctor/result.rb,
lib/legion/cli/doctor_command.rb,
lib/legion/cli/doctor/pid_check.rb,
lib/legion/cli/doctor/tls_check.rb,
lib/legion/cli/doctor/mode_check.rb,
lib/legion/cli/doctor/cache_check.rb,
lib/legion/cli/doctor/vault_check.rb,
lib/legion/cli/doctor/bundle_check.rb,
lib/legion/cli/doctor/config_check.rb,
lib/legion/cli/doctor/api_bind_check.rb,
lib/legion/cli/doctor/database_check.rb,
lib/legion/cli/doctor/rabbitmq_check.rb,
lib/legion/cli/doctor/extensions_check.rb,
lib/legion/cli/doctor/python_env_check.rb,
lib/legion/cli/doctor/permissions_check.rb,
lib/legion/cli/doctor/ruby_version_check.rb

Defined Under Namespace

Classes: ApiBindCheck, BundleCheck, CacheCheck, ConfigCheck, DatabaseCheck, ExtensionsCheck, ModeCheck, PermissionsCheck, PidCheck, PythonEnvCheck, RabbitmqCheck, Result, RubyVersionCheck, TlsCheck, VaultCheck

Constant Summary collapse

CHECKS =
%i[
  RubyVersionCheck
  BundleCheck
  ConfigCheck
  RabbitmqCheck
  DatabaseCheck
  CacheCheck
  VaultCheck
  ExtensionsCheck
  PidCheck
  PermissionsCheck
  TlsCheck
  ApiBindCheck
  ModeCheck
  PythonEnvCheck
].freeze
WEIGHTS =

Weights: security > connectivity > convenience

{
  'TLS'                 => 3.0,
  'Vault connection'    => 3.0,
  'Permissions'         => 2.5,
  'Ruby version'        => 2.0,
  'RabbitMQ connection' => 2.0,
  'Database connection' => 2.0,
  'Cache connection'    => 1.5,
  'Bundle'              => 1.5,
  'Config'              => 1.0,
  'Extensions'          => 1.0,
  'Python env'          => 1.0,
  'PID files'           => 0.5
}.freeze
GRADE_THRESHOLDS =
[
  [0.95, 'A'],
  [0.85, 'B'],
  [0.70, 'C'],
  [0.50, 'D']
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.exit_on_failure?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/legion/cli/doctor_command.rb', line 24

def self.exit_on_failure?
  true
end

Instance Method Details

#diagnoseObject



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/legion/cli/doctor_command.rb', line 73

def diagnose
  out = formatter
  begin
    Connection.ensure_settings(resolve_secrets: false)
  rescue StandardError => e
    Legion::Logging.debug("Doctor#diagnose settings load failed: #{e.message}") if defined?(Legion::Logging)
  end
  results = run_all_checks

  if options[:json]
    output_json(out, results)
  else
    output_text(out, results)
  end

  auto_fix(results) if options[:fix]

  exit(1) if results.any?(&:fail?)
ensure
  Connection.shutdown
end