135 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			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
 |