mod_healthmanager.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. #ifndef __MOD_HEALTHMANAGER_H
  2. #define __MOD_HEALTHMANAGER_H
  3. #include <map>
  4. #include "SpBase.h"
  5. #include "HealthManagerFSM.h"
  6. #include "EventCode.h"
  7. #include "HealthManager_server_g.h"
  8. using namespace HealthManager;
  9. #include "WatchDog_client_g.h"
  10. #include "Ups_client_g.h"
  11. #include "UpsClass.h"
  12. #include "InteractionContext_client_g.h"
  13. #include "UpgradeManager_client_g.h"
  14. #include "CardSwiper_client_g.h"
  15. using namespace std;
  16. using namespace WatchDog;
  17. using namespace Ups;
  18. using namespace InteractionContext;
  19. using namespace UpgradeManager;
  20. using namespace CardSwiper;
  21. #include "GuardianBase.h"
  22. typedef ErrorCodeEnum (*pfShakeHands)(WorkStateEnum &eState);
  23. typedef ErrorCodeEnum (*pfPushUpdateTask)(const char *pszPackName);
  24. typedef bool (*pfIsInstalling)();
  25. typedef ErrorCodeEnum (*pfUpgradeRestart)(const DWORD dwParam1,const DWORD dwParam2);
  26. typedef ErrorCodeEnum (*pfFrameworkQuit)(RebootTriggerEnum eReason);
  27. enum WatchDogOp
  28. {
  29. WD_OP_START,
  30. WD_OP_STOP,
  31. WD_OP_REFRESH
  32. };
  33. enum ModuleReMode
  34. {
  35. RESTART_MODE_DEFAULT,
  36. RESTART_MODE_LOW,
  37. RESTART_MODE_HIGH,
  38. };
  39. struct ModuleRunInfo
  40. {
  41. DWORD dwStart;
  42. int count;
  43. };
  44. struct RestartModeInfo
  45. {
  46. DWORD dwTimes;
  47. DWORD dwInternal;
  48. };
  49. typedef CAutoArray<CSimpleStringA> NetworkAddressesList;
  50. #define MACSESION 6
  51. class HealthManagerSession : public HealthManagerService_ServerSessionBase
  52. {
  53. public:
  54. HealthManagerSession(CHealthManagerEntity *pEntity):m_pEntity(pEntity){}
  55. virtual ~HealthManagerSession(){}
  56. virtual void Handle_EnterState(SpReqAnsContext<HealthManagerService_EnterState_Req, HealthManagerService_EnterState_Ans>::Pointer ctx);
  57. virtual void Handle_ExitState(SpReqAnsContext<HealthManagerService_ExitState_Req, HealthManagerService_ExitState_Ans>::Pointer ctx);
  58. virtual void Handle_DoEvent(SpReqAnsContext<HealthManagerService_DoEvent_Req, HealthManagerService_DoEvent_Ans>::Pointer ctx);
  59. virtual void Handle_GetEntityCfgInfo(SpReqAnsContext<HealthManagerService_GetEntityCfgInfo_Req, HealthManagerService_GetEntityCfgInfo_Ans>::Pointer ctx);
  60. virtual void Handle_GetNetworkState(SpReqAnsContext<HealthManagerService_GetNetworkState_Req, HealthManagerService_GetNetworkState_Ans>::Pointer ctx);
  61. virtual void Handle_QueryHardwareInfo(SpReqAnsContext<HealthManagerService_QueryHardwareInfo_Req, HealthManagerService_QueryHardwareInfo_Ans>::Pointer ctx);
  62. virtual void Handle_ReadCenterConfigStr(SpReqAnsContext<HealthManagerService_ReadCenterConfigStr_Req, HealthManagerService_ReadCenterConfigStr_Ans>::Pointer ctx);
  63. private:
  64. CHealthManagerEntity *m_pEntity;
  65. };
  66. class CHealthManagerEntity : public CEntityBase, public ILogListener, public ISysVarListener, public IBroadcastListener
  67. {
  68. public:
  69. CHealthManagerEntity() :m_bInit(true), m_pWatchDogClient(NULL), m_bWatchDog(false), m_pUpsClient(NULL)
  70. , m_pSync(NULL), xxx(0), m_MCStart(0), m_bWaitRestartPC(false)
  71. , m_upsStateCount(0), m_bUpsWaitLock(false), m_bScreenLock(false), m_bToRestart(false)
  72. , m_upsNoElectorCount(0), m_bSayIdle(false), m_bGuardianRun(false), m_bHealthInit(false), m_pUpgMgr(NULL)
  73. , m_bVerRollback(false), m_eRebootTrigger(RebootTrigger_Unknown), m_eRebootWay(RebootWay_Unknown)
  74. , m_bGetUpsStateFlag(false), m_menuChoice(""), m_menuPre(""), m_netState("N"), m_bFisrtEnterMainPage(true)
  75. , m_bNeedToRestartPAD(false), m_preDay(99), m_bNeedToRestartIE(false), m_bInMainPage(false), m_maxRunDays(7)
  76. , m_bEnterMainPageEver(false), m_connectStatus(0), m_bAccessSuc(false){}
  77. virtual ~CHealthManagerEntity() {}
  78. virtual const char *GetEntityName() const { return "HealthManager"; }
  79. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext)
  80. {
  81. DoRestart();
  82. ErrorCodeEnum eErrCode = m_fsm.Init(this);
  83. Dbg("");
  84. GetFunction()->SubscribeLog(m_uuidUpdate,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"UpgradeManager");
  85. GetFunction()->SubscribeLog(m_uuidAccessAuth,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"AccessAuthorization");
  86. GetFunction()->SubscribeLog(m_uuidAccessAuth,this,Log_Error,Severity_Middle,Error_IgnoreAll,-1,"AccessAuthorization");
  87. GetFunction()->SubscribeLog(m_uuidInitializer,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"Initializer");
  88. GetFunction()->SubscribeLog(m_uuidInitializer,this,Log_Error,Severity_Middle,Error_IgnoreAll,-1,"Initializer");
  89. GetFunction()->SubscribeLog(m_uuidFaceTracking,this,Log_Error,Severity_High,Error_IgnoreAll,-1,"FaceTracking");
  90. GetFunction()->SubscribeLog(m_uuidMediaController,this,Log_Error,Severity_High,Error_IgnoreAll,-1,"MediaController");
  91. GetFunction()->SubscribeLog(m_uuidSelfChecker,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"SelfChecker");
  92. GetFunction()->SubscribeLog(m_uuidRemoteController,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"RemoteController");
  93. GetFunction()->SubscribeLog(m_uuidGUIConsole,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"GUIConsole");
  94. GetFunction()->SubscribeLog(m_uuidHeartBeat,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"HeartBeat",false);
  95. GetFunction()->SubscribeLog(m_uuidMaintainWatch,this,Log_Event,Severity_Middle,Error_IgnoreAll,-1,"MaintainWatcher");
  96. GetFunction()->SubscribeLog(m_uuidIE, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "IEBrowser");
  97. GetFunction()->SubscribeLog(m_uuidCenterS, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "CenterSetting");
  98. GetFunction()->SubscribeLog(m_uuidCardSwiper, this, Log_Error, Severity_Middle, Error_IgnoreAll, -1, "CardSwiper");
  99. GetFunction()->SubscribeLog(m_uuidPublic, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "systemcustomization");
  100. GetFunction()->SubscribeLog(m_uuidPublic, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "Chromium");
  101. GetFunction()->RegistSysVarEvent("UIState", this);
  102. //UpgradeManager
  103. GetFunction()->SubscribeBroadcast("CardSwiper", "", this, m_uuidCardSwiper);
  104. pTransactionContext->SendAnswer(eErrCode) ;
  105. }
  106. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
  107. {
  108. pTransactionContext->SendAnswer(Error_Succeed);
  109. }
  110. void EnterState(SpReqAnsContext<HealthManagerService_EnterState_Req, HealthManagerService_EnterState_Ans>::Pointer ctx)
  111. {
  112. if (ctx->Req.state == "M")
  113. {
  114. FSMEvent *pEvt = new FSMEvent(USER_EVT_MAITAIN);
  115. m_fsm.PostEventFIFO(pEvt);
  116. }
  117. ctx->Answer(Error_Succeed);
  118. }
  119. void ExitState(SpReqAnsContext<HealthManagerService_ExitState_Req, HealthManagerService_ExitState_Ans>::Pointer ctx)
  120. {
  121. if (ctx->Req.state == "M")
  122. {
  123. FSMEvent *pEvt = new FSMEvent(USER_EVT_MAITAIN_FINISHED);
  124. m_fsm.PostEventFIFO(pEvt);
  125. }
  126. ctx->Answer(Error_Succeed);
  127. }
  128. void DoEvent(SpReqAnsContext<HealthManagerService_DoEvent_Req, HealthManagerService_DoEvent_Ans>::Pointer ctx)
  129. {
  130. }
  131. void GetEntityCfgInfo(SpReqAnsContext<HealthManagerService_GetEntityCfgInfo_Req, HealthManagerService_GetEntityCfgInfo_Ans>::Pointer ctx)
  132. {
  133. m_fsm.GetEntityCfgInfo(ctx->Req.name,ctx->Ans.loadOpt);
  134. ctx->Answer(Error_Succeed);
  135. }
  136. void GetNetworkState(SpReqAnsContext<HealthManagerService_GetNetworkState_Req, HealthManagerService_GetNetworkState_Ans>::Pointer ctx)
  137. {
  138. ctx->Ans.netDeviceState = m_netState;
  139. ctx->Ans.reserved1 = m_fsm.QueryAccessAuthStatus();
  140. Dbg("current net state %s,auth state:%d", (LPCTSTR)m_netState, ctx->Ans.reserved1);
  141. ctx->Answer(Error_Succeed);
  142. }
  143. virtual CServerSessionBase *OnNewSession(const char* /*pszRemoteEntityName*/, const char * /*pszParam*/)
  144. {
  145. return new HealthManagerSession(this);
  146. }
  147. virtual bool IsService()const{return true;}
  148. virtual bool IsMultiThread()const{return true;}
  149. bool DoWatchDog(WatchDogOp eOp);
  150. int SystemRestart(bool bPeriod,bool bUpsImmediately,bool bNow=false);
  151. int SystemShutdown(BOOL bReboot=FALSE);
  152. int FrameworkShutdown(bool bRestart=true);
  153. int GetNetDeviceState();
  154. int UpdateSiteChangeFlag();
  155. int UpdateSiteToRuncfg(bool bWriteSite=true,bool bClearSiteFlag = false);
  156. int WriteSiteToRootIni();
  157. void QueryHardwareInfo(SpReqAnsContext<HealthManagerService_QueryHardwareInfo_Req, HealthManagerService_QueryHardwareInfo_Ans>::Pointer ctx);
  158. void ReadCenterConfigStr(SpReqAnsContext<HealthManagerService_ReadCenterConfigStr_Req, HealthManagerService_ReadCenterConfigStr_Ans>::Pointer ctx);
  159. virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  160. const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  161. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage);
  162. virtual void OnSysVarEvent(const char *pszKey,
  163. const char *pszValue, const char *pszOldValue, const char *pszEntityName);
  164. virtual void OnBroadcastEvent(CUUID SubID, const char *pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, CAutoBuffer Buffer);
  165. private:
  166. CHealthManagerFSM m_fsm;
  167. //the following is useless?just one var is ok? oiltmp
  168. CUUID m_uuidUpdate,m_uuidMediaController,m_uuidFaceTracking,m_uuidAccessAuth,m_uuidInitializer,m_uuidSelfChecker
  169. , m_uuidRemoteController, m_uuidGUIConsole, m_uuidHeartBeat, m_uuidMaintainWatch, m_uuidIE, m_uuidCenterS;
  170. CUUID m_uuidCardSwiper,m_uuidPublic;
  171. int m_devCfgNum,m_connectStatus;
  172. int m_restartHour, m_restartMinute, m_lastHour, m_restartTimes, m_maxRestartTimes, m_preDay, m_dayNum, m_maxRunDays;
  173. bool m_bInit,m_bWatchDog,m_bWaitRestartPC,m_bUpsWaitLock,m_bScreenLock,m_bToRestart,m_testFlag,m_bSayIdle
  174. , m_bGuardianRun, m_bHealthInit, m_bVerRollback, m_bFisrtEnterMainPage, m_bNeedToRestartPAD,m_bNeedToRestartIE
  175. , m_bInMainPage, m_bEnterMainPageEver,m_bAccessSuc;
  176. DWORD m_wDayOfWeek,m_MCStart,m_MCEnd;
  177. int xxx,m_upsStateCount,m_upsNoElectorCount;
  178. RebootTriggerEnum m_eRebootTrigger;
  179. RebootWayEnum m_eRebootWay;
  180. CSimpleStringA m_menuChoice,m_currentVer,m_menuPre,m_netState;
  181. map<CSimpleStringA,ModuleRunInfo> m_modRunInfo;
  182. map<CSimpleStringA,ModuleReMode> m_modCfgInfo;
  183. map<ModuleReMode,RestartModeInfo> m_restartMode;
  184. WatchDogService_ClientBase *m_pWatchDogClient;
  185. UpsService_ClientBase *m_pUpsClient;
  186. SyncService_ClientBase *m_pSync;
  187. UpgradeMgrService_ClientBase *m_pUpgMgr;
  188. pfShakeHands m_pfShake;
  189. pfUpgradeRestart m_pfUpgradeRestart;
  190. bool m_bGetUpsStateFlag;
  191. CSystemStaticInfo m_sysStaticInfo;
  192. bool DoRestart();
  193. void OnCheckTimeTimeout();
  194. void OnWatchDogTimeout();
  195. ErrorCodeEnum RestartModule(const char* pEntityName);
  196. void AfterWaitRestartPC();
  197. void UpsSupplyLockScreen();
  198. int ConnectUps();
  199. void SplitModuleNames(CSimpleStringA csLine,ModuleReMode eMode);
  200. bool SaveCurrentVersion();
  201. bool SaveFrameStartTimeForUpgrade();
  202. bool CheckGuardianIsRun(bool bStart=false);
  203. bool StopGuardian();
  204. bool StartGuardian();
  205. bool VersionRollBack(const char *pVerion);
  206. //int QuitFrameworkAndSaveInfo(RebootTriggerEnum eTrigger = RebootTrigger_Unknown,RebootWayEnum eWay = RebootWay_Unknown);
  207. void ReadMachineDataBySyncSerivce();
  208. int RestartIE();
  209. void GetINETMacAddresses(NetworkAddressesList &macList, NetworkAddressesList &ipList);
  210. CSimpleStringA __ReadCenterConfigStr(CSimpleStringA key, CSimpleStringA entityName);
  211. };
  212. #endif // __MOD_HEALTHMANAGER_H