?? statistic.c
字號:
LpMessageStatistic=(MESSAGE_STATISTIC_t *)LpCBEMessage;
s_Pid.cFunctionId=MODULEID;
s_Pid.cFunctionId=FUNCTIONID;
switch(LpMessageStatistic->ParaId)
{
case ALL_CELLOFCBC_RESETANDFAIL_CNT:/* CBC支持的所有小區 */
{
/* 分配一個統計進程 */
s_Pid.cFunctionId=FUNCTIONID;
s_Pid.cModuleId=MODULEID;
s_Pid.iProcessId=alloc_pid((char *)&s_Pid);
if ( s_Pid.iProcessId < 0 )
{
printf("Creat Process Error\n");
return FAILURE;
}
memcpy(&LpMessageStatistic->s_StatMessageHead.s_ReceiverPid,
&s_Pid,sizeof(PID_t));
memset(&ProcessData[s_Pid.iProcessId][0],0,LPCB_DATA_SIZE);
memcpy(&ProcessData[s_Pid.iProcessId][0],LpCBEMessage,LpCBEMessage->iLen+2);
LpMessageStatistic=(MESSAGE_STATISTIC_t *)&ProcessData[s_Pid.iProcessId][0];
// memset(&s_CellResetAndFailStatResult,0,sizeof(CELL_RESET_AND_FAIL_STAT_RESULT_t));
memset(&s_Cell_ResetFail_Count,0,sizeof(CELL_RESETFAIL_COUNT_t));
for(i=0;i<MAX_BSC_CONNECT;i++)
{
if (s_BSCCellInfo[i].bFlag==1)
{
for(j=0;j<s_BSCCellInfo[i].cNumberOfBTS;j++)
{
for(k=0;k<s_BSCCellInfo[i].s_BTSCellInfo[j].cNumberOfCell;k++)
{
s_Cell_ResetFail_Count.iFailureCount=s_Cell_ResetFail_Count.iFailureCount+
s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].iFailureCount;
s_Cell_ResetFail_Count.icResetCount=s_Cell_ResetFail_Count.icResetCount+
s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].icResetCount;
}
}
}
}
memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],
&s_Cell_ResetFail_Count,sizeof(CELL_RESETFAIL_COUNT_t));
/* 創建統計定時器 */
iReturnValue=create_timer(LpMessageStatistic->StatTimeLength*1000,
STATISTIC_TIMER,(char *)&s_Pid,NULL);
/* 創建定時器失敗 */
if (iReturnValue<0)
{
printf("Create timer Error!\n");
/* 結束統計進程 */
free_pid((char *)&s_Pid);
return iReturnValue;
}
/* 保存統計定時器在進程區尾部 */
memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-sizeof(int)],&iReturnValue,sizeof(int));
}
break;
case ALL_CELLOFBSC_RESETANDFAIL_CNT:/* BSC的小區 */
{
/* 分配一個統計進程 */
s_Pid.cFunctionId=FUNCTIONID;
s_Pid.cModuleId=MODULEID;
s_Pid.iProcessId=alloc_pid((char *)&s_Pid);
if ( s_Pid.iProcessId < 0 )
{
printf("Creat Process Error\n");
return FAILURE;
}
memcpy(&LpMessageStatistic->s_StatMessageHead.s_ReceiverPid,
&s_Pid,sizeof(PID_t));
memset(&ProcessData[s_Pid.iProcessId][0],0,LPCB_DATA_SIZE);
memcpy(&ProcessData[s_Pid.iProcessId][0],LpCBEMessage,LpCBEMessage->iLen+2);
LpMessageStatistic=(MESSAGE_STATISTIC_t *)&ProcessData[s_Pid.iProcessId][0];
Tid=GetTid(&LpMessageStatistic->BSCIdentifier[0]);
if (Tid<0)
{
return UNRECOGNIZED_BSC;
}
memset(&s_Cell_ResetFail_Count,0,sizeof(CELL_RESETFAIL_COUNT_t));
for(i=0;i<s_BSCCellInfo[Tid].cNumberOfBTS;i++)
{
for(j=0;j<s_BSCCellInfo[Tid].s_BTSCellInfo[i].cNumberOfCell;j++)
{
s_Cell_ResetFail_Count.icResetCount=
s_Cell_ResetFail_Count.icResetCount+
s_BSCCellInfo[Tid].s_BTSCellInfo[i].s_CellId[j].icResetCount;
s_Cell_ResetFail_Count.iFailureCount=
s_Cell_ResetFail_Count.iFailureCount+
s_BSCCellInfo[Tid].s_BTSCellInfo[i].s_CellId[j].iFailureCount;
}
}
memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],&s_Cell_ResetFail_Count,sizeof(CELL_RESETFAIL_COUNT_t));
//
/*
// memset(&s_CellResetAndFailStatResult,0,sizeof(CELL_RESET_AND_FAIL_STAT_RESULT_t));
for(i=0;i<s_BSCCellInfo[Tid].cNumberOfBTS;i++)
{
for(j=0;j<s_BSCCellInfo[Tid].s_BTSCellInfo[i].cNumberOfCell;j++)
{
// k=s_CellResetAndFailStatResult.cNumber;
// memcmp(&s_CellResetAndFailStatResult.s_CellResetAndFailCnt[k].cCell[0],
// &s_BSCCellInfo[Tid].s_BTSCellInfo[i].s_CellId[j].cCellId[0],4);
// s_CellResetAndFailStatResult.s_CellResetAndFailCnt[k].icResetCount=
// s_BSCCellInfo[Tid].s_BTSCellInfo[i].s_CellId[j].icResetCount;
// s_CellResetAndFailStatResult.s_CellResetAndFailCnt[k].iFailureCount=
// s_BSCCellInfo[Tid].s_BTSCellInfo[i].s_CellId[j].iFailureCount;
// s_CellResetAndFailStatResult.cNumber++;
}
}
// memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],
// &s_CellResetAndFailStatResult,
// s_CellResetAndFailStatResult.cNumber*sizeof(CELL_RESET_AND_FAIL_COUNT_t)+1);
*/
/* 創建統計定時器 */
iReturnValue=create_timer(LpMessageStatistic->StatTimeLength*1000,
STATISTIC_TIMER,(char *)&s_Pid,NULL);
/* 創建定時器失敗 */
if (iReturnValue<0)
{
printf("Create timer Error!\n");
/* 結束統計進程 */
free_pid((char *)&s_Pid);
return iReturnValue;
}
/* 保存統計定時器在進程區尾部 */
memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-sizeof(int)],&iReturnValue,sizeof(int));
}
break;
case CELL_RESETANDFAIL_CNT: /* 小區 */
{
/* 分配一個統計進程 */
s_Pid.cFunctionId=FUNCTIONID;
s_Pid.cModuleId=MODULEID;
s_Pid.iProcessId=alloc_pid((char *)&s_Pid);
s_Pid.cFunctionId=FUNCTIONID;
s_Pid.cModuleId=MODULEID;
if ( s_Pid.iProcessId < 0 )
{
printf("Creat Process Error\n");
return FAILURE;
}
memcpy(&LpMessageStatistic->s_StatMessageHead.s_ReceiverPid,
&s_Pid,sizeof(PID_t));
memset(&ProcessData[s_Pid.iProcessId][0],0,LPCB_DATA_SIZE);
memcpy(&ProcessData[s_Pid.iProcessId][0],LpCBEMessage,LpCBEMessage->iLen+2);
LpMessageStatistic=(MESSAGE_STATISTIC_t *)&ProcessData[s_Pid.iProcessId][0];
// memset(&s_CellResetAndFailStatResult,0,sizeof(CELL_RESET_AND_FAIL_STAT_RESULT_t));
/* 初始為不存在 */
bIfCellExist=0;
for(i=0;i<MAX_BSC_CONNECT;i++)
{
if (s_BSCCellInfo[i].bFlag==1)
{
for(j=0;j<s_BSCCellInfo[i].cNumberOfBTS;j++)
{
for(k=0;k<s_BSCCellInfo[i].s_BTSCellInfo[j].cNumberOfCell;k++)
{
if(memcmp(&LpMessageStatistic->cCellId[0],
&s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].cCellId[0],4)==0)
{
/* 記下小區在系統中的位置,記在進程尾部 */
memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-16],&i,4);
memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-12],&j,4);
memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-8],&k,4);
/* 跳出循環 */
bIfCellExist=EXIST;
goto L_out;
}
}
}
}
}
L_out:
if(bIfCellExist==0)
{
return NO_RECOGNIZEABLE_CELL;
}
s_Cell_ResetFail_Count.iFailureCount=
s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].iFailureCount;
s_Cell_ResetFail_Count.icResetCount=
s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].icResetCount;
memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],
&s_Cell_ResetFail_Count,sizeof(CELL_RESETFAIL_COUNT_t));
/*
memcmp(&s_CellResetAndFailStatResult.s_CellResetAndFailCnt[0].cCell[0],
&s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].cCellId[0],4);
s_CellResetAndFailStatResult.s_CellResetAndFailCnt[0].icResetCount=
s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].icResetCount;
s_CellResetAndFailStatResult.s_CellResetAndFailCnt[0].iFailureCount=
s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].iFailureCount;
s_CellResetAndFailStatResult.cNumber++;
memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],
&s_CellResetAndFailStatResult,
s_CellResetAndFailStatResult.cNumber*sizeof(CELL_RESET_AND_FAIL_COUNT_t)+1);
*/
/* 創建統計定時器 */
iReturnValue=create_timer(LpMessageStatistic->StatTimeLength*1000,
STATISTIC_TIMER,(char *)&s_Pid,NULL);
/* 創建定時器失敗 */
if (iReturnValue<0)
{
printf("Create timer Error!\n");
/* 結束統計進程 */
free_pid((char *)&s_Pid);
return iReturnValue;
}
/* 保存統計定時器在進程區尾部 */
memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-sizeof(int)],&iReturnValue,sizeof(int));
}
break;
}
return s_Pid.iProcessId;
}
/* 處理告警的統計 (目前沒使用)
* <0:返回錯誤, >=0:返回Pid
*/
int Process_Statistic_Warning(CBEMESSAGE_t *LpCBEMessage)
{
MESSAGE_STATISTIC_t *LpMessageStatistic;
PID_t s_Pid;
WARNING_STATISTIC_RESULT_t s_WarningStatiResult;
int iReturnValue;
s_Pid.cFunctionId=MODULEID;
s_Pid.cFunctionId=FUNCTIONID;
/* 分配一個統計進程 */
s_Pid.cFunctionId=FUNCTIONID;
s_Pid.cModuleId=MODULEID;
s_Pid.iProcessId=alloc_pid((char *)&s_Pid);
if ( s_Pid.iProcessId < 0 )
{
printf("Creat Process Error\n");
return FAILURE;
}
memset(&ProcessData[s_Pid.iProcessId][0],0,LPCB_DATA_SIZE);
memcpy(&ProcessData[s_Pid.iProcessId][0],LpCBEMessage,LpCBEMessage->iLen+2);
LpMessageStatistic=(MESSAGE_STATISTIC_t *)&ProcessData[s_Pid.iProcessId][0];
memset(&s_WarningStatiResult,0,sizeof(WARNING_STATISTIC_RESULT_t));
/* 資源告警 進程不能分配 */
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=SOURCE_SHORTAGE;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=PID_USEUP;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
s_CBSECount.AlarmType[SOURCE_SHORTAGE-1].s_AlarmCode[PID_USEUP-1];
s_WarningStatiResult.cNumber++;
/* 資源告警 定時器不能分配 */
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=SOURCE_SHORTAGE;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=TIMER_USEUP;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
s_CBSECount.AlarmType[SOURCE_SHORTAGE-1].s_AlarmCode[TIMER_USEUP-1];
s_WarningStatiResult.cNumber++;
/* 打解包告警 解包錯誤告警 */
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=PACK_UNPACK;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=UNRECOGNIZED_PACK;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
s_CBSECount.AlarmType[PACK_UNPACK-1].s_AlarmCode[UNRECOGNIZED_PACK-1];
s_WarningStatiResult.cNumber++;
/* 鏈路告警 IP輸入隊列告警 */
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=LINK_WARNING;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=IP_INPUT_QUEUE;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
s_CBSECount.AlarmType[LINK_WARNING-1].s_AlarmCode[IP_INPUT_QUEUE-1];
s_WarningStatiResult.cNumber++;
/* 鏈路告警 CBC_BSC輸出隊列告警 */
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=LINK_WARNING;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=X25_OUTPUT_QUEUE;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
s_CBSECount.AlarmType[LINK_WARNING-1].s_AlarmCode[X25_OUTPUT_QUEUE-1];
s_WarningStatiResult.cNumber++;
/* 鏈路告警 錯誤包告警 */
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=LINK_WARNING;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=ERROR_PACK ;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
s_CBSECount.AlarmType[LINK_WARNING-1].s_AlarmCode[ERROR_PACK -1];
s_WarningStatiResult.cNumber++;
/* 鏈路告警 Bsc斷連時告警 */
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=LINK_WARNING;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=BSC_LINK ;
s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
s_CBSECount.AlarmType[LINK_WARNING-1].s_AlarmCode[BSC_LINK-1];
s_WarningStatiResult.cNumber++;
memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],&s_WarningStatiResult,s_WarningStatiResult.cNumber*sizeof(ONETYPE_WARNING_STATISTIC_t)+1);
/* 創建統計定時器 */
iReturnValue=create_timer(LpMessageStatistic->StatTimeLength*1000,
STATISTIC_TIMER,(char *)&s_Pid,NULL);
/* 創建定時器失敗 */
if (iReturnValue<0)
{
printf("Create timer Error!\n");
return iReturnValue;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -