diff options
| author | Jiri Moskovcak <jmoskovc@redhat.com> | 2009-02-18 11:57:56 +0100 |
|---|---|---|
| committer | Jiri Moskovcak <jmoskovc@redhat.com> | 2009-02-18 11:57:56 +0100 |
| commit | 0979cbdd39166d6b5a42380e3ff6297e77d1236d (patch) | |
| tree | b6de00056eb26b5cd995db09b3dfcbb9ecbd21d6 /lib/MiddleWare | |
| parent | 5c22d0c110b8678509817abf9ecf10e3f48525d5 (diff) | |
| parent | 77ef93c89e3fa75d1a5c0f126bcbb001a152bacf (diff) | |
| download | abrt-0979cbdd39166d6b5a42380e3ff6297e77d1236d.tar.gz abrt-0979cbdd39166d6b5a42380e3ff6297e77d1236d.tar.xz abrt-0979cbdd39166d6b5a42380e3ff6297e77d1236d.zip | |
Merge branch 'master' of git://git.fedorahosted.org/git/crash-catcher
Diffstat (limited to 'lib/MiddleWare')
| -rw-r--r-- | lib/MiddleWare/CrashTypes.h | 71 | ||||
| -rw-r--r-- | lib/MiddleWare/Database.h | 2 | ||||
| -rw-r--r-- | lib/MiddleWare/MiddleWare.cpp | 103 | ||||
| -rw-r--r-- | lib/MiddleWare/MiddleWare.h | 46 | ||||
| -rw-r--r-- | lib/MiddleWare/MiddleWareTypes.h | 13 | ||||
| -rw-r--r-- | lib/MiddleWare/Reporter.h | 15 | ||||
| -rw-r--r-- | lib/MiddleWare/Settings.h | 9 | ||||
| -rw-r--r-- | lib/MiddleWare/test.cpp | 10 |
8 files changed, 157 insertions, 112 deletions
diff --git a/lib/MiddleWare/CrashTypes.h b/lib/MiddleWare/CrashTypes.h new file mode 100644 index 0000000..3a4031c --- /dev/null +++ b/lib/MiddleWare/CrashTypes.h @@ -0,0 +1,71 @@ +#ifndef CRASHTYPES_H_ +#define CRASHTYPES_H_ + +#include <string> +#include <map> + +typedef std::map<std::string, std::string> map_crash_t; + +typedef struct SCrashInfo +{ + std::string m_sUUID; + std::string m_sUID; + std::string m_sCount; + std::string m_sExecutable; + std::string m_sPackage; + std::string m_sTime; + + const map_crash_t GetMap() + { + map_crash_t mci; + mci["UUID"] = m_sUUID; + mci["UID"] = m_sUID; + mci["Count"] = m_sCount; + mci["Executable"] = m_sExecutable; + mci["Package"] = m_sPackage; + mci["Time"] = m_sTime; + + return mci; + } +} crash_info_t; + +typedef std::vector<crash_info_t> vector_crash_infos_t; + +typedef struct SCrashContex +{ + std::string m_sUUID; + std::string m_sUID; + std::string m_sLanAppPlugin; +} crash_context_t; + + +typedef struct SCrashReport +{ + std::string m_sArchitecture; + std::string m_sKernel; + std::string m_sExecutable; + std::string m_sCmdLine; + std::string m_sPackage; + std::string m_sTextData1; + std::string m_sTextData2; + std::string m_sBinaryData1; + std::string m_sBinaryData2; + + const map_crash_t GetMap() + { + map_crash_t mci; + mci["Architecture"] = m_sArchitecture; + mci["Kernel"] = m_sKernel; + mci["Executable"] = m_sExecutable; + mci["CmdLine"] = m_sCmdLine; + mci["Package"] = m_sPackage; + mci["TextData1"] = m_sTextData1; + mci["TextData2"] = m_sTextData2; + mci["BinaryData1"] = m_sBinaryData1; + mci["BinaryData2"] = m_sBinaryData2; + + return mci; + } +} crash_report_t; + +#endif /* CRASHTYPES_H_ */ diff --git a/lib/MiddleWare/Database.h b/lib/MiddleWare/Database.h index 84099af..b634a70 100644 --- a/lib/MiddleWare/Database.h +++ b/lib/MiddleWare/Database.h @@ -46,7 +46,7 @@ typedef struct SDatabaseRow { std::string m_sUUID; std::string m_sUID; - std::string m_sDebugDumpPath; + std::string m_sDebugDumpDir; std::string m_sCount; std::string m_sReported; std::string m_sTime; diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp index 91eff06..2f86c00 100644 --- a/lib/MiddleWare/MiddleWare.cpp +++ b/lib/MiddleWare/MiddleWare.cpp @@ -85,31 +85,31 @@ void CMiddleWare::LoadSettings(const std::string& pPath) } } -void CMiddleWare::DebugDump2Report(const std::string& pDebugDumpDir, CReporter::report_t& pReport) +void CMiddleWare::DebugDump2Report(const std::string& pDebugDumpDir, crash_report_t& pCrashReport) { CDebugDump dd; dd.Open(pDebugDumpDir); - dd.LoadText(FILENAME_ARCHITECTURE, pReport.m_sArchitecture); - dd.LoadText(FILENAME_KERNEL, pReport.m_sKernel); - dd.LoadText(FILENAME_PACKAGE, pReport.m_sPackage); - dd.LoadText(FILENAME_EXECUTABLE, pReport.m_sExecutable); - dd.LoadText(FILENAME_CMDLINE, pReport.m_sCmdLine); + dd.LoadText(FILENAME_ARCHITECTURE, pCrashReport.m_sArchitecture); + dd.LoadText(FILENAME_KERNEL, pCrashReport.m_sKernel); + dd.LoadText(FILENAME_PACKAGE, pCrashReport.m_sPackage); + dd.LoadText(FILENAME_EXECUTABLE, pCrashReport.m_sExecutable); + dd.LoadText(FILENAME_CMDLINE, pCrashReport.m_sCmdLine); if (dd.Exist(FILENAME_TEXTDATA1)) { - dd.LoadText(FILENAME_TEXTDATA1, pReport.m_sTextData1); + dd.LoadText(FILENAME_TEXTDATA1, pCrashReport.m_sTextData1); } if (dd.Exist(FILENAME_TEXTDATA2)) { - dd.LoadText(FILENAME_TEXTDATA2, pReport.m_sTextData2); + dd.LoadText(FILENAME_TEXTDATA2, pCrashReport.m_sTextData2); } if (dd.Exist(FILENAME_BINARYDATA1)) { - pReport.m_bBinaryData1 = pDebugDumpDir + "/" + FILENAME_BINARYDATA1; + pCrashReport.m_sBinaryData1 = pDebugDumpDir + "/" + FILENAME_BINARYDATA1; } if (dd.Exist(FILENAME_BINARYDATA2)) { - pReport.m_bBinaryData2 = pDebugDumpDir + "/" + FILENAME_BINARYDATA2; + pCrashReport.m_sBinaryData2 = pDebugDumpDir + "/" + FILENAME_BINARYDATA2; } dd.Close(); } @@ -154,32 +154,9 @@ void CMiddleWare::CreateReportApplication(const std::string& pApplication, return application->CreateReport(pDebugDumpDir); } - -void CMiddleWare::CreateReport(const std::string& pDebugDumpDir, - crash_report_t& pCrashReport) -{ - CDebugDump dd; - dd.Open(pDebugDumpDir); - if (dd.Exist(FILENAME_APPLICATION)) - { - std::string application; - dd.LoadText(FILENAME_APPLICATION, application); - pCrashReport.m_sPlugin2ReportersName = application; - CreateReportApplication(application, pDebugDumpDir); - } - if (dd.Exist(FILENAME_LANGUAGE)) - { - std::string language; - dd.LoadText(FILENAME_LANGUAGE, language); - pCrashReport.m_sPlugin2ReportersName = language; - CreateReportLanguage(language, pDebugDumpDir); - } - DebugDump2Report(pDebugDumpDir, pCrashReport.m_Report); - dd.Close(); -} - void CMiddleWare::CreateReport(const std::string& pUUID, const std::string& pUID, + crash_context_t& pCrashContext, crash_report_t& pCrashReport) { CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); @@ -187,37 +164,55 @@ void CMiddleWare::CreateReport(const std::string& pUUID, database->Connect(); row = database->GetUUIDData(pUUID, pUID); database->DisConnect(); + if (row.m_sUUID != pUUID) { throw std::string("CMiddleWare::GetReport(): UUID '"+pUUID+"' is not in database."); } - pCrashReport.m_sUUID = pUUID; - pCrashReport.m_sUID = pUID; - CreateReport(row.m_sDebugDumpPath, pCrashReport); + + std::string appLan; + CDebugDump dd; + dd.Open(row.m_sDebugDumpDir); + if (dd.Exist(FILENAME_APPLICATION)) + { + dd.LoadText(FILENAME_APPLICATION, appLan); + CreateReportApplication(appLan, row.m_sDebugDumpDir); + } + if (dd.Exist(FILENAME_LANGUAGE)) + { + dd.LoadText(FILENAME_LANGUAGE, appLan); + CreateReportLanguage(appLan, row.m_sDebugDumpDir); + } + DebugDump2Report(row.m_sDebugDumpDir, pCrashReport); + dd.Close(); + pCrashContext.m_sLanAppPlugin = appLan; + pCrashContext.m_sUUID = pUUID; + pCrashContext.m_sUID = pUID; } -void CMiddleWare::Report(const crash_report_t& pCrashReport) +void CMiddleWare::Report(const crash_context_t& pCrashContext, + const crash_report_t& pCrashReport) { - std::string plugin2ReportersName = pCrashReport.m_sPlugin2ReportersName; - if (m_mapPlugin2Reporters.find(plugin2ReportersName) != m_mapPlugin2Reporters.end()) + std::string lanAppPlugin = pCrashContext.m_sLanAppPlugin; + if (m_mapPlugin2Reporters.find(lanAppPlugin) != m_mapPlugin2Reporters.end()) { set_reporters_t::iterator it_r; - for (it_r = m_mapPlugin2Reporters[plugin2ReportersName].begin(); - it_r != m_mapPlugin2Reporters[plugin2ReportersName].end(); + for (it_r = m_mapPlugin2Reporters[lanAppPlugin].begin(); + it_r != m_mapPlugin2Reporters[lanAppPlugin].end(); it_r++) { CReporter* reporter = m_pPluginManager->GetReporter(*it_r); - reporter->Report(pCrashReport.m_Report); + reporter->Report(pCrashReport); } } CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); database->Connect(); - database->SetReported(pCrashReport.m_sUUID, pCrashReport.m_sUID); + database->SetReported(pCrashContext.m_sUUID, pCrashContext.m_sUID); database->DisConnect(); } -int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& pCrashInfo) +int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpDir, crash_info_t& pCrashInfo) { CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); @@ -228,7 +223,7 @@ int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& std::string time; CDebugDump dd; - dd.Open(pDebugDumpPath); + dd.Open(pDebugDumpDir); dd.LoadText(FILENAME_PACKAGE, package); dd.LoadText(FILENAME_TIME, time); @@ -236,7 +231,7 @@ int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& if (package == "" || m_setBlackList.find(package.substr(0, package.find("-"))) != m_setBlackList.end()) { - dd.Delete(pDebugDumpPath); + dd.Delete(pDebugDumpDir); return 0; } @@ -244,13 +239,13 @@ int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& { std::string application; dd.LoadText(FILENAME_APPLICATION, application); - UUID = GetLocalUUIDApplication(application, pDebugDumpPath); + UUID = GetLocalUUIDApplication(application, pDebugDumpDir); } if (dd.Exist(FILENAME_LANGUAGE)) { std::string language; dd.LoadText(FILENAME_LANGUAGE, language); - UUID = GetLocalUUIDLanguage(language, pDebugDumpPath); + UUID = GetLocalUUIDLanguage(language, pDebugDumpDir); } if (UUID == "") { @@ -262,18 +257,18 @@ int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& database_row_t row; database->Connect(); - database->Insert(UUID, UID, pDebugDumpPath, time); + database->Insert(UUID, UID, pDebugDumpDir, time); row = database->GetUUIDData(UUID, UID); database->DisConnect(); if (row.m_sReported == "1") { - dd.Delete(pDebugDumpPath); + dd.Delete(pDebugDumpDir); return 0; } if (row.m_sCount != "1") { - dd.Delete(pDebugDumpPath); + dd.Delete(pDebugDumpDir); } dd.Close(); @@ -287,7 +282,7 @@ int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& return 1; } -CMiddleWare::vector_crash_infos_t CMiddleWare::GetCrashInfos(const std::string& pUID) +vector_crash_infos_t CMiddleWare::GetCrashInfos(const std::string& pUID) { CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); vector_database_rows_t rows; @@ -306,7 +301,7 @@ CMiddleWare::vector_crash_infos_t CMiddleWare::GetCrashInfos(const std::string& info.m_sUID = rows[ii].m_sUID; info.m_sCount = rows[ii].m_sCount; - dd.Open(rows[ii].m_sDebugDumpPath); + dd.Open(rows[ii].m_sDebugDumpDir); dd.LoadText(FILENAME_EXECUTABLE, data); info.m_sExecutable = data; dd.LoadText(FILENAME_PACKAGE, data); diff --git a/lib/MiddleWare/MiddleWare.h b/lib/MiddleWare/MiddleWare.h index 71c85ef..ed94f8b 100644 --- a/lib/MiddleWare/MiddleWare.h +++ b/lib/MiddleWare/MiddleWare.h @@ -25,38 +25,15 @@ #define MIDDLEWARE_H_ #include "PluginManager.h" -#include <set> -#include <string> - +#include "CrashTypes.h" +#include "MiddleWareTypes.h" class CMiddleWare { - public: - - typedef struct SCrashInfo - { - std::string m_sUUID; - std::string m_sUID; - std::string m_sCount; - std::string m_sExecutable; - std::string m_sPackage; - std::string m_sTime; - } crash_info_t; - - typedef struct SCrashReport - { - std::string m_sUUID; - std::string m_sUID; - std::string m_sPlugin2ReportersName; - CReporter::report_t m_Report; - } crash_report_t; - - typedef std::vector<crash_info_t> vector_crash_infos_t; - private: - typedef set_settings_t set_blacklist_t; - typedef set_settings_t set_enabled_plugins_t; - typedef set_settings_t set_reporters_t; + typedef set_strings_t set_blacklist_t; + typedef set_strings_t set_enabled_plugins_t; + typedef set_strings_t set_reporters_t; typedef std::map<std::string, set_reporters_t> map_plugin2reporters_t; CPluginManager* m_pPluginManager; @@ -78,9 +55,7 @@ class CMiddleWare void LoadSettings(const std::string& pPath); void DebugDump2Report(const std::string& pDebugDumpDir, - CReporter::report_t& pReport); - void CreateReport(const std::string& pDebugDumpDir, - crash_report_t& pReport); + crash_report_t& pCrashReport); public: @@ -95,10 +70,13 @@ class CMiddleWare void CreateReport(const std::string& pUUID, const std::string& pUID, - crash_report_t& pReport); - void Report(const crash_report_t& pReport); + crash_context_t& pCrashContext, + crash_report_t& pCrashReport); + + void Report(const crash_context_t& pCrashContext, + const crash_report_t& pCrashReport); - int SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& pCrashInfo); + int SaveDebugDump(const std::string& pDebugDumpDir, crash_info_t& pCrashInfo); vector_crash_infos_t GetCrashInfos(const std::string& pUID); }; diff --git a/lib/MiddleWare/MiddleWareTypes.h b/lib/MiddleWare/MiddleWareTypes.h new file mode 100644 index 0000000..f235056 --- /dev/null +++ b/lib/MiddleWare/MiddleWareTypes.h @@ -0,0 +1,13 @@ +#ifndef MIDDLEWARETYPES_H_ +#define MIDDLEWARETYPES_H_ + +#include <map> +#include <set> +#include <vector> +#include <string> + +typedef std::vector<std::string> vector_string_t; +typedef std::map<std::string, std::string> map_string_string_t; +typedef std::set<std::string> set_strings_t; + +#endif /* MIDDLEWARETYPES_H_ */ diff --git a/lib/MiddleWare/Reporter.h b/lib/MiddleWare/Reporter.h index 8f23065..80fe668 100644 --- a/lib/MiddleWare/Reporter.h +++ b/lib/MiddleWare/Reporter.h @@ -24,25 +24,14 @@ #include <string> #include "Plugin.h" +#include "CrashTypes.h" class CReporter : public CPlugin { public: - typedef struct SReport - { - std::string m_sArchitecture; - std::string m_sKernel; - std::string m_sExecutable; - std::string m_sCmdLine; - std::string m_sPackage; - std::string m_sTextData1; - std::string m_sTextData2; - std::string m_bBinaryData1; - std::string m_bBinaryData2; - } report_t; virtual ~CReporter() {} - virtual void Report(const report_t& pReport) = 0; + virtual void Report(const crash_report_t& pReport) = 0; }; #endif /* REPORTER_H_ */ diff --git a/lib/MiddleWare/Settings.h b/lib/MiddleWare/Settings.h index 46d50a5..1629ce9 100644 --- a/lib/MiddleWare/Settings.h +++ b/lib/MiddleWare/Settings.h @@ -22,13 +22,10 @@ #ifndef SETTINGSFUNC_H_ #define SETTINGSFUNC_H_ -#include "Settings.h" -#include <string> -#include <map> -#include <set> +#include "MiddleWareTypes.h" -typedef std::map<std::string, std::string> map_settings_t; -typedef std::set<std::string> set_settings_t; +typedef map_string_string_t map_settings_t; +typedef set_strings_t set_settings_t; void load_settings(const std::string& path, map_settings_t& settings); void save_settings(const std::string& path, const map_settings_t& settings); diff --git a/lib/MiddleWare/test.cpp b/lib/MiddleWare/test.cpp index 0c2dd31..c9e849a 100644 --- a/lib/MiddleWare/test.cpp +++ b/lib/MiddleWare/test.cpp @@ -21,6 +21,7 @@ #include "MiddleWare.h" #include "DebugDump.h" +#include "CrashTypes.h" #include <iostream> #include <sys/types.h> #include <unistd.h> @@ -46,7 +47,7 @@ int main(int argc, char** argv) dd.SaveBinary(FILENAME_BINARYDATA1, "ass0-9as", sizeof("ass0-9as")); /* Try to save it into DB */ - CMiddleWare::crash_info_t info; + crash_info_t info; if (middleWare.SaveDebugDump(std::string(DEBUG_DUMPS_DIR)+"/"+pid, info)) { std::cout << "Application Crashed! " << @@ -57,10 +58,11 @@ int main(int argc, char** argv) /* Get Report, so user can change data (remove private stuff) * If we do not want user interaction, just send data immediately */ - CMiddleWare::crash_report_t crashReport; - middleWare.CreateReport(info.m_sUUID, info.m_sUID, crashReport); + crash_context_t crashContext; + crash_report_t crashReport; + middleWare.CreateReport(info.m_sUUID, info.m_sUID, crashContext, crashReport); /* Report crash */ - middleWare.Report(crashReport); + middleWare.Report(crashContext, crashReport); } dd.Close(); } |
