⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 orainfo.c

📁 获取unix系统进程信息的功能
💻 C
字号:
#ifdef __cplusplus
extern "C" {
#endif


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "orainfo.h"
#include "common.h"
#include "utils.h"
#include "performance.h"
#include "netinfo.h"
#include "platinfo.h"
#include "dirinfo.h"

#ifdef WIN32
#include "procinfo.h"
#endif

#ifdef WIN32
int GetOraCpuUsage(const char *sid, float *percent, char *errbuf)
{
    char szBuff[MIN_BUF_LEN];
    int pid;

    if (sid == NULL)
    {
        strcpy(errbuf, "2:sid is NULL");
        return -1;
    }
    sprintf(szBuff, "OracleService%s", sid);
    pid = GetServicePid(szBuff);
    if (pid > 0)
    {
        return GetProcCpuUsage(pid, percent, errbuf);
    }
    else
    {
        *percent = 0.00;
        return 0;
    }
    
    return -1;
}
#else
int GetOraCpuUsage(const char *sid, float *percent, char *errbuf)
{
    char szCmd[MIN_BUF_LEN];
    char buffer[MIN_BUF_LEN];
    int ret;

    if (sid == NULL)
    {
        strcpy(errbuf, "2:sid is NULL");
        return -1;
    }
    memset(buffer,0,sizeof(buffer));

#if defined(SOLARIS)   
    sprintf(szCmd,
        "ps -eo \"user pid pcpu pmem rss args\" |awk 'BEGIN{pcpu=0;}$6~/^ora.*%s$/{pcpu+=$3;}END{printf \"%%.02f\",pcpu;}'",
        sid);
#else  
    sprintf(szCmd,"ps auwwx |awk 'BEGIN{pcpu=0;}$NF~/^ora.*%s$/{pcpu+=$3;}END{printf \"%%.02f\",pcpu;}'",
        sid);
#endif

    ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, buffer, MIN_BUF_LEN);
    if (ret != 0)
    {
        strcpy(errbuf, "2:my_system() error");
        return -1;
    }
    if (strlen(buffer)>0)
    {
        *percent = atof(buffer);
    }
    else
    {
        *percent = 0.00;
    }

    if (*percent > 100)
    {
        *percent = 100.00;
    }
    if (*percent < 0)
    {
        strcpy(errbuf, "2:get cpu load error");
        return -1;
    }
    return 0;
}
#endif

#ifdef WIN32
int GetOraMemUsage(const char *sid, float *percent, char *errbuf)
{
    char szBuff[MIN_BUF_LEN];
    int pid;

    if (sid == NULL)
    {
        strcpy(errbuf, "2:sid is NULL");
        return -1;
    }
    sprintf(szBuff, "OracleService%s", sid);
    pid = GetServicePid(szBuff);
    if (pid > 0)
    {
        return GetProcMemUsage(pid, percent, errbuf);
    }
    else
    {
        *percent = 0.00;
        return 0;
    }

    return -1;
}
#else

int GetOraSGASize(const char *sid, unsigned long *sgasize)
{
    char szCmd[MIN_BUF_LEN];
    char szTmp[MIN_BUF_LEN];
    int ret;

    if (sid == NULL)
    {
        return -1;
    }

#if defined(SOLARIS)
    sprintf(szCmd,
        "ps -eo \"user pid pcpu pmem rss args\" |awk '$6~/^ora.*%s$/{printf \"%%s\",$1;exit 0}'",
        sid);
#else  
    sprintf(szCmd,
        "ps auwwx |awk '$NF~/^ora.*%s$/{printf \"%%s\",$1;exit 0}'",
        sid);
#endif

    ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szTmp, MIN_BUF_LEN);
    if (ret != 0)
    {
        return -1;
    }

    trim_strLR(szTmp, szTmp);
    if (strlen(szTmp) == 0)
    {
        *sgasize = 0;
        return 0;
    }
    else
    {
#if defined(LINUX)
        sprintf(szCmd,
            "ipcs -m|awk 'BEGIN{size=0;}$3==\"%s\"{size+=$5;}END{printf \"%%d\",size/1024;}'",
            szTmp);
#else  
        sprintf(szCmd,
            "ipcs -mb|awk 'BEGIN{size=0;}$5==\"%s\"{size+=$7;}END{printf \"%%d\",size/1024;}'",
            szTmp);
#endif
    }

    ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szTmp, MIN_BUF_LEN);
    if (ret != 0)
    {
        return -1;
    }

    trim_strLR(szTmp, szTmp);
    if (strlen(szTmp) == 0)
    {
        *sgasize = 0;
    }
    else
    {
        *sgasize = strtoul(szTmp, NULL, 10);
    }

    return 0;
}

