Historique IRC avec Quassel et PostgreSQL
Contexte
IRC
IRC est un ancien protocole de chat, qui fonctionne, qui ne dépend pas des GAFA.
A la différence de certains systèmes de chat, il est possible de choisir un réseau IRC en sélectionnant un serveur IRC et ainsi accéder à des salons de discussion différents.
IRC est un système pour lequel la communication est par salon de discussion. C’est à dire qu’il y a potentiellement plusieurs personnes en même temps.
La communication entre deux personnes est possible.
Quassel
Quassel est un client IRC qui peut fonctionner de plusieurs façons différentes :
- mode client simple
- mode client-serveur
En mode client simple :
-
quassel se connecte au serveur IRC comme les autres clients IRC (xchat, mibbit)
-
quassel stocke l’historique des cannaux connectés en local sur le PC
En mode client-serveur :
- quassel-client se connecte au quassel-serveur
- quassel-serveur se connecte au serveur IRC
- quassel-serveur stocke l’historique des cannaux connectés dans une base de données (sqlite par défaut, MySQL et PostgreSQL au choix)
Besoin
Après quelques mois de connexion continue à des cannaux IRC bien actifs, la base de donnée de stockage de l’historique est devenue imposante (= prend trops de place pour l’utilisation réelle de l’historique).
–> Il est donc temps de faire de la place faire du ménage.
Approches
Pour atteindre cet objectif, il existe plusieurs méthodes.
Solution n°1 : méthode douce
La plus simple est d’utiliser la fonction intégrée à quassel. Cette technique permet de supprimer des canaux ainsi que l’historique associé.
Lorque la base de données contient plusieurs millions d’enregistrements, la suppression de l’historique devient génante.
Dans ce scénario, nous avons constatés que quassel-serveur peut se bloquer, se déconnecter de tous les serveurs IRC et cela pour plusieurs heures.
Donc cette méthode est pratique pour les cannaux peux actifs, mais pas forcément acceptable pour nettoyer rapidement le serveur.
Solution n°2 : méthode forte
La seconde solution consiste à aller supprimer directement les données dans la base de données.
La base de données de quassel utilise un modèle de stockage de données plutôt simple.
Accès direct à la base de données
Statistiques sur les réseaux
SELECT count(*) as count__________, n.networkname, n.networkid
FROM backlog
NATURAL JOIN buffer buf
NATURAL JOIN network n
GROUP BY n.networkname, n.networkid
ORDER BY count(*) DESC
LIMIT 100;
Suppression de l’historique d’un réseau
Suppression des historiques rattaché au réseau identifié dans la base de données par 3
.
-- Remove logs for all buffer for network 3
DELETE
FROM backlog
WHERE bufferid
IN (
SELECT bufferid
FROM buffer
WHERE networkid IN (3)
);
Licence
Creative Commons Paternité – Partage à l’Identique 3.0 non transcrit