AlarmFSM.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. #ifndef RVC_MOD_ALARM_FSM_H_
  2. #define RVC_MOD_ALARM_FSM_H_
  3. #include "SpBase.h"
  4. #include "SpFSM.h"
  5. #include "SpSecureClient.h"
  6. #include "Alarm.h"
  7. #include "IHttpFunc.h"
  8. #define USER_EVT_JMP_ALARMUP EVT_USER+1
  9. #define USER_EVT_JMP_ALARMSTATEUP EVT_USER+2
  10. #define USER_EVT_JMP_RELEASE EVT_USER+3
  11. #define USER_EVT_DISCONNECT EVT_USER+4
  12. #define USER_EVT_UPLOAD_ANS EVT_USER+5
  13. #define USER_EVT_ALARMSTATE_ANS EVT_USER+6
  14. #define USER_EVT_DISCONNECT_FAIL EVT_USER+7
  15. #define USER_EVT_DISCONNECT_SUCC EVT_USER+8
  16. #define USER_EVT_JMP_START EVT_USER+9
  17. #define USER_EVT_JMP_NEW_ALARM EVT_USER+10
  18. #define USER_EVT_SEND_ALARM EVT_USER+11
  19. #define WARN_ALARM_START_NEW_MODE 0x10700001 //启动新模式告警
  20. #define WARN_ALARM_START_OLD_MODE 0x10700002 //启动旧模式告警
  21. #define WARN_ALARM_SEND_FAIL 0x10700003 //长时间发送失败丢弃告警
  22. #define WARN_ALARM_PARSE_FAIL 0x10700004 //解析失败发送失败丢失告警
  23. #pragma pack(1)
  24. const int UPLOG_MAX_COUNT = 500;//队列长度
  25. //[StructName("ALARMUPLOAD")]
  26. struct AlarmUpload
  27. {
  28. char TerminalNo[16];
  29. char EntityName[32];
  30. char SN[20];
  31. #ifdef RVC_OS_WIN
  32. unsigned long LifeID;
  33. unsigned long Item;
  34. unsigned long UserCode;
  35. #else
  36. uint32_t LifeID;
  37. uint32_t Item;
  38. uint32_t UserCode;
  39. #endif
  40. char Level;
  41. char Description[512];
  42. };
  43. //[StructName("ALARMANS")]
  44. struct AlarmReply
  45. {
  46. int ResultCode;
  47. };
  48. // [StructName("ALARMSTATE")]
  49. struct AlarmStateUpload
  50. {
  51. char TerminalNo[16];
  52. #ifdef RVC_OS_WIN
  53. unsigned __int64 SN;
  54. #else
  55. unsigned long long SN;
  56. #endif
  57. unsigned long LifeID;
  58. unsigned long Item;
  59. char Level;
  60. char Description[512];
  61. };
  62. //[StructName("ALARMSTATEANS")]
  63. struct AlarmStateReply
  64. {
  65. int ResultCode;
  66. };
  67. #pragma pack()
  68. enum AlarmCtlCode
  69. {
  70. Finish = 0, //完成
  71. Error = 1, //错误
  72. };
  73. struct AlarmAnsEvent : public FSMEvent
  74. {
  75. AlarmAnsEvent(BYTE *pBuf, int nLen) : FSMEvent(USER_EVT_UPLOAD_ANS)
  76. {
  77. memcpy(&m_reply, pBuf, sizeof(AlarmReply));
  78. }
  79. virtual ~AlarmAnsEvent() {}
  80. AlarmReply m_reply;
  81. };
  82. struct AlarmStateAnsEvent : public FSMEvent
  83. {
  84. AlarmStateAnsEvent(BYTE *pBuf, int nLen) : FSMEvent(USER_EVT_ALARMSTATE_ANS)
  85. {
  86. memcpy(&m_reply, pBuf, sizeof(AlarmStateReply));
  87. }
  88. virtual ~AlarmStateAnsEvent() {}
  89. AlarmStateReply m_reply;
  90. };
  91. struct SendAlarmEvent:public FSMEvent
  92. {
  93. bool isSucc;//是否写入成功
  94. SendAlarmEvent(bool isSendSucc)
  95. : FSMEvent(USER_EVT_SEND_ALARM), isSucc(isSendSucc)
  96. {}
  97. };
  98. namespace HttpStruct
  99. {
  100. //发送文件hash列表接口
  101. struct SendAlarmTaskReq : CHTTPReq {
  102. string m_reqStr;
  103. string ToJson() {
  104. return m_reqStr;
  105. }
  106. };
  107. struct SendAlarmTaskRet : CHTTPRet {
  108. string m_retStr;
  109. bool Parse(string strData) {
  110. m_retStr=strData;
  111. return true;
  112. }
  113. };
  114. }
  115. class AlarmConnection;
  116. class AlarmFSM : public FSMImpl<AlarmFSM>, public IFSMStateHooker, public ISysVarListener
  117. {
  118. public:
  119. enum {s0,s1,s2,s3};
  120. BEGIN_FSM_STATE(AlarmFSM)
  121. FSM_STATE_ENTRY(s0,"Starting",s0_on_entry,s0_on_exit,s0_on_event)
  122. FSM_STATE_ENTRY(s1, "AlarmUp", s1_on_entry, s1_on_exit, s1_on_event)
  123. FSM_STATE_ENTRY(s2, "AlarmStateUp", s2_on_entry, s2_on_exit, s2_on_event)
  124. FSM_STATE_ENTRY(s3, "Release", s3_on_entry, s3_on_exit, s3_on_event)
  125. END_FSM_STATE()
  126. BEGIN_FSM_RULE(AlarmFSM,s0)
  127. FSM_RULE_ENTRY_ANY(s0, s1, USER_EVT_JMP_ALARMUP)
  128. //FSM_RULE_ENTRY_ANY(s0, s2, USER_EVT_JMP_ALARMSTATEUP)
  129. //FSM_RULE_ENTRY_ANY(s1, s3, USER_EVT_JMP_RELEASE)
  130. FSM_RULE_ENTRY_ANY(s1, s0, USER_EVT_JMP_START)
  131. //FSM_RULE_ENTRY_ANY(s1, s0, EVT_TIMER)
  132. //FSM_RULE_ENTRY_ANY(s2, s3, USER_EVT_JMP_RELEASE)
  133. //FSM_RULE_ENTRY_ANY(s2, s0, EVT_TIMER)
  134. //FSM_RULE_ENTRY_ANY(s3, s0, EVT_TIMER)
  135. //FSM_RULE_ENTRY_ANY(s3, s0, USER_EVT_DISCONNECT)
  136. END_FSM_RULE()
  137. AlarmFSM();
  138. ~AlarmFSM();
  139. virtual void OnStateTrans(int iSrcState, int iDstState);
  140. virtual void OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName);
  141. virtual ErrorCodeEnum OnInit();
  142. virtual ErrorCodeEnum OnExit();
  143. void s0_on_entry();
  144. void s0_on_exit();
  145. unsigned int s0_on_event(FSMEvent* event);
  146. void s1_on_entry();
  147. void s1_on_exit();
  148. unsigned int s1_on_event(FSMEvent* event);
  149. void s2_on_entry();
  150. void s2_on_exit();
  151. unsigned int s2_on_event(FSMEvent* event);
  152. void s3_on_entry();
  153. void s3_on_exit();
  154. unsigned int s3_on_event(FSMEvent* event);
  155. //增加告警新接口
  156. void add_NewAlarm(alarm_t*alarm);
  157. //增加告警取出消息新接口
  158. alarm_t* removeAlarm();
  159. int m_iEachSend;//每次发送数量
  160. long m_iRec;//累计收到的告警数目
  161. long m_iSend;//累计队列发送总数,新模式丢失这个数据统计
  162. long m_iThrow;//累计队列丢弃总数
  163. long m_iFail;//累计发送失败总次数
  164. long m_iSucc;//累计发送成功总次数
  165. vector<alarm_t*> m_NewUploading_alarm;//新的告警记录列表
  166. //modify by lwt
  167. CSimpleStringA m_unSendAlarm;//未发送出去的告警信息(json格式)
  168. int m_CenterModel;//集中配置模式 0:分行模式 2:总行模式
  169. CSimpleStringA m_topic;//总行kafka topic
  170. CSimpleStringA m_sendUrl;//总行告警url服务地址
  171. CSimpleStringA m_branchNo;//终端告警分行服务信息
  172. CSmallDateTime m_sendBeginTime;//告警每次发送开始时间
  173. int m_maxResendTime;//告警最大重发时间间隔(秒)
  174. int m_eachSum;//每批次条数
  175. CUUID m_uuid;//告警的UUID
  176. bool m_initAlarm;//初次化告警标志位
  177. static void HttpsLogCallBack(const char* logtxt);
  178. string alarmJson();
  179. private:
  180. private:
  181. CRITICAL_SECTION cs;
  182. struct list_head m_uploading_alarm;
  183. struct list_head m_uploaded_alarm;
  184. alarm_state_t m_uploading_alarmstate;
  185. CSimpleStringA m_terminalNo;
  186. int m_nDealWarningTime;
  187. };
  188. #endif //RVC_MOD_ALARM_FSM_H_