📄 cli_log.c
字号:
}
if (EOS_GetTime(&sTime) != G_SUCCESS)
{
sTime.ucYear = 0x03;
sTime.ucMonth = 0x05;
sTime.ucDay = 0x01;
sTime.ucHour = 0x00;
sTime.ucMinute = 0x00;
sTime.ucSecond = 0x00;
CLI_RECORD(CLI_STAT_CANNOT_GET_TIME);
}
/*---------------------------------------- ------------
记录日志
---------------------------------------------------- */
usSaveIndex = m_pstLogTblCtrl->usLogTail;
pstLogItem = &m_astLogTable[usSaveIndex];
ulDelLevel = pstLogItem->ulLevel;
pstLogItem->ulLogDate = LOG_MAKE_TIME(sTime.ucYear, sTime.ucMonth, sTime.ucDay);
pstLogItem->ulLogTime = LOG_MAKE_TIME(sTime.ucHour, sTime.ucMinute, sTime.ucSecond);
pstLogItem->ulClientIp = ulClientIp;
pstLogItem->ulLevel = ulLevel;
pstLogItem->ulLogMode = ulLogMode;
EOS_StrNCpy(pstLogItem->szCommand, szCommand, MT_LOG_CMD_LEN - 1);
pstLogItem->szCommand[MT_LOG_CMD_LEN - 1] = '\0';
EOS_StrNCpy(pstLogItem->szUserName, szUserName, USERNAME_LEN - 1);
pstLogItem->szUserName[USERNAME_LEN - 1] = '\0';
pstLogItem->sReserve = 0;
pstLogItem->usLogCrc = EOS_CrcMakeCheckSum((_U8*)pstLogItem + sizeof(_U16), sizeof(ST_LOG_ITEM) - sizeof(_U16));
/*---------------------------------------- ------------
日志表的处理
---------------------------------------------------- */
/* 日志表不满 */
if( m_pstLogTblCtrl->usLogCount < LOG_MAX_NUM )
{
DBG_ASSERT( m_pstLogTblCtrl->usLogHead == 0 );
m_pstLogTblCtrl->usLogTail = CLI_INCCYCLE(m_pstLogTblCtrl->usLogTail, LOG_MAX_NUM);
m_pstLogTblCtrl->usLogCount ++;
}
/* 日志表满, 循环覆盖 */
else
{
DBG_ASSERT( m_pstLogTblCtrl->usLogHead == m_pstLogTblCtrl->usLogTail );
DBG_ASSERT( m_pstLogTblCtrl->usLogCount == LOG_MAX_NUM );
m_pstLogTblCtrl->usLogTail = CLI_INCCYCLE(m_pstLogTblCtrl->usLogTail, LOG_MAX_NUM);
m_pstLogTblCtrl->usLogHead = CLI_INCCYCLE(m_pstLogTblCtrl->usLogHead, LOG_MAX_NUM);
}
m_pstLogTblCtrl->usCtrlCrc = EOS_CrcMakeCheckSum((_U8*)m_pstLogTblCtrl + sizeof(_U16), sizeof(ST_LOG_TBL_CTRL) - sizeof(_U16));
/*---------------------------------------- ------------
映射表的处理
---------------------------------------------------- */
/* 映射表要重置的最小用户级别 */
ulMinLevel = MIN( ulLevel, ulDelLevel );
if( ulMinLevel < m_ulLogMapResetMinLevel )
{
m_ulLogMapResetMinLevel = ulMinLevel;
}
return G_SUCCESS;
}
/*********************************************************************/
/* 函数名称 : CLI_GetOneLog() */
/* 函数功能 : 根据索引获取一条日志信息 */
/* 输入参数 : usIndex: 日志索引 */
/* 返回 : 日志信息结构指针 */
/* 上层函数 : */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
P_ST_LOG_ITEM CLI_GetOneLog(_U16 usIndex)
{
/* 索引的合法性检查 */
if (LOG_MAX_NUM <= usIndex)
{
MT_ERRLOG(usIndex);
return G_NULL;
}
return &(m_astLogTable[usIndex]);
}
/*********************************************************************/
/* 函数名称 : CLI_DisplayOneLog() */
/* 函数功能 : 显示一条日志信息 */
/* 输入参数 : pstLogItem :要显示的日志结构 */
/* 输出参数 : 无 */
/* 返回 : 成功、失败 */
/* 上层函数 : */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_U32 CLI_DisplayOneLog(P_ST_LOG_ITEM pstLogItem)
{
_S8 szIPString[20] ;
_S8 szTime[20];
_S8 szCmd[30];
_S8 szName[10];
PTerm_Data_S pTermStruct;
if (pstLogItem == G_NULL)
{
MT_ERRLOG(0);
return G_FAILURE;
}
if ((pTermStruct = CLI_GetCurrentTaskData()) == G_NULL)
{
MT_ERRLOG(0);
return G_FAILURE;
}
/* 如果操作者的权限比所查询的日志的用户权限小,不允许查询 */
if (pTermStruct->ucUserLevel < (_U8)pstLogItem->ulLevel)
return G_FAILURE;
if (pstLogItem->ulClientIp != 0)
EOS_IPAddrToStr(pstLogItem->ulClientIp, szIPString);
else
EOS_StrCpy(szIPString, " --");
EOS_Sprintf(szTime, "%02d-%02d-%02d %02d:%02d:%02d", (pstLogItem->ulLogDate >> 16) & 0xff,
((pstLogItem->ulLogDate >> 8) & 0xff) + 1,
(pstLogItem->ulLogDate ) & 0xff,
(pstLogItem->ulLogTime >> 16) & 0xff,
(pstLogItem->ulLogTime >> 8) & 0xff,
(pstLogItem->ulLogTime) & 0xff);
EOS_StrNCpy(szCmd, pstLogItem->szCommand, 25);
szCmd[25] = '\0';
EOS_StrNCpy(szName, pstLogItem->szUserName, 9);
szName[9] = '\0';
return IO_Print(CLI_LOG_TABLE_ITEM, szCmd,
szName,
CLI_GetUserLogModeString( pstLogItem->ulLogMode ),
szIPString,
szTime,
LINE_LENGTH);
}
/*********************************************************************/
/* 函数名称 : CLI_DisplayAllLog() */
/* 函数功能 : 显示所有的日志信息 */
/* 返回 : 成功、失败 */
/* 上层函数 : */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_U32 CLI_DisplayAllLog(_VOID)
{
P_ST_LOG_ITEM psLogItem;
_U16 i, usIndex;
/* WIN32调试版本, 做一下检查 */
#if (EOS_OS_TYPE == EOS_WIN32)
DBG_ASSERT( CLI_LogTableCheck() == G_SUCCESS );
#endif
/* 无记录 */
if ( 0 == m_pstLogTblCtrl->usLogCount )
{
return G_FAILURE;
}
if ( CLI_LogTableCtlrCheck() != G_SUCCESS )
{
MT_ERRLOG(0);
(_VOID)CLI_LogTableInit();
return G_FAILURE;
}
IO_Print(CLI_LOG_HEAD_DISP);
IO_Print(PUB_TABLE_EMBODY);
usIndex = m_pstLogTblCtrl->usLogTail;
for( i = 0; i < m_pstLogTblCtrl->usLogCount; i ++ )
{
usIndex = CLI_DECCYCLE(usIndex, LOG_MAX_NUM);
if ((psLogItem = CLI_GetOneLog(usIndex)) == G_NULL)
{
return G_FAILURE;
}
/* 显示当前所取得的日志 */
if (CLI_LogItemCheck(psLogItem) == G_SUCCESS)
{
(_VOID)CLI_DisplayOneLog(psLogItem);
}
}
DBG_ASSERT( usIndex == m_pstLogTblCtrl->usLogHead );
IO_Print(PUB_TABLE_EMBODY);
return G_SUCCESS;
}
/*==============================================================*/
/* 函数名 :CLI_CmdRecord */
/* 函数功能 :操作命令的记录 */
/* 输入参数 :PTerm_Data_S pTermStruct 任务数据指针 */
/* 输出参数 :PTerm_Data_S pTermStruct 任务数据指针 */
/* 返回值 :无 */
/* 调用函数 :无 */
/* 被调函数 : */
/*==============================================================*/
_VOID CLI_CmdRecord ( PTerm_Data_S pTermStruct )
{
_U32 ulTmp ;
_U32 ulLogMode ;
_S8 szCommandBuf[CT_MAX_CMDBUF] ;
/* 去掉多余空格 */
_TrimString( szCommandBuf, pTermStruct->szCommandBuf ) ;
/* 如果命令缓冲区非空则保存该命令到历史命令缓冲区中 */
if ( szCommandBuf[0] == '\0'
|| szCommandBuf[0] == KEY_CTRL_Z
|| szCommandBuf[0] == KEY_CTRL_C
|| strchr (szCommandBuf, '?') != G_NULL)
{
if ( pTermStruct->szCommandBuf [ EOS_StrLen ( pTermStruct->szCommandBuf ) - 1 ]
== '?' && pTermStruct->ucHelpMode == 0)
{
pTermStruct->szCommandBuf [ EOS_StrLen ( pTermStruct->szCommandBuf ) - 1 ]
= '\0' ;
EOS_StrCpy ( pTermStruct->szEditBuf, pTermStruct->szCommandBuf ) ;
pTermStruct->iCurrentPos = (_S32)EOS_StrLen ( pTermStruct->szEditBuf ) ;
}
pTermStruct->ulCommandExecOk = COMMAND_UNFINISHED ;
pTermStruct->szCommandBuf[0] = '\0' ;
pTermStruct->pWS->szCmdString[0] = '\0';
return ;
}
/* 搜寻第一个空闲的历史命令缓冲区 */
for ( ulTmp = 0 ; ulTmp < HISTORY_SIZE ; ulTmp ++ )
{
if ( ! ( pTermStruct->szHistory[ulTmp][0] ) )
break ;
}
pTermStruct->iHistoryPos = (_S32)ulTmp;
if (ulTmp == 0 || EOS_StriCmp(szCommandBuf, pTermStruct->szHistory[ulTmp - 1]))
{
/* 如果历史命令缓冲区已满,则将最早的历史命令清除 */
if ( ulTmp == HISTORY_SIZE )
{
for ( ulTmp = 1 ; ulTmp < HISTORY_SIZE ; ulTmp ++ )
EOS_StrCpy ( pTermStruct->szHistory[ ulTmp - 1 ],
pTermStruct->szHistory[ ulTmp ] ) ;
ulTmp = HISTORY_SIZE - 1 ;
}
/* 将当前命令写入到找到的空闲历史命令缓冲区中去 */
EOS_StrCpy ( pTermStruct->szHistory[ ulTmp ], szCommandBuf ) ;
pTermStruct->iHistoryPos = (_S32)ulTmp + 1 ;
}
if (pTermStruct->iSocket == -1)
ulLogMode = 0 ;
else if(pTermStruct->iSocket == -2)
ulLogMode = 2 ;
else
ulLogMode = 1 ;
if (pTermStruct->ulCommandExecOk == COMMAND_ACCOMPLISHED)
{
if (szCommandBuf[0] == 0)
return ;
_AffirmStrBeLower(szCommandBuf);
if ((m_ulLogTag == 1)
&& (EOS_StrNCmp(szCommandBuf, "show ", 5) != 0)
&& (EOS_StrNCmp(szCommandBuf, "display ", 8) != 0))
{
(_VOID)CLI_SaveUserLog(pTermStruct->szCurUserName, ulLogMode, pTermStruct->ulClientIP, szCommandBuf) ;
}
m_ulLogTag = 0;
}
pTermStruct->ulCommandExecOk = COMMAND_UNFINISHED ;
/* 清空命令缓冲区,等待接收下一个命令 */
pTermStruct->szCommandBuf[0] = '\0' ;
pTermStruct->pWS->szCmdString[0] = '\0';
return ;
}
/*==============================================================*/
/* 函数名 :CLI_RecordCurrentCmd */
/* 函数功能 :当前操作命令的记录 */
/* 输入参数 :PTerm_Data_S pTermStruct 任务数据指针 */
/* 输出参数 :PTerm_Data_S pTermStruct 任务数据指针 */
/* 返回值 :无 */
/* 调用函数 :无 */
/* 被调函数 :该函数仅供命令执行函数可能不返回到正常命令 */
/* 流程的情况下调用 */
/*==============================================================*/
_VOID CLI_RecordCurrentCmd (_VOID)
{
PTerm_Data_S pTermStruct;
if ((pTermStruct = CLI_GetCurrentTaskData()) == G_NULL)
{
MT_ERRLOG(0);
return ;
}
pTermStruct->ulCommandExecOk = COMMAND_ACCOMPLISHED;
m_ulLogTag = 1;
CLI_CmdRecord(pTermStruct);
return;
}
#else
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -