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

📄 monapi.cc

📁 此源代码只用于学习,不得用于其他商业活动 .
💻 CC
📖 第 1 页 / 共 2 页
字号:
/*
* 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 + -