diff options
author | Zdenek Prikryl <zdeny@dhcp-lab-218.englab.brq.redhat.com> | 2009-02-04 17:08:01 +0100 |
---|---|---|
committer | Zdenek Prikryl <zdeny@dhcp-lab-218.englab.brq.redhat.com> | 2009-02-04 17:08:01 +0100 |
commit | f77d6e3432d0a84cc66022c7d820b8d359a87411 (patch) | |
tree | c5261431e010483b7d415d57fea8b1b95e039bd6 /lib | |
parent | 0b0e5a3f4327916a93ce020a266cb39dc9924362 (diff) | |
download | abrt-f77d6e3432d0a84cc66022c7d820b8d359a87411.tar.gz abrt-f77d6e3432d0a84cc66022c7d820b8d359a87411.tar.xz abrt-f77d6e3432d0a84cc66022c7d820b8d359a87411.zip |
new interface
Diffstat (limited to 'lib')
-rw-r--r-- | lib/MiddleWare/MiddleWare.cpp | 168 | ||||
-rw-r--r-- | lib/MiddleWare/MiddleWare.h | 43 |
2 files changed, 155 insertions, 56 deletions
diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp index 85b88c9c..8d773e41 100644 --- a/lib/MiddleWare/MiddleWare.cpp +++ b/lib/MiddleWare/MiddleWare.cpp @@ -20,68 +20,160 @@ */ #include "MiddleWare.h" +#include "DebugDump.h" +#include "Settings.h" CMiddleWare::CMiddleWare(const std::string& pPlugisConfDir, - const std::string& pPlugisLibDir) : - m_PluginManager(NULL) + const std::string& pPlugisLibDir, + const std::string& pMiddleWareConfFile) : + m_pPluginManager(NULL) { - m_PluginManager = new CPluginManager(pPlugisConfDir, pPlugisLibDir); - if (m_PluginManager == NULL) - { - throw std::string("Not enought memory."); - } + m_pPluginManager = new CPluginManager(pPlugisConfDir, pPlugisLibDir); + if (m_pPluginManager == NULL) + { + throw std::string("Not enought memory."); + } + m_pPluginManager->LoadPlugins(); + LoadSettings(pMiddleWareConfFile); } CMiddleWare::~CMiddleWare() { - if (m_PluginManager != NULL) - { - delete m_PluginManager; - } + m_pPluginManager->UnLoadPlugins(); + delete m_pPluginManager; } -void CMiddleWare::LoadPlugins() + +void CMiddleWare::LoadSettings(const std::string& pPath) { - m_PluginManager->LoadPlugins(); + map_settings_t settings; + load_settings(pPath, settings); + if (settings.find("BlackList") != settings.end()) + { + m_sBlackList = settings["BlackList"]; + } + if (settings.find("Database") != settings.end()) + { + m_sDatabase = settings["Database"]; + } + else + { + throw std::string("No database plugin is loaded."); + } } -void CMiddleWare::LoadPlugin(const std::string& pName) +void CMiddleWare::RegisterPlugin(const std::string& pName) { - m_PluginManager->LoadPlugin(pName); + m_pPluginManager->RegisterPlugin(pName); } -void CMiddleWare::UnLoadPlugin(const std::string& pName) +void CMiddleWare::UnRegisterPlugin(const std::string& pName) +{ + m_pPluginManager->UnRegisterPlugin(pName); +} + + +std::string CMiddleWare::GetLocalUUIDLanguage(const std::string& pLanguage, const std::string& pDebugDumpPath) { - m_PluginManager->UnLoadPlugin(pName); + CLanguage* language = m_pPluginManager->GetLanguage(pLanguage); + return language->GetLocalUUID(pDebugDumpPath); } -std::string CMiddleWare::GetUUID(const std::string& pLanguage, void* pData) +std::string CMiddleWare::GetLocalUUIDApplication(const std::string& pApplication, const std::string& pDebugDumpPath) { - CLanguage* language = m_PluginManager->GetLanguage(pLanguage); - if (language == NULL) - { - return ""; - } - return language->GetUUID(pData); + CApplication* application = m_pPluginManager->GetApplication(pApplication); + return application->GetLocalUUID(pDebugDumpPath); } -std::string CMiddleWare::GetReport(const std::string& pLanguage, void* pData) + +void CMiddleWare::GetReport(const std::string& pUUID) { - CLanguage* language = m_PluginManager->GetLanguage(pLanguage); - if (language == NULL) - { - return ""; - } - return language->GetReport(pData); + CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); + database_row_t row; + database->Connect(); + row = database->GetUUIDData(pUUID); + database->DisConnect(); + if (row.m_sUUID != pUUID) + { + throw std::string("CMiddleWare::GetReport(): UUID '"+pUUID+"' is not in database."); + } + // TODO: finish this } -int CMiddleWare::Report(const std::string& pReporter, const std::string& pDebugDumpPath) +int CMiddleWare::Report(const std::string& pReport) { - CReporter* reporter = m_PluginManager->GetReporter(pReporter); - if (reporter == NULL) - { - return -1; - } - reporter->Report(pDebugDumpPath); + // TODO: write this } +void CMiddleWare::SaveDebugDumpToDatabase(const std::string& pDebugDumpPath) +{ + CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); + + std::string UUID; + std::string architecture; + std::string kernel; + std::string executable; + std::string package; + std::string UID; + std::string time; + std::string textData1; + + CDebugDump dd; + + dd.Open(pDebugDumpPath); + dd.LoadText(FILENAME_EXECUTABLE, executable); + + // TODO: blacklist + + 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."); + } + + dd.LoadText(FILENAME_ARCHITECTURE, architecture); + dd.LoadText(FILENAME_KERNEL, kernel); + dd.LoadText(FILENAME_PACKAGE, package); + dd.LoadText(FILENAME_UID, UID); + dd.LoadText(FILENAME_TIME, time); + + database->Connect(); + database->Insert(UUID, + pDebugDumpPath, + architecture, + kernel, + executable, + package, + UID, + time); + + if (dd.Exist(FILENAME_TEXTDATA1)) + { + dd.LoadText(FILENAME_TEXTDATA1, textData1); + database->InsertTextData1(UUID, textData1); + } + database->DisConnect(); +} + +vector_database_rows_t CMiddleWare::GetDebugDumps(const std::string& pUID) +{ + CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); + vector_database_rows_t rows; + database->Connect(); + rows = database->GetUIDData(pUID); + database->DisConnect(); + return rows; +} diff --git a/lib/MiddleWare/MiddleWare.h b/lib/MiddleWare/MiddleWare.h index 105266e2..26af9076 100644 --- a/lib/MiddleWare/MiddleWare.h +++ b/lib/MiddleWare/MiddleWare.h @@ -28,24 +28,31 @@ class CMiddleWare { - private: - - CPluginManager* m_PluginManager; - - public: - CMiddleWare(const std::string& pPlugisConfDir, - const std::string& pPlugisLibDir); - - ~CMiddleWare(); - - void LoadPlugins(); - void LoadPlugin(const std::string& pName); - void UnLoadPlugin(const std::string& pName); - - std::string GetUUID(const std::string& pLanguage, void* pData); - std::string GetReport(const std::string& pLanguage, void* pData); - int Report(const std::string& pReporter, const std::string& pDebugDumpPath); - //void SaveDebugDumpToDataBase(const std::string& pPath); + private: + + CPluginManager* m_pPluginManager; + std::string m_sBlackList; + std::string m_sDatabase; + + std::string GetLocalUUIDLanguage(const std::string& pLanguage, + const std::string& pDebugDumpDir); + std::string GetLocalUUIDApplication(const std::string& pApplication, + const std::string& pDebugDumpPath); + void LoadSettings(const std::string& pPath); + public: + CMiddleWare(const std::string& pPlugisConfDir, + const std::string& pPlugisLibDir, + const std::string& pMiddleWareConfFile); + + ~CMiddleWare(); + + void RegisterPlugin(const std::string& pName); + void UnRegisterPlugin(const std::string& pName); + + void GetReport(const std::string& pUUID); + int Report(const std::string& pReport); + void SaveDebugDumpToDatabase(const std::string& pDebugDumpPath); + vector_database_rows_t GetDebugDumps(const std::string& pUID); }; #endif /*MIDDLEWARE_H_*/ |