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 +++++++++++++++++++++++++++++------------- 1 file changed, 91 insertions(+), 40 deletions(-) (limited to 'lib/MiddleWare/MiddleWare.cpp') 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; } -- cgit