summaryrefslogtreecommitdiffstats
path: root/lib/MiddleWare
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MiddleWare')
-rw-r--r--lib/MiddleWare/CrashCatcher.conf2
-rw-r--r--lib/MiddleWare/Database.h41
-rw-r--r--lib/MiddleWare/MiddleWare.cpp89
-rw-r--r--lib/MiddleWare/MiddleWare.h22
-rw-r--r--lib/MiddleWare/test.cpp12
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)