fdgffd
/**获取cpu占用率
*
*/
BYTE Monitor::getCpuRate()
{
#ifdef OS_UNIX
BYTE cpurate;
unsigned long total1,total2;
unsigned long user1=0,user2=0;
unsigned long system1=0,system2=0;
unsigned long idle1=0,idle2=0;
unsigned long nice1=0,nice2=0;
char cpu;
char text;
FILE *fp;
fp = fopen("/proc/stat", "r");
if (fp == NULL)
return 0;
fgets(text, 200, fp);
sscanf(text, "%s %ld %ld %ld %ld", cpu, &user1, &nice1, &system1, &idle1);
fclose(fp);
total1 = (user1 + nice1 + system1 + idle1);
sleep(1);
fp = fopen("/proc/stat", "r");
fgets(text, 200, fp);
sscanf(text, "%s %ld %ld %ld %ld", cpu, &user2, &nice2, &system2, &idle2);
fclose(fp);
total2 = (user2 + nice2 + system2 + idle2);
if ( (total2-total1) !=0 )
{
cpurate = (short)((((user2-user1)+(system2-system1))*100)/(total2-total1));
if (cpurate == 0 )
cpurate =1;
}
else
cpurate = 0;
return cpurate;
#else
return 33;
#endif
}
/*
*获取mem占用率,实际使用值和最大值
*
*/
BYTE Monitor::getMemRate(WORD32 &memV,WORD32 &total)
{
#ifdef OS_UNIX
BYTE memrate;
FILE *fd;
char buff;
char name;
char name2;
char strtotal;
char strfreed;
WORD32 freed;
fd = fopen ("/proc/meminfo", "r");
if (fd == NULL)
{
memV=20;
total=100;
return 0;
}
fgets (buff, sizeof(buff), fd);
sscanf (buff, "%s %s %s", name, strtotal, name2);
total=atoi(strtotal);
fgets (buff, sizeof(buff), fd); //从fd文件中读取长度为buff的字符串再存到起始地址为buff这个空间里
sscanf (buff, "%s %s %s", name, strfreed, name2);
freed=atoi(strfreed);
memV=total-freed;
memrate = memV*100/total;
fclose(fd); //关闭文件fd
return memrate;
#else
memV=440;
total=1000;
return 44;
#endif
}
//获得disk占用率,实际使用值和最大值
BYTE Monitor::getDiskRate(WORD32 &diskV,WORD32 &diskM)
{
#ifdef OS_UNIX
struct statfs buf;
int bsize;
char dir;
getcwd(dir,sizeof(dir));
if (statfs(dir, &buf) < 0)
return 0;
bsize = buf.f_bsize;
if (buf.f_bavail == -1)
return0;
if (bsize == -1)
bsize = 1024;
diskM = (WORD32)((1.0 * buf.f_blocks * bsize)/(1024*1024));
diskV = (WORD32)((1.0 * (buf.f_blocks-buf.f_bavail) * bsize)/(1024*1024));
return diskV*100/diskM;
#else
diskV=70;
diskM=1000;
return 7;
#endif
}
//获得db占用率,实际使用值和最大值
BYTE Monitor::getDbRate(WORD32 &dbV,WORD32 &dbM)
{
dbV=0;
dbM=0;
if (m_omsType==OMS_TYPE_TERM || m_omsType==OMS_TYPE_PERI)
return 0;
if (connectDb())
{
DbStatement dbStatement(m_dbSess);
DbRecordSet dbRecordSet(dbStatement);
string sql("sp_iqdbspace");
string strDbError = "";
if(!dbStatement.prepareSql(sql))
{
logError("can't prepare sql: %s!",sql.c_str());
return 0;
}
if(!dbStatement.excute(strDbError))
{
logError("excute sql: %s,error: %s",sql.c_str(),strDbError.c_str());
return 0;
}
size_t stRow = 0;//获得行数
size_t stCol = 0;//获得列数
if(!dbRecordSet.getRowCount(stRow))
{
logError("can't get row count!");
return 0;
}
if(!dbRecordSet.getColumnCount(stCol))
{
logError("can't get column count!");
return 0;
}
Poco::DynamicAny tmp;
for (size_t row = 0; row < stRow; row++)
{
dbRecordSet.getValue(row,"DBSPACENAME",tmp);
if(tmp.convert<string>().compare("UBAS_MAIN")==0)//UBAS主空间
{
dbRecordSet.getValue(row,"USAGE",tmp);
BYTE iUsage=tmp.convert<BYTE>();
dbRecordSet.getValue(row,"TOTALSIZE",tmp);
string strTotal=tmp.convert<string>();//如"183.6G"
string strTotal1=strTotal.substr(0,strTotal.length()-1);//去掉最后一个单位字符
string strTotal2=strTotal.substr(strTotal.length()-1,1);//最后一个字符是单位
char loc=strTotal1.find_first_of('.');//查找小数点的位置
if (loc>0)//如果有小数点就取整
strTotal1=strTotal1.substr(0,loc);
else
{
if (loc==0)//小数点在开始位置
{
logError("DB UBAS_MAIN space TOTALSIZE error!");
return 0;
}
}
if(!Util::fromStr<WORD32>(dbM,strTotal1,std::dec))
{
logError("DB UBAS_MAIN space TOTALSIZE transform error!");
return 0;
}
//单位处理
switch(strTotal2.at(0))
{
case 'T':
dbM*=1000000;
break;
case 'G':
dbM*=1000;
break;
case 'K':
dbM/=1000;
}
dbV=dbM/100*iUsage;
return iUsage;
}
}
logError("can't get DB UBAS_MAIN space!");
return 0;
}
else
{
logError("open db failed for NEType:%s,NENum:%d,ModuleType:%s, please check dbenv.xml!",getNEType().c_str(),getNENum(),UBAS_DB_HANDLE);
return 0;
}
}
页:
[1]