summaryrefslogtreecommitdiffstats
path: root/lib/MiddleWare/MiddleWare.cpp
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@redhat.com>2009-02-12 12:34:25 +0100
committerJiri Moskovcak <jmoskovc@redhat.com>2009-02-12 12:34:25 +0100
commit53821dddf0b6ee66dc5f0684b17c541c157656ec (patch)
tree00dcb130b6fd32ef137cd7b139bbebfeb0c060b4 /lib/MiddleWare/MiddleWare.cpp
parent356da89a4e2e6e50ceade12f286d104fe1c17eae (diff)
parentc93222d1407ede085833d3a91bfeda5f0f910eb4 (diff)
downloadabrt-53821dddf0b6ee66dc5f0684b17c541c157656ec.tar.gz
abrt-53821dddf0b6ee66dc5f0684b17c541c157656ec.tar.xz
abrt-53821dddf0b6ee66dc5f0684b17c541c157656ec.zip
Merge branch 'master' of git://git.fedorahosted.org/git/crash-catcher
Diffstat (limited to 'lib/MiddleWare/MiddleWare.cpp')
-rw-r--r--lib/MiddleWare/MiddleWare.cpp155
1 files changed, 117 insertions, 38 deletions
diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp
index d52fbda..5a5e39d 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,44 @@ 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::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);
+ dd.LoadText(FILENAME_CMDLINE, pReport.m_sCmdLine);
+
+ 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)
@@ -105,20 +124,61 @@ 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::GetReport(const std::string& pUUID, const std::string& pUID)
+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);
+}
+
+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;
@@ -129,12 +189,30 @@ 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
+ pCrashReport.m_sUUID = pUUID;
+ pCrashReport.m_sUID = pUID;
+ CreateReport(row.m_sDebugDumpPath, pCrashReport);
}
-int CMiddleWare::Report(const std::string& pReport)
+void CMiddleWare::Report(const crash_report_t& pCrashReport)
{
- // TODO: write this
+ 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);
+ }
+ }
+
+ 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)
@@ -145,11 +223,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 +238,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 +260,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 +279,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;
}