summarist.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // summarist.h :
  2. //
  3. #if !defined(AGD_SUMMARIST_H__0BCA7040_8648_4F3A_9C89_694B8C36DEC9__INCLUDED_)
  4. #define AGD_SUMMARIST_H__0BCA7040_8648_4F3A_9C89_694B8C36DEC9__INCLUDED_
  5. #include <algorithm> // std::sort
  6. #include <vector> // std::vector
  7. #ifndef _LIBBUILD
  8. #include <gfa/svc/common/mysqlwrap.h>
  9. #include <gfa/svc/common/logfile.h>
  10. #else // _LIBBUILD
  11. #include "common/mysqlwrap.h"
  12. #include "common/logfile.h"
  13. #endif // _LIBBUILD
  14. /////////////////////////////////////////////////////////////////////////////
  15. // summarist.h - Declarations:
  16. #define _countof(a) (sizeof(a) / sizeof(*a))
  17. #define _SUM_INVALID_TIMESTAMP_VALUE ((time_t)-1)
  18. #define _SUM_TIME_WND_BASE 3600
  19. #define _SUM_MAX_DB_NAME_LENGTH 64
  20. #define _SUM_MAX_DB_USER_LENGTH 64
  21. #define _SUM_MAX_DB_PASS_LENGTH 64
  22. #define _SUM_MAX_TABLE_NAME_LENGTH 64
  23. #define _SUM_GROUP_CONCAT_MAX_LEN 65536
  24. /////////////////////////////////////////////////////////////////////////////
  25. typedef struct _SUMMARIST_PARAMS
  26. {
  27. char szDBName[_SUM_MAX_DB_NAME_LENGTH];
  28. char szDBUser[_SUM_MAX_DB_USER_LENGTH];
  29. char szDBPass[_SUM_MAX_DB_PASS_LENGTH];
  30. char szTagsTable[_SUM_MAX_TABLE_NAME_LENGTH];
  31. char szLogsTable[_SUM_MAX_TABLE_NAME_LENGTH];
  32. char szITagsView[_SUM_MAX_TABLE_NAME_LENGTH];
  33. const char *pszBaseDir;
  34. unsigned long nSampleIntv;
  35. unsigned long nLogIntv;
  36. unsigned long nWriteIntv;
  37. }SUMMARIST_PARAMS, *LPSUMMARIST_PARAMS;
  38. typedef const SUMMARIST_PARAMS *LPCSUMMARIST_PARAMS;
  39. /////////////////////////////////////////////////////////////////////////////
  40. class CSummarist
  41. {
  42. public:
  43. CSummarist(LPCSUMMARIST_PARAMS psup, CLogfile &rlf);
  44. virtual ~CSummarist(void);
  45. bool Initialze(const unsigned long *pTimeWnds, size_t nCntTimeWnds, bool bDropTables = false);
  46. void Release(void);
  47. bool Connect(CMySqlDB &rdb);
  48. void Close(CMySqlDB &rdb);
  49. inline unsigned long GetProcessingFrequenzy(void) const {
  50. return m_nProcFrequ;}
  51. inline size_t TimeWndCount(void) const {
  52. return m_vTimeWnds.size();}
  53. inline size_t TimeZoneOffset(void) const {
  54. return m_tzo;}
  55. unsigned long GetTimeWindow(size_t nIndex) const;
  56. bool GetMinMaxTimestampFromLogs(CMySqlDB &rdb, time_t &rMin, time_t &rMax) const;
  57. bool GetNextTimestampFromLogs(CMySqlDB &rdb, time_t tsLast, time_t &rNext) const;
  58. std::string CreateSumTableName(unsigned long tWnd) const;
  59. std::string CreateSumTableName(int nIndex) const;
  60. bool GetLastSummarizeTimestamp(CMySqlDB &rdb, const char *pszTableName, time_t &rtsLast) const;
  61. bool GetLastSummarizeTimestamp(CMySqlDB &rdb, size_t nIndex, time_t &rtsLast) const;
  62. time_t GetBaseTimestamp(time_t tsMinLog);
  63. bool GetNextTimeFrame(CMySqlDB &rdb, size_t nIndex, time_t tsLast, time_t tsBase, time_t &rtsStart, time_t &rtsEnd) const;
  64. bool SetNextTimeFrameStart(size_t nIndex, time_t tsStart);
  65. time_t GetNextDueTimeFrameStart(void) const;
  66. bool Summarize(CMySqlDB &rdb, size_t nIndex, time_t tsFrom, time_t tsTo);
  67. bool ProcessOutdated(CMySqlDB &rdb, size_t nIndex, time_t tsUpTo);
  68. public:
  69. static const char* Timestamp2String(time_t t, char *pszBuffer = NULL, size_t nCbBuffer = 0);
  70. private:
  71. bool InitTimeWnd(const unsigned long *pTimeWnds, size_t nCntTimeWnds);
  72. bool InitTables(bool bDropTables);
  73. bool DropTables(CMySqlDB &rdb);
  74. bool LockTables(CMySqlDB &rdb, const char *pszTableName);
  75. bool UnlockTables(CMySqlDB &rdb);
  76. time_t GetTimezoneOffset(CMySqlDB &rdb);
  77. bool CreateTagList(CMySqlDB &rdb);
  78. time_t ReadTimestampBase(void);
  79. void WriteTimestampBase(time_t ts);
  80. private:
  81. CLogfile &m_rlf;
  82. std::vector<unsigned long> m_vTimeWnds;
  83. std::vector<time_t> m_vTimeFrameStart;
  84. std::string m_ilTagList;
  85. unsigned long m_nProcFrequ;
  86. SUMMARIST_PARAMS m_sup;
  87. char m_szAppDir[PATH_MAX];
  88. time_t m_tzo;
  89. time_t m_tsBase;
  90. };
  91. /////////////////////////////////////////////////////////////////////////////
  92. #endif // !defined(AGD_SUMMARIST_H__0BCA7040_8648_4F3A_9C89_694B8C36DEC9__INCLUDED_)