📄 monapi.cc
字号:
/*
* Copyright (c) 2002, 南京联创系统集成股份有限公司综合结算产品部
* All rights reserved.
*
* 文件名称:monapi.cc
* 摘 要:定义了集中监控程序所用到的类的实现
*
* 当前版本:
* 作 者:冯亮
* 完成日期:2002年09月04日
*
* 取代版本:
* 作 者:
* 完成日期:
*/
#include "monapi.h"
/*
*Function Name :ShareMemoryInit
*Description :连接共享内存
*Input :无
*Returns :无
*complete :
*/
bool C_ShareMemory::ShareMemoryInit(void)
{
shmidproc = shmget(SHM_KEY,sizeof(S_ShareMemoryInformation)*MON_MAXPROC,SHM_FLAG);
if (shmidproc < 0)
{
return false;
}
pShareMemory = (S_ShareMemoryInformation *)shmat(shmidproc,0,0);
/*连接到共享内存*/
/*pShareMemory=-1表示shmat失败*/
if (pShareMemory == (S_ShareMemoryInformation *)-1)
{
return false;
}
return true;
}
/*把共享内存全部清零*/
void C_ShareMemory::ClearAllMemory(void)
{
S_ShareMemoryInformation lv_ShareMemory;
memset(&lv_ShareMemory, 0, sizeof(lv_ShareMemory));
for(int i = 0; i < MON_MAXPROC; i++)
{
WriteShareMemory(i, &lv_ShareMemory);
}
return;
}
/******************************************
*Function Name :DestroyShareMemory
*Description :拆除共享内存
*Input :无
*Returns :true--成功 false--失败
*complete :
*******************************************/
bool C_ShareMemory::DestroyShareMemory(void)
{
shmidproc = shmget(SHM_KEY, 0, 0666);
if (shmidproc < 0)
{
return false;
}
if(-1 == shmctl(shmidproc, IPC_RMID, 0))
{
return false;
}
return true;
}
/*
*Function Name :WriteShareMemory
*Description :写共享内存
*Input :
idx------------>共享内存内的位置
ProcessInformation------>共享内存信息
*Returns :无
*complete :
*/
void C_ShareMemory::WriteShareMemory(int idx,S_ShareMemoryInformation *ShareMemoryInformation)
{
memcpy((pShareMemory+idx)->commandline,ShareMemoryInformation->commandline, sizeof(ShareMemoryInformation->commandline));
memcpy((pShareMemory+idx)->startdate,ShareMemoryInformation->startdate, sizeof(ShareMemoryInformation->startdate));
memcpy((pShareMemory+idx)->starttime,ShareMemoryInformation->starttime, sizeof(ShareMemoryInformation->starttime));
memcpy((pShareMemory+idx)->procid,ShareMemoryInformation->procid, sizeof(ShareMemoryInformation->procid));
memcpy((pShareMemory+idx)->object,ShareMemoryInformation->object, sizeof(ShareMemoryInformation->object));
memcpy((pShareMemory+idx)->status,ShareMemoryInformation->status, sizeof(ShareMemoryInformation->status));
memcpy((pShareMemory+idx)->step,ShareMemoryInformation->step, sizeof(ShareMemoryInformation->step));
memcpy((pShareMemory+idx)->count,ShareMemoryInformation->count, sizeof(ShareMemoryInformation->count));
memcpy((pShareMemory+idx)->totalsize,ShareMemoryInformation->totalsize, sizeof(ShareMemoryInformation->totalsize));
memcpy((pShareMemory+idx)->finishedsize,ShareMemoryInformation->finishedsize, sizeof(ShareMemoryInformation->finishedsize));
memcpy((pShareMemory+idx)->processcpu, ShareMemoryInformation->processcpu, sizeof(ShareMemoryInformation->processcpu));
memcpy((pShareMemory+idx)->processmem, ShareMemoryInformation->processmem, sizeof(ShareMemoryInformation->processmem));
(pShareMemory+idx)->total = ShareMemoryInformation->total;
(pShareMemory+idx)->error = ShareMemoryInformation->error;
memcpy((pShareMemory+idx)->cdrprocspeed, ShareMemoryInformation->cdrprocspeed, sizeof(ShareMemoryInformation->cdrprocspeed));
memcpy(((pShareMemory+idx)->hostinformation).hostcpu, (ShareMemoryInformation->hostinformation).hostcpu, sizeof((ShareMemoryInformation->hostinformation).hostcpu));
memcpy(((pShareMemory+idx)->hostinformation).hostmem, (ShareMemoryInformation->hostinformation).hostmem, sizeof((ShareMemoryInformation->hostinformation).hostmem));
(pShareMemory+idx)->CurrentIndex = ShareMemoryInformation->CurrentIndex;
(pShareMemory+idx)->ChannelCode = ShareMemoryInformation->ChannelCode;
return;
}
/*
*Function Name :ReadShareMemory
*Description :读共享内存
*Input :
idx------------>共享内存内的位置
ProcessInformation------>共享内存信息
*Returns :无
*complete :
*/
void C_ShareMemory::ReadShareMemory(int idx,S_ShareMemoryInformation *ShareMemoryInformation)
{
memcpy(ShareMemoryInformation->commandline, (pShareMemory+idx)->commandline, sizeof(ShareMemoryInformation->commandline));
memcpy(ShareMemoryInformation->startdate, (pShareMemory+idx)->startdate, sizeof(ShareMemoryInformation->startdate));
memcpy(ShareMemoryInformation->starttime,(pShareMemory+idx) ->starttime, sizeof(ShareMemoryInformation->starttime));
memcpy(ShareMemoryInformation->procid, (pShareMemory+idx)->procid, sizeof(ShareMemoryInformation->procid));
memcpy(ShareMemoryInformation->object, (pShareMemory+idx)->object, sizeof(ShareMemoryInformation->object));
memcpy(ShareMemoryInformation->status, (pShareMemory+idx)->status, sizeof(ShareMemoryInformation->status));
memcpy(ShareMemoryInformation->step, (pShareMemory+idx)->step, sizeof(ShareMemoryInformation->step));
memcpy(ShareMemoryInformation->count, (pShareMemory+idx)->count, sizeof(ShareMemoryInformation->count));
memcpy(ShareMemoryInformation->totalsize, (pShareMemory+idx)->totalsize, sizeof(ShareMemoryInformation->totalsize));
memcpy(ShareMemoryInformation->finishedsize,(pShareMemory+idx)->finishedsize, sizeof(ShareMemoryInformation->finishedsize));
memcpy(ShareMemoryInformation->processcpu, (pShareMemory+idx)->processcpu, sizeof(ShareMemoryInformation->processcpu));
memcpy(ShareMemoryInformation->processmem, (pShareMemory+idx)->processmem, sizeof(ShareMemoryInformation->processmem));
ShareMemoryInformation->total = (pShareMemory+idx)->total;
ShareMemoryInformation->error = (pShareMemory+idx)->error;
memcpy(ShareMemoryInformation->cdrprocspeed, (pShareMemory+idx)->cdrprocspeed, sizeof(ShareMemoryInformation->cdrprocspeed));
memcpy((ShareMemoryInformation->hostinformation).hostcpu, ((pShareMemory+idx)->hostinformation).hostcpu, sizeof((ShareMemoryInformation->hostinformation).hostcpu));
memcpy((ShareMemoryInformation->hostinformation).hostmem, ((pShareMemory+idx)->hostinformation).hostmem, sizeof((ShareMemoryInformation->hostinformation).hostmem));
ShareMemoryInformation->CurrentIndex = (pShareMemory+idx)->CurrentIndex;
ShareMemoryInformation->ChannelCode = (pShareMemory+idx)->ChannelCode;
return;
}
S_ShareMemoryInformation *C_ShareMemory::GetpShareMemory(void)
{
return pShareMemory;
}
C_Monitor::~C_Monitor(void)
{
if(CurrentIndex)
{
S_ShareMemoryInformation lv_ShareMemory;
memset(&lv_ShareMemory, 0, sizeof(lv_ShareMemory));
ShareMemory.ReadShareMemory(CurrentIndex, &lv_ShareMemory);
memset(lv_ShareMemory.commandline, 0, sizeof(lv_ShareMemory.commandline));
memset(lv_ShareMemory.procid, 0, sizeof(lv_ShareMemory.procid));
lv_ShareMemory.CurrentIndex = 0;
lv_ShareMemory.ChannelCode =0;
ShareMemory.WriteShareMemory(CurrentIndex, &lv_ShareMemory);
}
}
/*
* Function Name :ReportStatus
* Description :报告进程状态
* Input Param :Status -- 状态 Object -- 处理对象
* Returns
* complete :
*/
void C_Monitor::ReportStatus(const char *Status,const char *Object, const char *pchStep)
{
S_ShareMemoryInformation lv_ShareMemory;
memset(&lv_ShareMemory, 0, sizeof(lv_ShareMemory));
ShareMemory.ReadShareMemory(CurrentIndex, &lv_ShareMemory);
/*写入进程状态*/
memset(lv_ShareMemory.status,0,sizeof(lv_ShareMemory.status));
memcpy(lv_ShareMemory.status,Status,sizeof(lv_ShareMemory.status) - 1);
/*写入进程处理对象*/
memset(lv_ShareMemory.object,0,sizeof(lv_ShareMemory.object));
memcpy(lv_ShareMemory.object,Object,sizeof(lv_ShareMemory.object) - 1);
if(strcmp(Status, IDLE) == 0)
{
strcpy(lv_ShareMemory.cdrprocspeed,ZeroDisplay);
}
if(pchStep != 0)
{
//写入进程的处理步骤
memset(lv_ShareMemory.step, 0, sizeof(lv_ShareMemory.step));
memcpy(lv_ShareMemory.step, pchStep, sizeof(lv_ShareMemory.step) - 1);
}
ShareMemory.WriteShareMemory(CurrentIndex,&lv_ShareMemory);
return;
}
/*
* Function Name :AddCount
* Description :汇报话单数
* Input Param :CDRType -- 话单类型
* Returns
* complete :
*/
void C_Monitor::AddCount(int CDRType)
{
S_ShareMemoryInformation lv_ShareMemory;
static unsigned long LastTime = 0, CurrentCount = 0;
unsigned long CurrentTime = 0;
time_t lv_startTime;
CurrentCount++;
strcpy(ZeroDisplay," 0条/秒");
time(&lv_startTime);
CurrentTime = lv_startTime;
memset(&lv_ShareMemory, 0, sizeof(lv_ShareMemory));
ShareMemory.ReadShareMemory(CurrentIndex, &lv_ShareMemory);
/*从启动到现在处理的话单总数*/
lv_ShareMemory.total++;
if(CurrentTime != LastTime)
{
memset(lv_ShareMemory.cdrprocspeed, 0, sizeof(lv_ShareMemory.cdrprocspeed));
sprintf(lv_ShareMemory.cdrprocspeed, "%4lu条/秒", CurrentCount / (CurrentTime - LastTime));
CurrentCount = 0;
LastTime = CurrentTime;
}
switch (CDRType)
{
case NORMALCDR:
break;
case ERRORCDR:
lv_ShareMemory.error++;
break;
default:
break;
}
ShareMemory.WriteShareMemory(CurrentIndex,&lv_ShareMemory);
return;
}
/*
* Function Name :AddRate
* Description :汇报传输速率
* Returns
* complete :
*/
void C_Monitor::AddRate(unsigned long Bytes)
{
S_ShareMemoryInformation lv_ShareMemory;
static unsigned long LastTime = 0, CurrentBytes = 0;
unsigned long CurrentTime = 0;
unsigned long Delta = 0;
time_t lv_startTime;
CurrentBytes += Bytes;
strcpy(ZeroDisplay," 0KB/S");
time(&lv_startTime);
CurrentTime = lv_startTime;
memset(&lv_ShareMemory, 0, sizeof(lv_ShareMemory));
ShareMemory.ReadShareMemory(CurrentIndex, &lv_ShareMemory);
lv_ShareMemory.total++;
//begin
if(CurrentTime != LastTime)
{
memset(lv_ShareMemory.cdrprocspeed, 0, sizeof(lv_ShareMemory.cdrprocspeed));
Delta = CurrentTime - LastTime;
sprintf(lv_ShareMemory.cdrprocspeed, "%4luKB/S", (CurrentBytes/1024) / (Delta ? Delta : 1));
CurrentBytes = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -