summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/MiddleWare/Database.h4
-rw-r--r--lib/Plugins/SQLite3.cpp32
-rw-r--r--src/Daemon/Settings.cpp104
-rw-r--r--src/Daemon/Settings.h6
-rw-r--r--src/Daemon/abrt.conf2
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]