// summarist.h : // #if !defined(AGD_SUMMARIST_H__0BCA7040_8648_4F3A_9C89_694B8C36DEC9__INCLUDED_) #define AGD_SUMMARIST_H__0BCA7040_8648_4F3A_9C89_694B8C36DEC9__INCLUDED_ #include // std::sort #include // std::vector #ifndef _LIBBUILD #include #include #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 m_vTimeWnds; std::vector 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_)