push initial

This commit is contained in:
Zatalyz 2021-11-10 22:29:54 +01:00
parent 28274e328a
commit 8290d2e459
5 changed files with 406 additions and 2 deletions

28
1analyse_new_logryzom.sh Executable file
View file

@ -0,0 +1,28 @@
#!/bin/bash
# Dernière révision : 2021/10/31
# Auteur : Zatalyz. Merci à YannK, Tycho, Pulkomandy, Madi, Link Mauve et Glorf pour leurs nombreux conseils, les explications, l'aide et la patience !
# Licence CC0
# Ce script permet de ne garder que l'alentours et les emotes.
# Système adapté au nouveau système de log (à la fois plus simple puisque pas besoin du syslog,
# et un peu moins régulier dans les noms...)
# Fonctionnement idéal : /usr/bin/bash ./1analyse_new_logryzom.sh fichier_entrée fichier_sortie
# Par exemple :
# ./1analyse_new_logryzom.sh log_zatalyz.txt log_zatalye_alentours.txt
# On peut aussi renseigner les noms et chemins ici sur les variables :
logfile1="$1"
logsortie="$2"
# Canaux à garder
# Alentours + Endroit où on est
grep 'SAY\|SHOUT\|SYSTEM\/ZON' "$logfile1" > templog.txt
# vire le timestamp de début des lignes. Garde le * si ça peut servir à nettoyer le sys.info..
cut -b 21- templog.txt > templog2.txt
# Enlève les couleurs des canaux
sed 's/@{[A-F0-9]\{4\}}//g' templog2.txt > templog3.txt
# enlever le nom des canaux :
sed -re 's:^\([A-Z/]+\) +\* +(.*)$:\1:' templog3.txt > templog4.txt
# laisser uniquement les phrases traduites (attention, ça peut être étrange)
sed -re 's#\{:[a-zA-Z]{2}:[^}]+\}@\{[[:space:]]##' templog4.txt > templog5.txt
# Si quelqu'un joue avec des caractères bizarres, ça remet tout d'aplomb
iconv -t utf-8 -c templog5.txt > "$logsortie"
# Enlever les fichiers temporaires
rm templog*.txt

164
2split_log.sh Executable file
View file

