mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Implement rust-g library
This commit is contained in:
@@ -22,6 +22,7 @@ addons:
|
|||||||
- libc6-i386
|
- libc6-i386
|
||||||
- libgcc1:i386
|
- libgcc1:i386
|
||||||
- libstdc++6:i386
|
- libstdc++6:i386
|
||||||
|
- libssl-dev:i386
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- chmod +x ./install-byond.sh
|
- chmod +x ./install-byond.sh
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
2 for preloading absolutely everything;
|
2 for preloading absolutely everything;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define RUST_G "rust_g" // If uncommented, we will use the rust-g (https://github.com/tgstation/rust-g) native library for fast
|
||||||
|
// logging. This requires you to have the rust_g.dll or rust_g (renamed from librust_g.so) installed in the root folder or BYOND/bin
|
||||||
|
// The define's value should be the name of library file.
|
||||||
|
|
||||||
// ZAS Compile Options
|
// ZAS Compile Options
|
||||||
//#define ZASDBG // Uncomment to turn on super detailed ZAS debugging that probably won't even compile.
|
//#define ZASDBG // Uncomment to turn on super detailed ZAS debugging that probably won't even compile.
|
||||||
#define MULTIZAS // Uncomment to turn on Multi-Z ZAS Support!
|
#define MULTIZAS // Uncomment to turn on Multi-Z ZAS Support!
|
||||||
|
|||||||
@@ -1,38 +1,51 @@
|
|||||||
//print an error message to world.log
|
//print an error message to world.log
|
||||||
|
|
||||||
|
// Fall back to using old format if we are not using rust-g
|
||||||
|
#ifdef RUST_G
|
||||||
|
#define WRITE_LOG(log, text) call(RUST_G, "log_write")(log, text)
|
||||||
|
#else
|
||||||
|
#define WRITE_LOG(log, text) log << "\[[time_stamp()]][text]"
|
||||||
|
#endif
|
||||||
|
|
||||||
// On Linux/Unix systems the line endings are LF, on windows it's CRLF, admins that don't use notepad++
|
/* For logging round startup. */
|
||||||
// will get logs that are one big line if the system is Linux and they are using notepad. This solves it by adding CR to every line ending
|
/proc/start_log(log)
|
||||||
// in the logs. ascii character 13 = CR
|
#ifndef RUST_G
|
||||||
|
log = file(log)
|
||||||
/var/global/log_end= world.system_type == UNIX ? ascii2text(13) : ""
|
#endif
|
||||||
|
WRITE_LOG(log, "START: Starting up [log_path].")
|
||||||
|
return log
|
||||||
|
|
||||||
|
/* Close open log handles. This should be called as late as possible, and no logging should hapen after. */
|
||||||
|
/proc/shutdown_logging()
|
||||||
|
#ifdef RUST_G
|
||||||
|
call(RUST_G, "log_close_all")()
|
||||||
|
#endif
|
||||||
|
|
||||||
/proc/error(msg)
|
/proc/error(msg)
|
||||||
world.log << "## ERROR: [msg][log_end]"
|
world.log << "## ERROR: [msg]"
|
||||||
|
|
||||||
#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].")
|
#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].")
|
||||||
//print a warning message to world.log
|
//print a warning message to world.log
|
||||||
/proc/warning(msg)
|
/proc/warning(msg)
|
||||||
world.log << "## WARNING: [msg][log_end]"
|
world.log << "## WARNING: [msg]"
|
||||||
|
|
||||||
//print a testing-mode debug message to world.log
|
//print a testing-mode debug message to world.log
|
||||||
/proc/testing(msg)
|
/proc/testing(msg)
|
||||||
world.log << "## TESTING: [msg][log_end]"
|
world.log << "## TESTING: [msg]"
|
||||||
|
|
||||||
/proc/log_admin(text)
|
/proc/log_admin(text)
|
||||||
admin_log.Add(text)
|
admin_log.Add(text)
|
||||||
if (config.log_admin)
|
if (config.log_admin)
|
||||||
diary << "\[[time_stamp()]]ADMIN: [text][log_end]"
|
WRITE_LOG(diary, "ADMIN: [text]")
|
||||||
|
|
||||||
/proc/log_adminpm(text, client/source, client/dest)
|
/proc/log_adminpm(text, client/source, client/dest)
|
||||||
admin_log.Add(text)
|
admin_log.Add(text)
|
||||||
if (config.log_admin)
|
if (config.log_admin)
|
||||||
diary << "\[[time_stamp()]]ADMINPM: [key_name(source)]->[key_name(dest)]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "ADMINPM: [key_name(source)]->[key_name(dest)]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_debug(text)
|
/proc/log_debug(text)
|
||||||
if (config.log_debug)
|
if (config.log_debug)
|
||||||
debug_log << "\[[time_stamp()]]DEBUG: [text][log_end]"
|
WRITE_LOG(debug_log, "DEBUG: [text]")
|
||||||
|
|
||||||
for(var/client/C in admins)
|
for(var/client/C in admins)
|
||||||
if(C.is_preference_enabled(/datum/client_preference/debug/show_debug_logs))
|
if(C.is_preference_enabled(/datum/client_preference/debug/show_debug_logs))
|
||||||
@@ -40,89 +53,97 @@
|
|||||||
|
|
||||||
/proc/log_game(text)
|
/proc/log_game(text)
|
||||||
if (config.log_game)
|
if (config.log_game)
|
||||||
diary << "\[[time_stamp()]]GAME: [text][log_end]"
|
WRITE_LOG(diary, "GAME: [text]")
|
||||||
|
|
||||||
/proc/log_vote(text)
|
/proc/log_vote(text)
|
||||||
if (config.log_vote)
|
if (config.log_vote)
|
||||||
diary << "\[[time_stamp()]]VOTE: [text][log_end]"
|
WRITE_LOG(diary, "VOTE: [text]")
|
||||||
|
|
||||||
/proc/log_access_in(client/new_client)
|
/proc/log_access_in(client/new_client)
|
||||||
if (config.log_access)
|
if (config.log_access)
|
||||||
var/message = "[key_name(new_client)] - IP:[new_client.address] - CID:[new_client.computer_id] - BYOND v[new_client.byond_version]"
|
var/message = "[key_name(new_client)] - IP:[new_client.address] - CID:[new_client.computer_id] - BYOND v[new_client.byond_version]"
|
||||||
diary << "\[[time_stamp()]]ACCESS IN: [message][log_end]"
|
WRITE_LOG(diary, "ACCESS IN: [message]")
|
||||||
|
|
||||||
/proc/log_access_out(mob/last_mob)
|
/proc/log_access_out(mob/last_mob)
|
||||||
if (config.log_access)
|
if (config.log_access)
|
||||||
var/message = "[key_name(last_mob)] - IP:[last_mob.lastKnownIP] - CID:Logged Out - BYOND Logged Out"
|
var/message = "[key_name(last_mob)] - IP:[last_mob.lastKnownIP] - CID:Logged Out - BYOND Logged Out"
|
||||||
diary << "\[[time_stamp()]]ACCESS OUT: [message][log_end]"
|
WRITE_LOG(diary, "ACCESS OUT: [message]")
|
||||||
|
|
||||||
/proc/log_say(text, mob/speaker)
|
/proc/log_say(text, mob/speaker)
|
||||||
if (config.log_say)
|
if (config.log_say)
|
||||||
diary << "\[[time_stamp()]]SAY: [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "SAY: [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_ooc(text, client/user)
|
/proc/log_ooc(text, client/user)
|
||||||
if (config.log_ooc)
|
if (config.log_ooc)
|
||||||
diary << "\[[time_stamp()]]OOC: [user.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "OOC: [user.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_aooc(text, client/user)
|
/proc/log_aooc(text, client/user)
|
||||||
if (config.log_ooc)
|
if (config.log_ooc)
|
||||||
diary << "\[[time_stamp()]]AOOC: [user.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "AOOC: [user.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_looc(text, client/user)
|
/proc/log_looc(text, client/user)
|
||||||
if (config.log_ooc)
|
if (config.log_ooc)
|
||||||
diary << "\[[time_stamp()]]LOOC: [user.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "LOOC: [user.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_whisper(text, mob/speaker)
|
/proc/log_whisper(text, mob/speaker)
|
||||||
if (config.log_whisper)
|
if (config.log_whisper)
|
||||||
diary << "\[[time_stamp()]]WHISPER: [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "WHISPER: [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_emote(text, mob/speaker)
|
/proc/log_emote(text, mob/speaker)
|
||||||
if (config.log_emote)
|
if (config.log_emote)
|
||||||
diary << "\[[time_stamp()]]EMOTE: [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "EMOTE: [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_attack(attacker, defender, message)
|
/proc/log_attack(attacker, defender, message)
|
||||||
if (config.log_attack)
|
if (config.log_attack)
|
||||||
diary << "\[[time_stamp()]]ATTACK: [attacker] against [defender]: [message][log_end]"
|
WRITE_LOG(diary, "ATTACK: [attacker] against [defender]: [message]")
|
||||||
|
|
||||||
/proc/log_adminsay(text, mob/speaker)
|
/proc/log_adminsay(text, mob/speaker)
|
||||||
if (config.log_adminchat)
|
if (config.log_adminchat)
|
||||||
diary << "\[[time_stamp()]]ADMINSAY: [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "ADMINSAY: [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_modsay(text, mob/speaker)
|
/proc/log_modsay(text, mob/speaker)
|
||||||
if (config.log_adminchat)
|
if (config.log_adminchat)
|
||||||
diary << "\[[time_stamp()]]MODSAY: [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "MODSAY: [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_eventsay(text, mob/speaker)
|
/proc/log_eventsay(text, mob/speaker)
|
||||||
if (config.log_adminchat)
|
if (config.log_adminchat)
|
||||||
diary << "\[[time_stamp()]]EVENTSAY: [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "EVENTSAY: [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_ghostsay(text, mob/speaker)
|
/proc/log_ghostsay(text, mob/speaker)
|
||||||
if (config.log_say)
|
if (config.log_say)
|
||||||
diary << "\[[time_stamp()]]DEADCHAT: [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "DEADCHAT: [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_ghostemote(text, mob/speaker)
|
/proc/log_ghostemote(text, mob/speaker)
|
||||||
if (config.log_emote)
|
if (config.log_emote)
|
||||||
diary << "\[[time_stamp()]]DEADEMOTE: [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "DEADEMOTE: [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_adminwarn(text)
|
/proc/log_adminwarn(text)
|
||||||
if (config.log_adminwarn)
|
if (config.log_adminwarn)
|
||||||
diary << "\[[time_stamp()]]ADMINWARN: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "ADMINWARN: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_pda(text, mob/speaker)
|
/proc/log_pda(text, mob/speaker)
|
||||||
if (config.log_pda)
|
if (config.log_pda)
|
||||||
diary << "\[[time_stamp()]]PDA: [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "PDA: [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_to_dd(text)
|
/proc/log_to_dd(text)
|
||||||
world.log << text //this comes before the config check because it can't possibly runtime
|
world.log << text //this comes before the config check because it can't possibly runtime
|
||||||
if(config.log_world_output)
|
if(config.log_world_output)
|
||||||
diary << "\[[time_stamp()]]DD_OUTPUT: [text][log_end]"
|
WRITE_LOG(diary, "DD_OUTPUT: [text]")
|
||||||
|
|
||||||
/proc/log_error(text)
|
/proc/log_error(text)
|
||||||
world.log << text
|
world.log << text
|
||||||
error_log << "\[[time_stamp()]]RUNTIME: [text][log_end]"
|
WRITE_LOG(error_log, "RUNTIME: [text]")
|
||||||
|
|
||||||
/proc/log_misc(text)
|
/proc/log_misc(text)
|
||||||
diary << "\[[time_stamp()]]MISC: [text][log_end]"
|
WRITE_LOG(diary, "MISC: [text]")
|
||||||
|
|
||||||
|
/proc/log_topic(text)
|
||||||
|
if(Debug2)
|
||||||
|
WRITE_LOG(diary, "TOPIC: [text]")
|
||||||
|
|
||||||
|
/proc/log_href(text)
|
||||||
|
// Configs are checked by caller
|
||||||
|
WRITE_LOG(href_logfile, "HREF: [text]")
|
||||||
|
|
||||||
/proc/log_unit_test(text)
|
/proc/log_unit_test(text)
|
||||||
world.log << "## UNIT_TEST: [text]"
|
world.log << "## UNIT_TEST: [text]"
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
/proc/log_nsay(text, inside, mob/speaker)
|
/proc/log_nsay(text, inside, mob/speaker)
|
||||||
if (config.log_say)
|
if (config.log_say)
|
||||||
diary << "\[[time_stamp()]]NSAY (NIF:[inside]): [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "NSAY (NIF:[inside]): [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_nme(text, inside, mob/speaker)
|
/proc/log_nme(text, inside, mob/speaker)
|
||||||
if (config.log_emote)
|
if (config.log_emote)
|
||||||
diary << "\[[time_stamp()]]NME (NIF:[inside]): [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "NME (NIF:[inside]): [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|
||||||
/proc/log_subtle(text, mob/speaker)
|
/proc/log_subtle(text, mob/speaker)
|
||||||
if (config.log_emote)
|
if (config.log_emote)
|
||||||
diary << "\[[time_stamp()]]SUBTLE: [speaker.simple_info_line()]: [html_decode(text)][log_end]"
|
WRITE_LOG(diary, "SUBTLE: [speaker.simple_info_line()]: [html_decode(text)]")
|
||||||
|
|||||||
@@ -64,7 +64,7 @@
|
|||||||
|
|
||||||
//Logs all hrefs
|
//Logs all hrefs
|
||||||
if(config && config.log_hrefs && href_logfile)
|
if(config && config.log_hrefs && href_logfile)
|
||||||
href_logfile << "<small>[time2text(world.timeofday,"hh:mm")] [src] (usr:[usr])</small> || [hsrc ? "[hsrc] " : ""][href]<br>"
|
href_logfile << "[src] (usr:[usr])</small> || [hsrc ? "[hsrc] " : ""][href]"
|
||||||
|
|
||||||
switch(href_list["_src_"])
|
switch(href_list["_src_"])
|
||||||
if("holder") hsrc = holder
|
if("holder") hsrc = holder
|
||||||
|
|||||||
@@ -43,11 +43,11 @@ var/global/datum/global_init/init = new ()
|
|||||||
world.log << "Map Loading Complete"
|
world.log << "Map Loading Complete"
|
||||||
//logs
|
//logs
|
||||||
log_path += time2text(world.realtime, "YYYY/MM-Month/DD-Day/round-hh-mm-ss")
|
log_path += time2text(world.realtime, "YYYY/MM-Month/DD-Day/round-hh-mm-ss")
|
||||||
diary = file("[log_path].log")
|
diary = start_log("[log_path].log")
|
||||||
href_logfile = file("[log_path]-hrefs.htm")
|
href_logfile = start_log("[log_path]-hrefs.htm")
|
||||||
error_log = file("[log_path]-error.log")
|
error_log = start_log("[log_path]-error.log")
|
||||||
debug_log = file("[log_path]-debug.log")
|
debug_log = start_log("[log_path]-debug.log")
|
||||||
debug_log << "[log_end]\n[log_end]\nStarting up. [time_stamp()][log_end]\n---------------------[log_end]"
|
|
||||||
changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently
|
changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently
|
||||||
|
|
||||||
if(byond_version < RECOMMENDED_VERSION)
|
if(byond_version < RECOMMENDED_VERSION)
|
||||||
@@ -59,8 +59,9 @@ var/global/datum/global_init/init = new ()
|
|||||||
// dumb and hardcoded but I don't care~
|
// dumb and hardcoded but I don't care~
|
||||||
config.server_name += " #[(world.port % 1000) / 100]"
|
config.server_name += " #[(world.port % 1000) / 100]"
|
||||||
|
|
||||||
if(config && config.log_runtime)
|
// TODO - Figure out what this is. Can you assign to world.log?
|
||||||
log = file("data/logs/runtime/[time2text(world.realtime,"YYYY-MM-DD-(hh-mm-ss)")]-runtime.log")
|
// if(config && config.log_runtime)
|
||||||
|
// log = file("data/logs/runtime/[time2text(world.realtime,"YYYY-MM-DD-(hh-mm-ss)")]-runtime.log")
|
||||||
|
|
||||||
callHook("startup")
|
callHook("startup")
|
||||||
//Emergency Fix
|
//Emergency Fix
|
||||||
@@ -147,7 +148,7 @@ var/world_topic_spam_protect_ip = "0.0.0.0"
|
|||||||
var/world_topic_spam_protect_time = world.timeofday
|
var/world_topic_spam_protect_time = world.timeofday
|
||||||
|
|
||||||
/world/Topic(T, addr, master, key)
|
/world/Topic(T, addr, master, key)
|
||||||
debug_log << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key][log_end]"
|
log_topic("\"[T]\", from:[addr], master:[master], key:[key]")
|
||||||
|
|
||||||
if (T == "ping")
|
if (T == "ping")
|
||||||
var/x = 1
|
var/x = 1
|
||||||
@@ -450,6 +451,7 @@ var/world_topic_spam_protect_time = world.timeofday
|
|||||||
if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite
|
if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite
|
||||||
C << link("byond://[config.server]")
|
C << link("byond://[config.server]")
|
||||||
|
|
||||||
|
shutdown_logging() // Past this point, no logging procs can be used, at risk of data loss.
|
||||||
..(reason)
|
..(reason)
|
||||||
|
|
||||||
/hook/startup/proc/loadMode()
|
/hook/startup/proc/loadMode()
|
||||||
|
|||||||
BIN
rust_g.dll
Normal file
BIN
rust_g.dll
Normal file
Binary file not shown.
Reference in New Issue
Block a user