qappctrl.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. // qappctrl.h :
  2. //
  3. #if !defined(AGD_QAPPCTRL_H__ADD46467_F628_4A07_8844_613598E359DE__INCLUDED_)
  4. #define AGD_QAPPCTRL_H__ADD46467_F628_4A07_8844_613598E359DE__INCLUDED_
  5. #include <QObject>
  6. #include <QQmlEngine>
  7. #include <QQmlContext>
  8. #include <QAbstractTableModel>
  9. #include <vector>
  10. #include <gfa/gfaipc.h>
  11. #include "../../src/ipcpriv.h"
  12. #ifdef __cplusplus
  13. /////////////////////////////////////////////////////////////////////////////
  14. // qappctrl.h - Declarations:
  15. typedef struct _STG_DEV_DISK_PART
  16. {
  17. _STG_DEV_DISK_PART(int d, int p) {
  18. nDiskIdx = d;
  19. nPartIdx = p;
  20. }
  21. int nDiskIdx;
  22. int nPartIdx;
  23. }STG_DEV_DISK_PART, *LPSTG_DEV_DISK_PART;
  24. typedef const STG_DEV_DISK_PART *LPCSTG_DEV_DISK_PART;
  25. /////////////////////////////////////////////////////////////////////////////
  26. class QGfaStgDevList : public QAbstractTableModel
  27. {
  28. Q_OBJECT
  29. public:
  30. explicit QGfaStgDevList(QObject *pParent = NULL);
  31. virtual ~QGfaStgDevList(void);
  32. int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
  33. int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
  34. QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
  35. QHash<int, QByteArray> roleNames(void) const Q_DECL_OVERRIDE;
  36. void diskAdded(int nIndex, const GFA_SYSINFO_DISK &disk);
  37. void diskRemoved(int nIndex, const GFA_SYSINFO_DISK &disk);
  38. void partitionAdded(int nIndex, const GFA_SYSINFO_PARTITION &part);
  39. void partitionRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part);
  40. void mountAdded(int nIndex, const GFA_SYSINFO_PARTITION &part);
  41. void mountRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part);
  42. void clearAll(void);
  43. private:
  44. void insertPartition(int nDiskIdx, int nPartIdx);
  45. void removePartition(int nDiskIdx, int nPartIdx);
  46. int FindPartVecEntry(int nDiskIdx, int nPartIdx);
  47. private:
  48. GFA_SYSINFO_STORAGE_DEVICE_MAP m_stgDevShadowCpy;
  49. std::vector<STG_DEV_DISK_PART> m_partVec;
  50. };
  51. /////////////////////////////////////////////////////////////////////////////
  52. class QGfaSysInfo : public QObject
  53. {
  54. Q_OBJECT
  55. Q_PROPERTY(quint64 memTotal READ memTotal NOTIFY memTotalChanged)
  56. Q_PROPERTY(quint64 memUsed READ memUsed NOTIFY memUsedChanged)
  57. Q_PROPERTY(quint64 memFree READ memFree NOTIFY memFreeChanged)
  58. Q_PROPERTY(quint64 memAvailable READ memAvailable NOTIFY memAvailableChanged)
  59. Q_PROPERTY(quint64 memBuffers READ memBuffers NOTIFY memBuffersChanged)
  60. Q_PROPERTY(quint64 memCached READ memCached NOTIFY memCachedChanged)
  61. Q_PROPERTY(QGfaStgDevList *stgDev READ stgDev CONSTANT)
  62. Q_PROPERTY(bool bootFromEmmc READ bootFromEmmc NOTIFY bootFromEmmcChanged)
  63. public:
  64. explicit QGfaSysInfo(QObject *pParent = NULL);
  65. virtual ~QGfaSysInfo(void);
  66. signals:
  67. void memTotalChanged(quint64 val);
  68. void memUsedChanged(quint64 val);
  69. void memFreeChanged(quint64 val);
  70. void memAvailableChanged(quint64 val);
  71. void memBuffersChanged(quint64 val);
  72. void memCachedChanged(quint64 val);
  73. void bootFromEmmcChanged(bool val);
  74. private:
  75. quint64 memTotal(void) const;
  76. quint64 memUsed(void) const;
  77. quint64 memFree(void) const;
  78. quint64 memAvailable(void) const;
  79. quint64 memBuffers(void) const;
  80. quint64 memCached(void) const;
  81. QGfaStgDevList* stgDev(void);
  82. bool bootFromEmmc(void) const;
  83. public:
  84. void setSysMemInfo(LPCGFA_APPCTRL_SYSMEM psm, bool bDoHeavyLoadUpdate = false);
  85. void setSysInfoRunning(bool bRunning);
  86. void setBootFromEmmc(bool bootFromEmmc);
  87. inline void diskAdded(int nIndex, const GFA_SYSINFO_DISK &disk) {
  88. return m_stgDevList.diskAdded(nIndex, disk);}
  89. inline void diskRemoved(int nIndex, const GFA_SYSINFO_DISK &disk) {
  90. return m_stgDevList.diskRemoved(nIndex, disk);}
  91. inline void partitionAdded(int nIndex, const GFA_SYSINFO_PARTITION &part) {
  92. return m_stgDevList.partitionAdded(nIndex, part);}
  93. inline void partitionRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part) {
  94. return m_stgDevList.partitionRemoved(nIndex, part);}
  95. inline void mountAdded(int nIndex, const GFA_SYSINFO_PARTITION &part) {
  96. return m_stgDevList.mountAdded(nIndex, part);}
  97. inline void mountRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part) {
  98. return m_stgDevList.mountRemoved(nIndex, part);}
  99. private:
  100. bool m_bSysInfoRunning;
  101. quint64 m_nMemTotal;
  102. quint64 m_nMemUsed;
  103. quint64 m_nMemFree;
  104. quint64 m_nMemAvailable;
  105. quint64 m_nMemBuffers;
  106. quint64 m_nMemCached;
  107. QGfaStgDevList m_stgDevList;
  108. bool m_bootFromEmmc;
  109. };
  110. /////////////////////////////////////////////////////////////////////////////
  111. class QGfaAppInfo : public QObject
  112. {
  113. Q_OBJECT
  114. Q_PROPERTY(int state READ state NOTIFY stateChanged)
  115. Q_PROPERTY(QString stateText READ stateText NOTIFY stateTextChanged)
  116. Q_PROPERTY(QString name READ name NOTIFY nameChanged)
  117. Q_PROPERTY(quint64 cycInt READ cycInt NOTIFY cycIntChanged)
  118. Q_PROPERTY(quint64 cycCur READ cycCur NOTIFY cycCurChanged)
  119. Q_PROPERTY(quint64 cycMin READ cycMin NOTIFY cycMinChanged)
  120. Q_PROPERTY(quint64 cycMax READ cycMax NOTIFY cycMaxChanged)
  121. Q_PROPERTY(quint64 wktCur READ wktCur NOTIFY wktCurChanged)
  122. Q_PROPERTY(quint64 wktMin READ wktMin NOTIFY wktMinChanged)
  123. Q_PROPERTY(quint64 wktMax READ wktMax NOTIFY wktMaxChanged)
  124. Q_PROPERTY(quint64 upTime READ upTime NOTIFY upTimeChanged)
  125. Q_PROPERTY(double cpuTime READ cpuTime NOTIFY cpuTimeChanged)
  126. Q_PROPERTY(double cpuCur READ cpuCur NOTIFY cpuCurChanged)
  127. Q_PROPERTY(double cpuAvg READ cpuAvg NOTIFY cpuAvgChanged)
  128. Q_PROPERTY(quint32 vmPeak READ vmPeak NOTIFY vmPeakChanged)
  129. Q_PROPERTY(quint32 vmSize READ vmSize NOTIFY vmSizeChanged)
  130. Q_PROPERTY(quint32 vmHWM READ vmHWM NOTIFY vmHWMChanged)
  131. Q_PROPERTY(quint32 vmRSS READ vmRSS NOTIFY vmRSSChanged)
  132. Q_PROPERTY(quint32 appSize READ appSize NOTIFY appSizeChanged)
  133. public:
  134. Q_INVOKABLE bool pause(void);
  135. Q_INVOKABLE bool resume(void);
  136. Q_INVOKABLE bool stop(void);
  137. signals:
  138. void stateChanged(int val);
  139. void stateTextChanged(const QString &val);
  140. void nameChanged(const QString &val);
  141. void sendControlMessage(appid_t nAppID, ctrlmsg_t msg);
  142. void cycIntChanged(quint64 val);
  143. void cycCurChanged(quint64 val);
  144. void cycMinChanged(quint64 val);
  145. void cycMaxChanged(quint64 val);
  146. void wktCurChanged(quint64 val);
  147. void wktMinChanged(quint64 val);
  148. void wktMaxChanged(quint64 val);
  149. void upTimeChanged(quint64 val);
  150. void cpuTimeChanged(double val);
  151. void cpuCurChanged(double val);
  152. void cpuAvgChanged(double val);
  153. void vmPeakChanged(quint32 val);
  154. void vmSizeChanged(quint32 val);
  155. void vmHWMChanged(quint32 val);
  156. void vmRSSChanged(quint32 val);
  157. void appSizeChanged(quint32 val);
  158. public:
  159. explicit QGfaAppInfo(int nIndex, QObject *pParent = NULL);
  160. virtual ~QGfaAppInfo(void);
  161. appid_t appId(void) const;
  162. int state(void) const;
  163. bool setState(int val);
  164. QString stateText(void) const;
  165. void setStateText(int val);
  166. QString name(void) const;
  167. void setName(const QString &val);
  168. quint64 cycInt(void) const;
  169. quint64 cycCur(void) const;
  170. quint64 cycMin(void) const;
  171. quint64 cycMax(void) const;
  172. quint64 wktCur(void) const;
  173. quint64 wktMin(void) const;
  174. quint64 wktMax(void) const;
  175. quint64 upTime(void) const;
  176. double cpuTime(void) const;
  177. double cpuCur(void) const;
  178. double cpuAvg(void) const;
  179. quint32 vmPeak(void) const;
  180. quint32 vmSize(void) const;
  181. quint32 vmHWM(void) const;
  182. quint32 vmRSS(void) const;
  183. quint32 appSize(void) const;
  184. void setAppSize(quint32 size, GfaIpcAppStates state);
  185. void setAppTimes(LPCGFA_APPCTRL_APPTIMES pat, GfaIpcAppStates state, bool bDoHeavyLoadUpdate = false);
  186. void setAppMemInfo(LPCGFA_APPCTRL_APPMEM pam, GfaIpcAppStates state, bool bDoHeavyLoadUpdate = false);
  187. private:
  188. private:
  189. int m_state;
  190. QString m_stateText;
  191. QString m_name;
  192. int m_nIndex;
  193. appid_t m_nAppID;
  194. quint64 m_cycInt;
  195. quint64 m_cycCur;
  196. quint64 m_cycMin;
  197. quint64 m_cycMax;
  198. quint64 m_wktCur;
  199. quint64 m_wktMin;
  200. quint64 m_wktMax;
  201. quint64 m_upTime;
  202. double m_cpuTime;
  203. double m_cpuPercCur;
  204. double m_cpuPercAvg;
  205. quint32 m_vmPeak;
  206. quint32 m_vmSize;
  207. quint32 m_vmHWM;
  208. quint32 m_vmRSS;
  209. quint32 m_appSize;
  210. };
  211. /////////////////////////////////////////////////////////////////////////////
  212. class QGfaAppCtrl : public QObject
  213. {
  214. Q_OBJECT
  215. Q_PROPERTY(QQmlListProperty<QGfaAppInfo> appInfo READ appInfo CONSTANT)
  216. Q_PROPERTY(quint64 minPass READ minPass NOTIFY minPassChanged)
  217. Q_PROPERTY(quint64 maxPass READ maxPass NOTIFY maxPassChanged)
  218. Q_PROPERTY(quint64 avgPass READ avgPass NOTIFY avgPassChanged)
  219. Q_PROPERTY(QGfaSysInfo *sysInfo READ sysInfo CONSTANT)
  220. public:
  221. enum AppStates
  222. {
  223. STATE_NOT_RUNNING = GIAS_StateNotRunning,
  224. STATE_INITIALIZING,
  225. STATE_RUNNING,
  226. STATE_PAUSED,
  227. STATE_HANGING,
  228. STATE_TERMINATING,
  229. STATE_ZOMBIE,
  230. STATE_INVALID
  231. };
  232. Q_ENUM(AppStates)
  233. static_assert((STATE_INVALID - STATE_NOT_RUNNING) == (GIAS_Invalid - GIAS_StateNotRunning), "enum AppStates does not match enum GfaIpcAppStates!");
  234. enum AppIndex
  235. {
  236. APP_INDEX_REMANENT = GAI_Remanent,
  237. APP_INDEX_DATALOGGER = GAI_Datalogger,
  238. APP_INDEX_SUMMARIST = GAI_Summarist,
  239. APP_INDEX_REST = GAI_Rest,
  240. APP_INDEX_MQTTCL = GAI_Mqttcl,
  241. APP_INDEX_SYSINFO = GAI_SysInfo
  242. };
  243. Q_ENUM(AppIndex)
  244. signals:
  245. void minPassChanged(quint64 val);
  246. void maxPassChanged(quint64 val);
  247. void avgPassChanged(quint64 val);
  248. public:
  249. explicit QGfaAppCtrl(QObject *pParent = NULL);
  250. virtual ~QGfaAppCtrl(void);
  251. bool Create(appid_t nAppID, const char *pszDisplayName, int nTimerIntMs, clock64_t nHeavyLoadUpdateIntervalMs);
  252. void Release(void);
  253. void RegisterQmlTypes(QQmlEngine &rEng, int nVerMajor = 1, int nVerMinor = 0);
  254. bool PresetDisplayName(appid_t nAppID, const char *pszName);
  255. bool SubscribeStateEvents(appid_t nAppMask);
  256. int SetState(int nState);
  257. public:
  258. Q_INVOKABLE int appIndexFromAppID(quint64 nAppID);
  259. public:
  260. QQmlListProperty<QGfaAppInfo> appInfo(void);
  261. quint64 minPass(void) const;
  262. quint64 maxPass(void) const;
  263. quint64 avgPass(void) const;
  264. QGfaSysInfo* sysInfo(void);
  265. private slots:
  266. void onSendControlMessage(appid_t nAppID, ctrlmsg_t msg);
  267. void timerEvent(QTimerEvent *event) override;
  268. private:
  269. bool m_bSysInfoRunning;
  270. HAPPCTRL m_hAC;
  271. appid_t m_nAppID;
  272. int m_nTimerID;
  273. QGfaSysInfo m_sysInfo;
  274. QList<QGfaAppInfo*> m_appInfo;
  275. clock64_t m_curPass;
  276. clock64_t m_minPass;
  277. clock64_t m_maxPass;
  278. clock64_t m_avgPass;
  279. appid_t m_nEvtSrcs;
  280. clock64_t m_nHeavyLoadUpdateIntervalUs;
  281. struct timespec m_tsLastHeavyLoadUpdate;
  282. };
  283. /////////////////////////////////////////////////////////////////////////////
  284. #endif // __cplusplus
  285. #endif // !defined(AGD_QAPPCTRL_H__ADD46467_F628_4A07_8844_613598E359DE__INCLUDED_)