From e9c0eec3287439c7c79e695db783ccd965b5276d Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Wed, 11 Feb 2009 15:09:45 +0100 Subject: updated conf file, now it has associations between lan/app plugins and reporter plugins --- lib/MiddleWare/CrashCatcher.conf | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/CrashCatcher.conf b/lib/MiddleWare/CrashCatcher.conf index c4c2c17..e865ebe 100644 --- a/lib/MiddleWare/CrashCatcher.conf +++ b/lib/MiddleWare/CrashCatcher.conf @@ -1,4 +1,9 @@ # test conf file. it will be generated in the future +# blacklisted packages BlackList = bash, bind, apache2 -EnabledPlugins = SQLite3, CCpp +# enabled plugins +EnabledPlugins = SQLite3, CCpp, Mailx +# selected DB plugin Database = SQLite3 +# reporters association +CCpp = Mailx \ No newline at end of file -- cgit From 23a2296ebbb77b9c82bde4bac670f88d4d2560b4 Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Wed, 11 Feb 2009 15:10:07 +0100 Subject: move include to a proper place --- lib/MiddleWare/DynamicLibrary.cpp | 1 + lib/MiddleWare/DynamicLibrary.h | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/DynamicLibrary.cpp b/lib/MiddleWare/DynamicLibrary.cpp index 35a69c7..3fcc548 100644 --- a/lib/MiddleWare/DynamicLibrary.cpp +++ b/lib/MiddleWare/DynamicLibrary.cpp @@ -21,6 +21,7 @@ #include "DynamicLibrary.h" #include +#include CDynamicLibrary::CDynamicLibrary(const std::string& pPath) : m_pHandle(NULL) diff --git a/lib/MiddleWare/DynamicLibrary.h b/lib/MiddleWare/DynamicLibrary.h index 0182fb2..4cf36f6 100644 --- a/lib/MiddleWare/DynamicLibrary.h +++ b/lib/MiddleWare/DynamicLibrary.h @@ -24,7 +24,6 @@ #define DYNAMICLIBRARYH_ #include -#include class CDynamicLibrary { -- cgit From 8e1a8d5237d21fec7b9adc61d44a177a7f2e5daf Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Wed, 11 Feb 2009 15:11:30 +0100 Subject: added function for parsing one line of settings --- lib/MiddleWare/Settings.cpp | 13 +++++++++++++ lib/MiddleWare/Settings.h | 3 +++ 2 files changed, 16 insertions(+) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/Settings.cpp b/lib/MiddleWare/Settings.cpp index 413820b..92e22ea 100644 --- a/lib/MiddleWare/Settings.cpp +++ b/lib/MiddleWare/Settings.cpp @@ -97,3 +97,16 @@ void save_settings(const std::string& path, const map_settings_t& settings) throw std::string("save_settings(): Cannot write configuration file '"+path+"'."); } } + +void parse_settings(const std::string& pLine, set_settings_t& settings) +{ + std::string::size_type ii_old = 0, ii_new = 0; + ii_new = pLine.find(","); + while (ii_new != std::string::npos) + { + settings.insert(pLine.substr(ii_old, ii_new - ii_old)); + ii_old = ii_new + 1; + ii_new = pLine.find(",",ii_old); + } + settings.insert(pLine.substr(ii_old)); +} diff --git a/lib/MiddleWare/Settings.h b/lib/MiddleWare/Settings.h index a427f1b..46d50a5 100644 --- a/lib/MiddleWare/Settings.h +++ b/lib/MiddleWare/Settings.h @@ -25,10 +25,13 @@ #include "Settings.h" #include #include +#include typedef std::map map_settings_t; +typedef std::set 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); +void parse_settings(const std::string& pLine, set_settings_t& settings); #endif /* SETTINGSFUNC_H_ */ -- cgit From f570c04d61bae344a50e20275669227bbdde829c Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Wed, 11 Feb 2009 16:11:14 +0100 Subject: added new column --- lib/MiddleWare/Database.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/Database.h b/lib/MiddleWare/Database.h index 15b20a9..84099af 100644 --- a/lib/MiddleWare/Database.h +++ b/lib/MiddleWare/Database.h @@ -40,6 +40,7 @@ #define DATABASE_COLUMN_DEBUG_DUMP_PATH "DebugDumpPath" #define DATABASE_COLUMN_COUNT "Count" #define DATABASE_COLUMN_REPORTED "Reported" +#define DATABASE_COLUMN_TIME "Time" typedef struct SDatabaseRow { @@ -48,6 +49,7 @@ typedef struct SDatabaseRow std::string m_sDebugDumpPath; std::string m_sCount; std::string m_sReported; + std::string m_sTime; } database_row_t; // > @@ -62,7 +64,8 @@ class CDatabase : public CPlugin virtual void DisConnect() = 0; virtual void Insert(const std::string& pUUID, const std::string& pUID, - const std::string& pDebugDumpPath) = 0; + const std::string& pDebugDumpPath, + const std::string& pTime) = 0; virtual void Delete(const std::string& pUUID, const std::string& pUID) = 0; -- cgit From d0c57dbf8c5289b957be08f7c58fa936ead643aa Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Wed, 11 Feb 2009 16:16:41 +0100 Subject: new interface --- lib/MiddleWare/Application.h | 3 ++- lib/MiddleWare/Language.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/Application.h b/lib/MiddleWare/Application.h index 598fc18..8b1d7ec 100644 --- a/lib/MiddleWare/Application.h +++ b/lib/MiddleWare/Application.h @@ -30,7 +30,8 @@ class CApplication : public CPlugin public: virtual ~CApplication() {} virtual std::string GetLocalUUID(const std::string& pDebugDumpPath) = 0; - virtual std::string GetReport(const std::string& pDebugDumpPath) = 0; + virtual std::string GetGlobalUUID(const std::string& pDebugDumpPath) = 0; + virtual void CreateReport(const std::string& pDebugDumpPath) = 0; }; #endif /*APPLICATION_H_*/ diff --git a/lib/MiddleWare/Language.h b/lib/MiddleWare/Language.h index b83434b..60e8275 100644 --- a/lib/MiddleWare/Language.h +++ b/lib/MiddleWare/Language.h @@ -30,7 +30,8 @@ class CLanguage : public CPlugin public: virtual ~CLanguage() {} virtual std::string GetLocalUUID(const std::string& pDebugDumpPath) = 0; - virtual std::string GetReport(const std::string& pDebugDumpPath) = 0; + virtual std::string GetGlobalUUID(const std::string& pDebugDumpPath) = 0; + virtual void CreateReport(const std::string& pDebugDumpPath) = 0; }; #endif /*LANGUAGE_H_*/ -- cgit From f3ce5e7a7082e430c8ac1193b5c8c4335d1cd4a2 Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Wed, 11 Feb 2009 16:17:04 +0100 Subject: added test for reporting stuff --- lib/MiddleWare/test.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/test.cpp b/lib/MiddleWare/test.cpp index 8424aa9..016dd9d 100644 --- a/lib/MiddleWare/test.cpp +++ b/lib/MiddleWare/test.cpp @@ -45,13 +45,15 @@ int main(int argc, char** argv) dd.SaveBinary(FILENAME_BINARYDATA1, "ass0-9as", sizeof("ass0-9as")); 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; + if (middleWare.SaveDebugDump(std::string(DEBUG_DUMPS_DIR)+"/"+pid, info)) + { + std::cout << "Application Crashed! " << + "(" << info.m_sTime << " [" << info.m_sCount << "]) " << + info.m_sPackage << ": " << + info.m_sExecutable << std::endl; + middleWare.Report(info.m_sUUID, info.m_sUID); + } } catch (std::string sError) { -- cgit From e7b063bebc9ada8ce5a20dcc6326fbe001a30af7 Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Wed, 11 Feb 2009 16:18:01 +0100 Subject: added reporting methods --- lib/MiddleWare/MiddleWare.cpp | 131 +++++++++++++++++++++++++++++------------- lib/MiddleWare/MiddleWare.h | 24 +++++--- 2 files changed, 108 insertions(+), 47 deletions(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp index d52fbda..a9a0f56 100644 --- a/lib/MiddleWare/MiddleWare.cpp +++ b/lib/MiddleWare/MiddleWare.cpp @@ -49,36 +49,17 @@ CMiddleWare::~CMiddleWare() delete m_pPluginManager; } - void CMiddleWare::LoadSettings(const std::string& pPath) { map_settings_t settings; load_settings(pPath, settings); if (settings.find("BlackList") != settings.end()) { - std::string blackList = settings["BlackList"]; - std::string::size_type ii_old = 0, ii_new = 0; - ii_new = blackList.find(","); - while (ii_new != std::string::npos) - { - m_setBlackList.insert(blackList.substr(ii_old, ii_new - ii_old)); - ii_old = ii_new + 1; - ii_new = blackList.find(",",ii_old); - } - m_setBlackList.insert(blackList.substr(ii_old)); + parse_settings(settings["BlackList"], m_setBlackList); } if (settings.find("EnabledPlugins") != settings.end()) { - std::string enabledPlugins = settings["EnabledPlugins"]; - std::string::size_type ii_old = 0, ii_new = 0; - ii_new = enabledPlugins.find(","); - while (ii_new != std::string::npos) - { - m_setEnabledPlugins.insert(enabledPlugins.substr(ii_old, ii_new - ii_old)); - ii_old = ii_new + 1; - ii_new = enabledPlugins.find(",",ii_old); - } - m_setEnabledPlugins.insert(enabledPlugins.substr(ii_old)); + parse_settings(settings["EnabledPlugins"], m_setEnabledPlugins); } if (settings.find("Database") != settings.end()) { @@ -92,6 +73,16 @@ void CMiddleWare::LoadSettings(const std::string& pPath) { throw std::string("No database plugin is selected."); } + set_enabled_plugins_t::iterator it_p; + for (it_p = m_setEnabledPlugins.begin(); it_p != m_setEnabledPlugins.end(); it_p++) + { + if (settings.find(*it_p) != settings.end()) + { + set_reporters_t reporters; + parse_settings(settings[*it_p], reporters); + m_mapPlugin2Reporters[*it_p] = reporters; + } + } } void CMiddleWare::RegisterPlugin(const std::string& pName) @@ -105,20 +96,82 @@ void CMiddleWare::UnRegisterPlugin(const std::string& pName) } -std::string CMiddleWare::GetLocalUUIDLanguage(const std::string& pLanguage, const std::string& pDebugDumpPath) +std::string CMiddleWare::GetLocalUUIDLanguage(const std::string& pLanguage, + const std::string& pDebugDumpDir) +{ + CLanguage* language = m_pPluginManager->GetLanguage(pLanguage); + return language->GetLocalUUID(pDebugDumpDir); +} + +std::string CMiddleWare::GetLocalUUIDApplication(const std::string& pApplication, + const std::string& pDebugDumpDir) +{ + CApplication* application = m_pPluginManager->GetApplication(pApplication); + return application->GetLocalUUID(pDebugDumpDir); +} + + +void CMiddleWare::CreateReportLanguage(const std::string& pLanguage, + const std::string& pDebugDumpDir) { CLanguage* language = m_pPluginManager->GetLanguage(pLanguage); - return language->GetLocalUUID(pDebugDumpPath); + return language->CreateReport(pDebugDumpDir); } -std::string CMiddleWare::GetLocalUUIDApplication(const std::string& pApplication, const std::string& pDebugDumpPath) +void CMiddleWare::CreateReportApplication(const std::string& pApplication, + const std::string& pDebugDumpDir) { CApplication* application = m_pPluginManager->GetApplication(pApplication); - return application->GetLocalUUID(pDebugDumpPath); + return application->CreateReport(pDebugDumpDir); +} + + +void CMiddleWare::CreateReport(const std::string& pDebugDumpDir) +{ + CDebugDump dd; + dd.Open(pDebugDumpDir); + if (dd.Exist(FILENAME_APPLICATION)) + { + std::string application; + dd.LoadText(FILENAME_APPLICATION, application); + CreateReportApplication(application, pDebugDumpDir); + } + if (dd.Exist(FILENAME_LANGUAGE)) + { + std::string language; + dd.LoadText(FILENAME_LANGUAGE, language); + CreateReportLanguage(language, pDebugDumpDir); + } +} + +void CMiddleWare::SendReport(const std::string& pDebugDumpDir) +{ + std::string pluginName; + CDebugDump dd; + dd.Open(pDebugDumpDir); + if (dd.Exist(FILENAME_APPLICATION)) + { + dd.LoadText(FILENAME_APPLICATION, pluginName); + } + if (dd.Exist(FILENAME_LANGUAGE)) + { + dd.LoadText(FILENAME_LANGUAGE, pluginName); + } + if (m_mapPlugin2Reporters.find(pluginName) != m_mapPlugin2Reporters.end()) + { + set_reporters_t::iterator it_r; + for (it_r = m_mapPlugin2Reporters[pluginName].begin(); + it_r != m_mapPlugin2Reporters[pluginName].end(); + it_r++) + { + CReporter* reporter = m_pPluginManager->GetReporter(*it_r); + reporter->Report(pDebugDumpDir); + } + } } -void CMiddleWare::GetReport(const std::string& pUUID, const std::string& pUID) +void CMiddleWare::Report(const std::string& pUUID, const std::string& pUID) { CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); database_row_t row; @@ -129,12 +182,9 @@ void CMiddleWare::GetReport(const std::string& pUUID, const std::string& pUID) { throw std::string("CMiddleWare::GetReport(): UUID '"+pUUID+"' is not in database."); } - // TODO: finish this -} -int CMiddleWare::Report(const std::string& pReport) -{ - // TODO: write this + CreateReport(row.m_sDebugDumpPath); + SendReport(row.m_sDebugDumpPath); } int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& pCrashInfo) @@ -145,11 +195,13 @@ int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& std::string UID; std::string package; std::string executable; + std::string time; CDebugDump dd; dd.Open(pDebugDumpPath); dd.LoadText(FILENAME_PACKAGE, package); + dd.LoadText(FILENAME_TIME, time); if (package == "" || m_setBlackList.find(package.substr(0, package.find("-"))) != m_setBlackList.end()) @@ -158,20 +210,18 @@ int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& return 0; } + if (dd.Exist(FILENAME_APPLICATION)) + { + std::string application; + dd.LoadText(FILENAME_APPLICATION, application); + UUID = GetLocalUUIDApplication(application, pDebugDumpPath); + } if (dd.Exist(FILENAME_LANGUAGE)) { std::string language; dd.LoadText(FILENAME_LANGUAGE, language); UUID = GetLocalUUIDLanguage(language, pDebugDumpPath); } - else if (0) - { - // TODO: how to get UUID from app? - } - else - { - throw std::string("CMiddleWare::SaveDebugDumpToDataBase(): Can not get UUID."); - } if (UUID == "") { throw std::string("CMiddleWare::SaveDebugDumpToDataBase(): Wrong UUID."); @@ -182,7 +232,7 @@ int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& database_row_t row; database->Connect(); - database->Insert(UUID, UID, pDebugDumpPath); + database->Insert(UUID, UID, pDebugDumpPath, time); row = database->GetUUIDData(UUID, UID); database->DisConnect(); @@ -201,6 +251,7 @@ int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& pCrashInfo.m_sCount = row.m_sCount; pCrashInfo.m_sExecutable = executable; pCrashInfo.m_sPackage = package; + pCrashInfo.m_sTime = row.m_sTime; return 1; } diff --git a/lib/MiddleWare/MiddleWare.h b/lib/MiddleWare/MiddleWare.h index b9cf8b6..95c29be 100644 --- a/lib/MiddleWare/MiddleWare.h +++ b/lib/MiddleWare/MiddleWare.h @@ -32,20 +32,31 @@ class CMiddleWare { private: - - typedef std::set set_blacklist_t; - typedef std::set set_enabled_plugins_t; + typedef set_settings_t set_blacklist_t; + typedef set_settings_t set_enabled_plugins_t; + typedef set_settings_t set_reporters_t; + typedef std::map map_plugin2reporters_t; CPluginManager* m_pPluginManager; set_blacklist_t m_setBlackList; set_enabled_plugins_t m_setEnabledPlugins; std::string m_sDatabase; + map_plugin2reporters_t m_mapPlugin2Reporters; + std::string GetLocalUUIDLanguage(const std::string& pLanguage, const std::string& pDebugDumpDir); + void CreateReportLanguage(const std::string& pLanguage, + const std::string& pDebugDumpDir); std::string GetLocalUUIDApplication(const std::string& pApplication, - const std::string& pDebugDumpPath); + const std::string& pDebugDumpDir); + void CreateReportApplication(const std::string& pApplication, + const std::string& pDebugDumpDir); + void LoadSettings(const std::string& pPath); + + void CreateReport(const std::string& pDebugDumpDir); + void SendReport(const std::string& pDebugDumpDir); public: typedef struct SCrashInfo @@ -55,6 +66,7 @@ class CMiddleWare std::string m_sCount; std::string m_sExecutable; std::string m_sPackage; + std::string m_sTime; } crash_info_t; typedef std::vector vector_crash_infos_t; @@ -68,11 +80,9 @@ class CMiddleWare void RegisterPlugin(const std::string& pName); void UnRegisterPlugin(const std::string& pName); - void GetReport(const std::string& pUUID, const std::string& pUID); - int Report(const std::string& pReport); + void Report(const std::string& pUUID, const std::string& pUID); int SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& pCrashInfo); - vector_crash_infos_t GetCrashInfos(const std::string& pUID); }; -- cgit From 8b9c51fff870ef59066878ae818bb3aaf4c04682 Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Thu, 12 Feb 2009 09:59:31 +0100 Subject: changed interface of reporter plugins, so user have posibility ti change reported data --- lib/MiddleWare/Reporter.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/Reporter.h b/lib/MiddleWare/Reporter.h index f1493f5..5419bdc 100644 --- a/lib/MiddleWare/Reporter.h +++ b/lib/MiddleWare/Reporter.h @@ -28,8 +28,20 @@ class CReporter : public CPlugin { public: + typedef struct SReport + { + std::string m_sArchitecture; + std::string m_sKernel; + std::string m_sExecutable; + 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 std::string& pDebugDumpPath) = 0; + virtual void Report(const report_t& pReport) = 0; }; #endif /* REPORTER_H_ */ -- cgit From e935c9e8a7208f04af8fce1e32e8c8d8c52beca5 Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Thu, 12 Feb 2009 10:00:08 +0100 Subject: changet reporting function according reporter's iface --- lib/MiddleWare/MiddleWare.cpp | 83 +++++++++++++++++++++++++++---------------- lib/MiddleWare/MiddleWare.h | 17 +++++++-- 2 files changed, 66 insertions(+), 34 deletions(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp index a9a0f56..9b53e35 100644 --- a/lib/MiddleWare/MiddleWare.cpp +++ b/lib/MiddleWare/MiddleWare.cpp @@ -85,6 +85,33 @@ void CMiddleWare::LoadSettings(const std::string& pPath) } } +void CMiddleWare::DebugDump2Report(const std::string& pDebugDumpDir, CReporter::report_t& pReport) +{ + 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); + + if (dd.Exist(FILENAME_TEXTDATA1)) + { + dd.LoadText(FILENAME_TEXTDATA1, pReport.m_sTextData1); + } + if (dd.Exist(FILENAME_TEXTDATA2)) + { + dd.LoadText(FILENAME_TEXTDATA2, pReport.m_sTextData2); + } + if (dd.Exist(FILENAME_BINARYDATA1)) + { + pReport.m_bBinaryData1 = pDebugDumpDir + "/" + FILENAME_BINARYDATA1; + } + if (dd.Exist(FILENAME_BINARYDATA2)) + { + pReport.m_bBinaryData2 = pDebugDumpDir + "/" + FILENAME_BINARYDATA2; + } +} + void CMiddleWare::RegisterPlugin(const std::string& pName) { m_pPluginManager->RegisterPlugin(pName); @@ -126,7 +153,8 @@ void CMiddleWare::CreateReportApplication(const std::string& pApplication, } -void CMiddleWare::CreateReport(const std::string& pDebugDumpDir) +void CMiddleWare::CreateReport(const std::string& pDebugDumpDir, + crash_report_t& pCrashReport) { CDebugDump dd; dd.Open(pDebugDumpDir); @@ -134,44 +162,22 @@ void CMiddleWare::CreateReport(const std::string& pDebugDumpDir) { 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); } -void CMiddleWare::SendReport(const std::string& pDebugDumpDir) -{ - std::string pluginName; - CDebugDump dd; - dd.Open(pDebugDumpDir); - if (dd.Exist(FILENAME_APPLICATION)) - { - dd.LoadText(FILENAME_APPLICATION, pluginName); - } - if (dd.Exist(FILENAME_LANGUAGE)) - { - dd.LoadText(FILENAME_LANGUAGE, pluginName); - } - if (m_mapPlugin2Reporters.find(pluginName) != m_mapPlugin2Reporters.end()) - { - set_reporters_t::iterator it_r; - for (it_r = m_mapPlugin2Reporters[pluginName].begin(); - it_r != m_mapPlugin2Reporters[pluginName].end(); - it_r++) - { - CReporter* reporter = m_pPluginManager->GetReporter(*it_r); - reporter->Report(pDebugDumpDir); - } - } -} - - -void CMiddleWare::Report(const std::string& pUUID, const std::string& pUID) +void CMiddleWare::CreateReport(const std::string& pUUID, + const std::string& pUID, + crash_report_t& pCrashReport) { CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); database_row_t row; @@ -183,8 +189,23 @@ void CMiddleWare::Report(const std::string& pUUID, const std::string& pUID) throw std::string("CMiddleWare::GetReport(): UUID '"+pUUID+"' is not in database."); } - CreateReport(row.m_sDebugDumpPath); - SendReport(row.m_sDebugDumpPath); + CreateReport(row.m_sDebugDumpPath, pCrashReport); +} + +void CMiddleWare::Report(const crash_report_t& pCrashReport) +{ + std::string plugin2ReportersName = pCrashReport.m_sPlugin2ReportersName; + if (m_mapPlugin2Reporters.find(plugin2ReportersName) != m_mapPlugin2Reporters.end()) + { + set_reporters_t::iterator it_r; + for (it_r = m_mapPlugin2Reporters[plugin2ReportersName].begin(); + it_r != m_mapPlugin2Reporters[plugin2ReportersName].end(); + it_r++) + { + CReporter* reporter = m_pPluginManager->GetReporter(*it_r); + reporter->Report(pCrashReport.m_Report); + } + } } int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& pCrashInfo) diff --git a/lib/MiddleWare/MiddleWare.h b/lib/MiddleWare/MiddleWare.h index 95c29be..7164d48 100644 --- a/lib/MiddleWare/MiddleWare.h +++ b/lib/MiddleWare/MiddleWare.h @@ -55,8 +55,8 @@ class CMiddleWare void LoadSettings(const std::string& pPath); - void CreateReport(const std::string& pDebugDumpDir); - void SendReport(const std::string& pDebugDumpDir); + void DebugDump2Report(const std::string& pDebugDumpDir, CReporter::report_t& pReport); + public: typedef struct SCrashInfo @@ -69,6 +69,12 @@ class CMiddleWare std::string m_sTime; } crash_info_t; + typedef struct SCrashReport + { + std::string m_sPlugin2ReportersName; + CReporter::report_t m_Report; + } crash_report_t; + typedef std::vector vector_crash_infos_t; CMiddleWare(const std::string& pPlugisConfDir, @@ -80,7 +86,12 @@ class CMiddleWare void RegisterPlugin(const std::string& pName); void UnRegisterPlugin(const std::string& pName); - void Report(const std::string& pUUID, const std::string& pUID); + void CreateReport(const std::string& pDebugDumpDir, + crash_report_t& pReport); + void CreateReport(const std::string& pUUID, + const std::string& pUID, + crash_report_t& pReport); + void Report(const crash_report_t& pReport); int SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& pCrashInfo); vector_crash_infos_t GetCrashInfos(const std::string& pUID); -- cgit From 66bdd03d7892cd95e7806b8c375e88d279dd4034 Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Thu, 12 Feb 2009 10:00:21 +0100 Subject: more complex testcase --- lib/MiddleWare/test.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/test.cpp b/lib/MiddleWare/test.cpp index 016dd9d..1868284 100644 --- a/lib/MiddleWare/test.cpp +++ b/lib/MiddleWare/test.cpp @@ -35,15 +35,15 @@ int main(int argc, char** argv) CMiddleWare middleWare(PLUGINS_CONF_DIR, PLUGINS_LIB_DIR, std::string(CONF_DIR) + "/CrashCatcher.conf"); + /* Create DebugDump */ CDebugDump dd; - char pid[100]; sprintf(pid, "%d", getpid()); - dd.Create(std::string(DEBUG_DUMPS_DIR)+"/"+pid, pid); dd.SaveText(FILENAME_LANGUAGE, "CCpp"); dd.SaveBinary(FILENAME_BINARYDATA1, "ass0-9as", sizeof("ass0-9as")); + /* Try to save it into DB */ CMiddleWare::crash_info_t info; if (middleWare.SaveDebugDump(std::string(DEBUG_DUMPS_DIR)+"/"+pid, info)) { @@ -52,7 +52,18 @@ int main(int argc, char** argv) info.m_sPackage << ": " << info.m_sExecutable << std::endl; - middleWare.Report(info.m_sUUID, info.m_sUID); + /* Get Report, so user can change data (remove private stuff) + * + * If we want to send report immediately after DebugDump was created, + * we can use: + * middleWare.CreateReport(debugDumpDir, crashReport); + * and after that it can be easily reported by: + * middleWare.Report(crashReport); + */ + CMiddleWare::crash_report_t crashReport; + middleWare.CreateReport(info.m_sUUID, info.m_sUID, crashReport); + /* Report crash */ + middleWare.Report(crashReport); } } catch (std::string sError) -- cgit From fa69a86d9ffffd444ee8f64bfc794ea97e1a1453 Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Thu, 12 Feb 2009 10:05:38 +0100 Subject: a creation of reports directly from DebugDumpDir is moved to private section because of security reasons --- lib/MiddleWare/MiddleWare.h | 7 ++++--- lib/MiddleWare/test.cpp | 7 +------ 2 files changed, 5 insertions(+), 9 deletions(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/MiddleWare.h b/lib/MiddleWare/MiddleWare.h index 7164d48..526888e 100644 --- a/lib/MiddleWare/MiddleWare.h +++ b/lib/MiddleWare/MiddleWare.h @@ -55,7 +55,10 @@ class CMiddleWare void LoadSettings(const std::string& pPath); - void DebugDump2Report(const std::string& pDebugDumpDir, CReporter::report_t& pReport); + void DebugDump2Report(const std::string& pDebugDumpDir, + CReporter::report_t& pReport); + void CreateReport(const std::string& pDebugDumpDir, + crash_report_t& pReport); public: @@ -86,8 +89,6 @@ class CMiddleWare void RegisterPlugin(const std::string& pName); void UnRegisterPlugin(const std::string& pName); - void CreateReport(const std::string& pDebugDumpDir, - crash_report_t& pReport); void CreateReport(const std::string& pUUID, const std::string& pUID, crash_report_t& pReport); diff --git a/lib/MiddleWare/test.cpp b/lib/MiddleWare/test.cpp index 1868284..77b671a 100644 --- a/lib/MiddleWare/test.cpp +++ b/lib/MiddleWare/test.cpp @@ -53,12 +53,7 @@ int main(int argc, char** argv) info.m_sExecutable << std::endl; /* Get Report, so user can change data (remove private stuff) - * - * If we want to send report immediately after DebugDump was created, - * we can use: - * middleWare.CreateReport(debugDumpDir, crashReport); - * and after that it can be easily reported by: - * middleWare.Report(crashReport); + * 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); -- cgit From ec264c8514a838ceb9d78f4fc6f41ebe7a8419e0 Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Thu, 12 Feb 2009 10:09:21 +0100 Subject: compilation bug fix --- lib/MiddleWare/MiddleWare.h | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/MiddleWare.h b/lib/MiddleWare/MiddleWare.h index 526888e..71c85ef 100644 --- a/lib/MiddleWare/MiddleWare.h +++ b/lib/MiddleWare/MiddleWare.h @@ -31,6 +31,28 @@ 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 vector_crash_infos_t; + private: typedef set_settings_t set_blacklist_t; typedef set_settings_t set_enabled_plugins_t; @@ -62,24 +84,6 @@ 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_sPlugin2ReportersName; - CReporter::report_t m_Report; - } crash_report_t; - - typedef std::vector vector_crash_infos_t; - CMiddleWare(const std::string& pPlugisConfDir, const std::string& pPlugisLibDir, const std::string& pMiddleWareConfFile); -- cgit From 43e425b5370b816f2110bf83f5fa09af9efedfe1 Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Thu, 12 Feb 2009 10:10:08 +0100 Subject: after a report, the reports in DB are market as reported --- lib/MiddleWare/MiddleWare.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp index 9b53e35..1dd12de 100644 --- a/lib/MiddleWare/MiddleWare.cpp +++ b/lib/MiddleWare/MiddleWare.cpp @@ -188,7 +188,8 @@ void CMiddleWare::CreateReport(const std::string& 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); } @@ -206,6 +207,11 @@ void CMiddleWare::Report(const crash_report_t& pCrashReport) reporter->Report(pCrashReport.m_Report); } } + + CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); + database->Connect(); + database->SetReported(pCrashReport.m_sUUID, pCrashReport.m_sUID); + database->DisConnect(); } int CMiddleWare::SaveDebugDump(const std::string& pDebugDumpPath, crash_info_t& pCrashInfo) -- cgit From 6259030484be3e11c1d8accf943fd5411cb0d7bb Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Thu, 12 Feb 2009 11:50:16 +0100 Subject: updated test --- lib/MiddleWare/test.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/test.cpp b/lib/MiddleWare/test.cpp index 77b671a..57c5506 100644 --- a/lib/MiddleWare/test.cpp +++ b/lib/MiddleWare/test.cpp @@ -39,7 +39,9 @@ int main(int argc, char** argv) CDebugDump dd; char pid[100]; sprintf(pid, "%d", getpid()); - dd.Create(std::string(DEBUG_DUMPS_DIR)+"/"+pid, pid); + dd.Create(std::string(DEBUG_DUMPS_DIR)+"/"+pid); + dd.SaveProc(pid); + dd.SavePackage(); dd.SaveText(FILENAME_LANGUAGE, "CCpp"); dd.SaveBinary(FILENAME_BINARYDATA1, "ass0-9as", sizeof("ass0-9as")); -- cgit From c93222d1407ede085833d3a91bfeda5f0f910eb4 Mon Sep 17 00:00:00 2001 From: Zdenek Prikryl Date: Thu, 12 Feb 2009 11:56:02 +0100 Subject: added new crash information, "cmdline" --- lib/MiddleWare/MiddleWare.cpp | 1 + lib/MiddleWare/Reporter.h | 1 + 2 files changed, 2 insertions(+) (limited to 'lib/MiddleWare') diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp index 1dd12de..5a5e39d 100644 --- a/lib/MiddleWare/MiddleWare.cpp +++ b/lib/MiddleWare/MiddleWare.cpp @@ -93,6 +93,7 @@ void CMiddleWare::DebugDump2Report(const std::string& pDebugDumpDir, CReporter:: 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); if (dd.Exist(FILENAME_TEXTDATA1)) { diff --git a/lib/MiddleWare/Reporter.h b/lib/MiddleWare/Reporter.h index 5419bdc..8f23065 100644 --- a/lib/MiddleWare/Reporter.h +++ b/lib/MiddleWare/Reporter.h @@ -33,6 +33,7 @@ class CReporter : public CPlugin 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; -- cgit