summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorZdenek Prikryl <zdeny@dhcp-lab-218.englab.brq.redhat.com>2009-02-04 17:08:01 +0100
committerZdenek Prikryl <zdeny@dhcp-lab-218.englab.brq.redhat.com>2009-02-04 17:08:01 +0100
commitf77d6e3432d0a84cc66022c7d820b8d359a87411 (patch)
treec5261431e010483b7d415d57fea8b1b95e039bd6 /lib
parent0b0e5a3f4327916a93ce020a266cb39dc9924362 (diff)
downloadabrt-f77d6e3432d0a84cc66022c7d820b8d359a87411.tar.gz
abrt-f77d6e3432d0a84cc66022c7d820b8d359a87411.tar.xz
abrt-f77d6e3432d0a84cc66022c7d820b8d359a87411.zip
new interface
Diffstat (limited to 'lib')
-rw-r--r--lib/MiddleWare/MiddleWare.cpp168
-rw-r--r--lib/MiddleWare/MiddleWare.h43
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_*/