Esempio n. 1
0
def getSmbStatus(volInfo):
    status, msg, error = utils.execCmd(_checkSmbCmd)
    if status == utils.PluginStatusCode.OK:
        return status, "Process smb is running"

    smbConfigStat, msg, error = utils.execCmd(_chkConfigSmb)
    if smbConfigStat != utils.PluginStatusCode.OK:
        return utils.PluginStatusCode.OK, "OK: SMB not configured"

    # if smb is not running and any of the volume uses smb
    # then its required to alert the user
    for volume, volumeInfo in volInfo.iteritems():
        if volumeInfo['volumeStatus'] == glustercli.VolumeStatus.OFFLINE:
            continue
        cifsStatus = volumeInfo.get('options', {}).get('user.cifs', 'enable')
        smbStatus = volumeInfo.get('options', {}).get('user.smb', 'enable')
        if cifsStatus == 'enable' and smbStatus == 'enable':
            # SMB configured, service not running
            msg = "CRITICAL: Process smb is not running"
            status = utils.PluginStatusCode.CRITICAL
            break
    else:
        # No volumes available or Non of the volumes are CIFS enabled
        msg = "OK: No gluster volume uses smb"
        status = utils.PluginStatusCode.OK
    return status, msg
Esempio n. 2
0
def _verifyNagiosConfig():
    (rc, out, err) = utils.execCmd(
        [server_utils.nagiosCmdPath.cmd, '-v', NAGIOS_CONFIG_FILE])
    if rc == 0:
        return True
    else:
        return False
def getLvs():
    lvmCommand = [
        "lvm", "vgs", "--unquoted", "--noheading", "--nameprefixes",
        "--separator", "$", "--nosuffix", "--units", "m", "-o",
        "lv_uuid,lv_name,data_percent,pool_lv,lv_attr,"
        "lv_size,lv_path,lv_metadata_size,"
        "metadata_percent,vg_name"
    ]
    rc, out, err = utils.execCmd(lvmCommand)
    if rc != 0:
        logging.error(
            "lvm command failed.\nCommand=%s\nrc=%s\nout=%s\nerr=%s" %
            (lvmCommand, rc, out, err))
        return None
    l = map(
        lambda x: dict(x),
        map(lambda x: [e.split('=') for e in x],
            map(lambda x: x.strip().split('$'), out)))

    d = {}
    for i in l:
        if i['LVM2_LV_ATTR'][0] == 't':
            k = "%s/%s" % (i['LVM2_VG_NAME'], i['LVM2_LV_NAME'])
        else:
            k = os.path.realpath(i['LVM2_LV_PATH'])
        d.update({k: i})
    return d
def _verifyNagiosConfig():
    (rc, out, err) = utils.execCmd([server_utils.nagiosCmdPath.cmd, '-v',
                                    NAGIOS_CONFIG_FILE])
    if rc == 0:
        return True
    else:
        return False
def execNRPECommand(host,
                    command,
                    arguments=None,
                    timeout=None,
                    json_output=True):
    nrpeCmd = getNRPEBaseCommand(host, timeout).split()
    nrpeCmd.append(command)
    if arguments:
        nrpeCmd.append('-a')
        nrpeCmd.extend(arguments)
    (returncode, outputStr, err) = utils.execCmd(nrpeCmd, raw=True)
    if returncode == 0:
        if json_output:
            try:
                resultDict = json.loads(outputStr)
            except Exception as e:
                e.args += (outputStr,)
                raise
            return resultDict
        else:
            return outputStr
    else:
        print "Failed to execute NRPE command '%s' in host '%s' " \
              "\nError : %s" \
              "Make sure NRPE server in host '%s' is configured to accept " \
              "requests from Nagios server" % (command, host, outputStr, host)
        sys.exit(utils.PluginStatusCode.CRITICAL)
Esempio n. 6
0
def execNRPECommand(host,
                    command,
                    arguments=None,
                    timeout=None,
                    json_output=True):
    nrpeCmd = getNRPEBaseCommand(host, timeout).split()
    nrpeCmd.append(command)
    if arguments:
        nrpeCmd.append('-a')
        nrpeCmd.extend(arguments)
    (returncode, outputStr, err) = utils.execCmd(nrpeCmd, raw=True)
    if returncode == 0:
        if json_output:
            try:
                resultDict = json.loads(outputStr)
            except Exception as e:
                e.args += (outputStr, )
                raise
            return resultDict
        else:
            return outputStr
    else:
        print "Failed to execute NRPE command '%s' in host '%s' " \
              "\nError : %s" \
              "Make sure NRPE server in host '%s' is configured to accept " \
              "requests from Nagios server" % (command, host, outputStr, host)
        sys.exit(utils.PluginStatusCode.CRITICAL)
