Files
vgstation13/code/datums/feedback.dm
ShiftyRail 84b9831f1b fixes misc sql errors (#29274)
* fixes misc sql errors

* also that
2021-04-19 12:22:59 -05:00

238 lines
5.9 KiB
Plaintext

var/datum/blackbox/blackbox = new
/datum/blackbox
var/list/messages = list() //Stores messages of non-standard frequencies
var/list/messages_admin = list()
var/list/msg_common = list()
var/list/msg_science = list()
var/list/msg_command = list()
var/list/msg_medical = list()
var/list/msg_engineering = list()
var/list/msg_security = list()
var/list/msg_deathsquad = list()
var/list/msg_ert = list()
var/list/msg_syndicate = list()
var/list/msg_service = list()
var/list/msg_cargo = list()
var/list/msg_raider = list()
var/list/datum/feedback_variable/feedback = new()
/datum/blackbox/Destroy()
stack_trace("[type] was deleted, why would you do this?")
..()
/datum/blackbox/proc/find_feedback_datum(var/variable)
for(var/datum/feedback_variable/FV in feedback)
if(FV.get_variable() == variable)
return FV
var/datum/feedback_variable/FV = new(variable)
feedback += FV
return FV
/datum/blackbox/proc/round_end_data_gathering()
var/pda_msg_amt = 0
var/rc_msg_amt = 0
for(var/obj/machinery/message_server/MS in machines)
if(MS.pda_msgs.len > pda_msg_amt)
pda_msg_amt = MS.pda_msgs.len
if(MS.rc_msgs.len > rc_msg_amt)
rc_msg_amt = MS.rc_msgs.len
feedback_set_details("radio_usage","")
feedback_add_details("radio_usage","COM-[msg_common.len]")
feedback_add_details("radio_usage","SCI-[msg_science.len]")
feedback_add_details("radio_usage","HEA-[msg_command.len]")
feedback_add_details("radio_usage","MED-[msg_medical.len]")
feedback_add_details("radio_usage","ENG-[msg_engineering.len]")
feedback_add_details("radio_usage","SEC-[msg_security.len]")
feedback_add_details("radio_usage","DTH-[msg_deathsquad.len]")
feedback_add_details("radio_usage","ERT-[msg_ert.len]")
feedback_add_details("radio_usage","SYN-[msg_syndicate.len]")
feedback_add_details("radio_usage","SER-[msg_service.len]")
feedback_add_details("radio_usage","CAR-[msg_cargo.len]")
feedback_add_details("radio_usage","OTH-[messages.len]")
feedback_add_details("radio_usage","PDA-[pda_msg_amt]")
feedback_add_details("radio_usage","RC-[rc_msg_amt]")
feedback_add_details("radio_usage","RDR-[msg_raider]")
feedback_set_details("round_end","[time2text(world.realtime)]") //This one MUST be the last one that gets set.
//This proc is only to be called at round end.
/datum/blackbox/proc/save_all_data_to_sql()
if(!feedback)
return
//#warn Blackbox recording disabled. Please remove warning once this has been determined to be the problem.
//return
var/watch = start_watch()
log_startup_progress("Storing Black Box data...")
round_end_data_gathering() //round_end time logging and some other data processing
if(!SSdbcore.Connect())
return
var/round_id
var/nqueries = 0
var/datum/DBQuery/query = SSdbcore.NewQuery("SELECT MAX(round_id) AS round_id FROM erro_feedback")
if(!query.Execute())
log_sql("Error: [query.ErrorMsg()]")
qdel(query)
return
nqueries++
while(query.NextRow())
round_id = query.item[1]
qdel(query)
if(!isnum(round_id))
round_id = text2num(round_id)
round_id++
// MySQL and MariaDB support compound inserts and this insert is slow as fuck.
var/sql = "INSERT INTO erro_feedback VALUES "
var/ninserts=0
for(var/datum/feedback_variable/FV in feedback)
if(ninserts>0)
sql += ","
ninserts++
sql += "(null, Now(), [round_id], \"[FV.get_variable()]\", [FV.get_value()], \"[FV.get_details()]\")"
var/datum/DBQuery/query_insert = SSdbcore.NewQuery(sql)
if(!query_insert.Execute())
log_sql("Error: [query_insert.ErrorMsg()]")
qdel(query_insert)
return
nqueries++
qdel(query_insert)
log_startup_progress(" Wrote Black Box data with [nqueries] queries in [stop_watch(watch)]s.")
/datum/feedback_variable
var/variable
var/value
var/details
/datum/feedback_variable/New(var/param_variable,var/param_value = 0)
variable = param_variable
value = param_value
/datum/feedback_variable/proc/inc(var/num = 1)
if(isnum(value))
value += num
else
value = text2num(value)
if(isnum(value))
value += num
else
value = num
/datum/feedback_variable/proc/dec(var/num = 1)
if(isnum(value))
value -= num
else
value = text2num(value)
if(isnum(value))
value -= num
else
value = -num
/datum/feedback_variable/proc/set_value(var/num)
if(isnum(num))
value = num
/datum/feedback_variable/proc/get_value()
var/to_copy = value
to_copy = replacetext(to_copy, "\"", "") // Get rid of double quotes (") in entries.
return to_copy
/datum/feedback_variable/proc/get_variable()
return variable
/datum/feedback_variable/proc/set_details(var/text)
if(istext(text))
details = text
/datum/feedback_variable/proc/add_details(var/text)
if(istext(text))
if(!details)
details = text
else
details += " [text]"
/datum/feedback_variable/proc/get_details()
return details
/datum/feedback_variable/proc/get_parsed()
return list(variable,value,details)
/proc/feedback_set(var/variable,var/value)
if(!blackbox)
return
variable = sql_sanitize_text(variable)
var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable)
if(!FV)
return
FV.set_value(value)
/proc/feedback_inc(var/variable,var/value)
if(!blackbox)
return
variable = sql_sanitize_text(variable)
var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable)
if(!FV)
return
FV.inc(value)
/proc/feedback_dec(var/variable,var/value)
if(!blackbox)
return
variable = sql_sanitize_text(variable)
var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable)
if(!FV)
return
FV.dec(value)
/proc/feedback_set_details(var/variable,var/details)
if(!blackbox)
return
variable = sql_sanitize_text(variable)
details = sql_sanitize_text(details)
var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable)
if(!FV)
return
FV.set_details(details)
/proc/feedback_add_details(var/variable,var/details)
if(!blackbox)
return
variable = sql_sanitize_text(variable)
details = sql_sanitize_text(details)
var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable)
if(!FV)
return
FV.add_details(details)