def parse_prtdiag_serverblade1(self): """Parse prtdiag output of a Sun Blade server (type 1). Not sure what other types are yet. """ prtdiag = "/usr/platform/SUNW,Serverblade1/sbin/prtdiag" try: os.stat(prtdiag) except: log.log( "<solaris>PRTDIAG.parse_prtdiag_serverblade1(): %s not found, directive cancelled" % (prtdiag), 4) return None cmd = "%s -v" % (prtdiag) (retval, output) = utils.safe_getstatusoutput(cmd) prtdiag_dict = {} prtdiag_dict['die_temp'] = None prtdiag_dict['die_status'] = None prtdiag_dict['ambient_temp'] = None prtdiag_dict['ambient_status'] = None prtdiag_dict['cpu_fan'] = None for line in output.split('\n'): if line.startswith('Blade/CPU0 Die'): prtdiag_dict['die_temp'] = int(line.split()[2][:-1]) prtdiag_dict['die_status'] = line.split()[-1] if line.startswith('Blade/CPU0 Ambient'): prtdiag_dict['ambient_temp'] = int(line.split()[2][:-1]) prtdiag_dict['ambient_status'] = line.split()[-1] if line.startswith('Blade/cpu-fan'): prtdiag_dict['cpu_fan'] = line.split()[-1] return prtdiag_dict
def _getsysctl(self): """Get system statistics from the output of the 'sysctl -a' command. """ sysctl_cmd = "/sbin/sysctl -a" (retval, output) = utils.safe_getstatusoutput( sysctl_cmd ) if retval != 0: log.log( "<system>system._getsysctl(): error calling '%s'"%(sysctl_cmd), 5 ) return None fulldict = {} for line in string.split( output, '\n' ): splitline = string.split( line, ':', 2 ) if len( splitline ) == 2: fulldict[splitline[0]] = splitline[1] sysctl_dict = {} # CPU counters try: cp_time = fulldict['kern.cp_time'].split() sysctl_dict['ctr_cpu_user'] = long( cp_time[0] ) sysctl_dict['ctr_cpu_nice'] = long( cp_time[1] ) sysctl_dict['ctr_cpu_system'] = long( cp_time[2] ) sysctl_dict['ctr_cpu_interrupt'] = long( cp_time[3] ) sysctl_dict['ctr_cpu_idle'] = long( cp_time[4] ) except KeyError, msg: # This version of FreeBSD does not support kern.cp_time (old versions do not) pass
def getData(self): prtdiag = None # Determine system type and parse system-specific output cmd = "/usr/bin/uname -i" (retval, output) = utils.safe_getstatusoutput(cmd) if output == "SUNW,Ultra-4": prtdiag_dict = self.parse_prtdiag_u450() elif output == "SUNW,Ultra-250": prtdiag_dict = self.parse_prtdiag_u250() elif output == "SUNW,Sun-Fire-280R": prtdiag_dict = self.parse_prtdiag_u280r() elif output == "SUNW,Ultra-Enterprise": prtdiag_dict = self.parse_prtdiag_Enterprise() elif output == "SUNW,Serverblade1": prtdiag_dict = self.parse_prtdiag_serverblade1() else: log.log( "<solaris>PRTDIAG.getData(): system type %s not supported yet, directive cancelled" % (output), 4) raise directive.DirectiveError, "system type %s not supported yet, directive cancelled" % ( output) if prtdiag_dict == None: # there was an error, just exit log.log( "<solaris>PRTDIAG.getData(): prtdiag returned no data, directive cancelled", 4) raise directive.DirectiveError, "prtdiag returned no data, directive cancelled" data = prtdiag_dict return data
def parse_prtdiag_u280r(self): """Parse prtdiag for a U280R.""" prtdiag = "/usr/platform/sun4u/sbin/prtdiag" try: os.stat(prtdiag) except: log.log( "<solaris>PRTDIAG.parse_prtdiag_u280r(): %s not found, directive cancelled" % (prtdiag), 4) return None cmd = "%s -v" % (prtdiag) (retval, output) = utils.safe_getstatusoutput(cmd) # Initialise prtdiag dictionary of values prtdiag_dict = {} prtdiag_dict['temp_cpu0'] = None prtdiag_dict['temp_cpu1'] = None prtdiag_dict['failure'] = "" inx = re.search("cpu([0-9])\s+([0-9])\s*-+\s*([0-9]+)\s+([0-9]+)", output) if inx: # CPU temps prtdiag_dict['temp_cpu%s' % (inx.group(1))] = int(inx.group(3)) prtdiag_dict['temp_cpu%s' % (inx.group(2))] = int(inx.group(4)) inx = re.findall("\n(.*?)\s+\[(\w+_FAULT)\]", output) for device, fault in inx: if fault == 'NO_FAULT': continue prtdiag_dict['failure'] += "%s: %s " % (device, fault) return prtdiag_dict
def _getuptime(self): """Get system statistics from the output of the 'uptime' command. """ uptime_cmd = "/usr/bin/uptime" (retval, output) = utils.safe_getstatusoutput( uptime_cmd ) if retval != 0: log.log( "<system>system._getuptime(): error calling '%s'"%(uptime_cmd), 5 ) return None uptime_dict = {} uptime_re = ".+up (?P<uptime>.+), (?P<users>[0-9]+) users?, load averages: (?P<loadavg1>[0-9.]+) (?P<loadavg5>[0-9.]+) (?P<loadavg15>[0-9.]+)" inx = re.compile( uptime_re ) sre = inx.search( output ) if sre: uptime_dict = sre.groupdict() else: log.log( "<system>system._getuptime(): could not parse uptime output '%s'"%(output), 5 ) return None # convert types uptime_dict['uptime'] = uptime_dict['uptime'] uptime_dict['users'] = int(uptime_dict['users']) uptime_dict['loadavg1'] = float(uptime_dict['loadavg1']) uptime_dict['loadavg5'] = float(uptime_dict['loadavg5']) uptime_dict['loadavg15'] = float(uptime_dict['loadavg15']) return uptime_dict
def parse_prtdiag_Enterprise(self): """Parse prtdiag for an Enterprise class Sun server (E3500, E6500, etc).""" prtdiag = "/usr/platform/sun4u/sbin/prtdiag" try: os.stat(prtdiag) except: log.log( "<solaris>PRTDIAG.parse_prtdiag_Enterprise(): %s not found, directive cancelled" % (prtdiag), 4) return None cmd = "%s -v" % (prtdiag) (retval, output) = utils.safe_getstatusoutput(cmd) # Initialise prtdiag dictionary of values prtdiag_dict = {} prtdiag_dict['temp_brd0'] = None prtdiag_dict['temp_brd1'] = None prtdiag_dict['temp_brd2'] = None prtdiag_dict['temp_brd3'] = None prtdiag_dict['temp_brd4'] = None prtdiag_dict['temp_brd5'] = None prtdiag_dict['temp_brd6'] = None prtdiag_dict['temp_brd7'] = None prtdiag_dict['temp_brd8'] = None prtdiag_dict['temp_brd9'] = None prtdiag_dict['temp_brd10'] = None prtdiag_dict['temp_brd11'] = None prtdiag_dict['temp_brd12'] = None prtdiag_dict['temp_brd13'] = None prtdiag_dict['temp_brd14'] = None prtdiag_dict['temp_brd15'] = None prtdiag_dict['temp_clk'] = None outlist = output.split('\n') for i in range(0, len(outlist)): if outlist[i][:19] == "System Temperatures": i = i + 4 while 1: if len(outlist[i]) <= 1: break # finish temp parsing l = outlist[i].split() if l[0] == "CLK": prtdiag_dict['temp_clk'] = int(l[2]) else: prtdiag_dict['temp_brd%s' % l[0]] = int(l[2]) i = i + 1 break return prtdiag_dict
def _getvmstat2(self): """Get system statistics from the output of the 'vmstat' command. This should work for Solaris 2.5.1/2.6/2.7/2.8.""" vmstat_cmd = "/usr/bin/vmstat 1 2 | /usr/bin/tail -1" (retval, output) = utils.safe_getstatusoutput(vmstat_cmd) if retval != 0: log.log( "<system>system._getvmstat2(): error calling '%s'" % (vmstat_cmd), 5) return None v_split = string.split(output) if len(v_split) != 22: log.log( "<system>system._getvmstat2(): vmstat output invalid, '%s'" % (output), 5) return None vmstat_dict = {} try: vmstat_dict['procs_running'] = int(v_split[0]) vmstat_dict['procs_blocked'] = int(v_split[1]) vmstat_dict['procs_waiting'] = int(v_split[2]) vmstat_dict['mem_swapfree'] = int(v_split[3]) * 1024 # bytes vmstat_dict['mem_free'] = int(v_split[4]) * 1024 # bytes vmstat_dict['page_reclaims'] = int(v_split[5]) vmstat_dict['minor_faults'] = int(v_split[6]) vmstat_dict['kb_paged_in'] = int(v_split[7]) vmstat_dict['kb_paged_out'] = int(v_split[8]) vmstat_dict['kb_freed'] = int(v_split[9]) vmstat_dict['kb_deficit'] = int(v_split[10]) vmstat_dict['scan_rate'] = int(v_split[11]) #vmstat_dict['disk1'] = int(v_split[12]) # disk stats not used #vmstat_dict['disk2'] = int(v_split[13]) #vmstat_dict['disk3'] = int(v_split[14]) #vmstat_dict['disk4'] = int(v_split[15]) vmstat_dict['device_interrupts'] = int(v_split[16]) vmstat_dict['system_calls'] = int(v_split[17]) vmstat_dict['cpu_context_switches'] = int(v_split[18]) vmstat_dict['cpu_user'] = float(v_split[19]) vmstat_dict['cpu_system'] = float(v_split[20]) vmstat_dict['cpu_idle'] = float(v_split[21]) except ValueError: log.log( "<system>system._getvmstat2(): could not parse vmstat output '%s'" % (output), 5) return None return vmstat_dict
def parse_prtdiag_u250(self): """Parse prtdiag for a U250.""" prtdiag = "/usr/platform/sun4u/sbin/prtdiag" try: os.stat(prtdiag) except: log.log( "<solaris>PRTDIAG.parse_prtdiag_u250(): %s not found, directive cancelled" % (prtdiag), 4) return None cmd = "%s -v" % (prtdiag) (retval, output) = utils.safe_getstatusoutput(cmd) # Initialise prtdiag dictionary of values prtdiag_dict = {} prtdiag_dict['temp_cpu0'] = None prtdiag_dict['temp_cpu1'] = None prtdiag_dict['temp_mb0'] = None prtdiag_dict['temp_mb1'] = None prtdiag_dict['temp_pdb'] = None prtdiag_dict['temp_scsi'] = None for l in output.split('\n'): inx = re.search("CPU([0-9])\s+([0-9]+)", l) if inx: # CPU temps prtdiag_dict['temp_cpu%s' % (inx.group(1))] = int(inx.group(2)) continue inx = re.search("MB([0-9])\s+([0-9]+)", l) if inx: # Motherboard (?) temps prtdiag_dict['temp_mb%s' % (inx.group(1))] = int(inx.group(2)) continue inx = re.search("PDB\s+([0-9]+)", l) if inx: # PDB ?? temps prtdiag_dict['temp_pdb'] = int(inx.group(1)) continue inx = re.search("SCSI\s+([0-9]+)", l) if inx: # SCSI ?? temps prtdiag_dict['temp_scsi'] = int(inx.group(1)) continue return prtdiag_dict
def _getuptime(self): """Get system statistics from the output of the 'uptime' command. This should work for Solaris 2.5.1/2.6/2.7/2.8.""" uptime_cmd = "/usr/bin/uptime" (retval, output) = utils.safe_getstatusoutput(uptime_cmd) if retval != 0: log.log( "<system>system._getuptime(): error calling '%s'" % (uptime_cmd), 5) return None uptime_dict = {} # uptime_re matches standard /usr/bin/uptime output such as: # 2:06pm up 490 day(s), 10:46, 4 users, load average: 0.62, 0.59, 0.71 uptime_re = ".+up (?P<uptime>.+),\s*(?P<users>[0-9]+) users?,\s+ load average:\s+(?P<loadavg1>[0-9.]+),\s*(?P<loadavg5>[0-9.]+),\s*(?P<loadavg15>[0-9.]+)" inx = re.compile(uptime_re) sre = inx.search(output) if sre: uptime_dict = sre.groupdict() else: # chris 20040923: Sometimes the "day(s)" section is missing (usually if # wtmpx rotated more often than the system boot, thus losing the last # 'reboot' entry) # so try a second regexp for output such as: # 2:05pm 5 users, load average: 1.78, 5.57, 5.39 uptime2_re = ".+[0-9:apm]+\s*(?P<users>[0-9]+) users?,\s+ load average:\s+(?P<loadavg1>[0-9.]+),\s*(?P<loadavg5>[0-9.]+),\s*(?P<loadavg15>[0-9.]+)" inx = re.compile(uptime2_re) sre = inx.search(output) if sre: uptime_dict = sre.groupdict() else: log.log( "<system>system._getuptime(): could not parse uptime output '%s'" % (output), 5) return None # convert types uptime_dict['users'] = int(uptime_dict['users']) uptime_dict['loadavg1'] = float(uptime_dict['loadavg1']) uptime_dict['loadavg5'] = float(uptime_dict['loadavg5']) uptime_dict['loadavg15'] = float(uptime_dict['loadavg15']) return uptime_dict
def parse_prtdiag_u450(self): """Parse prtdiag for a U450.""" prtdiag = "/usr/platform/sun4u/sbin/prtdiag" try: os.stat(prtdiag) except: log.log( "<solaris>PRTDIAG.parse_prtdiag_u450(): %s not found, directive cancelled" % (prtdiag), 4) return None cmd = "%s -v" % (prtdiag) (retval, output) = utils.safe_getstatusoutput(cmd) # Initialise prtdiag dictionary of values prtdiag_dict = {} prtdiag_dict['temp_ambient'] = None prtdiag_dict['temp_cpu0'] = None prtdiag_dict['temp_cpu1'] = None prtdiag_dict['temp_cpu2'] = None prtdiag_dict['temp_cpu3'] = None prtdiag_dict['temp_supply0'] = None prtdiag_dict['temp_supply1'] = None prtdiag_dict['temp_supply2'] = None for l in output.split('\n'): inx = re.search("^AMBIENT\s+([0-9]+)", l) if inx: # AMBIENT temp prtdiag_dict['temp_ambient'] = int(inx.group(1)) continue inx = re.search("^CPU\s+([0-9])\s+([0-9]+)", l) if inx: # CPU temps prtdiag_dict['temp_cpu%s' % (inx.group(1))] = int(inx.group(2)) continue inx = re.search("([0-9])\s+[0-9]+ W\s+([0-9]+)\s+\w+", l) if inx: # Power Supply temps prtdiag_dict['temp_supply%s' % (inx.group(1))] = int( inx.group(2)) continue return prtdiag_dict
def _getvmstat2(self): """Get instantaneous system statistics from the output of the 'vmstat' command. """ vmstat_cmd = "/usr/bin/vmstat -n 0 1 2" (retval, output) = utils.safe_getstatusoutput( vmstat_cmd ) if retval != 0: log.log( "<system>system._getvmstat2(): error calling '%s'"%(vmstat_cmd), 5 ) return None output = string.strip( output ) output_lastline = string.split( output, '\n' )[-1] v_split = string.split( output_lastline ) if len(v_split) != 19: log.log( "<system>system._getvmstat2(): vmstat output invalid, '%s'"%(output_lastline), 5 ) return None vmstat_dict = {} try: vmstat_dict['procs_running'] = int(v_split[0]) vmstat_dict['procs_blocked'] = int(v_split[1]) vmstat_dict['procs_waiting'] = int(v_split[2]) vmstat_dict['active_virtual_pages'] = int(v_split[3]) vmstat_dict['mem_free_list'] = int(v_split[4]) vmstat_dict['page_faults'] = int(v_split[5]) vmstat_dict['page_reclaims'] = int(v_split[6]) vmstat_dict['pages_paged_in'] = int(v_split[7]) vmstat_dict['pages_paged_out'] = int(v_split[8]) vmstat_dict['pages_freed'] = int(v_split[9]) vmstat_dict['scan_rate'] = int(v_split[10]) vmstat_dict['device_interrupts'] = int(v_split[11]) vmstat_dict['system_calls'] = int(v_split[12]) vmstat_dict['cpu_context_switches'] = int(v_split[13]) vmstat_dict['cpu_user'] = float(v_split[14]) vmstat_dict['cpu_system'] = float(v_split[15]) vmstat_dict['cpu_idle'] = float(v_split[16]) except ValueError: log.log( "<system>system._getvmstat2(): could not parse vmstat output '%s'"%(output), 5 ) return None return vmstat_dict
def getData(self): """Called by Directive docheck() method to fetch the data required for evaluating the directive rule. """ data = {} # where to find the metastat command metastat_list = ["/usr/opt/SUNWmd/sbin/metastat", "/usr/sbin/metastat"] metastat = None for m in metastat_list: try: os.stat(m) metastat = m except: pass if metastat == None: log.log( "<solaris>METASTAT.getData(): metastat not found at %s, directive cancelled" % (metastat_list), 4) raise directive.DirectiveError, "metastat not found at %s, directive cancelled" % ( metastat_list) else: # metastat exists, so check for anything requiring Maintenance cmd = "%s | /usr/bin/grep -i maint | /usr/bin/wc -l" % (metastat) (retval, result) = utils.safe_getstatusoutput(cmd) try: r = int(result) except ValueError: r = 0 if r > 0: # something requires Maintenance data['need_maintenance'] = 1 # true else: data['need_maintenance'] = 0 # false return data
def _getswapinfo(self): """Get swap usage statistics from the output of 'pstat -sk'. """ swapinfo_cmd = "/usr/sbin/pstat -sk" (retval, output) = utils.safe_getstatusoutput( swapinfo_cmd ) if retval != 0: log.log( "<system>system._getswapinfo(): error calling '%s'"%(swapinfo_cmd), 5 ) return None swapinfo_dict = {} # Parse the output and record the swap usage info of the last # line. If there's only a single swap device, this will be the # total usage. If there are 2 or more swap devices, the last # line will be a grand total. # TODO: record stats for all swap devices individually l = string.split( output, '\n' )[-1] if l[:5] == 'Total': # how many fields to expect fieldnum = 5 else: fieldnum = 6 fields = l.split() if len(fields) != fieldnum: log.log( "<system>system._getswapinfo(): could not parse '%s' output line '%s'"%(swapinfo_cmd,l), 5 ) return None swapinfo_dict['swap_device'] = fields[0] # either the swap device or "Total" swapinfo_dict['swap_size'] = int( fields[1] ) * 1024 # Bytes swapinfo_dict['swap_used'] = int( fields[2] ) * 1024 # Bytes swapinfo_dict['swap_available'] = int( fields[3] ) * 1024 # Bytes # ignore fields[4] (capacity %) # ignore fields[5] (Type, but only for a device line) return swapinfo_dict
def _getvmstat(self): """Get system virtual memory statistics from the 'vm_stat' command. """ vmstat_cmd = "/usr/bin/vm_stat" (retval, output) = utils.safe_getstatusoutput( vmstat_cmd ) if retval != 0: log.log( "<system>system._getvmstat(): error calling '%s'"%(vmstat_cmd), 5 ) return None vmstat_dict = {} for l in string.split( output, '\n' ): if string.find( l, 'Pages free:' ) != -1: vmstat_dict['pages_free'] = long(string.split(l)[-1][:-1]) elif string.find( l, 'Pages active:' ) != -1: vmstat_dict['pages_active'] = long(string.split(l)[-1][:-1]) elif string.find( l, 'Pages inactive:' ) != -1: vmstat_dict['pages_inactive'] = long(string.split(l)[-1][:-1]) elif string.find( l, 'Pages wired down:' ) != -1: vmstat_dict['pages_wired_down'] = long(string.split(l)[-1][:-1]) elif string.find( l, 'Translation faults' ) != -1: vmstat_dict['ctr_translation_faults'] = long(string.split(l)[-1][:-1]) elif string.find( l, 'Pages copy-on-write:' ) != -1: vmstat_dict['ctr_pages_copyonwrite'] = long(string.split(l)[-1][:-1]) elif string.find( l, 'Pages zero filled:' ) != -1: vmstat_dict['ctr_pages_zero_filled'] = long(string.split(l)[-1][:-1]) elif string.find( l, 'Pages reactivated:' ) != -1: vmstat_dict['ctr_pages_reactivated'] = long(string.split(l)[-1][:-1]) elif string.find( l, 'Pageins:' ) != -1: vmstat_dict['ctr_pageins'] = long(string.split(l)[-1][:-1]) elif string.find( l, 'Pageouts:' ) != -1: vmstat_dict['ctr_pageouts'] = long(string.split(l)[-1][:-1]) return vmstat_dict
def _getvmstat(self): """Get system statistics from the 'vmstat -s' call. This should work for Solaris 2.5.1/2.6/2.7/2.8.""" vmstat_cmd = "/usr/bin/vmstat -s" (retval, output) = utils.safe_getstatusoutput(vmstat_cmd) if retval != 0: log.log( "<system>system._getvmstat(): error calling '%s'" % (vmstat_cmd), 5) return None vmstat_dict = {} for l in string.split(output, '\n'): if string.find(l, 'swap ins') != -1: vmstat_dict['ctr_swap_ins'] = long(string.split(l)[0]) elif string.find(l, 'swap outs') != -1: vmstat_dict['ctr_swap_outs'] = long(string.split(l)[0]) elif string.find(l, 'pages swapped in') != -1: vmstat_dict['ctr_pages_swapped_in'] = long(string.split(l)[0]) elif string.find(l, 'pages swapped out') != -1: vmstat_dict['ctr_pages_swapped_out'] = long(string.split(l)[0]) elif string.find(l, 'total address trans. faults taken') != -1: vmstat_dict['ctr_total_address_trans_faults_taken'] = long( string.split(l)[0]) elif string.find(l, 'page ins') != -1: vmstat_dict['ctr_page_ins'] = long(string.split(l)[0]) elif string.find(l, 'page outs') != -1: vmstat_dict['ctr_page_outs'] = long(string.split(l)[0]) elif string.find(l, 'pages paged in') != -1: vmstat_dict['ctr_pages_paged_in'] = long(string.split(l)[0]) elif string.find(l, 'pages paged out') != -1: vmstat_dict['ctr_pages_paged_out'] = long(string.split(l)[0]) elif string.find(l, 'total reclaims') != -1: vmstat_dict['ctr_total_reclaims'] = long(string.split(l)[0]) elif string.find(l, 'reclaims from free list') != -1: vmstat_dict['ctr_reclaims_from_free_list'] = long( string.split(l)[0]) elif string.find(l, 'micro (hat) faults') != -1: vmstat_dict['ctr_micro_hat_faults'] = long(string.split(l)[0]) elif string.find(l, 'minor (as) faults') != -1: vmstat_dict['ctr_minor_as_faults'] = long(string.split(l)[0]) elif string.find(l, 'major faults') != -1: vmstat_dict['ctr_major_faults'] = long(string.split(l)[0]) elif string.find(l, 'copy-on-write faults') != -1: vmstat_dict['ctr_copyonwrite_faults'] = long( string.split(l)[0]) elif string.find(l, 'zero fill page faults') != -1: vmstat_dict['ctr_zero_fill_page_faults'] = long( string.split(l)[0]) elif string.find(l, 'pages examined by the clock daemon') != -1: vmstat_dict['ctr_pages_examined_by_the_clock_daemon'] = long( string.split(l)[0]) elif string.find(l, 'revolutions of the clock hand') != -1: vmstat_dict['ctr_revolutions_of_the_clock_hand'] = long( string.split(l)[0]) elif string.find(l, 'pages freed by the clock daemon') != -1: vmstat_dict['ctr_pages_freed_by_the_clock_daemon'] = long( string.split(l)[0]) elif string.find(l, 'forks') != -1: vmstat_dict['ctr_forks'] = long(string.split(l)[0]) elif string.find(l, 'vforks') != -1: vmstat_dict['ctr_vforks'] = long(string.split(l)[0]) elif string.find(l, 'execs') != -1: vmstat_dict['ctr_execs'] = long(string.split(l)[0]) elif string.find(l, 'cpu context switches') != -1: vmstat_dict['ctr_cpu_context_switches'] = long( string.split(l)[0]) elif string.find(l, 'device interrupts') != -1: vmstat_dict['ctr_device_interrupts'] = long(string.split(l)[0]) elif string.find(l, 'traps') != -1: vmstat_dict['ctr_traps'] = long(string.split(l)[0]) elif string.find(l, 'system calls') != -1: vmstat_dict['ctr_system_calls'] = long(string.split(l)[0]) elif string.find(l, 'total name lookups') != -1: vmstat_dict['ctr_total_name_lookups'] = long( string.split(l)[0]) elif string.find(l, 'toolong') != -1: vmstat_dict['ctr_toolong'] = long(string.split(l)[0]) elif string.find(l, 'user cpu') != -1: vmstat_dict['ctr_user_cpu'] = long(string.split(l)[0]) elif string.find(l, 'system cpu') != -1: vmstat_dict['ctr_system_cpu'] = long(string.split(l)[0]) elif string.find(l, 'idle cpu') != -1: vmstat_dict['ctr_idle_cpu'] = long(string.split(l)[0]) elif string.find(l, 'wait cpu') != -1: vmstat_dict['ctr_wait_cpu'] = long(string.split(l)[0]) return vmstat_dict
def _getvmstat(self): """Get system statistics from the 'vmstat -s' call.""" vmstat_cmd = "/usr/bin/vmstat -s" (retval, output) = utils.safe_getstatusoutput( vmstat_cmd ) if retval != 0: log.log( "<system>system._getvmstat(): error calling '%s'"%(vmstat_cmd), 5 ) return None vmstat_dict = {} for l in string.split( output, '\n' ): if string.find( l, 'swap ins' ) != -1: vmstat_dict['ctr_swap_ins'] = long(string.split(l)[0]) elif string.find( l, 'swap outs' ) != -1: vmstat_dict['ctr_swap_outs'] = long(string.split(l)[0]) elif string.find( l, 'pages swapped in' ) != -1: vmstat_dict['ctr_pages_swapped_in'] = long(string.split(l)[0]) elif string.find( l, 'pages swapped out' ) != -1: vmstat_dict['ctr_pages_swapped_out'] = long(string.split(l)[0]) elif string.find( l, 'total address trans. faults taken' ) != -1: vmstat_dict['ctr_total_address_trans_faults_taken'] = long(string.split(l)[0]) elif string.find( l, 'page ins' ) != -1: vmstat_dict['ctr_page_ins'] = long(string.split(l)[0]) elif string.find( l, 'page outs' ) != -1: vmstat_dict['ctr_page_outs'] = long(string.split(l)[0]) elif string.find( l, 'pages paged in' ) != -1: vmstat_dict['ctr_pages_paged_in'] = long(string.split(l)[0]) elif string.find( l, 'pages paged out' ) != -1: vmstat_dict['ctr_pages_paged_out'] = long(string.split(l)[0]) elif string.find( l, 'reclaims from free list' ) != -1: vmstat_dict['ctr_reclaims_from_free_list'] = long(string.split(l)[0]) elif string.find( l, 'total page reclaims' ) != -1: vmstat_dict['ctr_total_page_reclaims'] = long(string.split(l)[0]) elif string.find( l, 'intransit blocking page faults' ) != -1: vmstat_dict['ctr_intransit_blocking_page_faults'] = long(string.split(l)[0]) elif string.find( l, 'zero fill pages created' ) != -1: vmstat_dict['ctr_zero_fill_pages_created'] = long(string.split(l)[0]) elif string.find( l, 'zero fill page faults' ) != -1: vmstat_dict['ctr_zero_fill_page_faults'] = long(string.split(l)[0]) elif string.find( l, 'executable fill pages created' ) != -1: vmstat_dict['ctr_executable_fill_pages_created'] = long(string.split(l)[0]) elif string.find( l, 'executable fill page faults' ) != -1: vmstat_dict['ctr_executable_fill_page_faults'] = long(string.split(l)[0]) elif string.find( l, 'swap text pages found in free list' ) != -1: vmstat_dict['ctr_swap_text_pages_found_in_free_list'] = long(string.split(l)[0]) elif string.find( l, 'inode text pages found in free list' ) != -1: vmstat_dict['ctr_inode_text_pages_found_in_free_list'] = long(string.split(l)[0]) elif string.find( l, 'revolutions of the clock hand' ) != -1: vmstat_dict['ctr_revolutions_of_the_clock_hand'] = long(string.split(l)[0]) elif string.find( l, 'pages scanned for page out' ) != -1: vmstat_dict['ctr_pages_scanned_for_page_out'] = long(string.split(l)[0]) elif string.find( l, 'pages freed by the clock daemon' ) != -1: vmstat_dict['ctr_pages_freed_by_the_clock_daemon'] = long(string.split(l)[0]) elif string.find( l, 'cpu context switches' ) != -1: vmstat_dict['ctr_cpu_context_switches'] = long(string.split(l)[0]) elif string.find( l, 'device interrupts' ) != -1: vmstat_dict['ctr_device_interrupts'] = long(string.split(l)[0]) elif string.find( l, 'traps' ) != -1: vmstat_dict['ctr_traps'] = long(string.split(l)[0]) elif string.find( l, 'system calls' ) != -1: vmstat_dict['ctr_system_calls'] = long(string.split(l)[0]) elif string.find( l, 'Page Select Size Successes for Page size 4K' ) != -1: vmstat_dict['ctr_Page_Select_Size_Successes_for_Page_size_4K'] = long(string.split(l)[0]) elif string.find( l, 'Page Select Size Successes for Page size 16K' ) != -1: vmstat_dict['ctr_Page_Select_Size_Successes_for_Page_size_16K'] = long(string.split(l)[0]) elif string.find( l, 'Page Select Size Successes for Page size 64K' ) != -1: vmstat_dict['ctr_Page_Select_Size_Successes_for_Page_size_64K'] = long(string.split(l)[0]) elif string.find( l, 'Page Select Size Successes for Page size 256K' ) != -1: vmstat_dict['ctr_Page_Select_Size_Successes_for_Page_size_256K'] = long(string.split(l)[0]) elif string.find( l, 'Page Select Size Failures for Page size 16K' ) != -1: vmstat_dict['ctr_Page_Select_Size_Failures_for_Page_size_16K'] = long(string.split(l)[0]) elif string.find( l, 'Page Select Size Failures for Page size 64K' ) != -1: vmstat_dict['ctr_Page_Select_Size_Failures_for_Page_size_64K'] = long(string.split(l)[0]) elif string.find( l, 'Page Select Size Failures for Page size 256K' ) != -1: vmstat_dict['ctr_Page_Select_Size_Failures_for_Page_size_256K'] = long(string.split(l)[0]) elif string.find( l, 'Page Allocate Successes for Page size 4K' ) != -1: vmstat_dict['ctr_Page_Allocate_Successes_for_Page_size_4K'] = long(string.split(l)[0]) elif string.find( l, 'Page Allocate Successes for Page size 16K' ) != -1: vmstat_dict['ctr_Page_Allocate_Successes_for_Page_size_16K'] = long(string.split(l)[0]) elif string.find( l, 'Page Allocate Successes for Page size 64K' ) != -1: vmstat_dict['ctr_Page_Allocate_Successes_for_Page_size_64K'] = long(string.split(l)[0]) elif string.find( l, 'Page Allocate Successes for Page size 256K' ) != -1: vmstat_dict['ctr_Page_Allocate_Successes_for_Page_size_256K'] = long(string.split(l)[0]) elif string.find( l, 'Page Allocate Successes for Page size 64M' ) != -1: vmstat_dict['ctr_Page_Allocate_Successes_for_Page_size_64M'] = long(string.split(l)[0]) elif string.find( l, 'Page Demotions for Page size 16K' ) != -1: vmstat_dict['ctr_Page_Demotions_for_Page_size_16K'] = long(string.split(l)[0]) return vmstat_dict
def parse_prtdiag_u480r(self): """Parse prtdiag for a U480R.""" prtdiag = "/usr/platform/sun4u/sbin/prtdiag" try: os.stat(prtdiag) except: log.log( "<solaris>PRTDIAG.parse_prtdiag_u480r(): %s not found, directive cancelled" % (prtdiag), 4) return None cmd = "%s -v" % (prtdiag) (retval, output) = utils.safe_getstatusoutput(cmd) # Initialise prtdiag dictionary of values prtdiag_dict = {} prtdiag_dict['cpu0_temp'] = -1 prtdiag_dict['cpu1_temp'] = -1 prtdiag_dict['cpu2_temp'] = -1 prtdiag_dict['cpu3_temp'] = -1 prtdiag_dict['dbp0_temp'] = -1 prtdiag_dict['cpu0_status'] = 'unknown' prtdiag_dict['cpu1_status'] = 'unknown' prtdiag_dict['cpu2_status'] = 'unknown' prtdiag_dict['cpu3_status'] = 'unknown' prtdiag_dict['dbp0_status'] = 'unknown' prtdiag_dict['cpu0_fan_rpm'] = -1 prtdiag_dict['cpu1_fan_rpm'] = -1 prtdiag_dict['cpu2_fan_rpm'] = -1 prtdiag_dict['io0_fan_rpm'] = -1 prtdiag_dict['io1_fan_rpm'] = -1 prtdiag_dict['cpu0_fan_status'] = 'unknown' prtdiag_dict['cpu1_fan_status'] = 'unknown' prtdiag_dict['cpu2_fan_status'] = 'unknown' prtdiag_dict['io0_fan_status'] = 'unknown' prtdiag_dict['io1_fan_status'] = 'unknown' prtdiag_dict['ps0_status'] = 'unknown' prtdiag_dict['ps1_status'] = 'unknown' prtdiag_dict['disk0_status'] = 'unknown' prtdiag_dict['disk1_status'] = 'unknown' prtdiag_dict['failure'] = "" # Search for hardware faults inx = re.findall("\n(.*?)\s+\[(\w+_FAULT)\]", output) for device, fault in inx: if fault == 'NO_FAULT': continue prtdiag_dict['failure'] += "%s: %s " % (device, fault) for line in output.splitlines(): if line.startswith('CPU0'): bits = line.split() prtdiag_dict['cpu0_temp'] = int(bits[1]) prtdiag_dict['cpu0_status'] = bits[2] if line.startswith('CPU1'): bits = line.split() prtdiag_dict['cpu1_temp'] = int(bits[1]) prtdiag_dict['cpu1_status'] = bits[2] if line.startswith('CPU2'): bits = line.split() prtdiag_dict['cpu2_temp'] = int(bits[1]) prtdiag_dict['cpu2_status'] = bits[2] if line.startswith('CPU3'): bits = line.split() prtdiag_dict['cpu3_temp'] = int(bits[1]) prtdiag_dict['cpu3_status'] = bits[2] if line.startswith('DBP0'): bits = line.split() prtdiag_dict['dbp0_temp'] = int(bits[1]) prtdiag_dict['dbp0_status'] = bits[2] if line.startswith('DISK 0'): bits = line.split() prtdiag_dict['disk0_status'] = self.squarebracks(line) if line.startswith('DISK 1'): bits = line.split() prtdiag_dict['disk1_status'] = self.squarebracks(line) if line.startswith('FAN_TRAY_0'): if line.find('CPU0_FAN') > 1: bits = line.split() prtdiag_dict['cpu0_fan_status'] = self.squarebracks(line) prtdiag_dict['cpu0_fan_rpm'] = int(bits[2]) if line.find('CPU1_FAN') > 1: bits = line.split() prtdiag_dict['cpu1_fan_status'] = self.squarebracks(line) prtdiag_dict['cpu1_fan_rpm'] = int(bits[2]) if line.find('CPU2_FAN') > 1: bits = line.split() prtdiag_dict['cpu2_fan_status'] = self.squarebracks(line) prtdiag_dict['cpu2_fan_rpm'] = int(bits[2]) if line.startswith('FAN_TRAY_1'): if line.find('IO0_FAN') > 1: bits = line.split() prtdiag_dict['io0_fan_status'] = self.squarebracks(line) prtdiag_dict['io0_fan_rpm'] = int(bits[2]) if line.find('IO1_FAN') > 1: bits = line.split() prtdiag_dict['io1_fan_status'] = self.squarebracks(line) prtdiag_dict['io1_fan_rpm'] = int(bits[2]) if line.startswith('PS0'): prtdiag_dict['ps0_status'] = self.squarebracks(line) if line.startswith('PS1'): prtdiag_dict['ps1_status'] = self.squarebracks(line) return prtdiag_dict
class IPF(directive.Directive): """ Eddie directive for performing ipfilter checks. Syntax: IPF <name>: rule="<rule>" action="<actions>" Examples: IPF empty: rule="ipfstat == None" action="email('alert', 'ipfstat is empty')" IPF norules: rule="len(ipfstatin) == 0" action="email('alert', 'ipfstat has no input rules for %(h)s')" """ def __init__(self, toklist): apply(directive.Directive.__init__, (self, toklist)) def tokenparser(self, toklist, toktypes, indent): """ Parse directive arguments. """ apply(directive.Directive.tokenparser, (self, toklist, toktypes, indent)) # test required arguments try: self.args.rule except AttributeError: raise directive.ParseFailure, "Rule not specified" # Set any FS-specific variables # rule = rule self.defaultVarDict['rule'] = self.args.rule # define the unique ID if self.ID == None: self.ID = '%s.IPF.%s' % (log.hostname, self.args.rule) self.state.ID = self.ID log.log( "<ipf>IPF.tokenparser(): ID '%s' rule '%s'" % (self.ID, self.args.rule), 8) def getData(self): """ Called by Directive docheck() method to fetch the data required for evaluating the directive rule. """ # locations to find ipfstat command ipfstatcmds = ["/sbin/ipfstat", "/opt/local/sbin/ipfstat"] ipfstatcmd = None for i in ipfstatcmds: try: os.stat(i) ipfstatcmd = i log.log("<ipf>IPF.getData(): ipfstat found at %s" % (i), 7) break except os.error, detail: log.log( "<ipf>IPF.getData(): ipfstat not found at %s, stat returned error %d, '%s'" % (i, detail[0], detail[1]), 9) if ipfstatcmd == None: # no ipfstat log.log( "<ipf>IPF.getData(): ipfstat command not found, directive cannot continue", 4) raise directive.DirectiveError, "ipfstat command not found, directive cannot continue" else: (r, ipfstat) = utils.safe_getstatusoutput(ipfstatcmd) if r != 0: # ipfstat call failed log.log( "<ipf>IPF.getData(): %s call failed, returned %d, '%s'" % (ipfstatcmd, r, ipfstat), 5) (r, ipfstatin) = utils.safe_getstatusoutput(ipfstatcmd + " -ih") if r != 0: # ipfstat -ih call failed log.log( "<ipf>IPF.getData(): %s -ih call failed, returned %d, '%s'" % (ipfstatcmd, r, ipfstatin), 5) (r, ipfstatout) = utils.safe_getstatusoutput(ipfstatcmd + " -oh") if r != 0: # ipfstat -oh call failed log.log( "<ipf>IPF.getData(): %s -oh call failed, returned %d, '%s'" % (ipfstatcmd, r, ipfstatout), 5) data = {} data['ipfstat'] = str(ipfstat) data['ipfstatin'] = str(ipfstatin) data['ipfstatout'] = str(ipfstatout) return data
def _getvmstat(self): """Get system statistics from the 'vmstat -s' call. """ vmstat_cmd = "/usr/bin/vmstat -s" (retval, output) = utils.safe_getstatusoutput( vmstat_cmd ) if retval != 0: log.log( "<system>system._getvmstat(): error calling '%s'"%(vmstat_cmd), 5 ) return None vmstat_dict = {} for l in string.split( output, '\n' ): if string.find( l, 'cpu context switches' ) != -1: vmstat_dict['ctr_cpu_context_switches'] = long(string.split(l)[0]) elif string.find( l, 'device interrupts' ) != -1: vmstat_dict['ctr_device_interrupts'] = long(string.split(l)[0]) elif string.find( l, 'software interrupts' ) != -1: vmstat_dict['ctr_software_interrupts'] = long(string.split(l)[0]) elif string.find( l, 'traps' ) != -1: vmstat_dict['ctr_traps'] = long(string.split(l)[0]) elif string.find( l, 'system calls' ) != -1: vmstat_dict['ctr_system_calls'] = long(string.split(l)[0]) elif string.find( l, 'swap pager pageins' ) != -1: vmstat_dict['ctr_swap_pager_pageins'] = long(string.split(l)[0]) elif string.find( l, 'swap pager pages paged in' ) != -1: vmstat_dict['ctr_swap_pager_pages_paged_in'] = long(string.split(l)[0]) elif string.find( l, 'swap pager pageouts' ) != -1: vmstat_dict['ctr_swap_pager_pageouts'] = long(string.split(l)[0]) elif string.find( l, 'swap pager pages paged out' ) != -1: vmstat_dict['ctr_swap_pager_pages_paged_out'] = long(string.split(l)[0]) elif string.find( l, 'vnode pager pageins' ) != -1: vmstat_dict['ctr_vnode_pager_pageins'] = long(string.split(l)[0]) elif string.find( l, 'vnode pager pages paged in' ) != -1: vmstat_dict['ctr_vnode_pager_pages_paged_in'] = long(string.split(l)[0]) elif string.find( l, 'vnode pager pageouts' ) != -1: vmstat_dict['ctr_vnode_pager_pageouts'] = long(string.split(l)[0]) elif string.find( l, 'vnode pager pages paged out' ) != -1: vmstat_dict['ctr_vnode_pager_pages_paged_out'] = long(string.split(l)[0]) elif string.find( l, 'page daemon wakeups' ) != -1: vmstat_dict['ctr_page_daemon_wakeups'] = long(string.split(l)[0]) elif string.find( l, 'pages examined by the page daemon' ) != -1: vmstat_dict['ctr_pages_examined_by_the_page_daemon'] = long(string.split(l)[0]) elif string.find( l, 'pages reactivated' ) != -1: vmstat_dict['ctr_pages_reactivated'] = long(string.split(l)[0]) elif string.find( l, 'copy-on-write faults' ) != -1: vmstat_dict['ctr_copyonwrite_faults'] = long(string.split(l)[0]) elif string.find( l, 'copy-on-write optimized faults' ) != -1: vmstat_dict['ctr_copyonwrite_optimized_faults'] = long(string.split(l)[0]) elif string.find( l, 'zero fill pages zeroed' ) != -1: vmstat_dict['ctr_zero_fill_pages_zeroed'] = long(string.split(l)[0]) elif string.find( l, 'zero fill pages prezeroed' ) != -1: vmstat_dict['ctr_zero_fill_pages_prezeroed'] = long(string.split(l)[0]) elif string.find( l, 'intransit blocking page faults' ) != -1: vmstat_dict['ctr_intransit_blocking_page_faults'] = long(string.split(l)[0]) elif string.find( l, 'pages freed' ) != -1: vmstat_dict['ctr_pages_freed'] = long(string.split(l)[0]) elif string.find( l, 'pages freed by daemon' ) != -1: vmstat_dict['ctr_pages_freed_by_daemon'] = long(string.split(l)[0]) elif string.find( l, 'pages freed by exiting processes' ) != -1: vmstat_dict['ctr_pages_freed_by_exiting_processes'] = long(string.split(l)[0]) elif string.find( l, 'pages freed by exiting processes' ) != -1: vmstat_dict['ctr_pages_freed_by_exiting_processes'] = long(string.split(l)[0]) elif string.find( l, 'total name lookups' ) != -1: vmstat_dict['ctr_total_name_lookups'] = long(string.split(l)[0]) return vmstat_dict
def _getvmstat(self): """Get system statistics from the 'vmstat -s' call. """ vmstat_cmd = "/usr/bin/vmstat -s" (retval, output) = utils.safe_getstatusoutput(vmstat_cmd) if retval != 0: log.log( "<system>system._getvmstat(): error calling '%s'" % (vmstat_cmd), 5) return None vmstat_dict = {} bpp = 0 for l in string.split(output, '\n'): if string.find(l, 'bytes per page') != -1: vmstat_dict['ctr_bytes_per_page'] = long(string.split(l)[0]) bpp = long(string.split(l)[0]) elif string.find(l, 'pages managed') != -1: vmstat_dict['ctr_pages_managed'] = long(string.split(l)[0]) elif string.find(l, 'pages freed by pagedaemon') != -1: vmstat_dict['ctr_pages_freed_by_pagedaemon'] = long( string.split(l)[0]) elif string.find(l, 'pages free') != -1: vmstat_dict['ctr_pages_free'] = long(string.split(l)[0]) elif string.find(l, 'pages active') != -1: vmstat_dict['ctr_pages_active'] = long(string.split(l)[0]) elif string.find(l, 'pages inactive') != -1: vmstat_dict['ctr_pages_inactive'] = long(string.split(l)[0]) elif string.find(l, 'pages being paged out') != -1: vmstat_dict['ctr_pages_being_paged_out'] = long( string.split(l)[0]) elif string.find(l, 'pages wired') != -1: vmstat_dict['ctr_pages_wired'] = long(string.split(l)[0]) elif string.find(l, 'pages reserved for pagedaemon') != -1: vmstat_dict['ctr_pages_reserved_for_pagedaemon'] = long( string.split(l)[0]) elif string.find(l, 'pages reserved for kernel') != -1: vmstat_dict['ctr_pages_reserved_for_kernel'] = long( string.split(l)[0]) elif string.find(l, 'swap pages in use') != -1: vmstat_dict['ctr_swap_pages_in_use'] = long(string.split(l)[0]) elif string.find(l, 'swap pages') != -1: vmstat_dict['ctr_swap_pages'] = long(string.split(l)[0]) elif string.find(l, 'total anon\'s in system') != -1: vmstat_dict['ctr_total_anons_in_system'] = long( string.split(l)[0]) elif string.find(l, 'free anon\'s') != -1: vmstat_dict['ctr_free_anons'] = long(string.split(l)[0]) elif string.find(l, 'page faults') != -1: vmstat_dict['ctr_page_faults'] = long(string.split(l)[0]) elif string.find(l, 'traps') != -1: vmstat_dict['ctr_traps'] = long(string.split(l)[0]) elif string.find(l, 'interrupts') != -1: vmstat_dict['ctr_interrupts'] = long(string.split(l)[0]) elif string.find(l, 'cpu context switches') != -1: vmstat_dict['ctr_cpu_context_switches'] = long( string.split(l)[0]) elif string.find(l, 'software interrupts') != -1: vmstat_dict['ctr_software_interrupts'] = long( string.split(l)[0]) elif string.find(l, 'syscalls') != -1: vmstat_dict['ctr_system_calls'] = long(string.split(l)[0]) elif string.find(l, 'pagein operations') != -1: vmstat_dict['ctr_page_ins'] = long(string.split(l)[0]) elif string.find(l, 'swap ins') != -1: vmstat_dict['ctr_swap_ins'] = long(string.split(l)[0]) elif string.find(l, 'swap outs') != -1: vmstat_dict['ctr_swap_outs'] = long(string.split(l)[0]) elif string.find(l, 'forks') != -1: vmstat_dict['ctr_forks'] = long(string.split(l)[0]) elif string.find(l, 'forks where vmspace is shared') != -1: vmstat_dict['ctr_forks_where_vmspace_is_shared'] = long( string.split(l)[0]) elif string.find(l, 'number of times the pagedeamon woke up') != -1: vmstat_dict[ 'ctr_number_of_times_the_pagedaemon_woke_up'] = long( string.split(l)[0]) elif string.find(l, 'revolutions of the clock hand') != -1: vmstat_dict['ctr_revolutions_of_the_clock_hand'] = long( string.split(l)[0]) elif string.find(l, 'pages scanned by pagedaemon') != -1: vmstat_dict['ctr_pages_scanned_by_pagedaemon'] = long( string.split(l)[0]) elif string.find(l, 'pages reactivated by pagedaemon') != -1: vmstat_dict['ctr_pages_reactiviated_by_pagedaemon'] = long( string.split(l)[0]) elif string.find(l, 'busy pages found by pagedaemon') != -1: vmstat_dict['ctr_busy_pages_found_by_pagedaemon'] = long( string.split(l)[0]) elif string.find(l, 'total name lookups') != -1: vmstat_dict['ctr_total_name_lookups'] = long( string.split(l)[0]) elif string.find(l, 'select collisions') != -1: vmstat_dict['ctr_select_collisions'] = long(string.split(l)[0]) # derive 'ctr_swap_pages_inactive' if vmstat_dict.has_key('ctr_swap_pages') and vmstat_dict.has_key( 'ctr_swap_pages_in_use'): vmstat_dict['ctr_swap_pages_inactive'] = long( vmstat_dict['ctr_swap_pages'] - vmstat_dict['ctr_swap_pages_in_use']) # If we have bytes-per-page, then for every "XXX_pages_YYY" counter, copy and convert to "XXX_bytes_YYY" if bpp > 0: for k in vmstat_dict.keys(): if k.find('_pages_') >= 0 and type(vmstat_dict[k]) == type( long(1)): k2 = k.replace('_pages_', '_bytes_') vmstat_dict[k2] = vmstat_dict[k] * bpp return vmstat_dict