diff options
Diffstat (limited to 'lib/MiddleWare/MiddleWare.cpp')
| -rw-r--r-- | lib/MiddleWare/MiddleWare.cpp | 103 |
1 files changed, 49 insertions, 54 deletions
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); |
