diff options
author | Zdenek Prikryl <zprikryl@redhat.com> | 2009-08-14 20:59:43 +0200 |
---|---|---|
committer | Zdenek Prikryl <zprikryl@redhat.com> | 2009-08-14 20:59:43 +0200 |
commit | 3c226c987f5015e8184bfc4293ee9f9b2f7b8f67 (patch) | |
tree | b2ec9e8f5ec3140008a15cccea4030c438dbe72e | |
parent | 15e44fefb8e0ce093e91bc0fd96302c6b77bf92a (diff) | |
download | abrt-3c226c987f5015e8184bfc4293ee9f9b2f7b8f67.tar.gz abrt-3c226c987f5015e8184bfc4293ee9f9b2f7b8f67.tar.xz abrt-3c226c987f5015e8184bfc4293ee9f9b2f7b8f67.zip |
added support for storing results from reporters (used from gui)
-rw-r--r-- | inc/CrashTypes.h | 1 | ||||
-rw-r--r-- | lib/MiddleWare/Database.h | 7 | ||||
-rw-r--r-- | lib/MiddleWare/Plugin.h | 2 | ||||
-rw-r--r-- | lib/MiddleWare/Reporter.h | 5 | ||||
-rw-r--r-- | lib/Plugins/Bugzilla.cpp | 11 | ||||
-rw-r--r-- | lib/Plugins/Bugzilla.h | 6 | ||||
-rw-r--r-- | lib/Plugins/KerneloopsReporter.cpp | 8 | ||||
-rw-r--r-- | lib/Plugins/KerneloopsReporter.h | 4 | ||||
-rw-r--r-- | lib/Plugins/Logger.cpp | 8 | ||||
-rw-r--r-- | lib/Plugins/Logger.h | 4 | ||||
-rw-r--r-- | lib/Plugins/Mailx.cpp | 3 | ||||
-rw-r--r-- | lib/Plugins/Mailx.h | 4 | ||||
-rw-r--r-- | lib/Plugins/SQLite3.cpp | 12 | ||||
-rw-r--r-- | lib/Plugins/SQLite3.h | 2 | ||||
-rw-r--r-- | src/Daemon/CrashWatcher.cpp | 2 | ||||
-rw-r--r-- | src/Daemon/MiddleWare.cpp | 21 | ||||
-rw-r--r-- | src/Daemon/MiddleWare.h | 11 |
17 files changed, 79 insertions, 32 deletions
diff --git a/inc/CrashTypes.h b/inc/CrashTypes.h index 38095b9..6197503 100644 --- a/inc/CrashTypes.h +++ b/inc/CrashTypes.h @@ -31,6 +31,7 @@ #define CD_DESCRIPTION "Description" #define CD_TIME "Time" #define CD_REPORTED "Reported" +#define CD_MESSAGE "Message" #define CD_COMMENT "Comment" #define CD_REPRODUCE "How to reproduce" #define CD_MWANALYZER "_MWAnalyzer" diff --git a/lib/MiddleWare/Database.h b/lib/MiddleWare/Database.h index 3623846..6566f41 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_MESSAGE "Message" #define DATABASE_COLUMN_TIME "Time" /** @@ -52,6 +53,7 @@ typedef struct SDatabaseRow std::string m_sDebugDumpDir; /**< A debugdump directory of a crash.*/ std::string m_sCount; /**< Crash rate.*/ std::string m_sReported; /**< Is a row reported?*/ + std::string m_sMessage; /**< if a row is reported, then there can be store message abotu that*/ std::string m_sTime; /**< Time of last occurred crash with same local UUID*/ } database_row_t; @@ -96,9 +98,12 @@ class CDatabase : public CPlugin * A method, which sets that particular row was reported. * @param pUUID A local UUID of a crash. * @param pUID An UID of an user. + * @param pMessga A text explanation of reported problem (where + * it is stored etc... */ virtual void SetReported(const std::string& pUUID, - const std::string& pUID) = 0; + const std::string& pUID, + const std::string& pMessage) = 0; /** * A method, which gets all rows which belongs to particular user. * If the user is root, then all rows are returned. If there are no diff --git a/lib/MiddleWare/Plugin.h b/lib/MiddleWare/Plugin.h index a0b64ae..638840f 100644 --- a/lib/MiddleWare/Plugin.h +++ b/lib/MiddleWare/Plugin.h @@ -26,7 +26,7 @@ #include <string> #include <map> -#define PLUGINS_MAGIC_NUMBER 5 +#define PLUGINS_MAGIC_NUMBER 6 #define PLUGINS_CONF_EXTENSION "conf" #define PLUGINS_LIB_EXTENSION "so" diff --git a/lib/MiddleWare/Reporter.h b/lib/MiddleWare/Reporter.h index 810b316..c74a10c 100644 --- a/lib/MiddleWare/Reporter.h +++ b/lib/MiddleWare/Reporter.h @@ -38,9 +38,10 @@ class CReporter : public CPlugin * by itself. * @param pCrashReport A crash report. * @param pArgs Plugin's arguments. + * @retun A message which can be displayed after a report is created. */ - virtual void Report(const map_crash_report_t& pCrashReport, - const std::string& pArgs) = 0; + virtual std::string Report(const map_crash_report_t& pCrashReport, + const std::string& pArgs) = 0; }; #endif /* REPORTER_H_ */ diff --git a/lib/Plugins/Bugzilla.cpp b/lib/Plugins/Bugzilla.cpp index 2a91b95..5e3602f 100644 --- a/lib/Plugins/Bugzilla.cpp +++ b/lib/Plugins/Bugzilla.cpp @@ -150,7 +150,7 @@ void CReporterBugzilla::AddPlusOneCC(const std::string& pBugId) ret = xmlrpc_c::value_struct(rpc->getResult()); } -bool CReporterBugzilla::CheckUUIDInBugzilla(const std::string& pComponent, const std::string& pUUID) +std::string CReporterBugzilla::CheckUUIDInBugzilla(const std::string& pComponent, const std::string& pUUID) { xmlrpc_c::paramList paramList; map_xmlrpc_params_t searchParams; @@ -182,9 +182,9 @@ bool CReporterBugzilla::CheckUUIDInBugzilla(const std::string& pComponent, const AddPlusOneComment(ss.str()); AddPlusOneCC(ss.str()); - return true; + return ss.str(); } - return false; + return ""; } void CReporterBugzilla::CreateNewBugDescription(const map_crash_report_t& pCrashReport, std::string& pDescription) @@ -358,7 +358,7 @@ void CReporterBugzilla::AddAttachments(const std::string& pBugId, const map_cras } } -void CReporterBugzilla::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs) +std::string CReporterBugzilla::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs) { std::string package = pCrashReport.find(FILENAME_PACKAGE)->second[CD_CONTENT]; std::string component = package.substr(0, package.rfind("-", package.rfind("-")-1)); @@ -371,7 +371,7 @@ void CReporterBugzilla::Report(const map_crash_report_t& pCrashReport, const std { Login(); comm_layer_inner_status("Checking for duplicates..."); - if (!CheckUUIDInBugzilla(component, uuid)) + if ((bugId = CheckUUIDInBugzilla(component, uuid)) == "") { comm_layer_inner_status("Creating new bug..."); bugId = NewBug(pCrashReport); @@ -386,6 +386,7 @@ void CReporterBugzilla::Report(const map_crash_report_t& pCrashReport, const std throw CABRTException(EXCEP_PLUGIN, std::string("CReporterBugzilla::Report(): ") + e.what()); } DeleteXMLRPCClient(); + return "See bug in bugzilla: " + m_sBugzillaURL + ", bug id:" + bugId; } void CReporterBugzilla::SetSettings(const map_plugin_settings_t& pSettings) diff --git a/lib/Plugins/Bugzilla.h b/lib/Plugins/Bugzilla.h index 3849f17..575de1f 100644 --- a/lib/Plugins/Bugzilla.h +++ b/lib/Plugins/Bugzilla.h @@ -19,7 +19,7 @@ class CReporterBugzilla : public CReporter void Logout(); void AddPlusOneComment(const std::string& pBugId); void AddPlusOneCC(const std::string& pBugId); - bool CheckUUIDInBugzilla(const std::string& pComponent, const std::string& pUUID); + std::string CheckUUIDInBugzilla(const std::string& pComponent, const std::string& pUUID); std::string NewBug(const map_crash_report_t& pCrashReport); void AddAttachments(const std::string& pBugId, const map_crash_report_t& pCrashReport); void CreateNewBugDescription(const map_crash_report_t& pCrashReport, @@ -42,8 +42,8 @@ class CReporterBugzilla : public CReporter virtual ~CReporterBugzilla(); virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); - virtual void Report(const map_crash_report_t& pCrashReport, - const std::string& pArgs); + virtual std::string Report(const map_crash_report_t& pCrashReport, + const std::string& pArgs); }; #endif /* BUGZILLA_H_ */ diff --git a/lib/Plugins/KerneloopsReporter.cpp b/lib/Plugins/KerneloopsReporter.cpp index 1860fd8..647ff8f 100644 --- a/lib/Plugins/KerneloopsReporter.cpp +++ b/lib/Plugins/KerneloopsReporter.cpp @@ -28,6 +28,7 @@ #include "KerneloopsReporter.h" #include "CommLayerInner.h" #include <curl/curl.h> +#include "ABRTException.h" #define FILENAME_KERNELOOPS "kerneloops" @@ -92,7 +93,7 @@ CKerneloopsReporter::CKerneloopsReporter() : m_sSubmitURL("http://submit.kerneloops.org/submitoops.php") {} -void CKerneloopsReporter::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs) +std::string CKerneloopsReporter::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs) { int ret = -1; map_crash_report_t::const_iterator it; @@ -109,8 +110,11 @@ void CKerneloopsReporter::Report(const map_crash_report_t& pCrashReport, const s } if (ret) + { /* FIXME: be more informative */ - comm_layer_inner_status("Report has not been sent..."); + throw CABRTException(EXCEP_PLUGIN, std::string("CKerneloopsReporter::Report(): Report has not been sent...")); + } + return "Kernel oops report was uploaded to :" + m_sSubmitURL; } void CKerneloopsReporter::SetSettings(const map_plugin_settings_t& pSettings) diff --git a/lib/Plugins/KerneloopsReporter.h b/lib/Plugins/KerneloopsReporter.h index c8295a7..f1b427f 100644 --- a/lib/Plugins/KerneloopsReporter.h +++ b/lib/Plugins/KerneloopsReporter.h @@ -42,8 +42,8 @@ class CKerneloopsReporter : public CReporter virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); - virtual void Report(const map_crash_report_t& pCrashReport, - const std::string& pArgs); + virtual std::string Report(const map_crash_report_t& pCrashReport, + const std::string& pArgs); }; #endif diff --git a/lib/Plugins/Logger.cpp b/lib/Plugins/Logger.cpp index cb70227..fc96dca 100644 --- a/lib/Plugins/Logger.cpp +++ b/lib/Plugins/Logger.cpp @@ -24,6 +24,7 @@ #include <sstream> #include "DebugDump.h" #include "CommLayerInner.h" +#include "ABRTException.h" CLogger::CLogger() : m_sLogPath("/var/log/abrt-logger"), @@ -52,7 +53,7 @@ map_plugin_settings_t CLogger::GetSettings() return ret; } -void CLogger::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs) +std::string CLogger::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs) { comm_layer_inner_status("Creating a report..."); @@ -130,6 +131,11 @@ void CLogger::Report(const map_crash_report_t& pCrashReport, const std::string& fOut << std::endl; fOut.close(); } + else + { + throw CABRTException(EXCEP_PLUGIN, "CLogger::Report(): Cannot open file: " + m_sLogPath); + } + return "Report was stored into: " + m_sLogPath; } PLUGIN_INFO(REPORTER, diff --git a/lib/Plugins/Logger.h b/lib/Plugins/Logger.h index c838b3c..60c76e4 100644 --- a/lib/Plugins/Logger.h +++ b/lib/Plugins/Logger.h @@ -36,8 +36,8 @@ class CLogger : public CReporter virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); - virtual void Report(const map_crash_report_t& pCrashReport, - const std::string& pArgs); + virtual std::string Report(const map_crash_report_t& pCrashReport, + const std::string& pArgs); }; #endif /* LOGGER_H_ */ diff --git a/lib/Plugins/Mailx.cpp b/lib/Plugins/Mailx.cpp index 5ee6b65..6daf8eb 100644 --- a/lib/Plugins/Mailx.cpp +++ b/lib/Plugins/Mailx.cpp @@ -61,7 +61,7 @@ void CMailx::SendEmail(const std::string& pSubject, const std::string& pText) } -void CMailx::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs) +std::string CMailx::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs) { comm_layer_inner_status("Creating a report..."); @@ -135,6 +135,7 @@ void CMailx::Report(const map_crash_report_t& pCrashReport, const std::string& p { SendEmail(m_sSubject, emailBody.str()); } + return "Email was send to :" + m_sEmailTo; } void CMailx::SetSettings(const map_plugin_settings_t& pSettings) diff --git a/lib/Plugins/Mailx.h b/lib/Plugins/Mailx.h index b5d7836..ff8685d 100644 --- a/lib/Plugins/Mailx.h +++ b/lib/Plugins/Mailx.h @@ -44,8 +44,8 @@ class CMailx : public CReporter virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); - virtual void Report(const map_crash_report_t& pCrashReport, - const std::string& pArgs); + virtual std::string Report(const map_crash_report_t& pCrashReport, + const std::string& pArgs); }; #endif /* MAILX_H_ */ diff --git a/lib/Plugins/SQLite3.cpp b/lib/Plugins/SQLite3.cpp index 7720c40..49f4448 100644 --- a/lib/Plugins/SQLite3.cpp +++ b/lib/Plugins/SQLite3.cpp @@ -87,7 +87,9 @@ void CSQLite3::GetTable(const std::string& pCommand, vector_database_rows_t& pTa break; case 4: row.m_sReported = table[jj +(ncol*ii) + ncol]; break; - case 5: row.m_sTime = table[jj +(ncol*ii) + ncol]; + case 5: row.m_sMessage = table[jj +(ncol*ii) + ncol]; + break; + case 6: row.m_sTime = table[jj +(ncol*ii) + ncol]; break; default: break; @@ -155,6 +157,7 @@ void CSQLite3::CreateTable() DATABASE_COLUMN_DEBUG_DUMP_PATH" VARCHAR NOT NULL," DATABASE_COLUMN_COUNT" INT NOT NULL DEFAULT 1," DATABASE_COLUMN_REPORTED" INT NOT NULL DEFAULT 0," + DATABASE_COLUMN_MESSAGE" VARCHAR NOT NULL DEFAULT ''," DATABASE_COLUMN_TIME" VARCHAR NOT NULL DEFAULT 0," "PRIMARY KEY ("DATABASE_COLUMN_UUID","DATABASE_COLUMN_UID"));"); } @@ -211,7 +214,7 @@ void CSQLite3::Delete(const std::string& pUUID, const std::string& pUID) } } -void CSQLite3::SetReported(const std::string& pUUID, const std::string& pUID) +void CSQLite3::SetReported(const std::string& pUUID, const std::string& pUID, const std::string& pMessage) { if (Exist(pUUID, pUID)) { @@ -219,6 +222,11 @@ void CSQLite3::SetReported(const std::string& pUUID, const std::string& pUID) "SET "DATABASE_COLUMN_REPORTED" = 1 " "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' " "AND "DATABASE_COLUMN_UID" = '"+pUID+"';"); + Exec("UPDATE "ABRT_TABLE" " + "SET "DATABASE_COLUMN_MESSAGE" = '" + pMessage + "' " + "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' " + "AND "DATABASE_COLUMN_UID" = '"+pUID+"';"); + } else { diff --git a/lib/Plugins/SQLite3.h b/lib/Plugins/SQLite3.h index 987512e..0b8e22a 100644 --- a/lib/Plugins/SQLite3.h +++ b/lib/Plugins/SQLite3.h @@ -53,7 +53,7 @@ class CSQLite3 : public CDatabase const std::string& pTime); virtual void Delete(const std::string& pUUID, const std::string& pUID); - virtual void SetReported(const std::string& pUUID, const std::string& pUID); + virtual void SetReported(const std::string& pUUID, const std::string& pUID, const std::string& pMessage); virtual const vector_database_rows_t GetUIDData(const std::string& pUID); virtual const database_row_t GetUUIDData(const std::string& pUUID, const std::string& pUID); diff --git a/src/Daemon/CrashWatcher.cpp b/src/Daemon/CrashWatcher.cpp index 44ac253..5fb4a36 100644 --- a/src/Daemon/CrashWatcher.cpp +++ b/src/Daemon/CrashWatcher.cpp @@ -820,7 +820,7 @@ bool CCrashWatcher::Report(map_crash_report_t pReport, const std::string& pUID) //} try { - m_pMW->Report(pReport, pUID); + CMiddleWare::report_status_t rs = m_pMW->Report(pReport, pUID); } catch (CABRTException& e) { diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp index 8038055..5591203 100644 --- a/src/Daemon/MiddleWare.cpp +++ b/src/Daemon/MiddleWare.cpp @@ -247,9 +247,11 @@ void CMiddleWare::RunActionsAndReporters(const std::string& pDebugDumpDir) } } -void CMiddleWare::Report(const map_crash_report_t& pCrashReport, - const std::string& pUID) +CMiddleWare::report_status_t CMiddleWare::Report(const map_crash_report_t& pCrashReport, + const std::string& pUID) { + report_status_t ret; + std::string message; if (pCrashReport.find(CD_MWANALYZER) == pCrashReport.end() || pCrashReport.find(CD_MWUID) == pCrashReport.end() || pCrashReport.find(CD_MWUUID) == pCrashReport.end()) @@ -269,6 +271,8 @@ void CMiddleWare::Report(const map_crash_report_t& pCrashReport, { try { + std::string res; + if (m_pPluginManager->GetPluginType((*it_r).first) == REPORTER) { CReporter* reporter = m_pPluginManager->GetReporter((*it_r).first); @@ -290,26 +294,34 @@ void CMiddleWare::Report(const map_crash_report_t& pCrashReport, } } - reporter->Report(pCrashReport, (*it_r).second); + res = reporter->Report(pCrashReport, (*it_r).second); if (home != "") { reporter->SetSettings(oldSettings); } } + ret[(*it_r).first].push_back("1"); + ret[(*it_r).first].push_back(res); + message += res + "\n"; } catch (CABRTException& e) { + ret[(*it_r).first].push_back("0"); + ret[(*it_r).first].push_back(e.what()); comm_layer_inner_warning("CMiddleWare::Report(): " + e.what()); comm_layer_inner_status("Reporting via '"+(*it_r).first+"' was not successful: " + e.what()); } + } } CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); database->Connect(); - database->SetReported(UUID, UID); + database->SetReported(UUID, UID, message); database->DisConnect(); + + return ret; } void CMiddleWare::DeleteDebugDumpDir(const std::string& pDebugDumpDir) @@ -564,6 +576,7 @@ CMiddleWare::mw_result_t CMiddleWare::GetCrashInfo(const std::string& pUUID, add_crash_data_to_crash_info(pCrashInfo, CD_COUNT, row.m_sCount); add_crash_data_to_crash_info(pCrashInfo, CD_TIME, row.m_sTime); add_crash_data_to_crash_info(pCrashInfo, CD_REPORTED, row.m_sReported); + add_crash_data_to_crash_info(pCrashInfo, CD_MESSAGE, row.m_sMessage); add_crash_data_to_crash_info(pCrashInfo, CD_MWDDD, row.m_sDebugDumpDir); return MW_OK; diff --git a/src/Daemon/MiddleWare.h b/src/Daemon/MiddleWare.h index bb84543..a996a85 100644 --- a/src/Daemon/MiddleWare.h +++ b/src/Daemon/MiddleWare.h @@ -54,6 +54,12 @@ class CMiddleWare when trying open file in debug dump directory..*/ } mw_result_t; + typedef std::map<std::string, vector_strings_t> report_status_t; + typedef enum { + RS_CODE, + RS_MESSAGE + } report_status_items_t; + private: typedef set_strings_t set_blacklist_t; typedef set_strings_t set_enabled_plugins_t; @@ -259,9 +265,10 @@ class CMiddleWare * ...). * @param pCrashReport A crash report. * @param pUID An user uid + * @return A report status, which reporters ends sucessfuly with messages. */ - void Report(const map_crash_report_t& pCrashReport, - const std::string& pUID); + report_status_t Report(const map_crash_report_t& pCrashReport, + const std::string& pUID); /** * A method, which deletes particular debugdump directory. * @param pDebugDumpDir A debugdump directory. |