diff options
Diffstat (limited to 'lib/MiddleWare')
| -rw-r--r-- | lib/MiddleWare/CrashCatcher.conf | 2 | ||||
| -rw-r--r-- | lib/MiddleWare/Database.h | 41 | ||||
| -rw-r--r-- | lib/MiddleWare/MiddleWare.cpp | 89 | ||||
| -rw-r--r-- | lib/MiddleWare/MiddleWare.h | 22 | ||||
| -rw-r--r-- | lib/MiddleWare/test.cpp | 12 |
5 files changed, 94 insertions, 72 deletions
diff --git a/lib/MiddleWare/CrashCatcher.conf b/lib/MiddleWare/CrashCatcher.conf index 9307740..c4c2c17 100644 --- a/lib/MiddleWare/CrashCatcher.conf +++ b/lib/MiddleWare/CrashCatcher.conf @@ -1,4 +1,4 @@ # test conf file. it will be generated in the future -BlackList = /usr/bin/bash, /usr/bin/sh +BlackList = bash, bind, apache2 EnabledPlugins = SQLite3, CCpp Database = SQLite3 diff --git a/lib/MiddleWare/Database.h b/lib/MiddleWare/Database.h index 45d995d..15b20a9 100644 --- a/lib/MiddleWare/Database.h +++ b/lib/MiddleWare/Database.h @@ -30,39 +30,24 @@ /* * Table * ===== - * UUID | DebugDumpPath | Architecture | Kernel | ProgramPath | Package | - * UID | Time | Count | Reported | BackTrace | TextData1 + * UUID | UID| DebugDumpPath | Count | Reported * - * in the future we can add another TextData if we need it + * primary key (UUID, UID) */ #define DATABASE_COLUMN_UUID "UUID" -#define DATABASE_COLUMN_DEBUG_DUMP_PATH "DebugDumpPath" -#define DATABASE_COLUMN_ARCHITECTURE "Architecture" -#define DATABASE_COLUMN_KERNEL "Kernel" -#define DATABASE_COLUMN_EXECUTABLE "Executable" -#define DATABASE_COLUMN_PACKAGE "Package" #define DATABASE_COLUMN_UID "UID" -#define DATABASE_COLUMN_TIME "Time" +#define DATABASE_COLUMN_DEBUG_DUMP_PATH "DebugDumpPath" #define DATABASE_COLUMN_COUNT "Count" #define DATABASE_COLUMN_REPORTED "Reported" -#define DATABASE_COLUMN_BACKTRACE "BackTrace" -#define DATABASE_COLUMN_TEXTDATA1 "TextData1" typedef struct SDatabaseRow { std::string m_sUUID; - std::string m_sDebugDumpPath; - std::string m_sArchitecture; - std::string m_sKernel; - std::string m_sExecutable; - std::string m_sPackage; std::string m_sUID; - std::string m_sTime; + std::string m_sDebugDumpPath; std::string m_sCount; std::string m_sReported; - std::string m_sBackTrace; - std::string m_sTextData1; } database_row_t; // <column_name, <array of values in all selected rows> > @@ -76,24 +61,14 @@ class CDatabase : public CPlugin virtual void Connect() = 0; virtual void DisConnect() = 0; virtual void Insert(const std::string& pUUID, - const std::string& pDebugDumpPath, - const std::string& pArch, - const std::string& pKernel, - const std::string& pExecutable, - const std::string& pPackage, const std::string& pUID, - const std::string& pTime) = 0; - - virtual void InsertBackTrace(const std::string& pUUID, - const std::string& pBackTrace) = 0; - - virtual void InsertTextData1(const std::string& pUUID, - const std::string& pData) = 0; + const std::string& pDebugDumpPath) = 0; - virtual void Delete(const std::string& pUUID) = 0; + virtual void Delete(const std::string& pUUID, const std::string& pUID) = 0; + virtual void SetReported(const std::string& pUUID, const std::string& pUID) = 0; virtual const vector_database_rows_t GetUIDData(const std::string& pUID) = 0; - virtual const database_row_t GetUUIDData(const std::string& pUUID) = 0; + virtual const database_row_t GetUUIDData(const std::string& pUUID, const std::string& pUID) = 0; }; #endif /* DATABASE_H_ */ diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp index 8cd4bec..d52fbda 100644 --- a/lib/MiddleWare/MiddleWare.cpp +++ b/lib/MiddleWare/MiddleWare.cpp @@ -118,12 +118,12 @@ std::string CMiddleWare::GetLocalUUIDApplication(const std::string& pApplication } -void CMiddleWare::GetReport(const std::string& pUUID) +void CMiddleWare::GetReport(const std::string& pUUID, const std::string& pUID) { CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); database_row_t row; database->Connect(); - row = database->GetUUIDData(pUUID); + row = database->GetUUIDData(pUUID, pUID); database->DisConnect(); if (row.m_sUUID != pUUID) { @@ -137,25 +137,26 @@ int CMiddleWare::Report(const std::string& pReport) // TODO: write this } -void CMiddleWare::SaveDebugDumpToDatabase(const std::string& pDebugDumpPath) +int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& pCrashInfo) { CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); std::string UUID; - std::string architecture; - std::string kernel; - std::string executable; - std::string package; std::string UID; - std::string time; - std::string textData1; + std::string package; + std::string executable; CDebugDump dd; - dd.Open(pDebugDumpPath); - dd.LoadText(FILENAME_EXECUTABLE, executable); - // TODO: blacklist + dd.LoadText(FILENAME_PACKAGE, package); + + if (package == "" || + m_setBlackList.find(package.substr(0, package.find("-"))) != m_setBlackList.end()) + { + dd.Delete(pDebugDumpPath); + return 0; + } if (dd.Exist(FILENAME_LANGUAGE)) { @@ -176,36 +177,62 @@ void CMiddleWare::SaveDebugDumpToDatabase(const std::string& pDebugDumpPath) throw std::string("CMiddleWare::SaveDebugDumpToDataBase(): Wrong UUID."); } - dd.LoadText(FILENAME_ARCHITECTURE, architecture); - dd.LoadText(FILENAME_KERNEL, kernel); - dd.LoadText(FILENAME_PACKAGE, package); dd.LoadText(FILENAME_UID, UID); - dd.LoadText(FILENAME_TIME, time); + dd.LoadText(FILENAME_EXECUTABLE, executable); + database_row_t row; database->Connect(); - database->Insert(UUID, - pDebugDumpPath, - architecture, - kernel, - executable, - package, - UID, - time); - - if (dd.Exist(FILENAME_TEXTDATA1)) + database->Insert(UUID, UID, pDebugDumpPath); + row = database->GetUUIDData(UUID, UID); + database->DisConnect(); + + if (row.m_sReported == "1") { - dd.LoadText(FILENAME_TEXTDATA1, textData1); - database->InsertTextData1(UUID, textData1); + dd.Delete(pDebugDumpPath); + return 0; } - database->DisConnect(); + if (row.m_sCount != "1") + { + dd.Delete(pDebugDumpPath); + } + + pCrashInfo.m_sUUID = UUID; + pCrashInfo.m_sUID = UID; + pCrashInfo.m_sCount = row.m_sCount; + pCrashInfo.m_sExecutable = executable; + pCrashInfo.m_sPackage = package; + + return 1; } -vector_database_rows_t CMiddleWare::GetDebugDumps(const std::string& pUID) +CMiddleWare::vector_crash_infos_t CMiddleWare::GetCrashInfos(const std::string& pUID) { CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); vector_database_rows_t rows; database->Connect(); rows = database->GetUIDData(pUID); database->DisConnect(); - return rows; + + vector_crash_infos_t infos; + std::string data; + int ii; + for (ii = 0; ii < rows.size(); ii++) + { + crash_info_t info; + CDebugDump dd; + info.m_sUUID = rows[ii].m_sUUID; + info.m_sUID = rows[ii].m_sUID; + info.m_sCount = rows[ii].m_sCount; + + dd.Open(rows[ii].m_sDebugDumpPath); + dd.LoadText(FILENAME_EXECUTABLE, data); + info.m_sExecutable = data; + dd.LoadText(FILENAME_PACKAGE, data); + info.m_sPackage = data; + + infos.push_back(info); + } + + return infos; } + diff --git a/lib/MiddleWare/MiddleWare.h b/lib/MiddleWare/MiddleWare.h index 5fdba84..b9cf8b6 100644 --- a/lib/MiddleWare/MiddleWare.h +++ b/lib/MiddleWare/MiddleWare.h @@ -26,6 +26,8 @@ #include "PluginManager.h" #include <set> +#include <string> + class CMiddleWare { @@ -45,6 +47,18 @@ class CMiddleWare const std::string& pDebugDumpPath); void LoadSettings(const std::string& pPath); public: + + typedef struct SCrashInfo + { + std::string m_sUUID; + std::string m_sUID; + std::string m_sCount; + std::string m_sExecutable; + std::string m_sPackage; + } crash_info_t; + + typedef std::vector<crash_info_t> vector_crash_infos_t; + CMiddleWare(const std::string& pPlugisConfDir, const std::string& pPlugisLibDir, const std::string& pMiddleWareConfFile); @@ -54,10 +68,12 @@ class CMiddleWare void RegisterPlugin(const std::string& pName); void UnRegisterPlugin(const std::string& pName); - void GetReport(const std::string& pUUID); + void GetReport(const std::string& pUUID, const std::string& pUID); int Report(const std::string& pReport); - void SaveDebugDumpToDatabase(const std::string& pDebugDumpPath); - vector_database_rows_t GetDebugDumps(const std::string& pUID); + + int SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& pCrashInfo); + + vector_crash_infos_t GetCrashInfos(const std::string& pUID); }; #endif /*MIDDLEWARE_H_*/ diff --git a/lib/MiddleWare/test.cpp b/lib/MiddleWare/test.cpp index b75bab9..8424aa9 100644 --- a/lib/MiddleWare/test.cpp +++ b/lib/MiddleWare/test.cpp @@ -40,13 +40,17 @@ int main(int argc, char** argv) char pid[100]; sprintf(pid, "%d", getpid()); - dd.Create(std::string(DEBUG_DUMPS_DIR)+"/"+pid); - dd.SaveProc(pid); + dd.Create(std::string(DEBUG_DUMPS_DIR)+"/"+pid, pid); dd.SaveText(FILENAME_LANGUAGE, "CCpp"); dd.SaveBinary(FILENAME_BINARYDATA1, "ass0-9as", sizeof("ass0-9as")); - dd.SaveText(FILENAME_TIME, "1111111111"); - middleWare.SaveDebugDumpToDatabase(std::string(DEBUG_DUMPS_DIR)+"/"+pid); + CMiddleWare::crash_info_t info; + middleWare.SaveDebugDump(std::string(DEBUG_DUMPS_DIR)+"/"+pid, info); + + std::cout << "Application Crashed! " << + info.m_sPackage << ": " << + info.m_sExecutable << "(" << + info.m_sCount << ")" << std::endl; } catch (std::string sError) |