def getLvs():
    lvmCommand = ["lvm", "vgs", "--unquoted", "--noheading",
                  "--nameprefixes", "--separator", "$",
                  "--nosuffix", "--units", "m", "-o",
                  "lv_uuid,lv_name,data_percent,pool_lv,lv_attr,"
                  "lv_size,lv_path,lv_metadata_size,"
                  "metadata_percent,vg_name"]
    rc, out, err = utils.execCmd(lvmCommand)
    if rc != 0:
        logging.error(
            "lvm command failed.\nCommand=%s\nrc=%s\nout=%s\nerr=%s"
            % (lvmCommand, rc, out, err)
        )
        return None
    l = map(lambda x: dict(x),
            map(lambda x: [e.split('=') for e in x],
                map(lambda x: x.strip().split('$'), out)))

    d = {}
    for i in l:
        if i['LVM2_LV_ATTR'][0] == 't':
            k = "%s/%s" % (i['LVM2_VG_NAME'], i['LVM2_LV_NAME'])
        else:
            k = os.path.realpath(i['LVM2_LV_PATH'])
        d.update({k: i})
    return d
Esempio n. 8
0
def getGlusterdStatus():
    retCode, msg, error = utils.execCmd(_checkGlusterService)
    if retCode == 0:
        return utils.PluginStatusCode.OK, "Process glusterd is running"
    elif retCode == 3:
        return utils.PluginStatusCode.CRITICAL, \
            "Process glusterd is not running"
    return utils.PluginStatusCode.CRITICAL, msg[0] if len(msg) > 0 else ""
Esempio n. 9
0
def getCtdbStatus(smbStatus, nfsStatus):
    # If SMB/NFS is not running, then skip ctdb check
    if smbStatus != utils.PluginStatusCode.OK and \
       nfsStatus != utils.PluginStatusCode.OK:
        return (utils.PluginStatusCode.OK,
                "CTDB ignored as SMB and NFS are not running")

    status, msg, error = utils.execCmd(_checkCtdbCmd)
    if status != utils.PluginStatusCode.OK:
        status, msg, error = utils.execCmd(_chkConfigCtdb)
        if status == utils.PluginStatusCode.OK:
            return (utils.PluginStatusCode.CRITICAL,
                    "CTDB process is not running")
        return utils.PluginStatusCode.UNKNOWN, "CTDB not configured"

    # 'cdtb nodestatus' command will return the output in following format
    #
    # pnn:0 host_ip_address     OK (THIS NODE)
    #
    # Possible states are -
    # Ok,Disconnected,Banned,Disabled,Unhealthy,Stopped,Inactive,
    # PartiallyOnline
    # And combinations of them like
    # pnn:0 host_ip_address     BANNED|INACTIVE(THIS NODE)
    #
    # UNHEALTHY/DISABLED/PARTIALLYONLINE - node is partially operational
    # Any other state - node in not operational
    status, msg, error = utils.execCmd(['ctdb', 'nodestatus'])

    if len(msg) > 0:
            message = msg[0].split()
            if len(message) >= 2:
                msg = "Node status: %s" % message[2]
                if CtdbNodeStatus.OK in message[2]:
                    status = utils.PluginStatusCode.OK
                elif (CtdbNodeStatus.UNHEALTHY in message[2] or
                      CtdbNodeStatus.PARTIALLYONLINE in message[2] or
                      CtdbNodeStatus.DISABLED in message[2]):
                    status = utils.PluginStatusCode.WARNING
                else:
                    status = utils.PluginStatusCode.CRITICAL
    else:
        status = utils.PluginStatusCode.UNKNOWN
    return status, msg
Esempio n. 10
0
def sadfExecCmd(sadfCmd):
    try:
        (rc, out, err) = utils.execCmd(sadfCmd, raw=True)
    except (OSError, ValueError) as e:
        raise SadfCmdExecFailedException(err=[str(e)])

    if rc != 0:
        raise SadfCmdExecFailedException(rc, [out], [err])

    try:
        return etree.fromstring(out)
    except _etreeExceptions:
        raise SadfXmlErrorException(err=[out])
Esempio n. 11
0
def sadfExecCmd(sadfCmd):
    try:
        (rc, out, err) = utils.execCmd(sadfCmd, raw=True)
    except (OSError, ValueError) as e:
        raise SadfCmdExecFailedException(err=[str(e)])

    if rc != 0:
        raise SadfCmdExecFailedException(rc, [out], [err])

    try:
        return etree.fromstring(out)
    except _etreeExceptions:
        raise SadfXmlErrorException(err=[out])
Esempio n. 12
0
def getShdStatus(volInfo):
    status, msg, error = utils.execCmd(_checkShdCmd)
    if status == utils.PluginStatusCode.OK:
        return status, "Gluster Self Heal Daemon is running"

    hostUuid = glustercli.hostUUIDGet()
    for volumeName, volumeInfo in volInfo.iteritems():
        if volumeInfo['volumeStatus'] == glustercli.VolumeStatus.OFFLINE:
            continue
        if hasBricks(hostUuid, volumeInfo['bricksInfo']) and \
           int(volumeInfo['replicaCount']) > 1:
            status = utils.PluginStatusCode.CRITICAL
            msg = "CRITICAL: Gluster Self Heal Daemon not running"
            break
    else:
        msg = "OK: Process Gluster Self Heal Daemon"
        status = utils.PluginStatusCode.OK
    return status, msg
