mod_alarm.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. //Dbg("receive log,pszEntityName=%s,eLogType=%d,pszMessage=%s",pszEntityName,(int)eLogType,pszMessage);
  13. #ifdef RVC_OS_WIN
  14. #else
  15. CSimpleStringA strMessage(true);
  16. if (!(pszMessage == NULL || strlen(pszMessage) == 0))
  17. strMessage = pszMessage;
  18. //如果是旧模式则转GBK码
  19. if (m_fsm.m_CenterModel == 0) {
  20. if (!strMessage.IsNullOrEmpty()) {
  21. std::string tmpStr = SP::Utility::UTF8ToGBK(pszMessage);
  22. strMessage = tmpStr.c_str();
  23. }
  24. }
  25. #endif
  26. alarm_t*Alarm = new alarm_t();
  27. char cEntityName[32]={0};
  28. strcpy(cEntityName,pszEntityName);
  29. Alarm->EntityName = _strdup(cEntityName);
  30. char cSN[20]={0};
  31. CUUID uuid= nLogID;
  32. strcpy(cSN,uuid.ToString());
  33. Alarm->SN = _strdup(cSN);
  34. CSystemRunInfo sysruninfo;
  35. GetFunction()->GetSystemRunInfo(sysruninfo);
  36. Alarm->LifeID =(DWORD)sysruninfo.tmStart;
  37. Alarm->Item = dwEntityInstanceID;
  38. Alarm->UserCode = dwUserCode;
  39. //_itoa((int)eLevel,&Alarm->Level,16);
  40. //新加逻辑,对于eLogType=2 并且level=Severity_Low的低告警数据,level设置为1
  41. if(eLogType==Log_Warning&&eLevel==Severity_Low){
  42. Alarm->Level='1';
  43. }else{
  44. _itoa((int)eLogType,&Alarm->Level,16);//把level替换成logtype,
  45. }
  46. char cDescription[512]={0};
  47. //char clogTime[32]={0};//2020-20-20 12:12:12.100 日志时间,记得释放
  48. char warnTime[20]={0};//2020-20-20 12:12:12 告警时间,记得释放
  49. #ifdef RVC_OS_WIN
  50. SYSTEMTIME st;
  51. GetLocalTime(&st);
  52. //sprintf(clogTime, "%04d-%02d-%02d %02d:%02d:%02d.%03d ", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
  53. sprintf(warnTime, "%04d-%02d-%02d %02d:%02d:%02d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
  54. #else
  55. struct timeb stime = { 0, 0 };
  56. tm nowTm = { 0 };
  57. ftime(&stime);
  58. localtime_r(&stime.time, &nowTm);
  59. //sprintf(clogTime, "%04d-%02d-%02d %02d:%02d:%02d.%03d ", nowTm.tm_year + 1900, nowTm.tm_mon + 1, nowTm.tm_mday, nowTm.tm_hour, nowTm.tm_min, nowTm.tm_sec, stime.millitm);
  60. 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);
  61. #endif
  62. //strncpy(cDescription, clogTime, 32);
  63. #ifdef RVC_OS_WIN
  64. strncat(cDescription, pszMessage, 512 - 1);
  65. #else
  66. strncat(cDescription, strMessage.GetData(), 512 - 1);
  67. #endif
  68. Alarm->Description = _strdup(cDescription);
  69. Alarm->warnTime = _strdup(warnTime);
  70. m_fsm.add_NewAlarm(Alarm);
  71. m_fsm.m_iRec++;
  72. if(m_fsm.m_iRec%500==0){
  73. 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());
  74. }
  75. }
  76. SP_BEGIN_ENTITY_MAP()
  77. SP_ENTITY(CAlarmEntity)
  78. SP_END_ENTITY_MAP()