123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- // summarist.h :
- //
- #if !defined(AGD_SUMMARIST_H__0BCA7040_8648_4F3A_9C89_694B8C36DEC9__INCLUDED_)
- #define AGD_SUMMARIST_H__0BCA7040_8648_4F3A_9C89_694B8C36DEC9__INCLUDED_
- #include <algorithm> // std::sort
- #include <vector> // std::vector
- #ifndef _LIBBUILD
- #include <gfa/svc/common/mysqlwrap.h>
- #include <gfa/svc/common/logfile.h>
- #else // _LIBBUILD
- #include "common/mysqlwrap.h"
- #include "common/logfile.h"
- #endif // _LIBBUILD
- /////////////////////////////////////////////////////////////////////////////
- // summarist.h - Declarations:
- #define _countof(a) (sizeof(a) / sizeof(*a))
- #define _SUM_INVALID_TIMESTAMP_VALUE ((time_t)-1)
- #define _SUM_TIME_WND_BASE 3600
- #define _SUM_MAX_DB_NAME_LENGTH 64
- #define _SUM_MAX_DB_USER_LENGTH 64
- #define _SUM_MAX_DB_PASS_LENGTH 64
- #define _SUM_MAX_TABLE_NAME_LENGTH 64
- #define _SUM_GROUP_CONCAT_MAX_LEN 65536
- /////////////////////////////////////////////////////////////////////////////
- typedef struct _SUMMARIST_PARAMS
- {
- char szDBName[_SUM_MAX_DB_NAME_LENGTH];
- char szDBUser[_SUM_MAX_DB_USER_LENGTH];
- char szDBPass[_SUM_MAX_DB_PASS_LENGTH];
- char szTagsTable[_SUM_MAX_TABLE_NAME_LENGTH];
- char szLogsTable[_SUM_MAX_TABLE_NAME_LENGTH];
- char szITagsView[_SUM_MAX_TABLE_NAME_LENGTH];
- const char *pszBaseDir;
- unsigned long nSampleIntv;
- unsigned long nLogIntv;
- unsigned long nWriteIntv;
- }SUMMARIST_PARAMS, *LPSUMMARIST_PARAMS;
- typedef const SUMMARIST_PARAMS *LPCSUMMARIST_PARAMS;
- /////////////////////////////////////////////////////////////////////////////
- class CSummarist
- {
- public:
- CSummarist(LPCSUMMARIST_PARAMS psup, CLogfile &rlf);
- virtual ~CSummarist(void);
- bool Initialze(const unsigned long *pTimeWnds, size_t nCntTimeWnds, bool bDropTables = false);
- void Release(void);
- bool Connect(CMySqlDB &rdb);
- void Close(CMySqlDB &rdb);
-
- inline unsigned long GetProcessingFrequenzy(void) const {
- return m_nProcFrequ;}
- inline size_t TimeWndCount(void) const {
- return m_vTimeWnds.size();}
- inline size_t TimeZoneOffset(void) const {
- return m_tzo;}
- unsigned long GetTimeWindow(size_t nIndex) const;
- bool GetMinMaxTimestampFromLogs(CMySqlDB &rdb, time_t &rMin, time_t &rMax) const;
- bool GetNextTimestampFromLogs(CMySqlDB &rdb, time_t tsLast, time_t &rNext) const;
- std::string CreateSumTableName(unsigned long tWnd) const;
- std::string CreateSumTableName(int nIndex) const;
- bool GetLastSummarizeTimestamp(CMySqlDB &rdb, const char *pszTableName, time_t &rtsLast) const;
- bool GetLastSummarizeTimestamp(CMySqlDB &rdb, size_t nIndex, time_t &rtsLast) const;
- time_t GetBaseTimestamp(time_t tsMinLog);
- bool GetNextTimeFrame(CMySqlDB &rdb, size_t nIndex, time_t tsLast, time_t tsBase, time_t &rtsStart, time_t &rtsEnd) const;
- bool SetNextTimeFrameStart(size_t nIndex, time_t tsStart);
- time_t GetNextDueTimeFrameStart(void) const;
- bool Summarize(CMySqlDB &rdb, size_t nIndex, time_t tsFrom, time_t tsTo);
- bool ProcessOutdated(CMySqlDB &rdb, size_t nIndex, time_t tsUpTo);
- public:
- static const char* Timestamp2String(time_t t, char *pszBuffer = NULL, size_t nCbBuffer = 0);
- private:
- bool InitTimeWnd(const unsigned long *pTimeWnds, size_t nCntTimeWnds);
- bool InitTables(bool bDropTables);
- bool DropTables(CMySqlDB &rdb);
- bool LockTables(CMySqlDB &rdb, const char *pszTableName);
- bool UnlockTables(CMySqlDB &rdb);
- time_t GetTimezoneOffset(CMySqlDB &rdb);
- bool CreateTagList(CMySqlDB &rdb);
- time_t ReadTimestampBase(void);
- void WriteTimestampBase(time_t ts);
- private:
- CLogfile &m_rlf;
- std::vector<unsigned long> m_vTimeWnds;
- std::vector<time_t> m_vTimeFrameStart;
- std::string m_ilTagList;
- unsigned long m_nProcFrequ;
- SUMMARIST_PARAMS m_sup;
- char m_szAppDir[PATH_MAX];
- time_t m_tzo;
- time_t m_tsBase;
- };
- /////////////////////////////////////////////////////////////////////////////
- #endif // !defined(AGD_SUMMARIST_H__0BCA7040_8648_4F3A_9C89_694B8C36DEC9__INCLUDED_)
|