summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorZdenek Prikryl <zprikryl@redhat.com>2009-02-11 10:20:53 +0100
committerZdenek Prikryl <zprikryl@redhat.com>2009-02-11 10:20:53 +0100
commit021c815746d47f7fe161a27f709debfd2491eaf7 (patch)
tree52710b6f4846d8090ea5c40c1735b07000ed10b1 /lib
parent27b099da7037367d2f5b165406e087b4bec64a19 (diff)
downloadabrt-021c815746d47f7fe161a27f709debfd2491eaf7.tar.gz
abrt-021c815746d47f7fe161a27f709debfd2491eaf7.tar.xz
abrt-021c815746d47f7fe161a27f709debfd2491eaf7.zip
added functionality for getting info about crash
Diffstat (limited to 'lib')
-rw-r--r--lib/MiddleWare/MiddleWare.cpp89
-rw-r--r--lib/MiddleWare/MiddleWare.h22
2 files changed, 77 insertions, 34 deletions
diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp
index 8cd4bec2..d52fbdae 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 5fdba84d..b9cf8b65 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_*/