int GetOraMemUsage(const char *sid, float *percent, char *errbuf)
{
    char szCmd[MIN_BUF_LEN];
    char szTmp[MIN_BUF_LEN];
    unsigned long sgasize;
    unsigned long usesize;
    unsigned long memsize;
    int ret;

    if (sid == NULL)
    {
        strcpy(errbuf, "2:sid is NULL");
        return -1;
    }

    ret = GetOraSGASize(sid, &sgasize);
    if (ret != 0)
    {
        strcpy(errbuf, "2:GetOraSGASize() error");
        return -1;
    }

#if defined(SOLARIS)
    sprintf(szCmd,
        "ps -eo \"user pid pcpu pmem rss args\" |awk 'BEGIN{rss=0;}$6~/^ora.*%s$/{rss+=($5-%d);}END{printf \"%%d\",(rss+%d);}'",
        sid, sgasize, sgasize);
#elif defined(AIX)
    sprintf(szCmd,
        "ps auwwx |awk 'BEGIN{rss=0;}$NF~/^ora.*%s$/{rss+=$6;}END{printf \"%%d\", (rss+%d);}'",
        sid, sgasize);
#else  
    sprintf(szCmd,
        "ps auwwx |awk 'BEGIN{rss=0;}$NF~/^ora.*%s$/{rss+=($6-%d);}END{printf \"%%d\", (rss+%d);}'",
        sid, sgasize, sgasize);
#endif
    
    ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szTmp, MIN_BUF_LEN);
    if (ret != 0)
    {
        strcpy(errbuf, "2:my_system() error");
        return -1;
    }
    if(strlen(szTmp)>0)
    {
        usesize = strtoul(szTmp, NULL, 10);
    }
    else
    {
        *percent = 0.00;
        return 0;
    }

    ret = GetSysMemSize(&memsize, errbuf);
    if (ret != 0)
    {
        return -1;
    }

    *percent = 100*(float)usesize/(float)memsize;
    if (*percent > 100)
    {
        *percent = 100.00;
    }
    if (*percent < 0)
    {
        strcpy(errbuf, "2:get memory load error");
        return -1;
    }

    return 0;
}
#endif

int GetOraSysCpuUsage(float *percent, char *errbuf)
{
    return GetSysCpuUsage(percent, errbuf);
}

int GetOraSysMemUsage(float *percent, char *errbuf)
{
    return GetSysMemUsage(percent, errbuf);
}

int GetOraSysMemSize(unsigned long *memsize, char *errbuf)
{
    return GetSysMemSize(memsize, errbuf);
}

int GetOraSysIP(char *ipbuf, unsigned long len, char *errbuf)
{
    return GetSysIP(ipbuf, len, errbuf);
}

int GetOraOSVer(char *buf, unsigned long len, char *errbuf)
{
    return GetOSVer(buf, len, errbuf);
}

