require 'optparse' require 'colorize' require_relative 'monitor' module RCS module Monitor module CLI extend self def run(argv) @opts = {}; argv.delete("--cli") argv << '--help' if argv.empty? OptionParser.new do |opts| opts.on('-v', '--verbose', 'verbose') { @opts[:verbose] = true } opts.on('-d', '--doctor', 'Check for configuration errors') { @opts[:doctor] = true } opts.on('-s', '--show-cfg', 'Show current smtp configuration') { @opts[:show_cfg] = true } end.parse(argv) return show_cfg if @opts[:show_cfg] return doctor if @opts[:doctor] end def verbose? @opts[:verbose] end def trace(level, message) if (level == :debug and verbose?) or level != :debug puts "#{Time.now} [#{level.to_s.upcase}]: #{message}" end end def smtp_parameters %w[CN SMTP SMTP_FROM SMTP_USER SMTP_PASS SMTP_AUTH SHORT_EMAIL] end def show_cfg Application.new.setup puts "Current configuration for smtp:" smtp_parameters.each do |name| value = RCS::DB::Config.instance.global[name] value = "#"*10 if value and name =~ /pass/i puts "#{name}: #{value}" end end def doctor_error(message) fixmsg = "Fix this issue".colorize(:red) trace :error, "#{fixmsg}: #{message}" end def doctor Application.new.setup mailer = Mailer.new unless mailer.alert_group return doctor_error "unable to find an alerting group" end if mailer.alert_users.empty? return doctor_error "it must be at least one user in the ALERT group has a valid email" end trace :debug, "Sending test email to the following addresses: #{mailer.alert_users.join(', ')}" if mailer.alert("RCS Test email", "This is a test email. Do not reply.") trace :info, "A test email was sent to #{mailer.alert_users.join(', ')}. Please verify that you received it correctly." else doctor_error "there was an error while sending the test email" end trace :debug, "Diagnosis completed" end end end end .