📄 view_svrlog.cpp
字号:
// View_SvrLog.cpp : 实现文件
//
#include "stdafx.h"
#include "LogAlert.h"
#include "View_SvrLog.h"
// CView_SvrLog
CView_SvrLog* CView_SvrLog::m_pCurrent=NULL;
BOOL CView_SvrLog::m_bInited=FALSE;
DWORD CView_SvrLog::m_dwLogLimit=100;
CMap<DWORD,DWORD&,DATACLTLT,DATACLTLT&> CView_SvrLog::m_mapClt;
CMap<DWORD,DWORD&,DATAKEYLT,DATAKEYLT&> CView_SvrLog::m_mapKey;
CMap<DWORD,DWORD&,DATADEVLT,DATADEVLT&> CView_SvrLog::m_mapDev;
IMPLEMENT_DYNCREATE(CView_SvrLog, CListView)
CView_SvrLog::CView_SvrLog()
{
m_pCurrent=this;
}
CView_SvrLog::~CView_SvrLog()
{
}
BEGIN_MESSAGE_MAP(CView_SvrLog, CListView)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
END_MESSAGE_MAP()
// CView_SvrLog 诊断
#ifdef _DEBUG
void CView_SvrLog::AssertValid() const
{
CListView::AssertValid();
}
void CView_SvrLog::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
#endif //_DEBUG
BOOL CView_SvrLog::Log_Add_Real(DWORD logType,DWORD dwTime,DWORD dwIp,DWORD wPort,CString strUser,CString strComp,DWORD dwAction,DWORD dwResult,DWORD dwErrorType,CString strDesc)
{
if (NULL==m_pCurrent) return FALSE;
if (!m_bInited)
{
m_bInited=TRUE;
DWORD dwTemp=m_pCurrent->GetListCtrl().GetExtendedStyle();
dwTemp|=LVS_EX_FULLROWSELECT;
m_pCurrent->GetListCtrl().SetExtendedStyle(dwTemp);
dwTemp=GetWindowLong(m_pCurrent->GetListCtrl().GetSafeHwnd(),GWL_STYLE);
dwTemp|=LVS_REPORT;
SetWindowLong(m_pCurrent->GetListCtrl().GetSafeHwnd(),GWL_STYLE,dwTemp);
m_pCurrent->GetListCtrl().InsertColumn(0,"RecTime",LVCFMT_LEFT,150);
m_pCurrent->GetListCtrl().InsertColumn(1,"IP",LVCFMT_LEFT,100);
m_pCurrent->GetListCtrl().InsertColumn(2,"User(Target)",LVCFMT_LEFT,100);
m_pCurrent->GetListCtrl().InsertColumn(3,"Computer",LVCFMT_LEFT,100);
m_pCurrent->GetListCtrl().InsertColumn(4,"Action",LVCFMT_LEFT,300);
m_pCurrent->GetListCtrl().InsertColumn(5,"Result",LVCFMT_LEFT,100);
m_pCurrent->GetListCtrl().InsertColumn(6,"Desc",LVCFMT_LEFT,800);
}
time_t AddTime=dwTime;
struct tm *newtime=localtime(&AddTime);
char NodeId[1000];
//第一个因素,记录时间
if (NULL!=newtime)
{
sprintf(NodeId,"%04d-%02d-%02d %02d:%02d:%02d",
newtime->tm_year+1900,newtime->tm_mon+1,newtime->tm_mday,
newtime->tm_hour,newtime->tm_min,newtime->tm_sec);
}
else
{
strcpy(NodeId,g_key.Key_GetCString("STR_TREE_KEYGRP_RULAPP_INFO_TIME_UNKNOWN"));
}
m_pCurrent->GetListCtrl().InsertItem(0,NodeId);
//根据日志等级,进行颜色反应
m_pCurrent->GetListCtrl().SetItemData(0,dwErrorType);
//第二个因素,操作地址
sprintf(NodeId,"%03d.%03d.%03d.%03d",
(dwIp&0xFF000000)>>24,
(dwIp&0xFF0000)>>16,
(dwIp&0xFF00)>>8,
(dwIp&0xFF)
);
m_pCurrent->GetListCtrl().SetItemText(0,1,NodeId);
//第三个因素,用户(操作对象)
m_pCurrent->GetListCtrl().SetItemText(0,2,strUser);
//第四个因素,计算机(-)
m_pCurrent->GetListCtrl().SetItemText(0,3,strComp);
//第五个因素,操作内容
if (2==logType)
{
g_key.Key_Cmd_Desc(dwAction,NodeId);
}
else
{
if (TIS_PORT_CLT_SELF!=wPort)
{
g_key.Key_Cmd_Desc(dwAction,NodeId);
}
else
{
g_key.Key_Log_Desc(dwAction,NodeId);
}
}
m_pCurrent->GetListCtrl().SetItemText(0,4,NodeId);
//第六个因素,操作结果
if ((dwResult!=0)||(TIS_PORT_CLT_SELF!=wPort))
{
g_key.Key_Error_Desc(dwResult,NodeId);
}
else
{
strcpy(NodeId,"");
}
m_pCurrent->GetListCtrl().SetItemText(0,5,NodeId);
//第七个因素,其他信息
m_pCurrent->GetListCtrl().SetItemText(0,6,strDesc);
m_pCurrent->GetListCtrl().DeleteItem(m_dwLogLimit);
return TRUE;
}
BOOL CView_SvrLog::Info_Add(DATACLTLT& dcl)
{
m_mapClt.SetAt(dcl.dwNodeId,dcl);
return TRUE;
}
BOOL CView_SvrLog::Info_Add(DATADEVLT& ddl)
{
m_mapDev.SetAt(ddl.dwNodeId,ddl);
return TRUE;
}
BOOL CView_SvrLog::Info_Add(DATAKEYLT& dkl)
{
m_mapKey.SetAt(dkl.dwNodeId,dkl);
return TRUE;
}
BOOL CView_SvrLog::Log_Add(CLTLOGINFO& cli)
{
char cTempString[1000];
char NodeId[1000];
strcpy(NodeId,"");
if (strlen(cli.cString)>0)
{
strcpy(NodeId,g_key.Key_GetCString(cli.cString));
}
if (strcmp(NodeId,"?")==0) strcpy(NodeId,cli.cString);
cli.GetDetail(NodeId,cTempString);
if (cli.dwStatusKeyWord>0)
{//有状态
g_key.Key_Log_Desc(cli.dwStatusKeyWord,NodeId);
strcat(NodeId,"\r\n");
strcat(NodeId,cTempString);
}
else
{
strcpy(NodeId,cTempString);
}
Log_Add_Real(1,cli.dwTimeCLT,cli.dwIp,TIS_PORT_CLT_SELF,KEY_GetDesc(cli.cSID),CLT_GetDesc(cli.cCLT_GUID),cli.dwTypeID1,cli.dwTypeID2,cli.dwErrorType,NodeId);
return TRUE;
}
BOOL CView_SvrLog::Log_Add(DEVLOGINFO& dli)
{
char cTempString[1000];
char NodeId[1000];
strcpy(NodeId,"");
strcpy(NodeId,dli.cString);
dli.GetDetail(NodeId,cTempString);
if (dli.dwStatusKeyWord>0)
{//有状态
g_key.Key_Log_Desc(dli.dwStatusKeyWord,NodeId);
strcat(NodeId,"\r\n");
strcat(NodeId,cTempString);
}
else
{
strcpy(NodeId,cTempString);
}
Log_Add_Real(2,dli.dwTimeCLT,dli.dwIp,TIS_PORT_CLT_SELF,DEV_GetDesc(dli.cSID),CLT_GetDesc(dli.cCLT_GUID),dli.dwTypeID1,dli.dwTypeID2,dli.dwErrorType,NodeId);
return TRUE;
}
BOOL CView_SvrLog::Log_Add(LOGINFO& li)
{//得到命令
char NodeId[1000];
if (0==li.wPort)
{
strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_SVR"));
}
else if (TIS_PORT_SVR_F_MMC==li.wPort)
{
strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_MMC"));
}
else if (TIS_PORT_HOTBACKUP==li.wPort)
{
strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_HB"));
}
else if (TIS_PORT_SVR_F_MMC2==li.wPort)
{
strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_MMC2"));
}
else if (TIS_PORT_CLT_SELF==li.wPort)
{
strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_CLT_SELF"));
}
else
{
strcpy(NodeId,g_key.Key_GetCString("STR_LOG_INFO_CLT"));
}
Log_Add_Real(0,li.dwTime,li.dwIp,li.wPort,NodeId,"",li.wCmd,li.dwRet,(li.dwRet==E_KEYOPT_SUCCESS)?TIS_CLT_LOG_ERROR_TYPE_NORMAL:TIS_CLT_LOG_ERROR_TYPE_ERROR,li.cInfo);
return TRUE;
}
CString CView_SvrLog::CLT_GetDesc(char* cGUID)
{
CString Re=cGUID;
DWORD dwID;
DATACLTLT dcl;
BOOL bFound=FALSE;
POSITION pos=m_mapClt.GetStartPosition();
while (pos != NULL)
{
m_mapClt.GetNextAssoc(pos,dwID,dcl);
if (strcmp(dcl.cGUID,cGUID)==0)
{
bFound=TRUE;
Re.Format("%s (%08X)",dcl.cName,dcl.dwNodeId);
break;
}
}
return Re;
}
CString CView_SvrLog::KEY_GetDesc(char* cSID)
{
CString Re=cSID;
DWORD dwID;
DATAKEYLT dkl;
BOOL bFound=FALSE;
POSITION pos=m_mapKey.GetStartPosition();
while (pos != NULL)
{
m_mapKey.GetNextAssoc(pos,dwID,dkl);
if (strcmp(dkl.SID,cSID)==0)
{
bFound=TRUE;
Re.Format("%s (%08X)",dkl.Name,dkl.dwNodeId);
break;
}
}
return Re;
}
CString CView_SvrLog::DEV_GetDesc(char* cSID)
{
CString Re=cSID;
DWORD dwID;
DATADEVLT ddl;
BOOL bFound=FALSE;
POSITION pos=m_mapDev.GetStartPosition();
while (pos != NULL)
{
m_mapDev.GetNextAssoc(pos,dwID,ddl);
if (strcmp(ddl.Org.devinfo.cHID,cSID)==0)
{
bFound=TRUE;
Re.Format("DEV: %s (%08X)",ddl.Org.cName,ddl.dwNodeId);
break;
}
}
return Re;
}
// CView_RunLog 消息处理程序
void CView_SvrLog::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
*pResult = 0;
if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
{
int nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);
int nSubItem = pLVCD->iSubItem;
//CListCtrl* pList=(CListCtrl*)CWnd::FromHandle(m_hWnd);
CString strText=GetListCtrl().GetItemText(nItem,1);//注意此句是修改的,上面封住的是在CMyListCtrl中的,仅此而已!!!!!!!!!!!!!!
DWORD dwTemp=GetListCtrl().GetItemData(nItem);
if (0==dwTemp)
{//普通日志
}
else if(1==dwTemp)
{
pLVCD->clrText=RGB(0,0,255);
}
else
{
pLVCD->clrText=RGB(255,0,0);
}
*pResult = CDRF_DODEFAULT;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -