123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971 |
- // mod_healthmanager.cpp : Defines the exported functions for the DLL application.
- #if (defined(_WIN32) || defined(_WIN64))
- #include "stdafx.h"
- #include <TlHelp32.h>
- #include <iphlpapi.h>
- #include <ws2tcpip.h>
- #include <Winsock2.h>
- #include <Windows.h>
- #define RVC_OS_WIN//oiltmp???
- #else
- #include <sys/wait.h>
- #include <unistd.h>
- #include <time.h>
- #include <signal.h>
- #include <dlfcn.h>
- #include <fcntl.h>
- #include <sys/reboot.h>
- #endif //RVC_OS_WIN
- #include "toolkit.h"
- #include <vector>
- #include <iostream>
- #include <fstream>
- using namespace std;
- #include "mod_healthmanager.h"
- #include "GetDevInfoHelper.h"
- #pragma comment( lib, "advapi32.lib" )
- const DWORD HEALTHMANAGER_TIMER_ID = 1;
- const DWORD HEALTHMANAGER_WD_TIMER_ID = 2;
- const DWORD HEALTHMANAGER_TIMER_INTERVAL = 60000;
- const DWORD HEALTHMANAGER_WD_TIMER_INTERVAL = 50000;
- const DWORD HEALTHMANAGER_TIMER_INTERVAL_MINUTE = (HEALTHMANAGER_TIMER_INTERVAL/60000)*3;
- //the following 20151009
- #pragma comment(lib, "IPHLPAPI.lib")
- #define WORKING_BUFFER_SIZE 15000
- #define MAX_TRIES 3
- #define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
- #define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
- void GetLocalTimeRVC(SYSTEMTIME &stTime)
- {
- #ifdef RVC_OS_WIN
- GetLocalTime(&stTime);
- #else
- struct tm* pst = NULL;
- time_t t = time(NULL);
- pst = localtime(&t);
- stTime.wYear = pst->tm_year + 1900;
- stTime.wMonth = pst->tm_mon + 1;//because the range of tm_mon is:0-11
- stTime.wDay = pst->tm_mday;
- stTime.wHour = pst->tm_hour;
- stTime.wMinute = pst->tm_min;
- stTime.wDayOfWeek = pst->tm_wday;
- stTime.wSecond = pst->tm_sec;
- stTime.wMilliseconds = 0;
- //Dbg("oiltest,time:%d,%d,%d,%d", stTime.wYear, stTime.wHour, stTime.wMinute, stTime.wDayOfWeek);
- #endif
- }
- template<class T>
- class TimerOutHelper : public ITimerListener
- {
- public:
- typedef void (T::*FuncTimer)();
- TimerOutHelper(T *p, FuncTimer pTimerFunc, bool bDeleteSelf = false)
- : m_pObject(p), m_pTimer(pTimerFunc), m_bDeleteSelf(bDeleteSelf) {}
- virtual void OnTimeout(DWORD dwTimerID)
- {
- (m_pObject->*m_pTimer)();
- if (m_bDeleteSelf)
- delete this;
- }
- private:
- T *m_pObject;
- FuncTimer m_pTimer;
- bool m_bDeleteSelf;
- };
- void HealthManagerSession::Handle_EnterState(SpReqAnsContext<HealthManagerService_EnterState_Req, HealthManagerService_EnterState_Ans>::Pointer ctx)
- {
- LOG_FUNCTION();
- m_pEntity->EnterState(ctx);
- }
- void HealthManagerSession::Handle_ExitState(SpReqAnsContext<HealthManagerService_ExitState_Req, HealthManagerService_ExitState_Ans>::Pointer ctx)
- {
- LOG_FUNCTION();
- m_pEntity->ExitState(ctx);
- }
- void HealthManagerSession::Handle_DoEvent(SpReqAnsContext<HealthManagerService_DoEvent_Req, HealthManagerService_DoEvent_Ans>::Pointer ctx)
- {
- LOG_FUNCTION();
- m_pEntity->DoEvent(ctx);
- }
- void HealthManagerSession::Handle_GetEntityCfgInfo(SpReqAnsContext<HealthManagerService_GetEntityCfgInfo_Req, HealthManagerService_GetEntityCfgInfo_Ans>::Pointer ctx)
- {
- LOG_FUNCTION();
- m_pEntity->GetEntityCfgInfo(ctx);
- }
- void HealthManagerSession::Handle_GetNetworkState(SpReqAnsContext<HealthManagerService_GetNetworkState_Req, HealthManagerService_GetNetworkState_Ans>::Pointer ctx)
- {
- LOG_FUNCTION();
- m_pEntity->GetNetworkState(ctx);
- }
- void HealthManagerSession::Handle_QueryHardwareInfo(SpReqAnsContext<HealthManagerService_QueryHardwareInfo_Req, HealthManagerService_QueryHardwareInfo_Ans>::Pointer ctx)
- {
- LOG_FUNCTION();
- m_pEntity->QueryHardwareInfo(ctx);
- }
- void HealthManagerSession::Handle_ReadCenterConfigStr(SpReqAnsContext<HealthManagerService_ReadCenterConfigStr_Req, HealthManagerService_ReadCenterConfigStr_Ans>::Pointer ctx)
- {
- LOG_FUNCTION();
- }
- bool CHealthManagerEntity::DoWatchDog(WatchDogOp eOp)
- {
- switch(eOp)
- {
- case WD_OP_START:
- {
- if (m_pWatchDogClient == NULL)
- {
- m_pWatchDogClient = new WatchDogService_ClientBase(this);
- ErrorCodeEnum eErrConn = m_pWatchDogClient->Connect();
- if (eErrConn != Error_Succeed) {
- Dbg("WatchDog connected failed.");
- m_pWatchDogClient->SafeDelete();
- m_pWatchDogClient = NULL;
- break;
- }
- else
- Dbg("WatchDog connected.");
- }
- WatchDogService_StartWatch_Req req;
- req.Delay = 120;//oiltmp
- req.Timeout = 60;
- WatchDogService_StartWatch_Ans ans;
- ErrorCodeEnum eErrStart = m_pWatchDogClient->StartWatch(req,ans,10000);
- if (eErrStart == Error_Succeed)
- m_bWatchDog = true;
- Dbg("start watch %d.",eErrStart);
- }
- break;
- case WD_OP_STOP:
- {
- if (!m_bWatchDog)
- break;
- WatchDogService_StopWatch_Req req;
- WatchDogService_StopWatch_Ans ans;
- ErrorCodeEnum eErrStop = m_pWatchDogClient->StopWatch(req,ans,10000);
- if (eErrStop == Error_Succeed)
- m_bWatchDog = false;
- Dbg("stop watchd %d.",eErrStop);
- }
- break;
- case WD_OP_REFRESH:
- {
- if (!m_bWatchDog)
- break;
- WatchDogService_Refresh_Req req;
- WatchDogService_Refresh_Ans ans;
- ErrorCodeEnum eErrRefresh = m_pWatchDogClient->Refresh(req,ans,10000);
- Dbg("refresh watchdog %d.",eErrRefresh);
- }
- break;
- default:
- break;
- }
- return true;
- }
- void CHealthManagerEntity::OnWatchDogTimeout()
- {
- xxx++;
- if (m_bWatchDog && xxx == 5)
- {
- DoWatchDog(WD_OP_STOP);
- //oiltmp
- Sleep(180000);
- Dbg("have sleep 18000,wake up.");
- //DoWatchDog(WD_OP_START);
- }
- else if (m_bWatchDog && xxx<5)
- {
- DoWatchDog(WD_OP_REFRESH);
- GetFunction()->ResetTimer(HEALTHMANAGER_WD_TIMER_ID, HEALTHMANAGER_WD_TIMER_INTERVAL);
- }
- }
- int CHealthManagerEntity::SystemRestart(bool bPeriod, bool bImmediately,bool bNow)
- {
- if (bPeriod)
- {
- Dbg("restart periodly.");
- m_restartTimes = 0;
- }
- if (bNow)
- {
- m_fsm.QuitFrameworkAndSaveInfo(m_eRebootTrigger, m_eRebootWay);
- int x = SystemShutdown(TRUE);
- Dbg("From ie to shutdown %d",x);
- return 0;
- }
- SYSTEMTIME localTime;
- GetLocalTimeRVC(localTime);
-
- CSmartPointer<IConfigInfo> spConfigRun;
- ErrorCodeEnum err = GetFunction()->OpenConfig(Config_Run, spConfigRun);
- if (err != Error_Succeed) {
- LOG_TRACE("open cfg file failed!");
- return -1;
- }
- //
- //ups restart
- if (m_pUpsClient != NULL)
- {
- if (!m_bToRestart)
- {
- m_restartTimes++;
- if (m_restartTimes > m_maxRestartTimes)
- {
- Dbg("restart too many times(%d,%d),give up.",m_restartTimes,m_maxRestartTimes);
- m_restartTimes--;
- return -1;
- }
- Dbg("the %d restart.",m_restartTimes);
- spConfigRun->WriteConfigValueInt("Run","RestartTimes",m_restartTimes);
- if (m_lastHour != localTime.wHour)
- {
- m_lastHour = localTime.wHour;
- Dbg("set last hour to %d", m_lastHour);
- spConfigRun->WriteConfigValueInt("Run", "LastHour", m_lastHour);
- }
- }
- else
- return 0;
- UpsService_Shutdown_Req req;
- UpsService_Shutdown_Ans ans;
- if (bImmediately)
- {
- req.ShutdownTime = 1;
- req.UpTime = 1;
- }
- else
- {
- req.ShutdownTime = 1;//oiltmp
- req.UpTime = 3; //oiltmp
- }
- ErrorCodeEnum eErrShutdown = m_pUpsClient->Shutdown(req,ans,10000);
- if (eErrShutdown == Error_Succeed)
- {
- //m_lastHour = localTime.wHour;
- Dbg("to shutdown");
- m_bToRestart = true;
- Sleep(20000);
- m_fsm.QuitFrameworkAndSaveInfo(m_eRebootTrigger,m_eRebootWay);
- int ret;
- if (m_bGetUpsStateFlag)
- ret = SystemShutdown();
- else
- ret = SystemShutdown(TRUE);
- Dbg("after ups,SystemShutdown result %d",ret);
- }
- else
- Dbg("shutdown failed(%d)",eErrShutdown);
- }
- else
- {
- Dbg("no ups,so to restart directly.");
- if (!m_bToRestart)
- {
- m_restartTimes++;
- if (m_restartTimes > m_maxRestartTimes)
- {
- Dbg("restart too many times(%d,%d),give up.",m_restartTimes,m_maxRestartTimes);
- m_restartTimes--;
- return -1;
- }
- Dbg("the %d restart.",m_restartTimes);
- spConfigRun->WriteConfigValueInt("Run","RestartTimes",m_restartTimes);
- if (m_lastHour != localTime.wHour)
- {
- m_lastHour = localTime.wHour;
- Dbg("set last hour to %d", m_lastHour);
- spConfigRun->WriteConfigValueInt("Run", "LastHour", m_lastHour);
- }
- //oilyang 20140606
- //framework to reboot os
- //int ret = SystemShutdown(TRUE);
- m_fsm.QuitFrameworkAndSaveInfo(m_eRebootTrigger,RebootWay_OS);
- //Dbg("no ups,SystemShutdown result %d",ret);
- }
- }
- return 0;
- }
- /** 这里建议改用调用框架提供的接口,关机、重启均支持 [Gifur@202135]*/
- //system api shutdown
- int CHealthManagerEntity::SystemShutdown(BOOL bReboot)
- {
- #ifdef RVC_OS_WIN
- HANDLE hToken; // handle to process token
- TOKEN_PRIVILEGES tkp; // pointer to token structure
- BOOL fResult; // system shutdown flag
- // Get the current process token handle so we can get shutdown
- // privilege.
- if (!OpenProcessToken(GetCurrentProcess(),
- TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
- return FALSE;
- // Get the LUID for shutdown privilege.
- LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
- &tkp.Privileges[0].Luid);
- tkp.PrivilegeCount = 1; // one privilege to set
- tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- // Get shutdown privilege for this process.
- AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
- (PTOKEN_PRIVILEGES) NULL, 0);
- // Cannot test the return value of AdjustTokenPrivileges.
- if (GetLastError() != ERROR_SUCCESS)
- return FALSE;
- // Display the shutdown dialog box and start the countdown.
- fResult = InitiateSystemShutdown(
- NULL, // shut down local computer
- NULL, // message for user
- 0, // time-out period, in seconds
- FALSE, // ask user to close apps
- bReboot); // reboot after shutdown
- if (!fResult)
- return FALSE;
- // Disable shutdown privilege.
- tkp.Privileges[0].Attributes = 0;
- AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
- (PTOKEN_PRIVILEGES) NULL, 0);
- return 0;
- #else
- sync();
- if (bReboot)
- system("init 6");
- else
- system("init 0");
- return 0;//oiltestlinux
- #endif //RVC_OS_WIN
- }
- int CHealthManagerEntity::FrameworkShutdown(bool bRestart)
- {
- #ifdef RVC_OS_WIN
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- ZeroMemory( &si, sizeof(si) );
- si.cb = sizeof(si);
- ZeroMemory( &pi, sizeof(pi) );
- GetFunction()->FlushLogFile();
- // LPTSTR szCmdline[] = _tcsdup(TEXT("\"C:\\Program Files\\MyApp\" -L -S"));
- //CreateProcess(NULL, szCmdline, /*...*/);
- // Start the child process.
- CSimpleStringA csRestart,csVerPath,csAll,csSep("\""),csBlank(" "),csScript("wscript.exe"),csReFlag("r");
- csRestart = "sprestart.exe ";
- ErrorCodeEnum Error = GetFunction()->GetPath("RootVer", csVerPath);
- csVerPath +="\\spexplorerfast.vbs";
- if (!bRestart)
- csReFlag = "n";
- csAll = csSep + csRestart + csSep + csBlank + csSep + csScript+csBlank + csVerPath + csSep
- + csBlank + csSep + csReFlag + csSep;
- Dbg("allpath[%s]",(LPCTSTR)csAll);
- LPTSTR szCmdline = _strdup(csAll);
- if( !CreateProcess( NULL,szCmdline,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
- {
- Dbg("CreateProcess failed (%d).\n", GetLastError());
- return -1;
- }
- m_fsm.QuitFrameworkAndSaveInfo(m_eRebootTrigger, m_eRebootWay);
- //MessageBoxA(0,0,0,0);
- DWORD dwErr = GetLastError();
- // Wait until child process exits.
- WaitForSingleObject( pi.hProcess, INFINITE );
-
-
- // Close process and thread handles.
- CloseHandle( pi.hProcess );
- CloseHandle( pi.hThread );
- return 0;
- #else
- Dbg("FrameworkShutdown to call QuitFrameworkAndSaveInfo:%d,%d", m_eRebootTrigger, m_eRebootWay);
- m_fsm.QuitFrameworkAndSaveInfo(m_eRebootTrigger, m_eRebootWay);
- return 0;//oiltestlinux
- #endif
- }
- //almost disused.
- //the function moved to Entity "SelfChecker"
- ErrorCodeEnum CHealthManagerEntity::RestartModule(const char* pEntityName)
- {
- CSmartPointer<IEntityFunction> pFunc = GetFunction();
- CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
- if (pFuncPrivilege == NULL)
- {
- Dbg("restart mc NoPrivilege");
- return Error_NoPrivilege;
- }
- map<CSimpleStringA,ModuleRunInfo>::iterator it;
- it = m_modRunInfo.find(pEntityName);
- if (it == m_modRunInfo.end())
- {
- Dbg("add %s to modfuninfo(%d).",pEntityName,m_modRunInfo.size());
- m_modRunInfo[pEntityName].count = 1;
- m_modRunInfo[pEntityName].dwStart = GetTickCountRVC();
- }
- else
- {
- Dbg("modruninfo size %d",m_modRunInfo.size());
- Dbg("%d",m_modRunInfo[pEntityName].count);
- (m_modRunInfo[pEntityName].count)++;
- Dbg("%d",m_modRunInfo[pEntityName].count);
- }
- CSmartPointer<IAsynWaitSp> spWait;
- ErrorCodeEnum eErrCode = Error_Succeed;
- eErrCode = pFuncPrivilege->TerminateEntity(pEntityName,spWait);
- if (spWait != NULL)
- eErrCode = spWait->WaitAnswer(10000);
- if (eErrCode != Error_Succeed)
- {
- Dbg("kill %s %d",pEntityName,eErrCode);
- return eErrCode;
- }
- Sleep(3000);
- eErrCode = pFuncPrivilege->StartEntity(pEntityName,NULL,spWait);
- if (spWait != NULL)
- eErrCode = spWait->WaitAnswer(10000);
- if (eErrCode != Error_Succeed)
- {
- Dbg("start %s %d",pEntityName,eErrCode);
- return eErrCode;
- }
- //m_modRestartCount++;
- //if (m_modRestartCount == 1)
- // m_MCStart = GetTickCount();
- DWORD dwMaxTimes,dwInternal;
- if (m_modCfgInfo.find(pEntityName) == m_modCfgInfo.end())
- {
- dwMaxTimes = m_restartMode[RESTART_MODE_DEFAULT].dwTimes;
- dwInternal = m_restartMode[RESTART_MODE_DEFAULT].dwInternal;
- }
- else
- {
- dwMaxTimes = m_restartMode[m_modCfgInfo[pEntityName]].dwTimes;
- dwInternal = m_restartMode[m_modCfgInfo[pEntityName]].dwInternal;
- }
- Dbg("%d,%d,%s restart %d times",dwMaxTimes,dwInternal,pEntityName,m_modRunInfo[pEntityName].count);
- if (m_modRunInfo[pEntityName].count > dwMaxTimes)
- {
- m_MCEnd = GetTickCountRVC();
- if (m_MCEnd-m_modRunInfo[pEntityName].dwStart < dwInternal)
- {
- Dbg("wait chance to restart pc.");
- if (_strnicmp(pEntityName, "FaceTracking", strlen("FaceTracking")) != 0)
- m_bWaitRestartPC = true;
- }
- else
- {
- m_modRunInfo[pEntityName].dwStart = m_MCEnd;
- m_modRunInfo[pEntityName].count = 0;
- LogWarn(Severity_Low,Error_Unexpect,LOG_WARN_HEALTH_MODULE_RESTART_TIMES
- ,"restart x times in more than 10mins");
- }
- }
- return eErrCode;
- }
- void CHealthManagerEntity::AfterWaitRestartPC()
- {
- ReadMachineDataBySyncSerivce();
- Dbg("menu:[%s]",(LPCTSTR)m_menuChoice);
- CSmartPointer<IEntityFunction> pFunc = GetFunction();
- CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
- if (pFuncPrivilege == NULL)
- {
- Dbg("restart pc NoPrivilege");
- return;
- }
- ErrorCodeEnum eErr;
- CSimpleStringA csCustomerHandle("");
- eErr = GetFunction()->GetSysVar("CustomerHandle",csCustomerHandle);
- Dbg("cust handle %d,%s",eErr,(LPCTSTR)csCustomerHandle);
- if (eErr != Error_Succeed)
- {
- Dbg("get CustomerHandle failed (%d).",eErr);
- }
- else if (csCustomerHandle[0] == 'N')
- {
- m_bWaitRestartPC = false;
- pFuncPrivilege->DisplayBlueScreen("暂停服务test");
- Dbg("time comes,restart machine");
- m_eRebootTrigger = RebootTrigger_RunExcepition;
- m_eRebootWay = RebootWay_Power;
- SystemRestart(false, true);
- }
- }
- void CHealthManagerEntity::UpsSupplyLockScreen()
- {
- ErrorCodeEnum eErr;
- CSimpleStringA csCustomerHandle("");
- eErr = GetFunction()->GetSysVar("CustomerHandle",csCustomerHandle);
- Dbg("upslockscreen cust handle %d,%s",eErr,(LPCTSTR)csCustomerHandle);
- if (eErr != Error_Succeed)
- {
- Dbg("get CustomerHandle failed (%d).",eErr);
- }
- else// if (csCustomerHandle[0] == 'N')
- {
- CSmartPointer<IEntityFunction> pFunc = GetFunction();
- CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
- if (pFuncPrivilege == NULL)
- {
- Dbg("display screen NoPrivilege");
- return;
- }
- pFuncPrivilege->DisplayBlueScreen("暂停服务");
- LogEvent(Severity_High,LOG_EVT_HEALTH_UPS_NO_ELECTOR,"ups no elector,to shutdown machine");
- Dbg("ups no elector,display screen.");
- //oiltmp eject card and sth else
- Sleep(30000);
- if (m_bUpsWaitLock)
- {
- m_bUpsWaitLock = false;
- m_bScreenLock = true;
- int ret = SystemShutdown();
- Dbg("SystemShutdown result %d",ret);
- }
- else
- {
- pFuncPrivilege->UndisplayBlueScreen();
- m_bUpsWaitLock = false;
- m_bScreenLock = false;
- }
- }
- }
- void CHealthManagerEntity::OnCheckTimeTimeout()
- {
- if (m_bNeedToRestartIE)
- {
- //oilyang 20160704
- //to judge in main page & the phone is offline
- CSimpleStringA csCustHandle("");
- ErrorCodeEnum eErr = Error_Unexpect;
- eErr = GetFunction()->GetSysVar("CustomerHandle", csCustHandle);
- if (eErr == Error_Succeed)
- {
- if (csCustHandle.Compare("C") != 0 && csCustHandle.Compare("T") != 0 && csCustHandle.Compare("G") != 0)
- {
- if (m_bInMainPage)
- {
- Dbg("to restart iebrowser.");
- RestartIE();
- }
- }
- }
-
- }
- SYSTEMTIME localTime;
- GetLocalTimeRVC(localTime);
- //99 is initial value of m_preDay
- if (m_preDay != 99 && m_preDay != localTime.wDayOfWeek && m_bNeedToRestartPAD == false)
- m_bNeedToRestartPAD = true;
- m_preDay = localTime.wDayOfWeek;
- CSmartPointer<IConfigInfo> spConfigRun;
- ErrorCodeEnum eErr = GetFunction()->OpenConfig(Config_Run, spConfigRun);
- if (eErr != Error_Succeed)
- Dbg("timer open cfg file failed!");
- else
- {
- if (localTime.wHour != m_lastHour)
- {
- Dbg("hour changed,to set restart times to 0");
- spConfigRun->WriteConfigValueInt("Run", "RestartTimes", 0);
- }
- }
- GetNetDeviceState();
- if (_strnicmp(m_sysStaticInfo.strMachineType.GetData(), "RVC.PAD", strlen("RVC.PAD")) == 0)
- {
- if (m_bNeedToRestartPAD)
- {
- ULONGLONG ull = 0;
- ull = GetTickCountRVC();
- int osRunHours = 0, osRunDays = 0;
- osRunHours = (ull / (1000 * 60 * 60));
- osRunDays = osRunHours / 24;
- CSmartPointer<IConfigInfo> spConfigRun;
- ErrorCodeEnum eErr = GetFunction()->OpenConfig(Config_Run, spConfigRun);
- if (m_maxRunDays <= 0)
- m_maxRunDays = 7;
- if (osRunDays >= m_maxRunDays)
- {
- Dbg("os has run %d hour,to restart os.", osRunHours);
- spConfigRun->WriteConfigValueInt("Restart", "DayNum", 0);
- m_eRebootTrigger = RebootTrigger_Period;
- m_eRebootWay = RebootWay_Power;
- SystemRestart(true,true);
- }
- else if (osRunDays >= 1)
- {
- if (osRunDays > m_dayNum)
- {
- Dbg("os has run %d hour,to restart framework.", osRunHours);
- spConfigRun->WriteConfigValueInt("Restart", "DayNum", osRunDays);
- m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_Period, RebootWay_Framework);
- }
- }
- }
- }
- else //not RVC.PAD
- {
- if (m_wDayOfWeek != localTime.wDayOfWeek)
- {
- if (localTime.wHour == m_restartHour && localTime.wMinute >= m_restartMinute
- && localTime.wMinute <= (m_restartMinute + HEALTHMANAGER_TIMER_INTERVAL_MINUTE))
- {
- m_wDayOfWeek = localTime.wDayOfWeek;
- m_eRebootTrigger = RebootTrigger_Period;
- m_eRebootWay = RebootWay_Power;
- BOOL bRet = SystemRestart(true,true);
- Dbg("restart machine[%d][%d] bRet=%d, LastError=%d", localTime.wHour, localTime.wMinute, bRet, GetLastError());
- Dbg("not rvc.pad %s,%s", m_sysStaticInfo.strMachineType.GetData(), (const char*)m_sysStaticInfo.strMachineType);
- }
- }
- }
- if (m_pUpsClient == NULL)
- {
- CSimpleStringA csRunState("B");
- GetFunction()->GetSysVar("RunState",csRunState);
- if (csRunState[0] != 'B' || csRunState[0] != 'I')
- {
- if (_strnicmp(m_sysStaticInfo.strMachineType.GetData(), "RVC.Stand2S", strlen("RVC.Stand2S") == 0))
- {
- int ret = ConnectUps();
- Dbg("connect ups %d.", ret);
- }
- }
- }
- else
- {
- UpsService_GetStatus_Req req;
- UpsService_GetStatus_Ans ans;
- ErrorCodeEnum eErrState = m_pUpsClient->GetStatus(req,ans,3000);
- if (eErrState == Error_Succeed)
- {
- m_bGetUpsStateFlag = true;
- switch(ans.Status)
- {
- case UPS_STATUS_NORMAL:
- m_bUpsWaitLock = false;
- m_upsNoElectorCount = 0;
- break;
- case UPS_STATUS_ERROR_TO_GET_STATUS:
- m_upsStateCount++;
- if (m_upsStateCount > 3)
- {
- //logwarn oiltmp
- }
- break;
- case UPS_STATUS_NO_ELECTOR:
- m_bUpsWaitLock = true;
- m_upsNoElectorCount++;
- if (m_upsNoElectorCount > 2)
- {
- //logwarn oiltmp
- //notify front end
- //shutdown pc or not?
- }
- break;
- default:
- break;
- }
- //Dbg("current state %d",ans.Status);
- }
- else
- {
- Dbg("get ups state failed(%d).",eErrState);
- m_bGetUpsStateFlag = false;
- if (eErrState == Error_NetBroken)
- {
- m_pUpsClient->GetFunction()->CloseSession();
- m_pUpsClient = NULL;
- }
- }
- }
- ReadMachineDataBySyncSerivce();
- //Dbg("fsm:%d,menu:%s", m_fsm.GetFSMState(),(const char*)m_menuChoice);
- bool bCheckGuardian = false;
- if (m_fsm.GetFSMState() == HM_FSM_STATE_IDLE || (m_fsm.GetFSMState() == HM_FSM_STATE_CMS))
- {
- if (m_fsm.GetAccessAuthFlag()
- && (m_bEnterMainPageEver || (!m_bEnterMainPageEver && m_fsm.IfIEBeforeHealth()) || IsTestMode()))//oilyang 20161219 改成通过是否成功进入主页来判断IE情况
- {
- bCheckGuardian = CheckGuardianIsRun(true);
- if (!m_bSayIdle)
- {
- m_bSayIdle = true;
- if (bCheckGuardian)
- {
- if (m_pfUpgradeRestart != NULL)
- {
- int ret = m_pfUpgradeRestart(3, 0);
- Dbg("healthmanager say idle,so tell the guardian.%d", ret);
- }
- }
- CSimpleStringA csRunInfo,csStartTime;
- if ((GetFunction()->GetPath("RunInfo",csRunInfo)) != Error_Succeed)
- {
- Dbg("get runinfo path failed(%d)");
- }
- else
- {
- csStartTime = csRunInfo + "/runcfg/starttime.dat";
- int ret = remove(csStartTime);
- if (ret == 0)
- Dbg("delete time file error.[%d]",GetLastError());
- }
- }
- if (bCheckGuardian)
- {
- if (m_pfShake != NULL)
- {
- WorkStateEnum eShake;
- Dbg("to shake...");
- int ret = m_pfShake(eShake);
- //if (eErrShake != Error_Succeed)
- Dbg("shake hand result:%d,work state %d", ret, eShake);
- }
- if (!m_bHealthInit)
- {
- bool bStop = StopGuardian();
- if (bStop)
- {
- m_bHealthInit = true;
- bool bGuardian = StartGuardian();
- Dbg("restart guardian %d", bGuardian);
- }
- }
- }
- else
- {
- Dbg("to start guardian");
- bool bGuardian = StartGuardian();
- Dbg("start guardian %d",bGuardian);
- }
- }
- else
- {
- //oilyang@20190905 add if auth suc,tell guardian,for upgrade
- if (m_fsm.GetAccessAuthFlag())
- {
- if (CheckGuardianIsRun(true))
- {
- if (m_pfUpgradeRestart != NULL)
- {
- int ret = m_pfUpgradeRestart(5, 0);
- Dbg("auth suc,so tell the guardian.%d", ret);
- }
- }
- }
- }
- }
- else
- {
- m_bSayIdle = false;
- }
- if (m_fsm.GetFSMState() == HM_FSM_STATE_CMS)
- {
- GetFunction()->ResetTimer(HEALTHMANAGER_TIMER_ID, HEALTHMANAGER_TIMER_INTERVAL);
- return;
- }
- if (m_bWaitRestartPC)
- {
- Dbg("finally we the restart time come,no wait.");
- //m_bWaitRestartPC = false;
- AfterWaitRestartPC();
- }
- if (m_bUpsWaitLock)
- {
- UpsSupplyLockScreen();
- }
- else
- {
- //no need to un-display blue screen? oiltest 20140320
- //if (m_bScreenLock)
- //{
- // CSmartPointer<IEntityFunction> pFunc = GetFunction();
- // CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
- // if (pFuncPrivilege == NULL)
- // {
- // Dbg("unlock screen NoPrivilege");
- // return;
- // }
- // pFuncPrivilege->UndisplayBlueScreen();
- // m_bScreenLock = false;
- //}
- }
- GetFunction()->ResetTimer(HEALTHMANAGER_TIMER_ID, HEALTHMANAGER_TIMER_INTERVAL);
- }
- #ifdef linux
- bool FindGuardianPid(pid_t &pid)
- {
- FILE* pstr;
- char cmd[128], buff[512];
- pid_t pID;
- int pidnum;
- char* name = "bin/guardian";
- char* p = NULL;
- int ret = 3;
- memset(cmd, 0, sizeof(cmd));
- sprintf(cmd, "ps -ef|grep %s|grep -v grep", name);
- pstr = popen(cmd, "r");
- if (pstr == NULL)
- {
- Dbg("(linux)can't find guardian (pstr)");
- return false;
- }
- memset(buff, 0, sizeof(buff));
- fgets(buff, 512, pstr);
- Dbg("%s\n", buff);
- p = strtok(buff, " ");
- p = strtok(NULL, " ");
- pclose(pstr); //这句是否去掉,取决于当前系统中ps后,进程ID号是否是第一个字段
- if (p == NULL)
- {
- Dbg("(linux)can't find guardian (p)");
- return false;
- }
- if (strlen(p) == 0)
- {
- Dbg("(linux)can't find guardian (strlen(p))");
- return false;
- }
- if ((pidnum = atoi(p)) == 0)
- {
- Dbg("(linux)can't find guardian (pid)");
- return false;
- }
- Dbg("find guardian,pidnum: %d", pidnum);
- pid = (pid_t)pidnum;
- return pid;
- }
- #endif
- bool CHealthManagerEntity::CheckGuardianIsRun(bool bStart)
- {
- #ifdef RVC_OS_WIN
- HANDLE hSnapshot;
- //find guardian.exe
- hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- if (hSnapshot)
- {
- PROCESSENTRY32 pe;
- pe.dwSize = sizeof(pe);
- if (Process32First(hSnapshot, &pe))
- {
- do {
- if (_stricmp(&pe.szExeFile[0], "guardian.exe") == 0)
- {
- //Dbg("guardian is running.");
- return true;
- }
- } while (Process32Next(hSnapshot, &pe));
- }
- CloseHandle(hSnapshot);
- }
- Sleep(1000);
- Dbg("cannot find guardian.");
- if (bStart)
- return StartGuardian();
- else
- return false;
- #else
- Dbg("to check guardian is online.");
- pid_t pID;
- bool bFind = false;
- bFind = FindGuardianPid(pID);
- if (bFind)
- {
- Dbg("find guardian");
- int ret = kill(pID, 0);
- Dbg("ret= %d ", ret);
- if (0 == ret)
- {
- Dbg("process: guardian.exe exist!");
- return true;
- }
- else
- {
- Dbg("process: guardian.exe not exist!");
- if (bStart)
- return StartGuardian();
- else
- return false;
- }
- }
- if (bStart)
- return StartGuardian();
- else
- return false;
- #endif //RVC_OS_WIN
- }
- bool CHealthManagerEntity::StopGuardian()
- {
- #ifdef RVC_OS_WIN
- Dbg("to stop guardian");
- HANDLE hSnapshot;
- int rc = TRUE;
- int result;
- HANDLE hProcess;
- //find and kill guardian.exe
- hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- if (hSnapshot)
- {
- PROCESSENTRY32 pe;
- pe.dwSize = sizeof(pe);
- if (Process32First(hSnapshot, &pe))
- {
- do {
- if (_stricmp(&pe.szExeFile[0], "guardian.exe") == 0)
- {
- hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID );
- if( hProcess == NULL )
- {
- Dbg("Fail to open process(%d)!",GetLastError());
- return false;
- }
- else
- {
- result = TerminateProcess(hProcess,-1);
- if (result)
- {
- Dbg("Terminate guardian suc.");
- return true;
- }
- else
- {
- Dbg("Terminate guardian failed(%d).",GetLastError());
- return false;
- }
- CloseHandle( hProcess );
- }
- Sleep(3000);
- WaitForSingleObject(&pe.th32ProcessID, INFINITE );
- break;
- }
- } while (Process32Next(hSnapshot, &pe));
- }
- CloseHandle(hSnapshot);
- }
- Sleep(3000);
- return false;
- #else
- int ret = m_pfUpgradeRestart(6, 0);
- Dbg("healthmanager tell the guardian to quit.%d", ret);
- Sleep(5000);
- pid_t pID;
- bool bFind = false;
- bFind = FindGuardianPid(pID);
- if (bFind)
- {
- int ret = kill(pID, 9);
- if (ret < 0)
- {
- Dbg("kill guardian failed:%d",errno);
- return false;
- }
- else
- {
- Dbg("killed guardian.");
- return true;
- }
- }
- Dbg("can't find guardian pid.");
- return true;
- #endif //RVC_OS_WIN
- }
- bool CHealthManagerEntity::StartGuardian()
- {
- LOG_FUNCTION();
- if (m_sysStaticInfo.strMachineType.Compare("RVC.IL") == 0)
- {
- Dbg("machine type is RVC.IL,no need to start guardian.exe");
- return false;
- }
- Dbg("to start guardian");
- // Start the child process.
- CSimpleStringA csBinPath;
- ErrorCodeEnum Error = GetFunction()->GetPath("Bin", csBinPath);
- #ifdef RVC_OS_WIN
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- ZeroMemory( &si, sizeof(si) );
- si.cb = sizeof(si);
- ZeroMemory( &pi, sizeof(pi) );
- GetFunction()->FlushLogFile();
- // Start the child process.
- CSimpleStringA csAll,csSep("\"");
- csBinPath +="\\guardian.exe";
- csAll = csSep + csBinPath + csSep;
- Dbg("guardian path[%s]",(LPCTSTR)csAll);
- LPTSTR szCmdline = _strdup(csAll);
- if( !CreateProcess( NULL,szCmdline,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
- {
- Dbg("CreateProcess failed (%d).\n", GetLastError());
- return false;
- }
- DWORD dwErr = GetLastError();
- return true;
- #else
- char app[MAX_PATH];
- memset(app,0, sizeof(app));
- tk_process_t* process = NULL;
- tk_process_option_t option;
- csBinPath += "/guardian";
- Dbg("path:%s",(const char*)csBinPath);
- sprintf(app, "%s %s %d", (const char*)csBinPath,"oiltest",1);
- option.exit_cb = NULL;
- option.file = NULL;
- option.flags = 0;
- option.params = app;
- if (0 == process_spawn(&option, &process)) {
- Dbg("process_spawn guardian");
- FREE(process);
- return true;
- }
- Dbg("end of StartGuardian");
- return false;
-
- #endif //RVC_OS_WIN
- }
- bool CHealthManagerEntity::DoRestart()
- {
- LOG_FUNCTION();
- CSmartPointer<IConfigInfo> spConfig;
- ErrorCodeEnum err = GetFunction()->OpenConfig(Config_Software, spConfig);
- if (err != Error_Succeed) {
- LOG_TRACE("open cfg file failed!");
- return false;
- }
- m_restartHour = m_restartMinute = 1;
- m_maxRestartTimes = 3;
- int defaultTimesMax,defaultInternal,lowTimesMax,lowInternal;
- defaultTimesMax = 10;
- defaultInternal = 600000;
- lowTimesMax = 5;
- lowInternal = 600000;
- spConfig->ReadConfigValueInt("init","RestartHour",m_restartHour);
- spConfig->ReadConfigValueInt("init","RestartMinute",m_restartMinute);
- int testflag;
- spConfig->ReadConfigValueInt("init","TestFlag",testflag);
- m_testFlag = testflag;
- spConfig->ReadConfigValueInt("Run","MaxRestartTimes",m_maxRestartTimes);
- Dbg("m_maxRestartTimes(%d)",m_maxRestartTimes);
- spConfig->ReadConfigValueInt("ModRestartSettings","DefaultTimesMax",defaultTimesMax);
- spConfig->ReadConfigValueInt("ModRestartSettings","DefaultInternal",defaultInternal);
- spConfig->ReadConfigValueInt("ModRestartSettings","LowTimesMax",lowTimesMax);
- spConfig->ReadConfigValueInt("ModRestartSettings","LowInternal",lowInternal);
- m_restartMode[RESTART_MODE_DEFAULT].dwTimes = defaultTimesMax;
- m_restartMode[RESTART_MODE_DEFAULT].dwInternal = defaultInternal;
- m_restartMode[RESTART_MODE_LOW].dwTimes = lowTimesMax;
- m_restartMode[RESTART_MODE_LOW].dwInternal = lowInternal;
- CSimpleStringA csDefaultModule,csLowModule;
- spConfig->ReadConfigValue("ModRestartSettings","DefaultModule",csDefaultModule);
- spConfig->ReadConfigValue("ModRestartSettings","LowModule",csLowModule);
- SplitModuleNames(csDefaultModule,RESTART_MODE_DEFAULT);
- SplitModuleNames(csLowModule,RESTART_MODE_LOW);
- Dbg("%d:%d",m_restartHour,m_restartMinute);
- CSmartPointer<IConfigInfo> spConfigRun;
- ErrorCodeEnum eErr = GetFunction()->OpenConfig(Config_Run, spConfigRun);
- spConfigRun->ReadConfigValueInt("Run", "LastHour", m_lastHour);
- m_dayNum = 1;
- spConfigRun->ReadConfigValueInt("Restart", "DayNum", m_dayNum);
- if (m_dayNum == 0)
- {
- spConfigRun->WriteConfigValueInt("Restart", "DayNum", 0);
- }
- spConfigRun->ReadConfigValueInt("Run", "RestartTimes", m_restartTimes);
- CSmartPointer<IConfigInfo> spCerConfig;
- eErr = GetFunction()->OpenConfig(Config_CenterSetting, spCerConfig);
- spCerConfig->ReadConfigValueInt(GetEntityName(), "MaxRunDays", m_maxRunDays);
- Dbg("central setting:m_maxRunDays:%d,DayNum:%d", m_maxRunDays,m_dayNum);
- SYSTEMTIME localTime;
- GetLocalTimeRVC(localTime);
- if (m_bInit)
- {
- m_bInit = false;
- m_wDayOfWeek = localTime.wDayOfWeek;
- }
- eErr = GetFunction()->GetSystemStaticInfo(m_sysStaticInfo);
- if (eErr != Error_Succeed)
- {
- Dbg("Get system static info failed(%d).", eErr);
- m_sysStaticInfo.strMachineType = "";
- m_sysStaticInfo.strSite = "";
- m_sysStaticInfo.InstallVersion = CVersion();
- }
- ReadMachineDataBySyncSerivce();
- ITimerListener *pListener = new TimerOutHelper<CHealthManagerEntity>(this, &CHealthManagerEntity::OnCheckTimeTimeout);
- Dbg("set timer");
- GetFunction()->SetTimer(HEALTHMANAGER_TIMER_ID, pListener, HEALTHMANAGER_TIMER_INTERVAL);
- //oiltmp 20131204 commented,the following upline(...)add it
- //DoWatchDog(WD_OP_START);
- //ITimerListener *pWDListener = new TimerOutHelper<CHealthManagerEntity>(this, &CHealthManagerEntity::OnWatchDogTimeout);
- //GetFunction()->SetTimer(HEALTHMANAGER_WD_TIMER_ID, pWDListener, HEALTHMANAGER_WD_TIMER_INTERVAL);
- CSimpleStringA deamonBasePath = "";
- err = GetFunction()->GetPath("bin",deamonBasePath);
- if (err != Error_Succeed)
- {
- Dbg("for wait deamon get bin path failed(%d).",err);
- return Error_IO;
- }
- #ifdef linux
- deamonBasePath += "/libGuardianBase.so";
- Dbg("gd path [%s]", (LPCTSTR)deamonBasePath);
- void* handle = dlopen(deamonBasePath, RTLD_LAZY);
- if (handle == NULL)
- {
- Dbg("load libGuardianBase.so failed(%d)", errno);
- return Error_IO;
- }
- m_pfShake = (pfShakeHands)dlsym(handle, "ShakeHands");
- if (m_pfShake == NULL)
- {
- Dbg("get ShakeHands failed(%d)", GetLastError());
- return Error_IO;
- }
- m_pfUpgradeRestart = (pfUpgradeRestart)dlsym(handle, "UpgradeRestart");
- if (m_pfUpgradeRestart == NULL)
- {
- Dbg("get UpgradeRestart failed(%d)", GetLastError());
- return Error_IO;
- }
- #else
- deamonBasePath += "\\GuardianBase.dll";
- HMODULE hDll = LoadLibraryA(deamonBasePath);
- Dbg("gd path [%s]", (LPCTSTR)deamonBasePath);
- if (hDll == NULL)
- {
- Dbg("load guardianbase.dll failed(%d)", GetLastError());
- return Error_IO;
- }
- m_pfShake = (pfShakeHands)GetProcAddress(hDll,"ShakeHands");
- if (m_pfShake == NULL)
- {
- Dbg("get shakehands failed(%d)",GetLastError());
- return Error_IO;
- }
- m_pfUpgradeRestart = (pfUpgradeRestart)GetProcAddress(hDll,"UpgradeRestart");
- if (m_pfUpgradeRestart == NULL)
- {
- Dbg("get UpgradeRestart failed(%d)",GetLastError());
- return Error_IO;
- }
- #endif //linux
- Dbg("have load guardian.");
- if (CheckGuardianIsRun(true))
- {
- if (m_pfUpgradeRestart != NULL)
- {
- Sleep(500);
- Dbg("to tell guardian framework is starting.");
- int ret = m_pfUpgradeRestart(4, 0);//tell guardian framework is starting...oilyang 20150514
- Dbg("feedback of framework is starting.%d", ret);
- }
- }
- m_currentVer = "";
- UpdateSiteToRuncfg();
- return true;
- }
- void CHealthManagerEntity::SplitModuleNames(CSimpleStringA csLine, ModuleReMode eMode)
- {
- string str((const char*)csLine);
- size_t pos = 0,nameEnd = 0;
- size_t len = str.length();
- while(1)
- {
- nameEnd = str.find(',',pos);
- if (nameEnd != string::npos)
- {
- m_modCfgInfo[str.substr(pos,nameEnd-pos).c_str()] = eMode;
- pos = nameEnd + 1;
- }
- else
- {
- if (pos < len)
- m_modCfgInfo[str.substr(pos,nameEnd-pos).c_str()] = eMode;
- break;
- }
- }
- }
- int CHealthManagerEntity::ConnectUps()
- {
- if (m_pUpsClient == NULL)
- {
- m_pUpsClient = new UpsService_ClientBase(this);
- ErrorCodeEnum eErrConn = m_pUpsClient->Connect();
- if (eErrConn != Error_Succeed) {
- Dbg("Ups connected failed(%d).",eErrConn);
- m_pUpsClient->SafeDelete();
- m_pUpsClient = NULL;
- }
- else
- {
- Dbg("ups entity connected.");
- UpsService_GetStatus_Req req;
- UpsService_GetStatus_Ans ans;
- ErrorCodeEnum eErrState = m_pUpsClient->GetStatus(req,ans,3000);
- if (eErrState == Error_Succeed)
- {
- m_bGetUpsStateFlag = true;
- Dbg("current state %d",ans.Status);
- return 0;
- }
- else
- Dbg("connect get ups state failed(%d).",eErrState);
- }
- }
- return -1;
- }
- bool CHealthManagerEntity::SaveCurrentVersion()
- {
- CSimpleStringA csRootVer,csRunInfo,csBakFile,csVerFile;
- ErrorCodeEnum eErr;
- if ((eErr = GetFunction()->GetPath("RootVer",csRootVer)) != Error_Succeed)
- {
- LOG_TRACE("Get version path failed(%d).",eErr);
- return false;
- }
- if ((eErr = GetFunction()->GetPath("RunInfo",csRunInfo)) != Error_Succeed)
- {
- Dbg("get runinfo path failed(%d)",eErr);
- return false;
- }
- //csVerFile = csRootVer + "\\active.txt";
- csBakFile = csRunInfo + "/runcfg/version.dat";
- //ifstream infile(csVerFile,std::ifstream::binary);
- ofstream outfile (csBakFile,std::ofstream::binary);
- //infile.seekg (0,infile.end);
- //long size = infile.tellg();
- //infile.seekg (0,infile.beg);
- CSimpleStringA csCurrVer = m_sysStaticInfo.InstallVersion.ToString();
- Dbg("get current version [%s]",(LPCTSTR)csCurrVer);
- int size = csCurrVer.GetLength();
- char* buffer = new char[size];
- ZeroMemory(buffer,size);
- //infile.read (buffer,size);
- memcpy(buffer,csCurrVer,size);
- outfile.write (buffer,size);
- delete[] buffer;
- outfile.close();
- //infile.close();
- return true;
- }
- bool CHealthManagerEntity::SaveFrameStartTimeForUpgrade()
- {
- CSimpleStringA csRunInfo,csBakFile;
- ErrorCodeEnum eErr;
- if ((eErr = GetFunction()->GetPath("RunInfo",csRunInfo)) != Error_Succeed)
- {
- Dbg("get runinfo path failed(%d)",eErr);
- return false;
- }
- //csVerFile = csRootVer + "\\active.txt";
- csBakFile = csRunInfo + "/runcfg/starttime.dat";
- //ifstream infile(csVerFile,std::ifstream::binary);
- ofstream outfile (csBakFile,std::ofstream::binary);
- CSystemRunInfo sysRunInfo;
- GetFunction()->GetSystemRunInfo(sysRunInfo);
- if (eErr != Error_Succeed)
- {
- Dbg("Get system run info failed(%d).",eErr);
- return false;
- }
- CSimpleStringA csStartTime = sysRunInfo.tmStart.ToTimeString();
- Dbg("get current time start [%s]",(LPCTSTR)csStartTime);
- int size = csStartTime.GetLength();
- char* buffer = new char[size];
- ZeroMemory(buffer,size);
- //infile.read (buffer,size);
- memcpy(buffer,csStartTime,size);
- outfile.write (buffer,size);
- delete[] buffer;
- outfile.close();
- //infile.close();
- return true;
- }
- bool CHealthManagerEntity::VersionRollBack(const char *pVerion)
- {
- CSimpleStringA csCurrVer = m_sysStaticInfo.InstallVersion.ToString();
- if (_stricmp(csCurrVer,pVerion) == 0)
- {
- Dbg("destination version identified the current version.");
- return false;
- }
- m_pUpgMgr = new UpgradeMgrService_ClientBase(this);
- if (m_pUpgMgr == NULL)
- {
- Dbg("create UpgradeMgr client failed.");
- return false;
- }
- CSmartPointer<IAsynWaitSp> pAsyncWait;
- ErrorCodeEnum eErr = m_pUpgMgr->Connect(pAsyncWait);
- if (eErr != Error_Succeed)
- {
- Dbg("connect to UpgradeMgr failed(%d)",eErr);
- return false;
- }
- else
- eErr = pAsyncWait->WaitAnswer(10000);
- UpgradeMgrService_RollbackUpdate_Req req;
- req.strVersion = pVerion;
- UpgradeMgrService_RollbackUpdate_Ans ans;
- eErr = m_pUpgMgr->RollbackUpdate(req,ans,10000);
- if (eErr == Error_Succeed)
- {
- Dbg("version rollback doing.");
- m_bVerRollback = true;
- return true;
- }
- else
- {
- Dbg("UpgradeMgr rollback failed(%d)",eErr);
- return false;
- }
- }
- void CHealthManagerEntity::ReadMachineDataBySyncSerivce()
- {
- ErrorCodeEnum eSync;
- if (m_pSync == NULL)
- {
- m_pSync = new SyncService_ClientBase(this);
- if (m_pSync != NULL)
- {
- ErrorCodeEnum eSync = m_pSync->Connect();
- if (eSync != Error_Succeed)
- {
- Dbg("connect to SyncService failed %d.",eSync);
- m_pSync->SafeDelete();
- m_pSync = NULL;
- }
- }
- }
- else
- {
- SyncService_GetMachineData_Req req;
- SyncService_GetMachineData_Ans ans;
- req.key = "MenuChoice";
- eSync = m_pSync->GetMachineData(req,ans,10000);
- if (eSync == Error_Succeed)
- {
- m_menuChoice = ans.value;
- if (m_menuPre.Compare(m_menuChoice) != 0)
- {
- m_menuPre = m_menuChoice;
- Dbg("menu:[%s]", (LPCTSTR)m_menuChoice);
- if (m_menuChoice.Compare("Main") == 0)
- {
- //according to yangzixiong,comment it. by oilyang 20160615
- //LogEvent(Severity_Middle, LOG_EVT_USB_CONTROL_OFF, "usb off");//just for Stand2S
- }
- }
- }
- else
- {
- m_menuChoice = "";
- }
- }
- }
- int CHealthManagerEntity::GetNetDeviceState()
- {
- return 0;
- }
- int CHealthManagerEntity::UpdateSiteChangeFlag()
- {
- CSmartPointer<IConfigInfo> spConfig;
- ErrorCodeEnum eErr = GetFunction()->OpenConfig(Config_Run, spConfig);
- if (eErr != Error_Succeed) {
- Dbg("UpdateSiteChangeFlag open run cfg file failed!");
- return -1;
- }
- eErr = spConfig->WriteConfigValueInt("AboutSite", "SiteChanged", 1);
- Dbg("Write SiteChanged 1.err[%d]",eErr);
- return 0;
- }
- int CHealthManagerEntity::UpdateSiteToRuncfg(bool bWriteSite,bool bClearSiteFlag)
- {
- Dbg("bClearSiteFlag[%d]",bClearSiteFlag);
- CSmartPointer<IConfigInfo> spConfig;
- ErrorCodeEnum eErr = GetFunction()->OpenConfig(Config_Run, spConfig);
- if (eErr != Error_Succeed) {
- Dbg("UpdateSiteToRuncfg open run cfg file failed!");
- return -1;
- }
- if (!bClearSiteFlag)
- {
- int siteChangedFlag = 0;
- eErr = spConfig->ReadConfigValueInt("AboutSite", "SiteChanged", siteChangedFlag);
- if (eErr == Error_Succeed)
- {
- if (siteChangedFlag != 0)
- {
- bWriteSite = false;
- }
- }
- }
- else
- {
- eErr = spConfig->WriteConfigValueInt("AboutSite", "SiteChanged", 0);
- Dbg("UpdateSiteToRuncfg.Write Site (%d).", eErr);
- }
- if (bWriteSite)
- {
- spConfig->WriteConfigValue("AboutSite", "Site", m_sysStaticInfo.strSite);
- }
- return 0;
- }
- int CHealthManagerEntity::WriteSiteToRootIni()
- {
- LOG_FUNCTION();
- CSmartPointer<IConfigInfo> spConfig;
- ErrorCodeEnum eErr = GetFunction()->OpenConfig(Config_Run, spConfig);
- if (eErr != Error_Succeed) {
- Dbg("UpdateSiteToRuncfg open run cfg file failed!");
- return -1;
- }
- CSimpleStringA csSite("");
- eErr = spConfig->ReadConfigValue("AboutSite", "Site", csSite);
- if (eErr == Error_Succeed)
- {
- CSimpleStringA path("");
- GetFunction()->GetPath("HardwareCfg", path);
- path.Append("\\");
- path.Append("root.ini");
- Dbg("WriteSiteToRootIni[%s]",(LPCTSTR)path);
- //oiltestlinux comment the following 2 lines
- //BOOL bRet = ::WritePrivateProfileStringA("Terminal", "Site", csSite, path);
- //Dbg("WriteSiteToRootIni:write site bRet = %d", bRet);
- }
- return 0;
- }
- int CHealthManagerEntity::RestartIE()
- {
- m_bNeedToRestartIE = false;
- CSmartPointer<IAsynWaitSp> spWait;
- CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = GetFunction().ConvertCase<IEntityFunctionPrivilege>();
- ErrorCodeEnum eErr = pFuncPrivilege->TerminateEntity("IEBrowser", spWait);
- if (eErr == Error_Succeed)
- {
- if (spWait != NULL)
- spWait->WaitAnswer(10000);
- }
- else
- Dbg("TerminateEntity ie failed.%d", eErr);
- Dbg("Url value:%s", (const char*)m_fsm.GetUrlValue());
- eErr = pFuncPrivilege->StartEntity("IEBrowser", m_fsm.GetUrlValue(), spWait);
- if (eErr == Error_Succeed)
- {
- if (spWait != NULL)
- eErr = spWait->WaitAnswer(15000);
- }
- else
- {
- Dbg("Start IEBrowser failed(%d).", eErr);
- }
- return 0;
- }
- void CHealthManagerEntity::QueryHardwareInfo(SpReqAnsContext<HealthManagerService_QueryHardwareInfo_Req, HealthManagerService_QueryHardwareInfo_Ans>::Pointer ctx)
- {
- CSystemStaticInfo info;
- GetFunction()->GetSystemStaticInfo(info);
- NetworkAddressesList macAddrs;
- NetworkAddressesList ipAddrs;
- GetINETMacAddresses(macAddrs, ipAddrs);
- ctx->Ans.ip = ipAddrs;
- ctx->Ans.mac = macAddrs;
- ctx->Ans.machineType = info.strMachineType;
- ctx->Ans.site = info.strSite;
- ctx->Ans.terminalNo = info.strTerminalID;
- ctx->Ans.termLimit = __ReadCenterConfigStr("TermLimitSwitch", "IEBrowser");
- ctx->Ans.termVersion = info.InstallVersion.ToString();
- ctx->Answer(Error_Succeed);
- }
- void CHealthManagerEntity::ReadCenterConfigStr(SpReqAnsContext<HealthManagerService_ReadCenterConfigStr_Req, HealthManagerService_ReadCenterConfigStr_Ans>::Pointer ctx)
- {
- ctx->Ans.value = __ReadCenterConfigStr(ctx->Req.key, ctx->Req.entity);
- ctx->Answer(Error_Succeed);
- }
- CSimpleStringA CHealthManagerEntity::__ReadCenterConfigStr(CSimpleStringA key, CSimpleStringA entityName = "")
- {
- CSimpleStringA str = "";
- CSmartPointer<IConfigInfo> spCerConfig;
- ErrorCodeEnum err = GetFunction()->OpenConfig(Config_CenterSetting, spCerConfig);
- if (entityName == "")
- {
- spCerConfig->ReadConfigValue("IEBrowser", key, str);
- }
- else
- {
- spCerConfig->ReadConfigValue(entityName, key, str);
- }
- return str;
- }
- void CHealthManagerEntity::GetINETMacAddresses(NetworkAddressesList &macList, NetworkAddressesList &ipList)
- {
- #ifdef RVC_OS_WIN
- PIP_ADAPTER_ADDRESSES pAddresses = NULL;
- ULONG family = AF_INET;
- ULONG flags = GAA_FLAG_INCLUDE_PREFIX;
- ULONG outBufLen = sizeof(IP_ADAPTER_ADDRESSES);
- Dbg("GetINETMacAddresses");
- // Make an initial call to GetAdaptersAddresses to get the
- // size needed into the outBufLen variable
- if (GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen) == ERROR_BUFFER_OVERFLOW)
- {
- pAddresses = static_cast<PIP_ADAPTER_ADDRESSES>(HeapAlloc(GetProcessHeap(), 0, outBufLen));
- }
- Dbg("GetAdaptersAddresses 1");
- if (NULL == pAddresses)
- {
- Dbg("pAddresses = NULL");
- return;
- }
- // _ASSERT( pAddresses );
- // Make a second call to GetAdapters Addresses to get the
- // actual data we want
- DWORD dwRetVal = GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen);
- Dbg("GetAdaptersAddresses 2");
- /* MACAddresses vAddress;*/
- if (dwRetVal != ERROR_SUCCESS)
- {
- Dbg("dwRetVal = %d", dwRetVal);
- return;
- }
- PIP_ADAPTER_ADDRESSES pFirst = pAddresses;
- while (pAddresses)
- {
- if (pAddresses->FirstUnicastAddress->Address.lpSockaddr->sa_family == AF_INET &&
- pAddresses->OperStatus == IfOperStatusUp &&
- pAddresses->IfType != IF_TYPE_SOFTWARE_LOOPBACK)
- {
- Dbg("in while if 1");
- BYTE* pa = pAddresses->PhysicalAddress;
- if (!pa)
- {
- pAddresses = pAddresses->Next ? pAddresses->Next : NULL;
- continue;
- }
- Dbg("in while if 2");
- char bAddressBytes[MACSESION];
- int bAddressInt[MACSESION];
- memset(bAddressBytes, 0, MACSESION);
- size_t nAddressSize = pAddresses->PhysicalAddressLength;
- memcpy(bAddressBytes, pa, (nAddressSize < MACSESION ? nAddressSize : MACSESION));
- char CommarSeperatedAddress[MACSESION * 3] = { 0 };
- for (int i = 0; i < MACSESION; ++i)
- {
- bAddressInt[i] = bAddressBytes[i];
- bAddressInt[i] &= 0x000000ff; // avoid "ff" leading bytes when "char" is lager then 0x7f
- }
- Dbg("in while if 3");
- sprintf(CommarSeperatedAddress, "%02x:%02x:%02x:%02x:%02x:%02x",
- bAddressInt[0],
- bAddressInt[1],
- bAddressInt[2],
- bAddressInt[3],
- bAddressInt[4],
- bAddressInt[5]); // Should use scl::FormatString inside
- CSimpleStringA tmpmac = CSimpleStringA(CommarSeperatedAddress);
- Dbg("in while if 4");
- macList.Append(&tmpmac, 0, 1);
- // macList.push_back( std::string( CommarSeperatedAddress ) );
- Dbg("Description : %s", pAddresses->Description);
- Dbg("OperStatus : %d, IfType = %d, mac = %s", pAddresses->OperStatus, pAddresses->IfType, CommarSeperatedAddress);
- sockaddr_in *sa_in = (sockaddr_in *)pAddresses->FirstUnicastAddress->Address.lpSockaddr;
- char buf_addr[100] = { 0 };
- CSimpleStringA tmpip = CSimpleStringA(inet_ntop(AF_INET, &(sa_in->sin_addr), buf_addr, 100));
- ipList.Append(&tmpip, 0, 1);
- }
- pAddresses = pAddresses->Next ? pAddresses->Next : NULL;
- }
- HeapFree(GetProcessHeap(), 0, pFirst);
- return;
- #else
- return;//oiltestlinux
- #endif //RVC_OS_WIN
- }
- void CHealthManagerEntity::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)
- {
- // MessageBoxA(0,0,0,0);
- //if (dwUserCode != LOG_EVT_HEARTBEAT_UN_CONNECTED)
- // Dbg("user code:%x,from entity:%s",dwUserCode,pszEntityName);
- switch (dwUserCode) {
- case EVENT_RESTART_SHELL:
- case Event_Req_Framework_Restart: //case framework restart after upgrade
- case EVENT_CONSOLE_REQ_RESTART_SHELL:
- case Event_Req_Framework_Rollback://case after rollback
- //according to zl commented the following line 20150828
- //case EVENT_UKEY_CUSTOMER_MANANAGER_SYS_EXIT:
- case LOG_EVT_IEBROWSER_RESET_SITE_RESTART: //重设root.ini的site,重启框架
- case LOG_EVT_HEARTBEAT_UN_CONNECTED: //重设site后框架分行服务连接不上,再次重启回退到前一版本
- {
- Dbg("user code:%x,from entity:%s", dwUserCode, pszEntityName);
- bool bCheckGuardian = CheckGuardianIsRun();
- if (!bCheckGuardian)
- {
- bool bStartGuardian = StartGuardian();
- if (!bStartGuardian)
- {
- Dbg("Before restart frame,start guardian failed.");
- break;
- }
- Dbg("Before restart frame,start guardian suc.");
- Sleep(2000);
- }
- if (dwUserCode == Event_Req_Framework_Restart)
- {
- SaveCurrentVersion();
- SaveFrameStartTimeForUpgrade();
- if (CheckGuardianIsRun(true))
- {
- if (m_pfUpgradeRestart != NULL)
- {
- ErrorCodeEnum eErr = Error_Unexpect;
- int ret = m_pfUpgradeRestart(1, 0);
- Dbg("to tell guardian framework is restarting.%d", ret);
- }
- }
- m_eRebootTrigger = RebootTrigger_FrameUpgrade;
- }
- else if (dwUserCode == Event_Req_Framework_Rollback)
- {
- Dbg("version rollback succeed.to restart framework");
- m_bVerRollback = false;
- m_eRebootTrigger = RebootTrigger_RollBack;
- }
- else if (dwUserCode == LOG_EVT_IEBROWSER_RESET_SITE_RESTART)
- {
- UpdateSiteChangeFlag();
- m_eRebootTrigger = RebootTrigger_Resource;
- }
- else if (dwUserCode == LOG_EVT_HEARTBEAT_UN_CONNECTED)
- {
- CSmartPointer<IConfigInfo> spConfig;
- ErrorCodeEnum eErr = GetFunction()->OpenConfig(Config_Run, spConfig);
- int tmpFlag = 99;
- spConfig->ReadConfigValueInt("AboutSite", "SiteChanged", tmpFlag);
- if (tmpFlag != 1)
- {
- //Dbg("heartbeat can't connect(normal).no need to rollback.");
- break;
- }
- WriteSiteToRootIni();
- UpdateSiteToRuncfg(false, true);
- }
- m_eRebootWay = RebootWay_Framework;
- BOOL bRet = FrameworkShutdown();
- Dbg("framework shutdown [%d]", bRet);
- }
- break;
- case EVENT_CONSOLE_REQ_SHUTDOWN_SHELL:
- {
- BOOL bRet = FrameworkShutdown(false);
- Dbg("framework shutdown [%d]", bRet);
- }
- break;
- case EVENT_RESTART_MACHINE:
- case Event_Req_OS_Restart://case os restart after outside update
- case EVENT_CONSOLE_REQ_RESTART_POWER:
- {
- if (dwUserCode == Event_Req_OS_Restart)
- m_eRebootTrigger = RebootTrigger_OSUpgrade;
- else
- m_eRebootTrigger = RebootTrigger_Unknown;
- m_eRebootWay = RebootWay_Power;
- BOOL bRet = SystemRestart(false,true);
- Dbg("os restart [%d]", bRet);
- }
- break;
- case LOG_EVT_IEBROWSER_RESTART_MACHINE:
- {
- m_eRebootTrigger = RebootTrigger_Unknown;
- m_eRebootWay = RebootWay_Power;
- BOOL bRet = SystemRestart(false, true,true);
- Dbg("machine restart now [%d]", bRet);
- break;
- }
- case LOG_EVT_IEBROWSER_SHUTDOWN_MACHINE:
- {
- Dbg("User descktop said to shutdown machine now.");
- SystemShutdown();
- break;
- }
- case LOG_EVT_SELFCHECK_OS_RESTART:
- Dbg("selfcheck to wait chance to restart(os) pc.");
- m_eRebootTrigger = RebootTrigger_RunExcepition;
- m_eRebootWay = RebootWay_Power;
- m_bWaitRestartPC = true;
- break;
- case LOG_EVT_SELFCHECK_POWER_RESTART:
- Dbg("selfcheck to wait chance to restart(power) pc.");
- m_eRebootTrigger = RebootTrigger_RunExcepition;
- m_eRebootWay = RebootWay_Power;
- m_bWaitRestartPC = true;
- break;
- //commented the following 4 event oilyang 20140616
- //case ERROR_MOD_MEDIACONTROLLER_ENVCAMERA_BUG://environment camera error
- //case EVENT_MOD_FACE_ENVCAM_ERROR:
- // Dbg("Environment camera restart");
- // RestartModule("MediaController");
- // break;
- //case ERROR_MOD_MEDIACONTROLLER_OPECAMERA_BUG://operation camera error
- //case EVENT_MOD_FACE_OPECAM_ERROR:
- // Dbg("Operation camera restart");
- // RestartModule("MediaController");
- // break;
- case EVENT_ACCESSAUTH_SUCCEED:
- Dbg("access auth succeed.");
- m_fsm.SetAccessAuth();
- m_bAccessSuc = true;
- break;
- case EVENT_ACCESSAUTH_FAILED:
- case EVENT_ACCESSAUTH_TIMEOUT:
- Dbg("access auth failed or timeout(%d).", dwUserCode);
- m_fsm.SetAccessFailedFlag();
- m_bAccessSuc = false;
- break;
- case EVENT_MOD_INITIALIZER_MK_LOADED:
- Dbg("init succeed.");
- m_fsm.SetInitSucFlag();
- break;
- case EVENT_MOD_INITIALIZER_MK_FAILED:
- Dbg("init failed.");
- m_fsm.SetInitFailFlag();
- break;
- case EVENT_MOD_FACE_OPENCV_ERROR:
- RestartModule("FaceTracking");
- break;
- case LOG_EVT_INC_VERSION_ROLLBACK:
- Dbg("version to be rollback to %s", pszMessage);
- if (!m_bVerRollback)
- {
- Dbg("rollbacking");
- VersionRollBack(pszMessage);
- }
- break;
- case LOG_EVT_SELFCHECK_TOKEN_KEEPER_LOST:
- {
- ErrorCodeEnum eErr = RestartModule("TokenKeeper");
- Dbg("to re accessauth");
- m_fsm.ToReAccessAuth();
- }
- break;
- case EVENT_UKEY_CUSTOMER_MANANAGER_SYS_ENTER:
- {
- Dbg("to enter customer manager system.");
- m_fsm.SetCustomerMngerState(CM_ENTER);//set enter state
- FSMEvent *pEvt = new FSMEvent(USER_EVT_ENTER_CUSTOMER_MANAGER);
- m_fsm.PostEventFIFO(pEvt);
- }
- break;
- case LOG_EVT_HEARTBEAT_CONNECTED:
- UpdateSiteToRuncfg(true, true);
- break;
- case EVENT_MOD_CENTERSETTING_RVCWEBVER_CHANGE:
- m_bNeedToRestartIE = true;
- break;
- //case EVENT_UKEY_NOT_ENTER_CUSTOMER_MANANAGER:
- // {
- // Dbg("NOT to enter customer manager system.");
- // m_fsm.SetCustomerMngerState(CM_NOT_ENTER);//set enter state
- // }
- // break;
- case EVENT_MOD_RELEASESIP_TIMEOUT:
- RestartModule("SIPPhone");
- break;
- case LOG_EVT_SELFCHECK_IEBROWSER_IDLE:
- //IE重启之后,重置是否进入主页变量
- m_bFisrtEnterMainPage = true;
- m_bEnterMainPageEver = false;
- break;
- case LOG_EVT_INC_TRADE_MANAGER_NORMAL:
- case LOG_EVT_INC_TRADE_MANAGER_ON:
- case LOG_EVT_INC_TRADE_MANAGER_OFF:
- {
- TradeManage tm;
- if (dwUserCode == LOG_EVT_INC_TRADE_MANAGER_NORMAL)
- tm.op = 0;
- else if (dwUserCode == LOG_EVT_INC_TRADE_MANAGER_ON)
- tm.op = 1;
- else if (dwUserCode == LOG_EVT_INC_TRADE_MANAGER_OFF)
- tm.op = 2;
- tm.time = pszMessage;
- Dbg("trademanager:%d,%s",tm.op,(const char*)tm.time);
- SpSendBroadcast(GetFunction(), SP_MSG_OF(TradeManage), SP_MSG_SIG_OF(TradeManage), tm);
- }
- case LOG_EVT_INC_DEVICE_LOCK_ON:
- case LOG_EVT_INC_DEVICE_UNLOCK:
- case LOG_EVT_INC_DEVICE_KICK_OFF:
- {
- TerminalManager tm;
- if (dwUserCode == LOG_EVT_INC_DEVICE_LOCK_ON)
- tm.op = 0;
- else if (dwUserCode == LOG_EVT_INC_DEVICE_UNLOCK)
- {
- if (m_bAccessSuc)
- tm.op = 1;
- else
- tm.op = 99;//oilyang@20170818 according to xingzichen
- }
- else if (dwUserCode == LOG_EVT_INC_DEVICE_KICK_OFF)
- tm.op = 2;
- Dbg("terminal manager:%d", tm.op);
- SpSendBroadcast(GetFunction(), SP_MSG_OF(TerminalManager), SP_MSG_SIG_OF(TerminalManager), tm);
- }
- break;
- case LOG_EVT_SYSTMECUSTOM_START_ACCESSAUTH:
- Dbg("receive md5 ok event.");
- m_fsm.SetMD5OK(1);
- break;
- default:
- //Dbg("unknown event(%d)...", dwUserCode);
- return;
- }
- }
- void CHealthManagerEntity::OnSysVarEvent(const char *pszKey, const char *pszValue, const char *pszOldValue, const char *pszEntityName)
- {
- if ((_strnicmp(pszKey, "UIState", strlen("UIState")) == 0))
- {
- if (_strnicmp(pszValue, "M", strlen("M")) == 0)
- {
- m_bInMainPage = true;
- if (m_bFisrtEnterMainPage)
- {
- Dbg("the first enter main page from healthmanager started.");
- m_bFisrtEnterMainPage = false;
- m_bEnterMainPageEver = true;
- LogEvent(Severity_Middle, LOG_EVT_HEALTH_FIRST_ENTER_MAINPADE, "enter main page");
- CSmartPointer<IConfigInfo> spConfigRun;
- ErrorCodeEnum eErr = GetFunction()->OpenConfig(Config_Run, spConfigRun);
- spConfigRun->WriteConfigValueInt("Run", "UpgradeRestartTimes", 0);
- Dbg("As have been in main page,reset UpgradeRestartTimes.");
- }
- }
- else
- m_bInMainPage = false;
- }
- }
- void CHealthManagerEntity::OnBroadcastEvent(CUUID SubID, const char *pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, CAutoBuffer Buffer)
- {
- if (_strnicmp(pszEntityName, "CardSwiper", strlen("CardSwiper")) == 0)
- {
- if (dwMessageSignature == eMsgSig_ConnectStatus)
- {
- CSimpleStringA tmpDevSN("");
- GetFunction()->GetSysVar("FWBDevSN", tmpDevSN);
- if (tmpDevSN.GetLength() > 12 && tmpDevSN.IndexOf("FWB") > 2)
- {
- Dbg("This is fwb device.no need to reconnect here.");
- return;
- }
- CardSwiper::ConnectStatus cs;
- SpBuffer2Object(Buffer, cs);
- if (cs.status == 0)
- {
- if (m_connectStatus == 1)
- {
- m_connectStatus = 0;
- }
- }
- else if (cs.status == 1)
- {
- if (m_connectStatus == 0)
- {
- m_connectStatus = 1;
- m_fsm.DeviceReConnect();
- }
- }
- }
- }
- }
- bool CHealthManagerEntity::IsTestMode()
- {
- static int flag = -1;
- if (flag == -1) {
- CSystemRunInfo runInfo;
- bool result = (GetFunction()->GetSystemRunInfo(runInfo) == Error_Succeed && !!(runInfo.dwBootOption & SystemBootOptionEnum::BootOption_Test));
- flag = result ? 1 : 0;
- }
- return !!flag;
- }
- SP_BEGIN_ENTITY_MAP()
- SP_ENTITY(CHealthManagerEntity)
- SP_END_ENTITY_MAP()
|