Esempio n. 13
0
def getNfsStatus(volInfo):
    # if nfs is already running we need not to check further
    status, msg, error = utils.execCmd(_checkNfsCmd)
    if status == utils.PluginStatusCode.OK:
        return status, "Process glusterfs-nfs is running"

    # if nfs is not running and any of the volume uses nfs
    # then its required to alert the user
    for volume, volumeInfo in volInfo.iteritems():
        if volumeInfo['volumeStatus'] == glustercli.VolumeStatus.OFFLINE:
            continue
        nfsStatus = volumeInfo.get('options', {}).get('nfs.disable', 'off')
        if nfsStatus == 'off':
            msg = "CRITICAL: Process glusterfs-nfs is not running"
            status = utils.PluginStatusCode.CRITICAL
            break
    else:
        msg = "OK: No gluster volume uses nfs"
        status = utils.PluginStatusCode.OK
    return status, msg
Esempio n. 14
0
def getQuotadStatus(volInfo):
    # if quota is already running we need not to check further
    status, msg, error = utils.execCmd(_checkQuotaCmd)
    if status == utils.PluginStatusCode.OK:
        return status, "Process quotad is running"

    # if quota is not running and any of the volume uses quota
    # then the quotad process should be running in the host
    for volume, volumeInfo in volInfo.iteritems():
        if volumeInfo['volumeStatus'] == glustercli.VolumeStatus.OFFLINE:
            continue
        quotadStatus = volumeInfo.get('options', {}).get('features.quota', '')
        if quotadStatus == 'on':
            msg = "CRITICAL: Process quotad is not running"
            utils.PluginStatusCode.CRITICAL
            break
    else:
        msg = "OK: Quota not enabled"
        status = utils.PluginStatusCode.OK
    return status, msg
Esempio n. 15
0
def getBrickStatus(volumeName, brickName):
    status = None
    brickPath = brickName.split(':')[1]
    pidFile = brickName.replace(":/", "-").replace("/", "-") + ".pid"
    try:
        with open("%s/%s/run/%s" % (
                _glusterVolPath, volumeName, pidFile)) as f:
            try:
                if _pidExists(int(f.read().strip())):
                    status = utils.PluginStatusCode.OK
                    brickDevice = storage.getBrickDeviceName(brickPath)
                    disk = storage.getDisksForBrick(brickDevice)
                    cmd = [checkIdeSmartCmdPath.cmd, "-d", disk, "-n"]
                    rc, out, err = utils.execCmd(cmd)
                    if rc == utils.PluginStatusCode.CRITICAL and \
                       "tests failed" in out[0]:
                        status = utils.PluginStatusCode.WARNING
                        msg = "WARNING: Brick %s: %s" % (brickPath, out[0])
                else:
                    status = utils.PluginStatusCode.CRITICAL
            except ValueError as e:
                status = utils.PluginStatusCode.CRITICAL
                msg = "Invalid pid of brick %s: %s" % (brickPath,
                                                       str(e))
                return status, msg
    except IOError as e:
        if e.errno == errno.ENOENT:
            status = utils.PluginStatusCode.CRITICAL
        else:
            status = utils.PluginStatusCode.UNKNOWN
            msg = "UNKNOWN: Brick %s: %s" % (brickPath, str(e))
    finally:
        if status == utils.PluginStatusCode.OK:
            msg = "OK: Brick %s is up" % brickPath
        elif status == utils.PluginStatusCode.CRITICAL:
            msg = "CRITICAL: Brick %s is down" % brickPath
    return status, msg
def isNagiosRunning():
    (rc, out, err) = utils.execCmd([serviceCmdPath.cmd, 'nagios', 'status'])
    if rc == 0:
        return True
    else:
        return False
Esempio n. 17
0
def isNagiosRunning():
    (rc, out, err) = utils.execCmd([serviceCmdPath.cmd, 'nagios', 'status'])
    if rc == 0:
        return True
    else:
        return False
def configureParam(paramName, value):
    sed_pattern = "/%s=.*/c\\%s=%s" % (paramName, paramName, value)
    command_sed = [__SED_CMD_PATH.cmd, "-i", sed_pattern, nscautils.__NAGIOSSERVER_CONF]
    utils.execCmd(command_sed)
def execNRPECommand(command):
    status, output, err = utils.execCmd(command.split(), raw=True)
    return status, output
Esempio n. 20
0
 def _runUnknown():
     (rc, out, err) = utils.execCmd(["unknown"])
def configureParam(paramName, value):
    sed_pattern = '/%s=.*/c\\%s=%s' % (paramName, paramName, value)
    command_sed = [
        __SED_CMD_PATH.cmd, '-i', sed_pattern, nscautils.__NAGIOSSERVER_CONF
    ]
    utils.execCmd(command_sed)
def execNRPECommand(command):
    status, output, err = utils.execCmd(command.split(), raw=True)
    return status, output
Esempio n. 23
0
 def testSuccess(self):
     (rc, out, err) = utils.execCmd(["true"])
     self.assertEquals(rc, 0)
Esempio n. 24
0
 def testFailure(self):
     (rc, out, err) = utils.execCmd(["false"])
     self.assertEquals(rc, 1)