#ifdef WIN32
int GetOraLsnrStat(int *stat, char *errbuf)
{
    char szCmd[MIN_BUF_LEN];
    char szBuf[MAX_BUF_LEN];

    strcpy(szCmd, "lsnrctl status");
    memset(szBuf, 0, MAX_BUF_LEN);
    my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MAX_BUF_LEN);
    if (strlen(szBuf) < MIN_BUF_LEN || strstr(szBuf, "Error"))
    {
        *stat = 0;
    }
    else
    {
        *stat = 1;
    }
    return 0;
}
#else
int GetOraLsnrStat(int *stat, char *errbuf)
{
    char szCmd[MIN_BUF_LEN];
    char szBuf[MIN_BUF_LEN];
    int ret;

    strcpy(szCmd, "ps -ef|grep ora|grep 'tnslsnr LISTENER -inherit'|grep -v grep");
    ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
    if (ret != 0)
    {
        *stat = 0;
        return 0;
    }
    if (strstr(szBuf, "tnslsnr LISTENER -inherit"))
    {
        *stat = 1;
    }
    else
    {
        *stat = 0;
    }
    return 0;
}
#endif

#ifdef WIN32
int GetOraDbwrStat(const char *sid, int *stat, char *errbuf)
{
    char szBuff[MIN_BUF_LEN];
    int pid;

    if (sid == NULL)
    {
        strcpy(errbuf, "2:sid is NULL");
        return -1;
    }
    sprintf(szBuff, "OracleService%s", sid);
    pid = GetServicePid(szBuff);
    if (pid > 0)
    {
        *stat = 1;
    }
    else
    {
        *stat = 0;
    }

    return 0;
}
#else
int GetOraDbwrStat(const char *sid, int *stat, char *errbuf)
{
    char szCmd[MIN_BUF_LEN];
    char szBuf[MIN_BUF_LEN];
    int ret;

    sprintf(szCmd, "ps -ef|grep -w 'ora_dbw._%s'|grep -v grep", sid);
    ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
    if (ret != 0)
    {
        *stat = 0;
        return 0;
    }
    if (strstr(szBuf, "ora_dbw"))
    {
        *stat = 1;
    }
    else
    {
        *stat = 0;
    }

    return 0;
}
#endif

#ifdef WIN32
int GetOraLgwrStat(const char *sid, int *stat, char *errbuf)
{
    char szBuff[MIN_BUF_LEN];
    int pid;

    if (sid == NULL)
    {
        strcpy(errbuf, "2:sid is NULL");
        return -1;
    }
    sprintf(szBuff, "OracleService%s", sid);
    pid = GetServicePid(szBuff);
    if (pid > 0)
    {
        *stat = 1;
    }
    else
    {
        *stat = 0;
    }
    return 0;
}
#else
int GetOraLgwrStat(const char *sid, int *stat, char *errbuf)
{
    char szCmd[MIN_BUF_LEN];
    char szBuf[MIN_BUF_LEN];
    int ret;

    sprintf(szCmd, "ps -ef|grep -w ora_lgwr_%s|grep -v grep", sid);
    ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
    if (ret != 0)
    {
        *stat = 0;
        return 0;
    }
    if (strstr(szBuf, "ora_lgwr"))
    {
        *stat = 1;
    }
    else
    {
        *stat = 0;
    }

    return 0;
}
#endif

#ifdef WIN32
int GetOraCkptStat(const char *sid, int *stat, char *errbuf)
{
    char szBuff[MIN_BUF_LEN];
    int pid;

    if (sid == NULL)
    {
        strcpy(errbuf, "2:sid is NULL");
        return -1;
    }
    sprintf(szBuff, "OracleService%s", sid);
    pid = GetServicePid(szBuff);
    if (pid > 0)
    {
        *stat = 1;
    }
    else
    {
        *stat = 0;
    }

    return 0;
}
#else
int GetOraCkptStat(const char *sid, int *stat, char *errbuf)
{
    char szCmd[MIN_BUF_LEN];
    char szBuf[MIN_BUF_LEN];
    int ret;

    sprintf(szCmd, "ps -ef|grep -w ora_ckpt_%s|grep -v grep", sid);
    ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
    if (ret != 0)
    {
        *stat = 0;
        return 0;
    }
    if (strstr(szBuf, "ora_ckpt"))
    {
        *stat = 1;
    }
    else
    {
        *stat = 0;
    }
    
    return 0;
}
#endif

