123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- #ifndef __MOD_HEALTHMANAGER_H
- #define __MOD_HEALTHMANAGER_H
- #include <map>
- #include "SpBase.h"
- #if defined(RVC_OS_LINUX)
- #include "modVer.h"
- #include "SpTest.h"
- #endif
- #include "HealthManagerFSM.h"
- #include "EventCode.h"
- #include "HealthManager_server_g.h"
- using namespace HealthManager;
- #include "UpgradeManager_client_g.h"
- using namespace std;
- using namespace UpgradeManager;
- #include "GuardianBase.h"
- typedef int (*pfShakeHands)(WorkStateEnum &eState);
- typedef int (*pfPushUpdateTask)(const char *pszPackName);
- typedef bool (*pfIsInstalling)();
- typedef int (*pfUpgradeRestart)(const DWORD dwParam1,const DWORD dwParam2);
- typedef int (*pfFrameworkQuit)(RebootTriggerEnum eReason);
- #define DEPLOYSTATE_NOTINIT 0
- #define DEPLOYSTATE_DONE 1
- #define DEPLOYSTATE_FAILED 2
- //提示页面类型
- enum WarmPageTypeEnum {
- WarmPageType_None = 0, //无提示页
- WarmPageType_TerminalUpgrade, //终端应用升级
- WarmPageType_DeviceAdapterUpgrade, //适配器升级
- WarmPageType_HeartBeatRollBack, //心跳回退
- WarmPageType_UpgradeRollBack, //升级任务回退
- WarmPageType_ThirdPartyUpgrade, //体系外升级
- };
- struct ModuleRunInfo
- {
- DWORD dwStart;
- int abnormalCount;
- bool bAbnormalBusy;
- };
- class HealthManagerSession : public HealthManagerService_ServerSessionBase
- {
- public:
- HealthManagerSession(CHealthManagerEntity *pEntity):m_pEntity(pEntity){}
- virtual ~HealthManagerSession(){}
- virtual void Handle_EnterState(SpReqAnsContext<HealthManagerService_EnterState_Req, HealthManagerService_EnterState_Ans>::Pointer ctx);
- virtual void Handle_ExitState(SpReqAnsContext<HealthManagerService_ExitState_Req, HealthManagerService_ExitState_Ans>::Pointer ctx);
- virtual void Handle_DoEvent(SpReqAnsContext<HealthManagerService_DoEvent_Req, HealthManagerService_DoEvent_Ans>::Pointer ctx);
- virtual void Handle_RealCheck(SpReqAnsContext<HealthManagerService_RealCheck_Req, HealthManagerService_RealCheck_Ans>::Pointer ctx);
- virtual void Handle_GetNetworkState(SpReqAnsContext<HealthManagerService_GetNetworkState_Req, HealthManagerService_GetNetworkState_Ans>::Pointer ctx);
- virtual void Handle_QueryHardwareInfo(SpReqAnsContext<HealthManagerService_QueryHardwareInfo_Req, HealthManagerService_QueryHardwareInfo_Ans>::Pointer ctx);
- virtual void Handle_ReadCenterConfigStr(SpReqAnsContext<HealthManagerService_ReadCenterConfigStr_Req, HealthManagerService_ReadCenterConfigStr_Ans>::Pointer ctx);
- virtual void Handle_GetAuthErrMsg(SpReqAnsContext<HealthManagerService_GetAuthErrMsg_Req, HealthManagerService_GetAuthErrMsg_Ans>::Pointer ctx);
- virtual void Handle_QueryCenterCfg(SpReqAnsContext<HealthManagerService_QueryCenterCfg_Req, HealthManagerService_QueryCenterCfg_Ans>::Pointer ctx);
- private:
- CHealthManagerEntity *m_pEntity;
- };
- class CHealthManagerEntity : public CEntityBase, public ILogListener, public IEntityStateListener, public ISysVarListener, public IBroadcastListener
- ,public ITimerListener, public ICallbackListener
- {
- public:
- CHealthManagerEntity() :
- m_bWaitRestartPC(false)
- , m_bScreenLock(false)
- , m_bSayIdle(false), m_bGuardianRun(false), m_ullGuardShakeCount(0)
- , m_menuChoice(""), m_menuPre(""), m_netState("N")
- , m_bInMainPage(false), m_stopSelfCheck(0)
- ,m_bNeedAuthRetry(false), m_bNeedGuardianRestart(true), m_bNeedGuardian(true)
- , m_bToRestartByCenterSetting(false){}
- virtual ~CHealthManagerEntity() {}
- virtual const char *GetEntityName() const { return "HealthManager"; }
- const char* GetEntityVersion() const { return MODULE_VERSION_FULL; }
- virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext)
- {
- ErrorCodeEnum eErrCode = m_fsm.Init(this);
- if (eErrCode == Error_Succeed) {
- DoRestart();
- }
- GetFunction()->SubscribeLog(m_uuidUpdate,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"UpgradeManager");
- GetFunction()->SubscribeLog(m_uuidAccessAuth,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"AccessAuthorization");
- GetFunction()->SubscribeLog(m_uuidAccessAuth,this,Log_Error,Severity_Middle,Error_IgnoreAll,-1,"AccessAuthorization");
- GetFunction()->SubscribeLog(m_uuidFaceTracking,this,Log_Error,Severity_High,Error_IgnoreAll,-1,"FaceTracking");
- GetFunction()->SubscribeLog(m_uuidMediaController,this,Log_Error,Severity_High,Error_IgnoreAll,-1,"MediaController");
- GetFunction()->SubscribeLog(m_uuidRemoteController,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"RemoteController");
- GetFunction()->SubscribeLog(m_uuidGUIConsole,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"GUIConsole");
- GetFunction()->SubscribeLog(m_uuidHeartBeat,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"HeartBeat",false);
- GetFunction()->SubscribeLog(m_uuidCenterS, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "CenterSetting");
- GetFunction()->SubscribeLog(m_uuidPublic, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "Chromium");
- eErrCode = GetFunction()->SubscribeLog(m_uuidVtmLoader, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "VtmLoader");
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("SubscribeLog VtmLoader eErrCode:%d", eErrCode);
- GetFunction()->RegistSysVarEvent("UIState", this);
- CSmartPointer<IEntityFunction> pFunc = GetFunction();
- CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
- eErrCode = pFuncPrivilege->RegistEntityStateEvent(NULL, this);
- if (eErrCode != Error_Succeed)
- {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("RegistEntityState failed(%d).", eErrCode);
- pTransactionContext->SendAnswer(eErrCode);
- return;
- }
- //UpgradeManager
- #if defined(RVC_OS_WIN)
- GetFunction()->SubscribeLog(m_uuidPublic, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "PinPad");
- GetFunction()->SubscribeLog(m_uuid4SIPPhone, this, Log_Event, Severity_High, Error_IgnoreAll, -1, "SIPPhone");
- #endif //RVC_OS_WIN
- pTransactionContext->SendAnswer(eErrCode) ;
- }
- virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
- {
- pTransactionContext->SendAnswer(Error_Succeed);
- }
- virtual void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext)
- {
- pTransactionContext->SendAnswer(Error_Succeed);
- }
- virtual void OnPreContinue(CSmartPointer<ITransactionContext> pTransactionContext)
- {
- LOG_FUNCTION();
- pTransactionContext->SendAnswer(Error_Succeed);
- m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_FrameUpgrade, RebootWay_Framework);
- }
- void EnterState(SpReqAnsContext<HealthManagerService_EnterState_Req, HealthManagerService_EnterState_Ans>::Pointer ctx)
- {
- if (ctx->Req.state == "M")
- {
- FSMEvent *pEvt = new FSMEvent(USER_EVT_MAITAIN);
- m_fsm.PostEventFIFO(pEvt);
- }
- ctx->Answer(Error_Succeed);
- }
- void ExitState(SpReqAnsContext<HealthManagerService_ExitState_Req, HealthManagerService_ExitState_Ans>::Pointer ctx)
- {
- if (ctx->Req.state == "M")
- {
- FSMEvent *pEvt = new FSMEvent(USER_EVT_MAITAIN_FINISHED);
- m_fsm.PostEventFIFO(pEvt);
- }
- ctx->Answer(Error_Succeed);
- }
- void DoEvent(SpReqAnsContext<HealthManagerService_DoEvent_Req, HealthManagerService_DoEvent_Ans>::Pointer ctx)
- {
- if (ctx->Req.code == Event_VtmLoader_EntityLoad_Finished || ctx->Req.code == Event_VtmLoader_SIPPhoneEntityLoad_Failed
- || ctx->Req.code == Event_VtmLoader_OtherSyncEntityLoad_Failed)
- {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("receive %x,entityList:%s", ctx->Req.code,ctx->Req.entityList.GetData());
- if (!ctx->Req.entityList.IsNullOrEmpty())
- m_fsm.SetLoadEntityList(ctx->Req.entityList);
- FSMEvent* pEvt = new FSMEvent(USER_EVT_VTMLOADER_FINISHED);
- if (ctx->Req.code == Event_VtmLoader_EntityLoad_Finished)
- {
- pEvt->param1 = 0;
- //to get entity list
- if (!ctx->Req.entityList.IsNullOrEmpty())
- {
- m_activeEntity.Init(100);
- m_activeEntity = ctx->Req.entityList.Split('|');
- for (int i = 0; i < m_activeEntity.GetCount(); ++i)
- {
- m_modRunInfo[m_activeEntity[i]].abnormalCount = 0;
- m_modRunInfo[m_activeEntity[i]].bAbnormalBusy = false;
- }
- }
- }
- else if (ctx->Req.code == Event_VtmLoader_SIPPhoneEntityLoad_Failed)
- pEvt->param1 = 1;
- else
- pEvt->param1 = 2;
- m_fsm.PostEventFIFO(pEvt);
- }
- ctx->Answer(Error_Succeed);
- }
- void GetNetworkState(SpReqAnsContext<HealthManagerService_GetNetworkState_Req, HealthManagerService_GetNetworkState_Ans>::Pointer ctx)
- {
- ctx->Ans.netDeviceState = m_netState;
- ctx->Ans.reserved1 = m_fsm.QueryAccessAuthStatus();
- DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_USER).setLogCode(HealthManagerService_LogCode_GetNetworkState)("current net state %s,auth state:%d", (LPCTSTR)m_netState, ctx->Ans.reserved1);
- ctx->Answer(Error_Succeed);
- }
- virtual CServerSessionBase *OnNewSession(const char* /*pszRemoteEntityName*/, const char * /*pszParam*/)
- {
- return new HealthManagerSession(this);
- }
- virtual bool IsService()const{return true;}
- virtual bool IsMultiThread()const{return true;}
- void QueryHardwareInfo(SpReqAnsContext<HealthManagerService_QueryHardwareInfo_Req, HealthManagerService_QueryHardwareInfo_Ans>::Pointer ctx)
- {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501Q0")();
- QueryHardwareInfoTask* pTask = new QueryHardwareInfoTask(&m_fsm);
- pTask->ctx = ctx;
- GetFunction()->PostThreadPoolTask(pTask);
- }
- void ReadCenterConfigStr(SpReqAnsContext<HealthManagerService_ReadCenterConfigStr_Req, HealthManagerService_ReadCenterConfigStr_Ans>::Pointer ctx);
- void GetAuthErrMsg(SpReqAnsContext<HealthManagerService_GetAuthErrMsg_Req, HealthManagerService_GetAuthErrMsg_Ans>::Pointer ctx);
- void QueryCenterCfg(SpReqAnsContext<HealthManagerService_QueryCenterCfg_Req, HealthManagerService_QueryCenterCfg_Ans>::Pointer ctx);
- bool StartManagerDesktopPage(CSimpleStringA pageName);
- void WarnAndRestartFunc(RebootTriggerEnum eTrigger, RebootWayEnum eWay, WarmPageTypeEnum eWarmPageType, bool needVerctrl = false);
- void RealCheck(SpReqAnsContext<HealthManagerService_RealCheck_Req, HealthManagerService_RealCheck_Ans>::Pointer ctx);
- void OnAnswer(CSmartPointer<IAsynWaitSp> pAsynWaitSp);
- ErrorCodeEnum ExceptionErrorProcess(const char* pszEntityName, ErrorCodeEnum eTestResult);
- ErrorCodeEnum CheckEntity(const char* pszEntityName, EntityTestEnum eTestType);
- void EntityLostProc(CSimpleStringA entityName);
- virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
- const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
- const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage, const linkContext &pLinkInfo);
- virtual void OnSysVarEvent(const char *pszKey,
- const char *pszValue, const char *pszOldValue, const char *pszEntityName);
- virtual void OnBroadcastEvent(CUUID SubID, const char *pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, CAutoBuffer Buffer);
- virtual void OnTimeout(DWORD dwTimerID);
- virtual void OnEntityStateHook(const char* pszEntityName, const char* pszTriggerEntity, EntityStateEnum eState, EntityStateEnum eLastState);
- virtual void OnUserStateHook(const char* pszEntityName, DWORD dwState, DWORD dwLastState) { return; }
- virtual void OnCeateConnection(const char* pszCallerEntity, const char* pszServiceEntity) { return; }
- virtual void OnCloseConnection(const char* pszCallerEntity, const char* pszServiceEntity) { return; }
- private:
- CHealthManagerFSM m_fsm;
- //the following is useless?just one var is ok? oiltmp
- CUUID m_uuidUpdate,m_uuidMediaController,m_uuidFaceTracking,m_uuidAccessAuth
- , m_uuidRemoteController, m_uuidGUIConsole, m_uuidHeartBeat, m_uuidIE, m_uuidCenterS, m_uuidVtmLoader;
- CUUID m_uuidPublic, m_uuid4SIPPhone;
- int m_stopSelfCheck;
- int m_restartHour, m_restartMinute, m_lastHour, m_maxAbnormalTimes, m_rebootHourBegin, m_rebootHourEnd;;
- bool m_bWaitRestartPC, m_bScreenLock, m_bSayIdle
- , m_bGuardianRun, m_bInMainPage, m_bToRestartByCenterSetting;
- bool m_bNeedAuthRetry/*需要重试准入*/, m_bNeedGuardianRestart/*需要重启*/, m_bNeedGuardian;
- DWORD m_dwTimeOfAuthSuc;
- int m_maxWaitMainpageTime;
- ULONGLONG m_OSRunTicks, m_ullGuardShakeCount;
- CSimpleStringA m_menuChoice,m_currentVer,m_menuPre,m_netState, m_versionEx;
- map<CSimpleStringA,ModuleRunInfo> m_modRunInfo;
- CAutoArray<CSimpleStringA> m_activeEntity;
- pfShakeHands m_pfShake;
- pfUpgradeRestart m_pfUpgradeRestart;
- CSystemStaticInfo m_sysStaticInfo;
- /** 启动限制配置读取以及监护模块初始化*/
- bool DoRestart();
- void OnCheckTimeTimeout();
- void OnSelfCheckTimeout();
- ErrorCodeEnum RestartModule(const char* pEntityName);
- void AfterWaitRestartPC();
- bool SaveCurrentVersion();
- bool SaveFrameStartTimeForUpgrade();
- //reture value:
- //0:no need guardian; 1:guardian is running; -1:guardian is not running
- int CheckGuardianIsRun(bool bStart=false);
- bool StopGuardian();
- bool StartGuardian();
-
- CSimpleStringA __ReadCenterConfigStr(CSimpleStringA key, CSimpleStringA entityName);
- void ToCalcRebootHourAndMinute(int restartBegin, int restartEnd);
- bool CheckIfHaveEnterMainPageEver();
- };
- #endif // __MOD_HEALTHMANAGER_H
- struct FrameworkRestartTask : public ITaskSp
- {
- RebootTriggerEnum eTrigger;
- RebootWayEnum eWay;
- WarmPageTypeEnum eWarmPageType;
- bool needVerctrl;
- CHealthManagerEntity* m_entity;
- FrameworkRestartTask(CHealthManagerEntity* entity) : m_entity(entity), eWarmPageType(WarmPageType_None), needVerctrl(false) {}
- void Process()
- {
- m_entity->WarnAndRestartFunc(eTrigger, eWay, eWarmPageType, needVerctrl);
- }
- };
- struct WarnPromptTask : public ITaskSp
- {
- CHealthManagerEntity* m_entity;
- WarnPromptTask(CHealthManagerEntity* entity) : m_entity(entity) {}
- void Process()
- {
- m_entity->StartManagerDesktopPage("warnPrompt.html");
- }
- };
- struct EntityLostProcTask : public ITaskSp
- {
- CHealthManagerEntity* pEntity;
- CSimpleStringA entityName;
- EntityLostProcTask(CHealthManagerEntity* entity,CSimpleStringA entityName) : pEntity(entity),entityName(entityName) {}
- void Process()
- {
- pEntity->EntityLostProc(entityName);
- }
- };
|