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

logo creative common by-sa 3.0 Creative Commons Paternité – Partage à l’Identique 3.0 non transcrit