#ifdef WIN32
int GetOraSmonStat(const char *sid, int *stat, char *errbuf)
{
    char szBuff[MIN_BUF_LEN];
    int pid;

    if (sid == NULL)
    {
        strcpy(errbuf, "2:sid is NULL");
        return -1;
    }
    sprintf(szBuff, "OracleService%s", sid);
    pid = GetServicePid(szBuff);
    if (pid > 0)
    {
        *stat = 1;
    }
    else
    {
        *stat = 0;
    }

    return 0;
}
#else
int GetOraSmonStat(const char *sid, int *stat, char *errbuf)
{
    char szCmd[MIN_BUF_LEN];
    char szBuf[MIN_BUF_LEN];
    int ret;

    sprintf(szCmd, "ps -ef|grep -w ora_smon_%s|grep -v grep", sid);
    ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
    if (ret != 0)
    {
        *stat = 0;
        return 0;
    }
    if (strstr(szBuf, "ora_smon"))
    {
        *stat = 1;
    }
    else
    {
        *stat = 0;
    }

    return 0;
}
#endif

#ifdef WIN32
int GetOraPmonStat(const char *sid, int *stat, char *errbuf)
{
    char szBuff[MIN_BUF_LEN];
    int pid;

    if (sid == NULL)
    {
        strcpy(errbuf, "2:sid is NULL");
        return -1;
    }
    sprintf(szBuff, "OracleService%s", sid);
    pid = GetServicePid(szBuff);
    if (pid > 0)
    {
        *stat = 1;
    }
    else
    {
        *stat = 0;
    }

    return 0;
}
#else
int GetOraPmonStat(const char *sid, int *stat, char *errbuf)
{
    char szCmd[MIN_BUF_LEN];
    char szBuf[MIN_BUF_LEN];
    int ret;

    sprintf(szCmd, "ps -ef|grep -w ora_pmon_%s|grep -v grep", sid);
    ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
    if (ret != 0)
    {
        *stat = 0;
        return 0;
    }
    if (strstr(szBuf, "ora_pmon"))
    {
        *stat = 1;
    }
    else
    {
        *stat = 0;
    }

    return 0;
}
#endif

int GetOraAllBgProcName(char *buf, unsigned long len)
{
    memset(buf, 0, len);
    strcpy(buf, "DBWR,LGWR,CKPT,SMON,PMON");
    return 0;
}

int GetOraBgProcName(const char *bgname, char *buf, unsigned long len)
{
    memset(buf, 0, len);
    strcpy(buf, bgname);
    return 0;
}

int GetOraDirDiskUsage(const char *dirname, float *percent, char *errbuf)
{
    return GetDirDiskUsage(dirname, percent, errbuf);
}

int GetOraDirDiskSize(const char *dirname, char *buf, unsigned long len, char *errbuf)
{
    return GetDirDiskSize(dirname, buf, len, errbuf);
}

int GetOraDirDiskUsedSize(const char *dirname, char *buf, unsigned long len, char *errbuf)
{
    return GetDirDiskUsedSize(dirname, buf, len, errbuf);
}

int GetOraDirSize(const char *dirname, char *buf, unsigned long len, char *errbuf)
{
    return GetDirSize(dirname, buf, len, errbuf);
}

int GetOraFileSysName(const char *dirname, char *buf, unsigned long len, char *errbuf)
{
    return GetFileSysName(dirname, buf, len, errbuf);
}

int GetOraSysHostName(char *buf, unsigned long len, char *errbuf)
{
    return GetSysHostName(buf, len, errbuf);
}

int GetOraHostMac(char *buf, unsigned long len, char *errbuf)
{
    return GetHostMac(buf, len, errbuf);
}


#ifdef __cplusplus
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -