More reworking of DB handling

sqllogging depracted in favour of config.sql_enabled. Database loading is done through /hook/startup/proc/load_databases, with initialize_database_object() being a generalized proc to read any generic database config file. (TODO: config examples in relaiton to last remark.)
This commit is contained in:
skull132
2016-03-04 01:41:44 +02:00
parent 8383f1c03b
commit 202b216092
5 changed files with 54 additions and 65 deletions
+1 -41
View File
@@ -277,7 +277,7 @@ var/list/gamemode_cache = list()
config.log_access = 1
if ("sql_enabled")
config.sql_enabled = text2num(value)
config.sql_enabled = 1
if ("log_say")
config.log_say = 1
@@ -737,46 +737,6 @@ var/list/gamemode_cache = list()
else
log_misc("Unknown setting in configuration: '[name]'")
/datum/configuration/proc/loadsql(filename) // -- TLE
var/list/Lines = file2list(filename)
for(var/t in Lines)
if(!t) continue
t = trim(t)
if (length(t) == 0)
continue
else if (copytext(t, 1, 2) == "#")
continue
var/pos = findtext(t, " ")
var/name = null
var/value = null
if (pos)
name = lowertext(copytext(t, 1, pos))
value = copytext(t, pos + 1)
else
name = lowertext(t)
if (!name)
continue
switch (name)
if ("address")
sqladdress = value
if ("port")
sqlport = value
if ("database")
sqldb = value
if ("login")
sqllogin = value
if ("password")
sqlpass = value
if ("enable_stat_tracking")
sqllogging = 1
else
log_misc("Unknown setting in configuration: '[name]'")
/datum/configuration/proc/pick_mode(mode_name)
// I wish I didn't have to instance the game modes in order to look up
// their information, but it is the only way (at least that I know of).
+2 -2
View File
@@ -58,7 +58,7 @@ DBConnection/New(server, port = 3306, database, username, password_handler, curs
_db_con = _dm_db_new_con()
DBConnection/proc/Connect(dbi_handler = con_dbi, user_handler = con_user, password_handler = con_password, cursor_handler)
if (!sqllogging)
if (!config.sql_enabled)
return 0
if (!src)
return 0
@@ -71,7 +71,7 @@ DBConnection/proc/Disconnect()
return _dm_db_close(_db_con)
DBConnection/proc/IsConnected()
if(!sqllogging)
if(!config.sql_enabled)
return 0
var/success = _dm_db_is_connected(_db_con)
return success
+6 -6
View File
@@ -1,5 +1,5 @@
proc/sql_poll_population()
if(!sqllogging)
if(!config.sql_enabled)
return
var/admincount = admins.len
var/playercount = 0
@@ -18,15 +18,15 @@ proc/sql_poll_population()
proc/sql_report_round_start()
// TODO
if(!sqllogging)
if(!config.sql_enabled)
return
proc/sql_report_round_end()
// TODO
if(!sqllogging)
if(!config.sql_enabled)
return
proc/sql_report_death(var/mob/living/carbon/human/H)
if(!sqllogging)
if(!config.sql_enabled)
return
if(!H)
return
@@ -60,7 +60,7 @@ proc/sql_report_death(var/mob/living/carbon/human/H)
proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H)
if(!sqllogging)
if(!config.sql_enabled)
return
if(!H)
return
@@ -94,7 +94,7 @@ proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H)
proc/statistic_cycle()
if(!sqllogging)
if(!config.sql_enabled)
return
while(1)
sql_poll_population()
+1 -10
View File
@@ -187,22 +187,13 @@ var/datum/subsystem/alarm/alarm_manager = new() // Alarm Manager, the manager fo
var/list/awaydestinations = list() // Away missions. A list of landmarks that the warpgate can take you to.
// MySQL configuration
var/sqladdress = "localhost"
var/sqlport = "3306"
var/sqldb = "tgstation"
var/sqllogin = "root"
var/sqlpass = ""
var/sqllogging = 0 // Should we log deaths, population stats, etc.?
// For FTP requests. (i.e. downloading runtime logs.)
// However it'd be ok to use for accessing attack logs and such too, which are even laggier.
var/fileaccess_timer = 0
var/custom_event_msg = null
// Database connections. A connection is established on world creation.
// Database connections. A connection is established along with /hook/startup/proc/load_databases().
// Ideally, the connection dies when the server restarts (After feedback logging.).
// Feedback database. Constructor in /hook/startup/proc/connectDB()
var/DBConnection/dbcon
// Reference list for disposal sort junctions. Filled up by sorting junction's New()
+44 -6
View File
@@ -534,7 +534,6 @@ var/world_topic_spam_protect_time = world.timeofday
config = new /datum/configuration()
config.load("config/config.txt")
config.load("config/game_options.txt","game_options")
config.loadsql("config/dbconfig.txt")
/hook/startup/proc/loadMods()
world.load_mods()
@@ -642,12 +641,10 @@ var/world_topic_spam_protect_time = world.timeofday
src.status = s
#define FAILED_DB_CONNECTION_CUTOFF 5
var/failed_db_connections = 0
var/failed_old_db_connections = 0
/hook/startup/proc/connectDB()
//Construct the database object now that configs are loaded
dbcon = new(sqladdress, sqlport, sqldb, sqllogin, sqlpass)
/hook/startup/proc/load_databases()
//Construct the database object from an init file.
dbcon = initialize_database_object("config/dbconfig.txt")
if (!setup_database_connection(dbcon))
world.log << "Your server failed to establish a connection with the feedback database."
@@ -655,8 +652,48 @@ var/failed_old_db_connections = 0
world.log << "Feedback database connection established."
return 1
/proc/initialize_database_object(var/filename)
if (!filename)
return 0
var/list/data = list("address", "port", "database", "login", "password")
var/list/Lines = file2list(filename)
for (var/t in Lines)
if (!t)
continue
t = trim(t)
if (length(t) == 0)
continue
else if (copytext(t, 1, 2) == "#")
continue
var/pos = findtext(t, " ")
var/name = null
var/value = null
name = lowertext(copytext(t, 1, pos))
value = copytext(t, pos + 1)
if (!name)
continue
if (name in data)
data[name] = value
else
log_misc("Unknown setting while setting up database connection. Filename: '[filename]', value: '[value]'.")
//Validate the data before proceeding.
for (var/d in data)
if (!data[d] || data[d] == null)
return 0
return new/DBConnection(data["address"], data["port"], data["database"], data["login"], data["password"])
/proc/setup_database_connection(var/DBConnection/con)
if (!con)
error("No DBConnection object passed to setup_database_connection().")
return 0
if (con.failed_connections > FAILED_DB_CONNECTION_CUTOFF) //If it failed to establish a connection more than 5 times in a row, don't bother attempting to conenct anymore.
@@ -675,6 +712,7 @@ var/failed_old_db_connections = 0
//This proc ensures that the connection to the feedback database (global variable dbcon) is established
/proc/establish_db_connection(var/DBConnection/con)
if (!con)
error("No DBConnection object passed to establish_db_connection() proc.")
return 0
if (con.failed_connections > FAILED_DB_CONNECTION_CUTOFF)