def db_backup(timestamp): import shutil import M_RC shutil.copy2(M_CONF.NomeDB, M_CONF.NomeArchivi + "/" + timestamp + "_" + M_CONF.NomeDB) #Copio il DB in Archivi DB.connetti() DB.esegui("""VACUUM""") #DOPO che l'ho backuppato, lo comprimo. DB.salva() DB.disconnetti() M_RC.scrivilog("DB backup done.", M_CONF.activity)
def crashlog(t, v, tra): """gestisce i crash del programma, scrivendo l'errore nel file di log""" import traceback evento = "\r\n REDCAP CRASH:: " for stringa in traceback.format_tb(tra): evento += str(stringa) for stringa in traceback.format_exception_only(sys.last_type, sys.last_value): evento += str(stringa) M_RC.scrivilog(evento, M_CONF.crashlog) sys.exit()
def db_clean_guid(): """pulizia periodica DB dai record non piu utilizzati""" import M_RC DB.connetti() res = DB.esegui(DB.query["cleanoldplayers"], (time.time(), float(M_CONF.maxAbsence*86400), time.time())).fetchall() for guid in res: for tab in tabs: DB.esegui(DB.query["delplayer"] % (tab, guid[0])) #Elimino guid che non frequentano piu' il gameserver da M_CONF.maxAbsence giorni. DB.salva() DB.disconnetti() M_RC.scrivilog("DB old record cleaned.", M_CONF.activity)
def log_backup(timestamp): """Esegue il backup del file di log.""" import os import re import M_RC logfile = open(M_CONF.NomeFileLog, "r") contenuto = logfile.read() #leggo il log logfile.close() contenuto=re.sub(r"Item: .* ","",contenuto) #elimino le voci Item logfile = open(M_CONF.NomeArchivi + "/" + timestamp + ".log", "w") logfile.write(contenuto) #creo il file di log in Archivi logfile.close() M_RC.scrivilog("UrT Log backup done.", M_CONF.activity) os.remove(M_CONF.NomeFileLog) #cancello il vecchio file
def cr_riavvia(): """restarto RedCap ed eventualmente il server""" import os import sys import M_RC if M_CONF.gameserver_autorestart > 0: M_RC.scrivilog(" Redcap and UrT Server restarted.", M_CONF.activity) os.system("./S_full_restart.sh") time.sleep(5) #aspetto che il gameserver riparta sys.exit() else: M_RC.scrivilog("Redcap restarted.", M_CONF.activity) M_RC.SCK.cmd("exec " + M_CONF.SV_Baseconf) #ricarico il config time.sleep(5) #aspetto che il gameserver riparta sys.exit()
def db_clean_IP(): """Elimino gli alias in eccedenza""" import M_RC j2 = " " DB.connetti() res = DB.esegui(DB.query["cleanIP"]).fetchall() for player in res: newIP = "" IPs = player[1].split(j2) IPs.reverse() IPs = IPs[0:15] #Limito a 15 IP memorizzati for IP in IPs: newIP += (IP + j2) newIP = newIP.rstrip() DB.esegui(DB.query["cleanedIP"],(newIP, player[0])) DB.salva() DB.disconnetti() M_RC.scrivilog("Old IP cleaned.", M_CONF.activity)
def init_jobs(): """attivita' da fare all'avvio di redcap""" M_RC.say("^2Starting RedCap...", 2) lista = M_RC.ini_clientlist() #recupero i client gia presenti sul server if lista: M_RC.ini_clientadd(lista) #li aggiungo M_RC.ini_recordlist() #recupero i record dal server M_RC.ini_spamlist() #carico la spamlist if M_CONF.Website_ON: #Se esiste un website di appoggio aggiorno la classifica, la trasferisco al server remoto e salvo il risultato dell'operazione nel log M_RC.say("^4Webrank updating...", 2) res = M_AUX.web_rank() if res == False: M_RC.scrivilog("WEBRANK TRANSFER FAILED", M_CONF.crashlog) M_RC.say("^4Q3ut4 parsing...", 2) q3ut4_parse() M_RC.say("^2Main routine started. Waiting for players identification...", 2) M_RC.ini_addcfg(M_CONF.SV_Basewar) #scrivo la basewar cfg in q3ut4 redcap_main() #LANCIO LA PROCEDURA PRINCIPALE
def db_clean_alias(): """Elimino gli alias in eccedenza""" import M_RC j2 = " " DB.connetti() res = DB.esegui(DB.query["cleanalias"]).fetchall() for player in res: newalias = "" aliases = player[1].split(j2) aliases.sort() aliases.reverse() aliases = aliases[0:M_CONF.maxAlias] for alias in aliases: newalias += (alias + j2) newalias = newalias.rstrip() DB.esegui(DB.query["cleanedalias"],(newalias, player[0])) DB.salva() DB.disconnetti() M_RC.scrivilog("DB alias cleaned.", M_CONF.activity)
def web_FTPtransfer(filefrom, fileto): """trasferisce un file sul webserver ausiliario""" esito = True import M_RC from ftplib import FTP htmlfile = open(filefrom, "rb") try: connessione = FTP(M_CONF.w_url) connessione.login(M_CONF.w_login, M_CONF.w_password) # connect to host, default port connessione.cwd(M_CONF.w_ftp_directory) connessione.storbinary('STOR ' + fileto, htmlfile) connessione.quit() except: esito = False finally: htmlfile.close() if esito: M_RC.scrivilog("File %s transfer OK." %filefrom, M_CONF.activity) else: M_RC.scrivilog("File %s transfer not achieved." %filefrom, M_CONF.activity)
def log_chat_backup(timestamp): """crea un file di chat""" import re import M_RC logfile = open(M_CONF.NomeFileLog, "r") dialoghi = logfile.read() #Estraggo i dialoghi logfile.close() dialoghi = dialoghi.replace("<", "<") dialoghi = dialoghi.replace(">", ">") says=re.findall(r"say: (?P<colore>\d+) (?P<nick>.*): (?P<frase>.*)", dialoghi) #creo il file dei dialoghi html = "<table class='dialoghi'>" #preparo la tabella e inserisco i dialoghi for say in says: if say[2].find("!sk") != -1 or say[2].find("!z") != -1 or say[2].find("!al") != -1: continue #elimino comandi inutili html +="<tr><td>" html += "<span style='color:" + colori[say[0]] + "'>" +say[1] + "</span></td><td style='color:#bbbbbb'>" + say[2] html +="</td></tr>\n" html +="</table>" logfile = open(M_CONF.NomeArchivi + "/" + timestamp + "_saylog.log", "w") #salvo il tutto in un file logfile.write(html) logfile.close() M_RC.scrivilog("UrT Chatlog backup done.", M_CONF.activity)
def __cmd_error(self,cmd): """scrive il comando non inviato nel file di log di RedCap""" import M_RC if M_RC.GSRV.Attivo: M_RC.scrivilog("NOT SENT: %s"%cmd, M_CONF.socketlog)