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 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.

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