123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- #ifndef RVC_MOD_ALARM_FSM_H_
- #define RVC_MOD_ALARM_FSM_H_
- #include "SpBase.h"
- #include "SpFSM.h"
- #include "SpSecureClient.h"
- #include "Alarm.h"
- #include "IHttpFunc.h"
- #define USER_EVT_JMP_ALARMUP EVT_USER+1
- #define USER_EVT_JMP_ALARMSTATEUP EVT_USER+2
- #define USER_EVT_JMP_RELEASE EVT_USER+3
- #define USER_EVT_DISCONNECT EVT_USER+4
- #define USER_EVT_UPLOAD_ANS EVT_USER+5
- #define USER_EVT_ALARMSTATE_ANS EVT_USER+6
- #define USER_EVT_DISCONNECT_FAIL EVT_USER+7
- #define USER_EVT_DISCONNECT_SUCC EVT_USER+8
- #define USER_EVT_JMP_START EVT_USER+9
- #define USER_EVT_JMP_NEW_ALARM EVT_USER+10
- #define USER_EVT_SEND_ALARM EVT_USER+11
- #define WARN_ALARM_START_NEW_MODE 0x10700001 //启动新模式告警
- #define WARN_ALARM_START_OLD_MODE 0x10700002 //启动旧模式告警
- #define WARN_ALARM_SEND_FAIL 0x10700003 //长时间发送失败丢弃告警
- #define WARN_ALARM_PARSE_FAIL 0x10700004 //解析失败发送失败丢失告警
- #pragma pack(1)
- const int UPLOG_MAX_COUNT = 500;//队列长度
- //[StructName("ALARMANS")]
- struct AlarmReply
- {
- int ResultCode;
- };
- //[StructName("ALARMSTATEANS")]
- struct AlarmStateReply
- {
- int ResultCode;
- };
- #pragma pack()
- enum AlarmCtlCode
- {
- Finish = 0, //完成
- Error = 1, //错误
- };
- struct AlarmAnsEvent : public FSMEvent
- {
- AlarmAnsEvent(BYTE *pBuf, int nLen) : FSMEvent(USER_EVT_UPLOAD_ANS)
- {
- memcpy(&m_reply, pBuf, sizeof(AlarmReply));
- }
- virtual ~AlarmAnsEvent() {}
- AlarmReply m_reply;
- };
- struct AlarmStateAnsEvent : public FSMEvent
- {
- AlarmStateAnsEvent(BYTE *pBuf, int nLen) : FSMEvent(USER_EVT_ALARMSTATE_ANS)
- {
- memcpy(&m_reply, pBuf, sizeof(AlarmStateReply));
- }
- virtual ~AlarmStateAnsEvent() {}
- AlarmStateReply m_reply;
- };
- struct SendAlarmEvent:public FSMEvent
- {
- bool isSucc;//是否写入成功
- SendAlarmEvent(bool isSendSucc)
- : FSMEvent(USER_EVT_SEND_ALARM), isSucc(isSendSucc)
- {}
- };
- namespace HttpStruct
- {
- //发送文件hash列表接口
- struct SendAlarmTaskReq : CHTTPReq {
- string m_reqStr;
- string ToJson() {
- return m_reqStr;
- }
- };
- struct SendAlarmTaskRet : CHTTPRet {
- string m_retStr;
- bool Parse(string strData) {
- m_retStr=strData;
- return true;
- }
- };
- }
- class AlarmConnection;
- class AlarmFSM : public FSMImpl<AlarmFSM>, public IFSMStateHooker, public ISysVarListener
- {
- public:
- enum {s0,s1,s2,s3};
- BEGIN_FSM_STATE(AlarmFSM)
- FSM_STATE_ENTRY(s0,"Starting",s0_on_entry,s0_on_exit,s0_on_event)
- FSM_STATE_ENTRY(s1, "AlarmUp", s1_on_entry, s1_on_exit, s1_on_event)
- FSM_STATE_ENTRY(s2, "AlarmStateUp", s2_on_entry, s2_on_exit, s2_on_event)
- FSM_STATE_ENTRY(s3, "Release", s3_on_entry, s3_on_exit, s3_on_event)
- END_FSM_STATE()
- BEGIN_FSM_RULE(AlarmFSM,s0)
- FSM_RULE_ENTRY_ANY(s0, s1, USER_EVT_JMP_ALARMUP)
- //FSM_RULE_ENTRY_ANY(s0, s2, USER_EVT_JMP_ALARMSTATEUP)
- //FSM_RULE_ENTRY_ANY(s1, s3, USER_EVT_JMP_RELEASE)
- FSM_RULE_ENTRY_ANY(s1, s0, USER_EVT_JMP_START)
- //FSM_RULE_ENTRY_ANY(s1, s0, EVT_TIMER)
- //FSM_RULE_ENTRY_ANY(s2, s3, USER_EVT_JMP_RELEASE)
- //FSM_RULE_ENTRY_ANY(s2, s0, EVT_TIMER)
- //FSM_RULE_ENTRY_ANY(s3, s0, EVT_TIMER)
- //FSM_RULE_ENTRY_ANY(s3, s0, USER_EVT_DISCONNECT)
- END_FSM_RULE()
- AlarmFSM();
- ~AlarmFSM();
- virtual void OnStateTrans(int iSrcState, int iDstState);
- virtual void OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName);
- virtual ErrorCodeEnum OnInit();
- virtual ErrorCodeEnum OnExit();
- void s0_on_entry();
- void s0_on_exit();
- unsigned int s0_on_event(FSMEvent* event);
- void s1_on_entry();
- void s1_on_exit();
- unsigned int s1_on_event(FSMEvent* event);
- void s2_on_entry();
- void s2_on_exit();
- unsigned int s2_on_event(FSMEvent* event);
- void s3_on_entry();
- void s3_on_exit();
- unsigned int s3_on_event(FSMEvent* event);
- //增加告警新接口
- void add_NewAlarm(alarm_t*alarm);
- //增加告警取出消息新接口
- alarm_t* removeAlarm();
- int m_iEachSend;//每次发送数量
- long m_iRec;//累计收到的告警数目
- long m_iSend;//累计队列发送总数,新模式丢失这个数据统计
- long m_iThrow;//累计队列丢弃总数
- long m_iFail;//累计发送失败总次数
- long m_iSucc;//累计发送成功总次数
- vector<alarm_t*> m_NewUploading_alarm;//新的告警记录列表
- //modify by lwt
- CSimpleStringA m_unSendAlarm;//未发送出去的告警信息(json格式)
- int m_CenterModel;//集中配置模式 0:分行模式 2:总行模式
- CSimpleStringA m_topic;//总行kafka topic
- CSimpleStringA m_sendUrl;//总行告警url服务地址
- CSimpleStringA m_branchNo;//终端告警分行服务信息
- CSmallDateTime m_sendBeginTime;//告警每次发送开始时间
- int m_maxResendTime;//告警最大重发时间间隔(秒)
- int m_eachSum;//每批次条数
- CUUID m_uuid;//告警的UUID
- bool m_initAlarm;//初次化告警标志位
- static void HttpsLogCallBack(const char* logtxt);
- string alarmJson();
- private:
-
- private:
- CRITICAL_SECTION cs;
- struct list_head m_uploading_alarm;
- struct list_head m_uploaded_alarm;
- CSimpleStringA m_terminalNo;
- int m_nDealWarningTime;
-
- };
- #endif //RVC_MOD_ALARM_FSM_H_
|