mod_alarm.cpp 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "stdafx.h"
  2. #include "mod_alarm.h"
  3. #ifdef RVC_OS_WIN
  4. #else
  5. #include <sys/timeb.h>
  6. #include "SpUtility.h"
  7. #endif
  8. void CAlarmEntity::OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  9. const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  10. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage, const linkContext &pLinkInfo)
  11. {
  12. #ifdef RVC_OS_LINUX
  13. CSimpleStringA strMessage(true);
  14. if (!(pszMessage == NULL || strlen(pszMessage) == 0))
  15. strMessage = pszMessage;
  16. //TODO: 现在还有旧模式吗?没有请进行相关逻辑的移除 [Gifur@2025630]
  17. //如果是旧模式则转GBK码
  18. if (m_fsm.m_CenterModel == 0) {
  19. if (!strMessage.IsNullOrEmpty()) {
  20. std::string tmpStr = SP::Utility::UTF8ToGBK(pszMessage);
  21. strMessage = tmpStr.c_str();
  22. }
  23. }
  24. #endif //RVC_OS_LINUX
  25. alarm_t*Alarm = new alarm_t();
  26. char cEntityName[32]={0};
  27. strcpy(cEntityName,pszEntityName);
  28. Alarm->EntityName = _strdup(cEntityName);
  29. char cSN[20]={0};
  30. CUUID uuid= nLogID;
  31. strcpy(cSN,uuid.ToString());
  32. Alarm->SN = _strdup(cSN);
  33. CSystemRunInfo sysruninfo;
  34. GetFunction()->GetSystemRunInfo(sysruninfo);
  35. Alarm->LifeID =(DWORD)sysruninfo.tmStart;
  36. Alarm->Item = dwEntityInstanceID;
  37. Alarm->UserCode = dwUserCode;
  38. //_itoa((int)eLevel,&Alarm->Level,16);
  39. //新加逻辑,对于eLogType=2 并且level=Severity_Low的低告警数据,level设置为1
  40. if(eLogType==Log_Warning&&eLevel==Severity_Low){
  41. Alarm->Level='1';
  42. }else{
  43. _itoa((int)eLogType,&Alarm->Level,16);//把level替换成logtype,
  44. }
  45. char cDescription[512]={0};
  46. //char clogTime[32]={0};//2020-20-20 12:12:12.100 日志时间,记得释放
  47. char warnTime[20]={0};//2020-20-20 12:12:12 告警时间,记得释放
  48. //TODO: CrossPlaform [Gifur@2025630]
  49. #ifdef RVC_OS_WIN
  50. SYSTEMTIME st;
  51. GetLocalTime(&st);
  52. sprintf(warnTime, "%04d-%02d-%02d %02d:%02d:%02d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
  53. #else
  54. struct timeb stime = { 0, 0 };
  55. tm nowTm = { 0 };
  56. ftime(&stime);
  57. localtime_r(&stime.time, &nowTm);
  58. sprintf(warnTime, "%04d-%02d-%02d %02d:%02d:%02d", nowTm.tm_year + 1900, nowTm.tm_mon + 1, nowTm.tm_mday, nowTm.tm_hour, nowTm.tm_min, nowTm.tm_sec);
  59. #endif
  60. //TODO: CrossPlaform 减少宏的使用 [Gifur@2025630]
  61. #ifdef RVC_OS_WIN
  62. strncat(cDescription, pszMessage, 512 - 1);
  63. #else
  64. strncat(cDescription, strMessage.GetData(), 512 - 1);
  65. #endif
  66. Alarm->Description = _strdup(cDescription);
  67. Alarm->warnTime = _strdup(warnTime);
  68. m_fsm.add_NewAlarm(Alarm);
  69. m_fsm.m_iRec++;
  70. if(m_fsm.m_iRec%500==0){
  71. DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("接收总数=%d,抛弃总数=%d,未发送数目=%d",m_fsm.m_iRec,m_fsm.m_iThrow,m_fsm.m_NewUploading_alarm.size());
  72. }
  73. }
  74. SP_BEGIN_ENTITY_MAP()
  75. SP_ENTITY(CAlarmEntity)
  76. SP_END_ENTITY_MAP()