diff options
| -rw-r--r-- | lib/MiddleWare/Database.h | 4 | ||||
| -rw-r--r-- | lib/Plugins/SQLite3.cpp | 32 | ||||
| -rw-r--r-- | src/Daemon/Settings.cpp | 104 | ||||
| -rw-r--r-- | src/Daemon/Settings.h | 6 | ||||
| -rw-r--r-- | src/Daemon/abrt.conf | 2 |
5 files changed, 139 insertions, 9 deletions
diff --git a/lib/MiddleWare/Database.h b/lib/MiddleWare/Database.h index 6566f41..ce29f18 100644 --- a/lib/MiddleWare/Database.h +++ b/lib/MiddleWare/Database.h @@ -30,7 +30,7 @@ /** * Table * ===== - * UUID | UID| DebugDumpPath | Count | Reported + * UUID | UID| DebugDumpPath | Count | Reported | Time | Message * * primary key (UUID, UID) */ @@ -40,8 +40,8 @@ #define DATABASE_COLUMN_DEBUG_DUMP_PATH "DebugDumpPath" #define DATABASE_COLUMN_COUNT "Count" #define DATABASE_COLUMN_REPORTED "Reported" -#define DATABASE_COLUMN_MESSAGE "Message" #define DATABASE_COLUMN_TIME "Time" +#define DATABASE_COLUMN_MESSAGE "Message" /** * A struct contains one database row. diff --git a/lib/Plugins/SQLite3.cpp b/lib/Plugins/SQLite3.cpp index 7ddd43f..57b3317 100644 --- a/lib/Plugins/SQLite3.cpp +++ b/lib/Plugins/SQLite3.cpp @@ -33,7 +33,8 @@ #define ABRT_TABLE "abrt_v"ABRT_TABLE_VERSION_STR #define SQLITE3_MASTER_TABLE "sqlite_master" - +// afret a while, we can drom a support for update, so a table can stay in +// normal limits static const char* upate_sql_commands[][ABRT_TABLE_VERSION + 1] = { // v0 -> * { @@ -42,8 +43,10 @@ static const char* upate_sql_commands[][ABRT_TABLE_VERSION + 1] = { // v0 -> v1 "ALTER TABLE abrt ADD "DATABASE_COLUMN_MESSAGE" VARCHAR NOT NULL DEFAULT '';", // v0 -> v2 + "BEGIN TRANSACTION;" "ALTER TABLE abrt RENAME TO abrt_v2;" - "ALTER TABLE abrt_v2 ADD "DATABASE_COLUMN_MESSAGE" VARCHAR NOT NULL DEFAULT '';", + "ALTER TABLE abrt_v2 ADD "DATABASE_COLUMN_MESSAGE" VARCHAR NOT NULL DEFAULT '';" + "COMMIT;", }, //v1 -> * @@ -54,7 +57,27 @@ static const char* upate_sql_commands[][ABRT_TABLE_VERSION + 1] = { // v1 -> v1 ";", // v1 -> v2 - "ALTER TABLE abrt RENAME TO abrt_v2;", + "BEGIN TRANSACTION;" + "CREATE TABLE abrt_v2 (" + DATABASE_COLUMN_UUID" VARCHAR NOT NULL," + DATABASE_COLUMN_UID" VARCHAR NOT NULL," + DATABASE_COLUMN_DEBUG_DUMP_PATH" VARCHAR NOT NULL," + DATABASE_COLUMN_COUNT" INT NOT NULL DEFAULT 1," + DATABASE_COLUMN_REPORTED" INT NOT NULL DEFAULT 0," + DATABASE_COLUMN_TIME" VARCHAR NOT NULL DEFAULT 0," + DATABASE_COLUMN_MESSAGE" VARCHAR NOT NULL DEFAULT ''," + "PRIMARY KEY ("DATABASE_COLUMN_UUID","DATABASE_COLUMN_UID"));" + "INSERT INTO abrt_v2 " + "SELECT "DATABASE_COLUMN_UUID"," + DATABASE_COLUMN_UID"," + DATABASE_COLUMN_DEBUG_DUMP_PATH"," + DATABASE_COLUMN_COUNT"," + DATABASE_COLUMN_REPORTED"," + DATABASE_COLUMN_TIME"," + DATABASE_COLUMN_MESSAGE + " FROM abrt;" + "DROP TABLE abrt;" + "COMMIT;", }, }; @@ -206,7 +229,8 @@ bool CSQLite3::CheckTable() } return true; } - // TODO: after some time could be removed + // TODO: after some time could be removed, and if a table is that old, + // then simoply drop it and create new one else { // hack for version 0 and 1 diff --git a/src/Daemon/Settings.cpp b/src/Daemon/Settings.cpp index b7497ef..468213d 100644 --- a/src/Daemon/Settings.cpp +++ b/src/Daemon/Settings.cpp @@ -286,3 +286,107 @@ void LoadSettings(const char* pPath) ParseCron(); } +static void SaveSetString(const std::string& pKey, const set_strings_t& pSet, std::ofstream& pFOut, bool pNewLine = true) +{ + set_strings_t::const_iterator it_set; + if (pKey != "") + { + pFOut << pKey << " = "; + } + int ii = 0; + for (it_set = pSet.begin(); it_set != pSet.end(); it_set++) + { + pFOut << (*it_set); + ii++; + if (ii < pSet.size()) + { + pFOut << ","; + } + } + if (pNewLine) + { + pFOut << std::endl; + } +} + +static void SaveVectorPairStrings(const std::string& pKey, const vector_pair_string_string_t& pVector, std::ofstream& pFOut, bool pNewLine = true) +{ + int ii; + if (pKey != "") + { + pFOut << pKey << " = "; + } + for (ii = 0; ii < pVector.size(); ii++) + { + pFOut << pVector[ii].first; + if (pVector[ii].second != "") + { + pFOut << "(" << pVector[ii].second << ")"; + } + if ((ii + 1) < pVector.size()) + { + pFOut << ","; + } + } + if (pNewLine) + { + pFOut << std::endl; + } +} + +static void SaveMapVectorPairStrings(const map_vector_pair_strings_t& pMap, std::ofstream& pFOut, bool pNewLine = true) +{ + map_vector_pair_strings_t::const_iterator it; + for (it = pMap.begin(); it != pMap.end(); it++) + { + pFOut << it->first << " = "; + SaveVectorPairStrings("", it->second, pFOut, false); + pFOut << std::endl; + } + if (pNewLine) + { + pFOut << std::endl; + } + +} + +static void SaveSection(const std::string& pSection, std::ofstream& pFOut) +{ + pFOut << std::endl << "[" << pSection << "]" << std::endl << std::endl; +} + +static void SaveBool(const std::string& pKey, const bool pBool, std::ofstream& pFOut, bool pNewLine = true) +{ + if (pKey != "") + { + pFOut << pKey << " = "; + } + pFOut << (pBool ? "yes" : "no"); + if (pNewLine) + { + pFOut << std::endl; + } +} + +void SaveSettings(const char* pPath) +{ + std::ofstream fOut; + fOut.open(pPath); + + if (fOut.is_open()) + { + SaveSection(SECTION_COMMON, fOut); + SaveBool("OpenGPGCheck", g_settings_bOpenGPGCheck, fOut); + SaveSetString("OpenGPGPublicKeys", g_settings_setOpenGPGPublicKeys, fOut); + SaveSetString("BlackList", g_settings_mapSettingsBlackList, fOut); + SaveSetString("EnabledPlugins", g_settings_setEnabledPlugins, fOut); + fOut << "Database = " << g_settings_sDatabase << std::endl; + fOut << "MaxCrashReportsSize = " << g_settings_nMaxCrashReportsSize << std::endl; + SaveVectorPairStrings("ActionsAndReporters", g_settings_vectorActionsAndReporters, fOut); + SaveSection(SECTION_ANALYZER_ACTIONS_AND_REPORTERS, fOut); + SaveMapVectorPairStrings(g_settings_mapAnalyzerActionsAndReporters, fOut); + SaveSection(SECTION_CRON, fOut); + SaveMapVectorPairStrings(g_settings_mapCron, fOut); + fOut.close(); + } +} diff --git a/src/Daemon/Settings.h b/src/Daemon/Settings.h index c95786d..3d3154f 100644 --- a/src/Daemon/Settings.h +++ b/src/Daemon/Settings.h @@ -12,10 +12,12 @@ typedef std::map<std::string, std::string> map_settings_t; typedef std::set<std::string> set_strings_t; typedef std::pair<std::string, std::string> pair_string_string_t; typedef std::vector<pair_string_string_t> vector_pair_strings_t; -typedef std::map<std::string, vector_pair_strings_t> map_analyzer_actions_and_reporters_t; -typedef std::map<std::string, vector_pair_strings_t> map_cron_t; +typedef std::map<std::string, vector_pair_strings_t> map_vector_pair_strings_t; +typedef map_vector_pair_strings_t map_analyzer_actions_and_reporters_t; +typedef map_vector_pair_strings_t map_cron_t; void LoadSettings(const char* pPath); +void SaveSettings(const char* pPath); extern set_strings_t g_settings_setOpenGPGPublicKeys; extern set_strings_t g_settings_mapSettingsBlackList; diff --git a/src/Daemon/abrt.conf b/src/Daemon/abrt.conf index cc305e0..1fe6123 100644 --- a/src/Daemon/abrt.conf +++ b/src/Daemon/abrt.conf @@ -11,7 +11,7 @@ OpenGPGPublicKeys = /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora BlackList = # enabled plugins # there has to be exactly one database plugin -EnabledPlugins = SQLite3, CCpp, Logger, Kerneloops, KerneloopsScanner, KerneloopsReporter, Bugzilla, Python #, Mailx +EnabledPlugins = SQLite3, CCpp, Logger, Kerneloops, KerneloopsScanner, KerneloopsReporter, Bugzilla, Python # Database Database = SQLite3 # max size for crash storage [MiB] |
