📄 cli_log.c
字号:
_U16 *ausMapTbl;
/* WIN32调试版本, 做一下检查 */
#if (EOS_OS_TYPE == EOS_WIN32)
DBG_ASSERT( CLI_LogTableCheck() == G_SUCCESS );
#endif
/* 不需要重置映射表 */
if( CT_AL_NULL <= m_ulLogMapResetMinLevel )
{
return G_SUCCESS;
}
/* 没有初始化, 申请到索引表的内存 */
if( G_NULL == m_ausLogMapIndexTable[0] )
{
MT_ERRLOG(0);
return G_FAILURE;
}
/* 日志表为空, 映射表全部重置 */
if( 0 == m_pstLogTblCtrl->usLogCount )
{
m_ulLogMapResetMinLevel = CT_AL_QUERY;
}
/* 大于最小改动级别的映射表需要重置, 控制结构需要重新初始化 */
for( ulUserLevel = m_ulLogMapResetMinLevel; ulUserLevel < CT_AL_NULL ; ulUserLevel ++ )
{
EOS_MemZero( &m_astLogIndexMapCtrl[ulUserLevel], sizeof(ST_LOG_INDEX_MAP_CTRL) );
EOS_MemSet( m_ausLogMapIndexTable[ulUserLevel], G_NULL_BYTE, sizeof(_U16) * LOG_MAX_NUM );
}
/* 遍历日志表, 重置映射表 */
usLogIndex = m_pstLogTblCtrl->usLogHead;
for( i = 0; i < m_pstLogTblCtrl->usLogCount; i ++ )
{
pstLogItem = &m_astLogTable[usLogIndex];
DBG_ASSERT( pstLogItem->ulLevel < CT_AL_NULL );
for( ulUserLevel = m_ulLogMapResetMinLevel; ulUserLevel < CT_AL_NULL ; ulUserLevel ++ )
{
if( pstLogItem->ulLevel <= ulUserLevel )
{
pstMapCtrl = &m_astLogIndexMapCtrl[ulUserLevel];
ausMapTbl = m_ausLogMapIndexTable[ulUserLevel];
ausMapTbl[pstMapCtrl->usMapTail] = usLogIndex;
pstMapCtrl->usMapTail = CLI_INCCYCLE(pstMapCtrl->usMapTail, LOG_MAX_NUM);
pstMapCtrl->usMapCount ++;
DBG_ASSERT( pstMapCtrl->usMapCount <= LOG_MAX_NUM );
DBG_ASSERT( pstMapCtrl->usMapHead == 0 );
}
}
usLogIndex = CLI_INCCYCLE( usLogIndex, LOG_MAX_NUM );
}
m_ulLogMapResetMinLevel = CT_AL_NULL;
/* WIN32调试版本, 做一下检查 */
#if (EOS_OS_TYPE == EOS_WIN32)
DBG_ASSERT( G_SUCCESS == CLI_LogMapCheck() );
#endif
return G_SUCCESS;
}
/*-----------------------------------------------------------------------------
函数名称 : CLI_LogMapCheck();
功能 : 索引映射表的合法性检查;
输入参数 : 无.
输出参数 : 无.
返回值 : G_SUCCESS, 成功;
其他, 失败.
函数调用说明:
典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_LogMapCheck( _VOID )
{
_U32 i, j;
_U32 ulUserLevel;
_U16 usCount, ausCount[CT_AL_NULL];
_U16 usLogIndex;
_U16 usMapIndex, usHighMapIndex;
P_ST_LOG_ITEM pstLogItem;
ST_LOG_INDEX_MAP_CTRL *pstMapCtrl, *pstHighMapCtrl;
_U16 *ausMapTbl, *ausHighMapTbl;
_BOOL bLogIndexMatch;
/* 日志总数的合法性检查 */
pstMapCtrl = &m_astLogIndexMapCtrl[CT_AL_NULL - 1];
if( pstMapCtrl->usMapCount != m_pstLogTblCtrl->usLogCount )
{
DBG_ErrLog( 0, EN_ERR_LEVEL_GENERAL, pstMapCtrl->usMapCount, m_pstLogTblCtrl->usLogCount );
return G_FAILURE;
}
/* 不同级别用户的日志数目的合法性检查 */
EOS_MemZero( ausCount, ( sizeof(_U16) * CT_AL_NULL ) );
usLogIndex = m_pstLogTblCtrl->usLogHead;
for( i = 0; i < m_pstLogTblCtrl->usLogCount; i ++ )
{
pstLogItem = &m_astLogTable[usLogIndex];
if( CT_AL_NULL > pstLogItem->ulLevel )
{
ausCount[pstLogItem->ulLevel] ++;
}
else
{
DBG_ErrLog( 0, EN_ERR_LEVEL_GENERAL, usLogIndex, pstLogItem->ulLevel );
}
usLogIndex = CLI_INCCYCLE(usLogIndex, LOG_MAX_NUM);
}
usCount = 0;
for( ulUserLevel = 0; ulUserLevel < CT_AL_NULL; ulUserLevel ++ )
{
pstMapCtrl = &m_astLogIndexMapCtrl[ulUserLevel];
usCount += ausCount[ulUserLevel];
if( usCount != pstMapCtrl->usMapCount )
{
MT_ERRLOG(ulUserLevel);
return G_FAILURE;
}
}
/* 位置的合法性检查(1) : 最大级别映射表肯定与日志表保持一致 */
pstMapCtrl = &m_astLogIndexMapCtrl[CT_AL_NULL - 1];
ausMapTbl = m_ausLogMapIndexTable[CT_AL_NULL - 1];
usMapIndex = pstMapCtrl->usMapHead;
usLogIndex = m_pstLogTblCtrl->usLogHead;
for( i = 0; i < m_pstLogTblCtrl->usLogCount; i ++ )
{
if( ausMapTbl[usMapIndex] != usLogIndex )
{
DBG_ErrLog( 0, EN_ERR_LEVEL_GENERAL, usMapIndex, usLogIndex );
}
usMapIndex = CLI_INCCYCLE(usMapIndex, LOG_MAX_NUM);
usLogIndex = CLI_INCCYCLE(usLogIndex, LOG_MAX_NUM);
}
/* 位置的合法性检查(2) : 大级别的映射表包含小级别的映射表 */
for( ulUserLevel = 0; ulUserLevel < CT_AL_NULL - 1; ulUserLevel ++ )
{
pstMapCtrl = &m_astLogIndexMapCtrl[ulUserLevel];
ausMapTbl = m_ausLogMapIndexTable[ulUserLevel];
pstHighMapCtrl = &m_astLogIndexMapCtrl[ulUserLevel + 1];
ausHighMapTbl = m_ausLogMapIndexTable[ulUserLevel + 1];
if( 0 == pstMapCtrl->usMapCount )
{
continue;
}
usMapIndex = pstMapCtrl->usMapHead;
usHighMapIndex = pstHighMapCtrl->usMapHead;
j = 0;
bLogIndexMatch = G_TRUE;
for( i = 0; i < pstMapCtrl->usMapCount; i ++ )
{
for( ; j < pstHighMapCtrl->usMapCount; j ++ )
{
/* 匹配了 */
if( ausMapTbl[usMapIndex] == ausHighMapTbl[usHighMapIndex] )
{
bLogIndexMatch = G_TRUE;
}
usHighMapIndex = CLI_INCCYCLE(usHighMapIndex, LOG_MAX_NUM);
if( G_TRUE == bLogIndexMatch )
{
break;
}
}
if( G_TRUE == bLogIndexMatch )
{
usMapIndex = CLI_INCCYCLE(usMapIndex, LOG_MAX_NUM);
}
else
{
MT_ERRLOG(ulUserLevel);
return G_FAILURE;
}
}
}
return G_SUCCESS;
}
/*-----------------------------------------------------------------------------
函数名称 : CLI_LogMapDisplay();
功能 : 显示索引映射表的信息;
输入参数 : 无.
输出参数 : 无.
返回值 : G_SUCCESS, 成功;
其他, 失败.
函数调用说明:
典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_LogMapDisplay ( _U32 ulTermID )
{
_U32 i, ulRet;
_U32 ulUserLevel;
_U16 usLogIndex;
_U16 usMapIndex;
P_ST_LOG_ITEM pstLogItem;
ST_LOG_INDEX_MAP_CTRL *pstMapCtrl;
_U16 *ausMapTbl;
_S8 szOut[256];
#ifdef PC_LINT
(_VOID)ulTermID;
#endif
/* 重置映射表 */
ulRet = CLI_LogMapReset();
if( G_SUCCESS != ulRet )
{
MT_ERRLOG(0);
return G_FAILURE;
}
for( ulUserLevel = 0; ulUserLevel < CT_AL_NULL; ulUserLevel ++ )
{
pstMapCtrl = &m_astLogIndexMapCtrl[ulUserLevel];
ausMapTbl = m_ausLogMapIndexTable[ulUserLevel];
EOS_Sprintf( szOut,
G_STR_HEAD"-------- <ulUserLevel %ld> --------"
G_STR_HEAD"usMapCount %ld"
G_STR_HEAD"usMapHead %ld"
G_STR_HEAD"usMapTail %ld",
ulUserLevel,
pstMapCtrl->usMapCount,
pstMapCtrl->usMapHead,
pstMapCtrl->usMapTail
);
IO_OutString( szOut );
if( 0 == pstMapCtrl->usMapCount )
{
continue;
}
usMapIndex = pstMapCtrl->usMapHead;
for( i = 0; i < pstMapCtrl->usMapCount; i ++ )
{
usLogIndex = ausMapTbl[usMapIndex];
EOS_Sprintf( szOut,
G_STR_HEAD"<usMapIndex %3ld> ==> <usLogIndex %3ld> ",
usMapIndex,
usLogIndex
);
IO_OutString( szOut );
pstLogItem = CLI_GetOneLog( usLogIndex );
if( G_NULL == pstLogItem )
{
DBG_ErrLog( 0, EN_ERR_LEVEL_GENERAL, ulUserLevel, usMapIndex );
continue;
}
ulRet = CLI_LogItemCheck( pstLogItem );
if( G_SUCCESS != ulRet )
{
DBG_ErrLog( 0, EN_ERR_LEVEL_GENERAL, ulUserLevel, usMapIndex );
continue;
}
(_VOID)CLI_DisplayOneLog(pstLogItem);
usMapIndex = CLI_INCCYCLE(usMapIndex, LOG_MAX_NUM);
}
}
return G_SUCCESS;
}
/*********************************************************************/
/* 函数名称 : CLI_SaveUserLog() */
/* 函数功能 : 存储一条日志到日志表 */
/* 输入参数 : szUserName 日志发生的操作者 */
/* ulLogMode 操作者的登录方式 */
/* ulClientIp 终端IP */
/* szCommand 日志内容 */
/* 输出参数 : 无 */
/* 返回 : 成功、失败 */
/* 上层函数 : */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_U32 CLI_SaveUserLog(const _S8 *szUserName, _U32 ulLogMode, _U32 ulClientIp, const _S8 *szCommand)
{
ST_TIME sTime;
P_ST_LOG_ITEM pstLogItem;
_U32 ulLevel, ulDelLevel, ulMinLevel;
_U16 usSaveIndex;
if ( CLI_LogTableCtlrCheck() != G_SUCCESS )
{
MT_ERRLOG(0);
(_VOID)CLI_LogTableInit();
return G_FAILURE;
}
if ( CLI_GetUserLevel( szUserName, &ulLevel) != G_SUCCESS )
{
MT_ERRLOG(0);
return G_FAILURE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -