コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
    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
コード例 #5
0
    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
コード例 #6
0
    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
コード例 #7
0
    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
コード例 #8
0
    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
コード例 #9
0
    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
コード例 #10
0
    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
コード例 #11
0
    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
コード例 #12
0
    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
コード例 #13
0
    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
コード例 #14
0
    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
コード例 #15
0
    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
コード例 #16
0
    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
コード例 #17
0
    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
コード例 #18
0
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
コード例 #19
0
    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
コード例 #20
0
    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