代码拉取完成,页面将自动刷新
同步操作将从 leo/supervisor 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#ifndef __WATCHER_H_INCLUDED__
#define __WATCHER_H_INCLUDED__
#include "json.h"
#include <ctime>
#include <functional>
#if defined(_WIN32)
# include <Windows.h>
#endif
#define GWatcher Watcher::Instance()
class Watcher {
public:
enum EStatus {
Stopped = 0,
Running = 1,
Fatal = 2,
Retry = 3,
};
typedef struct Info {
EStatus emStatus;
#if defined(_WIN32)
HANDLE hPipe;
DWORD nPid;
LONGLONG nLastCalcCPU;
LONGLONG nLastCPUTotal;
#else
int nFd;
int nPid;
#endif
char pTail[16384];
int nTail;
int nRetry;
std::string sCmd;
std::string sPath;
time_t nStart;
Info() : emStatus(EStatus::Stopped), nPid(-1), pTail{0}, nTail(0), nRetry(0), sCmd(), sPath(), nStart(0) {}
std::string GetStartTime() const {
if (nStart == 0) return "----";
struct tm * pLocal = NULL;
#if defined(_WIN32)
struct tm iLocal = { 0 };
pLocal = &iLocal;
localtime_s(pLocal, &nStart);
#else
pLocal = localtime(&nStart);
#endif
char pBuf[32] = {0};
strftime(pBuf, 32, "%F %T", pLocal);
return std::string(pBuf);
}
} Info;
typedef std::function<void(const std::string &, const Json::Value &)> Notifier;
public:
Watcher() {}
static Watcher & Instance();
void SetNotifier(Notifier fNotifier) { _fNotifier = fNotifier; }
void Breath();
void Start(const std::string & sName, const std::string & sPath, const std::string & sCmd, int nRetry);
void Stop(const std::string & sName);
void StopAll();
void Remove(const std::string & sName);
Info * Get(const std::string & sName);
private:
void Notify(const std::string & sScope, const Json::Value & rMsg);
void Tail(const std::string & sName, Info & rInfo);
void AppendTail(const std::string & sName, Info & rInfo, const std::string & sTail);
void CatchExit(const std::string & sName, Info & rInfo, EStatus emStatus, bool bRetry = false);
private:
std::map<std::string, Info> _mWatcher;
Notifier _fNotifier;
};
#endif//! __WATCHER_H_INCLUDED__
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。