sundry/mrsh/lib/mrsh_settings.rb

135 lines
4.8 KiB
Ruby

require 'net/http'
require 'json'
require 'csv'
hwdb_online_url = "http://localhost/mrsh/online.json"
class Settings
attr_reader :max_threads, :timeout, :ping, :ansi, :repeat, :command, :output_path
def initialize
@max_threads = 10
@timeout = 10
@ping = determinePing
@ansi = true
@repeat = false
@hwdb_online = JSON.parse(Net::HTTP.get(URI(hwdb_online_url)))['status']
help = nil
short_help = true
time = Time.now
revision = File.ctime(__FILE__).strftime('%Y%m%d.%H%M%S')
@audit_file = findAuditFile
@organization = DCS
opts = GetoptLong.new(
[ "--block-filter", "-B", GetoptLong::REQUIRED_ARGUMENT ],
[ "--command", "-c", GetoptLong::REQUIRED_ARGUMENT ],
[ "--help", "-e", GetoptLong::NO_ARGUMENT ],
[ "--audit_file", "-f", GetoptLong::REQUIRED_ARGUMENT ],
[ "--force", GetoptLong::NO_ARGUMENT ],
[ "--function-filter", "-F", GetoptLong::REQUIRED_ARGUMENT ],
[ "--organization", "-g", GetoptLong::REQUIRED_ARGUMENT ],
[ "--host-filter", "-h", GetoptLong::REQUIRED_ARGUMENT ],
[ "--loop", "-l", GetoptLong::NO_ARGUMENT ],
[ "--machines", "-m", GetoptLong::REQUIRED_ARGUMENT ],
[ "--os-filter", "-o", GetoptLong::REQUIRED_ARGUMENT ],
[ "--output-path", "-O", GetoptLong::OPTIONAL_ARGUMENT ],
[ "--ping-only", "-p", GetoptLong::NO_ARGUMENT ],
[ "--room-filter", "-R", GetoptLong::REQUIRED_ARGUMENT ],
[ "--scripted", "-s", GetoptLong::NO_ARGUMENT ],
[ "--max-threads", "-t", GetoptLong::REQUIRED_ARGUMENT ],
[ "--timeout", "-T", GetoptLong::REQUIRED_ARGUMENT ],
[ "--exclude-quiet", "-x", GetoptLong::NO_ARGUMENT ],
[ "--command-file", "-z", GetoptLong::REQUIRED_ARGUMENT ]
)
opts.each do |opt,arg|
case opt
when '--command'
@command = arg
short_help = false
when '--command-file'
@command_file = arg
short_help = false
when '--machines'
@machine_list = arg.split(/,/)
when '--host-filter'
@host_filter = arg
when '--os-filter'
@os_filter = arg
when '--organization'
@organization = arg
when '--block-filter'
@block_filter = arg
when '--function-filter'
@function_filter = arg
when '--room-filer'
@room_filter = arg
when '--audit-file'
@force_audit_fie = File.expand_path(arg)
when '--max-threads'
@max_threads = arg.to_i
when '--timeout'
@timeout = arg.to_i
when '--loop'
@repeat = true
when '--force'
@data.force = true
when '--ping-only'
@command = nil
short_help = false
when '--scripted'
@ansi = false
when '--exclude-quiet'
@data.exclude_quiet = true
when '--output-path'
if arg.empty? then
@output_path = "/tmp/mrsh.%s.%d" % [ time.strftime("%Y%m%d"), Process.pid ]
else
@output_path = File.expand_path(arg)
end
when '--help'
help = true
short_help = false
else
puts "Invalid argument #{opt}, shutting down"
display_shorthelp
exit
end
end
if @command.nil? and @command_file then
File.open(@command_file, "r") do |input|
while line = input.gets
line = line.chomp
line = line.gsub(/\s*#.*$/,'')
line = line.gsub(/\$/, '\$')
line = line.gsub(/\`/) {|s| "\\#{s}"}
next if line.empty?
line = line.gsub(/"/,'\"')
if @command.nil? then
@command = line
else
@command = @command + ';' + line
end
end
end
end
if help
display_longhelp
exit
elsif short_help
display_shorthelp
exit
end
puts "mrsh (r#{revision}) run started at #{time}"
if @output_path then
puts "- Sending all output to files under: #{@output_path}/"
end
end
end