@ -0,0 +1,164 @@
#!/bin/bash
# Dernière révision : 2021/10/31
# Auteur : Zatalyz. Merci à YannK, Tycho et Glorf pour leurs nombreux conseils, les explications, l'aide et la patience !
# Licence CC0
# Ce script sépare les logs en 1 fichier de log par jour.
# Il est prévu pour les logs du jeu Ryzom mais peut s'adapter à d'autres types de log (virer "pseudo !")
# Mettre tous les logs en vrac dans le même dossier que le script, et lancer la moulinette.
# La bonne commande à passer est
# cmd ./dossiersource ./dossier final [nomperso]
# Sans argument des variables par défaut seront utilisées. Le nom du perso peut être déduit des logs
# Exemple :
# ./split_log.sh ./logbrut/zatalyz/ ./final john
# => les fichiers seront traités depuis ./logbrut/zatalyz/, et mis dans le dossier ./final sous le nom de log_john_année_mois_jour.txt
# sans préciser "john", le nom des logs sera probablement celui de zatalyz, si les fichiers d'origine sont bien formatés comme log_zatalyz.txt ou log_zatalyz_*.txt
# Le script range aussi les logs.
# Attention ! Il laisse quelques fichiers dans le dossier courant.
# Attention ! Gardez les logs originaux, dans quelques cas les lignes
# ne sont pas analysées correctement (cas des retours à la ligne comme
# dans les poèmes : la ligne ne commence plus par une date).
#############
# Variables #
#############
# Variables par défaut dans les checks : pouvoir les changer ?
# Vérification si le dossier source des logs existe et est renseigné
if [ -d "$1" ]
then originalfolderlog="$1"
else originalfolderlog="./logsource"
fi
# Vérification si le dossier final des logs existe et est renseigné
if [ -d "$2" ]
then finalfolder="$2"
else finalfolder="./final_logs"
fi
# Vérification si un nom de perso est donné et sinon, extraction depuis les noms de fichier
if [ -z "$3" ]
then
myfunc() {
basename -a "$originalfolderlog"/* | cut -d_ -f2 | uniq
}
perso="$(myfunc)"
else perso="$3"
fi
echo "Résultat final : nous partons de $originalfolderlog pour mettre les logs de $perso dans $finalfolder"
# Variables des dossiers de travail
tmpfolder="./tmplogfolder"
listrawlog="$tmpfolder/listrawlog.txt"
rawfolder="$tmpfolder/raw_logs"
yearfolder="$tmpfolder/year_logs"
monthfolder="$tmpfolder/month_logs"
dayfolder="$tmpfolder/day_logs"
#############
# Script #
#############
# Vérifier si on a les dossiers temporaires de travail et sinon, les créer
if [ -d "$rawfolder" ];then
echo "Le dossier $rawfolder existe, passons à la suite";
else
mkdir -p "$rawfolder"
echo "Le dossier $rawfolder a été créé, passons à la suite";
fi
if [ -d "$yearfolder" ];then
echo "Le dossier $yearfolder existe, passons à la suite";
else
mkdir -p "$yearfolder"
echo "Le dossier $yearfolder a été créé, passons à la suite";
fi
if [ -d "$monthfolder" ];then
echo "Le dossier $monthfolder existe, passons à la suite";
else
mkdir -p "$monthfolder"
echo "Le dossier $monthfolder a été créé, passons à la suite";
fi
if [ -d "$dayfolder" ];then
echo "Le dossier $dayfolder existe, passons à la suite";
else
mkdir -p "$dayfolder"
echo "Le dossier $dayfolder a été créé, passons à la suite";
fi
if [ -d "$finalfolder" ];then
echo "Le dossier $finalfolder existe, passons à la suite";
else
mkdir -p "$finalfolder"
echo "Le dossier $finalfolder a été créé, passons à la suite";
fi
# On ne travaille pas sur les fichiers sources. Jamais.
# Parce qu'il y a parfois des blagues dans les logs, on nettoie l'encodage.
for file in "$originalfolderlog"/*
do
originallog="$(basename $file)"
cat "$file" | tr -d "\000-\010" | tr -d "\016-\037" > "$rawfolder"/"$originallog"
done
# on va faire un très gros fichier avec tous les logs. Évitez de l'ouvrir avec un éditeur de texte basique.
cat "$rawfolder"/* > "$tmpfolder"/logcomplet_"$perso".txt
#Et on va faire un fichier de controle donnant toutes les dates avec logs, et les lignes foireuses (genre chants) (à vérifier manuellement en cas de doute)
cut -c 1-11 "$tmpfolder"/logcomplet_"$perso".txt | sort | uniq > controlline_"$perso".txt
echo "$tmpfolder"/logcomplet_"$perso".txt et controlline_"$perso".txt créés
for logname in "$tmpfolder"/logcomplet_"$perso".txt
do
# Vérification que les fichiers sont bien des fichiers, ce serait bête de planter le script pour un manque de vérification
if [ -f "$logname" ] ; then
echo "$logname est un fichier et va être traité"
# On va faire un seul gros fichier par année
for year in {2009..2025} ; do
#echo "${year}"
grep "^${year}/" "$logname" >> "$yearfolder"/"${year}".log
# Effacer les fichiers vides
[ -s "$yearfolder"/"${year}".log ] || rm -f "$yearfolder"/"${year}".log
#echo "${year} traitée"
# On vérifie si le fichier d'année existe et on ne traite que celles qui existent
if [ -f "$yearfolder"/"${year}".log ] ; then
# Puis on va faire un fichier par mois
for month in {01..12} ; do
# echo "${year}/${month} en cours"
grep "^${year}/${month}" "$yearfolder"/"${year}".log > "$monthfolder"/"${year}_${month}".log
[ -s "$monthfolder"/"${year}_${month}".log ] || rm -f "$monthfolder"/"${year}_${month}".log
# On vérifie si le fichier année/mois existe et on ne traite que ceux qui existent
if [ -f "$monthfolder"/"${year}_${month}".log ] ; then
#echo "$monthfolder"/"${year}_${month}".log
# Puis un fichier par jour
for day in {01..31} ; do
#echo "${year}/${month}/${day} en cours"
grep "^${year}/${month}/${day}" "$monthfolder"/"${year}_${month}".log > "$dayfolder"/log_"$perso"_"${year}_${month}_${day}".log
[ -s "$dayfolder"/log_"$perso"_"${year}_${month}_${day}".log ] || rm -f "$dayfolder"/log_"$perso"_"${year}_${month}_${day}".log
#echo "${year}/${month}/${day} traité"
done
fi
done
fi
done
else
echo "$logname n'est pas un fichier, il n'a pas été traité"
fi
done
#Tri des fichiers dans des dossiers du type Dossier_trié/perso/année/mois/log.log
# On récupère la date, en formattant comme pour les logs
for f in $dayfolder/*.log
do
year=${f: -14:4}
month=${f: -9:2}
day=${f: -6:2}
# On se fait une jolie variable qui imite la partie datée du nom des fichiers de log
log=log_"$perso"_"${year}_${month}_${day}.log"
# on créé le dossier de chaque mois dans les archives s'il n'existe pas
mkdir -p "$finalfolder"/"$perso"/"$year"/"$month/"
# on déplace ces logs dans leur archive
mv "$dayfolder"/"$log" "$finalfolder"/"$perso"/"$year"/"$month"/"$log"
done
echo "Les fichiers ont été découpés et rangés"
# Nettoyage
#rm -r "$tmpfolder"
echo "faites un rm -r $tmpfolder si le dossier tmp était bien JUSTE pour le script..."
echo "Tout est bon. Contrôlez le nombre de fichiers entre $finalfolder et controlline_$perso.txt"

27
3analyse_old_logryzom.sh Executable file
View file

@ -0,0 +1,27 @@
#!/bin/bash
# Dernière révision : 2021/10/31
# Auteur : Zatalyz. Merci à Madi, sans qui tout ça n'aurait jamais pu existé. Que ton Perl soit sanctifié.
# Licence CC0
# Ce script permet de ne garder que l'alentours et les emotes.
# Les commandes sont paramétrées pour l'ancien système de log
# Améliorer le sysinfo au fil des nettoyages.
# Fonctionnement idéal : usr/bin/bash ./analyselogryzom.sh fichier_entrée fichier_sortie
# On peut aussi renseigner les noms et chemins ici sur les variables :
#logfile1="/home/zatalyz/Alinea/Histoires/Ryzomstories/log/logbrut/tri_perso_log/denakyo/log_denakyo2012_1215.txt"
#logsortie="log_denakyo2012_1215_alentours.txt"
logfile1="$1"
logsortie="$2"
# Canaux à virer (option -v)
grep -v 'F4FF\|F80F\|BBBF\|18EF\|FCCF\|78FF\|AFBF\|BBFF' "$logfile1" > templog.txt
# canaux à garder
# grep "FFFF\|F99F\|FF4F"
# vire le timestamp de début des lignes. Garde le * si ça peut servir à nettoyer le sys.info..
cut -b 23- templog.txt > templog2.txt
# enlever le nom des canaux @{FFFF}
sed 's/@{[A-F0-9]\{4\}}//g' templog2.txt > templog3.txt
# Si quelqu'un joue avec des caractères bizarres, ça remet tout d'aplomb
iconv -t utf-8 -c templog3.txt > templog4.txt
# analyser un fichier d'expression régulières de sysinfo et virer ce qui matche
#grep -v -f "$fichier"
grep -v -f sysinfo.ini templog4.txt > "$logsortie"
#rm templog*.txt

View file

@ -1,3 +1,66 @@
# ryzom_log_cleaner
# Gestion des logs
Ensemble de scripts bash pour nettoyer les logs clients de Ryzom
## Analyse New log
Pour analyser les logs d'après 2012/2013, par là.
Fonctionnement idéal : /usr/bin/bash ./1analyse_new_logryzom.sh fichier_entrée fichier_sortie
Par exemple :
./1analyse_new_logryzom.sh log_zatalyz.txt log_zatalye_alentours.txt
Liste des canaux, si on veut filtrer autrement :
SAY : alentours
SAY/EMT : emotes
SAY/BBL : messages de PNJ
SAY/SHOUT : cris
UNIVERSE : Univers
REGION : comme indiqué
SYSTEM : messages systèmes
SYSTEM/BC : Broadcast (annonces des administrateurs)
SYSTEM/AROUND : messages en alentours qui ne sont pas dit par des homins (genre "bienvenue sur ryzom)
SYSTEM/ZON : Endroit où le personnage se trouve (affiché lors des changements de zone)
SYSTEM/SPLM : Combat ?
SYSTEM/SPL : Combat aussi
SYSTEM/CHK : Check du système
SYSTEM/ITM : gestion des items (type achat de TP)
SYSTEM/DG : dégâts
SYSTEM/DMG : Dommages
SYSTEM/MIS : parade/esquive
SYSTEM/ISE : Effets de type vedice etc
SYSTEM/PVPTM : infos autour du pvp
SYSTEM/TSK : informations à propos des missions
SYSTEM/XP : expérience gagnée
SYSTEM/THM : encyclopédie
GUILD/MTD : Mot du jour de la Guilde
GUILD : Messages en guilde
DYN0, DYN1, DYN3, etc : canaux dynamiques. Le canal de langue est souvent sur DYN0
TELL : messages privés
TEAM : messages en équipe
## Analyse Old Log
Pour les logs d'avant le changement de système (donc avant 2013, je crois). Il FAUT un fichier sysinfo.ini, qui contient toutes les expressions régulières à filtrer (tout ce qui est dans le sys.infos). C'était plus lourd. Les canaux sont gardés selon un code couleur. À documenter, un jour, peut-être, ou pas : ça se retrouve en regardant les logs.
## Splitlog
Ce script sépare les logs en 1 fichier de log par jour.
Il est prévu pour les logs du jeu Ryzom mais peut s'adapter à d'autres types de log (virer "pseudo !")
Mettre tous les logs en vrac dans le même dossier que le script, et lancer la moulinette.
La bonne commande à passer est
cmd ./dossiersource ./dossier final [nomperso]
Sans argument des variables par défaut seront utilisées. Le nom du perso peut être déduit des logs
Exemple :
./split_log.sh ./logbrut/zatalyz/ ./final john
=> les fichiers seront traités depuis ./logbrut/zatalyz/, et mis dans le dossier ./final sous le nom de log_john_année_mois_jour.txt sans préciser "john", le nom des logs sera probablement celui de zatalyz, si les fichiers d'origine sont bien formatés comme log_zatalyz.txt ou log_zatalyz_*.txt
Le script range aussi les logs.
Attention ! Il laisse quelques fichiers dans le dossier courant. Gardez les logs originaux, dans quelques cas les lignes ne sont pas analysées correctement (cas des retours à la ligne comme dans les poèmes : la ligne ne commence plus par une date).
## Crédits et licence
Auteur : Zatalyz. Tout est sous licence CC0, c'est de l'assemblage de bons conseils et de tests, rien de transcendant. Plus de détail dans chaque script.
Ensemble de scripts bash pour nettoyer les logs clients de Ryzom

122
sysinfo.ini Normal file
View file

@ -0,0 +1,122 @@
# Pas de ligne vide dans ce fichier ! Les commentaires fonctionnent.
# Sys.Info : lignes commençants par...
^Bienvenue dans Ryzom
^MDJ
^Vous êtes
^Vous quittez
^La téléportation
^Vous avez détruit
^Vous avez acheté
^Vous avez reçu
^Vous prenez votre
^Vous rangez
^Votre action de création
^Vous vendez
^Vos .* ont été vendu(e)s
^Votre expérience dans la compétence
^Vous avez déposé
^Déconnexion annulée
^Affichage des personnages en ligne dans la région
^Vous avez franchi
^Vous proposez à
^Vous avez créé
^Vous invitez
^Vous avez quitté
^Votre \w* \w* a été vendu
^Joueurs dans le canal de discussion
^Nouvelle cible ajoutée au compas
^Votre compétence
^Vous avez gagné
^L[[:punct:]]échange est accepté
^Vous achetez
^Votre
^Vous rejoignez
^\w* a quitté votre équipe\.
^\w* est maintenant le chef de votre équipe\.
^\w* succède au chef de votre équipe\.
^Vous étiez
^Afficher les CSRs en ligne
^Aucun personnage trouvé
^\w* est inconnu(e) ou déconnecté(e)\.
^Tâche réussie\.
# Avec le nom du perso ou des autres
^\"\w*\" a été sauvegardée\.
^\w* rejoint
^\w*\.
^Vous avez
# Combat
^Vous ciblez
^Vous jetez
^Votre sort
^Vous soignez
^Vous régénérez
^\w* est maintenant au maximum
^.* vous attaque\.
^.* atteint \w* \w*, infligeant
^.* vous porte un coup critique
^.* a esquivé votre attaque
^.* a paré votre attaque
^.* vous rate.
^.* quitte le combat
^.* vous fait perdre [[:digit:]]* points
^.* résiste aux effets de votre sort\.
^.* vous atteint mais n[[:punct:]]inflige pas de dégâts\.
^.* n[[:punct:]]est plus \w*\.
^.* subit une pénalité sur ses esquives\.
^.* vous a enraciné et vous ne pouvez plus bouger\.
^.* subit une pénalité sur ses compétences de combats\.
^.* vous a désarmé\.
^Vous attaquez
^Vous atteignez
^Vous avez esquivé
^Vous avez paré
^Vous ratez
^Vous ralentissez
^Vous étourdissez
^Vous avez tué
^Vous commencez
^Les effets du pouvoir
^A la recherche de ressources
^Vous avez trouvé des ressources
^Vos compétences de combats ne sont plus soumises à une pénalité
^Vous portez
^Vous faites
^Vous avez été tué
^Votre pénalité de décès
^\w* vous jette
^\w* vous soigne
^\w* vous régénère
^Vous subissez des dégâts
^Vous pourrez être attaqué
^Vous pouvez encore être attaqué
^Vous obtenez
^Bravo \! Vous obtenez la nouvelle compétence
^Vous n[[:punct:]]obtenez
^\w* obtient .* de qualité [[:digit:]]*\.
^Il n[[:punct:]]y a rien à dépecer
^Vous n[[:punct:]]avez pas le droit de dépecer cette carcasse
^La cadavre que vous essayez
^Le cadavre que vous essayez
^Vous n[[:punct:]]êtes
^Votre incantation
^Vous activez
^Vous gagnez
^Vous perdez
^Vous consommez
^Vous ne pouvez pas jeter un sort sur un cadavre
^Votre incantation est rompue
^Vos esquives ne subissent plus de pénalité
^Vous ne pouvez pas attaquer un personnage neutre
^Ce sort ne peut être jeté que sur un ennemi
^Vos attaques
^Vous n[[:punct:]]avez
^Vous ne pouvez pas
^\w* a lancé un sort qui vous inflige
^Vous résistez
^Vous interrompez
^Les attaques
^Les compétences
^Vous n[[:punct:]]attaquez plus
^Vous utilisez
#Forage
^La source