def _port_scan_icmp(self, port): """Scan the (ICMP) port structure (dict) and update the status key.""" ret = None # Create the ping command # Use the system ping command because it already have the steacky bit set # Python can not create ICMP packet with non root right if WINDOWS: timeout_opt = '-w' count_opt = '-n' elif MACOS or BSD: timeout_opt = '-t' count_opt = '-c' else: # Linux and co... timeout_opt = '-W' count_opt = '-c' # Build the command line # Note: Only string are allowed cmd = [ 'ping', count_opt, '1', timeout_opt, str(self._resolv_name(port['timeout'])), self._resolv_name(port['host']) ] fnull = open(os.devnull, 'w') try: counter = Counter() ret = subprocess.check_call(cmd, stdout=fnull, stderr=fnull, close_fds=True) if ret == 0: port['status'] = counter.get() else: port['status'] = False except subprocess.CalledProcessError as e: # Correct issue #1084: No Offline status for timeouted ports port['status'] = False except Exception as e: logger.debug("{}: Error while pinging host {} ({})".format( self.plugin_name, port['host'], e)) return ret
def _port_scan_icmp(self, port): """Scan the (ICMP) port structure (dict) and update the status key""" ret = None # Create the ping command # Use the system ping command because it already have the steacky bit set # Python can not create ICMP packet with non root right cmd = ['ping', '-n' if WINDOWS else '-c', '1', self._resolv_name(port['host'])] fnull = open(os.devnull, 'w') try: counter = Counter() ret = subprocess.check_call(cmd, stdout=fnull, stderr=fnull, close_fds=True) if ret == 0: port['status'] = counter.get() else: port['status'] = False except Exception as e: logger.debug("{}: Error while pinging host {} ({})".format(self.plugin_name, port['host'], e)) return ret
def update(self, stats, duration=3): """Display issue """ self.print_version() for plugin in sorted(stats._plugins): if stats._plugins[plugin].is_disable(): # If current plugin is disable # then continue to next plugin result = colors.ORANGE + '[N/A]'.rjust(19 - len(plugin)) message = colors.NO self.print_issue(plugin, result, message) continue # Start the counter counter = Counter() counter.reset() stat = None stat_error = None try: # Update the stats stats._plugins[plugin].update() # Get the stats stat = stats.get_plugin(plugin).get_export() except Exception as e: stat_error = e if stat_error is None: result = (colors.GREEN + '[OK] ' + colors.BLUE + ' {:.4f}s '.format(counter.get())).rjust(40 - len(plugin)) message = colors.NO + str(stat)[0:TERMINAL_WIDTH - 40] else: result = (colors.RED + '[ERROR]' + colors.BLUE + ' {:.4f}s '.format(counter.get())).rjust(40 - len(plugin)) message = colors.NO + str(stat_error)[0:TERMINAL_WIDTH - 40] self.print_issue(plugin, result, message) # Return True to exit directly (no refresh) return True
def __init__(self, config=None, args=None): self.config = config self.args = args # Quiet mode self._quiet = args.quiet self.refresh_time = args.time # Init stats start_duration = Counter() start_duration.reset() self.stats = GlancesStats(config=config, args=args) logger.debug("Plugins initialisation duration: {} seconds".format( start_duration.get())) # Modules (plugins and exporters) are loaded at this point # Glances can display the list if asked... if args.modules_list: self.display_modules_list() sys.exit(0) # If process extended stats is disabled by user if not args.enable_process_extended: logger.debug("Extended stats for top process are disabled") glances_processes.disable_extended() else: logger.debug("Extended stats for top process are enabled") glances_processes.enable_extended() # Manage optionnal process filter if args.process_filter is not None: glances_processes.process_filter = args.process_filter if (not WINDOWS) and args.no_kernel_threads: # Ignore kernel threads in process list glances_processes.disable_kernel_threads() # Initial system informations update start_duration.reset() self.stats.update() logger.debug("First stats update duration: {} seconds".format( start_duration.get())) if self.quiet: logger.info("Quiet mode is ON, nothing will be displayed") # In quiet mode, nothing is displayed glances_processes.max_processes = 0 elif args.stdout: logger.info( "Stdout mode is ON, following stats will be displayed: {}". format(args.stdout)) # Init screen self.screen = GlancesStdout(config=config, args=args) elif args.stdout_csv: logger.info( "Stdout CSV mode is ON, following stats will be displayed: {}". format(args.stdout)) # Init screen self.screen = GlancesStdoutCsv(config=config, args=args) else: # Default number of processes to displayed is set to 50 glances_processes.max_processes = 50 # Init screen self.screen = GlancesCursesStandalone(config=config, args=args) # Check the latest Glances version self.outdated = Outdated(config=config, args=args)