Class SlowQueryWatcher

java.lang.Object
org.nuiton.topia.persistence.internal.support.SlowQueryWatcher
All Implemented Interfaces:
AutoCloseable, Runnable

public class SlowQueryWatcher extends Object implements AutoCloseable, Runnable
Classe ayant pour utilité de surveiller le temps d'exécution d'une requête. Si cette requête dépasse le temps imparti, on affiche un avertissement dans les logs.
Since:
3.8
Author:
Arnaud Thimel (Code Lutin)
  • Field Details

    • thresholdDelay

      protected final long thresholdDelay
      Délai au delà duquel on affiche l'avertissement
    • descriptionSupplier

      protected final Supplier<String> descriptionSupplier
      Permet de récupérer la description de la requête. Utilisé uniquement si besoin
    • callerNameSupplier

      protected final Supplier<String> callerNameSupplier
      Permet de récupérer le nom de l'appelant. Utilisé uniquement si besoin
    • threadName

      protected final String threadName
      Nom du thread dans lequel s'exécute la requête
    • id

      protected final String id
      Identifiant du présent watcher. Sert à faire le lien entre les 2 messages d'avertissement
    • begin

      protected final long begin
      Instant de début du watcher
    • end

      protected Long end
      Instant de fin du watcher. Si la valeur est null cela signifie que la requête est toujours en cours
    • warned

      protected boolean warned
      Permet de savoir si l'avertissement a déjà été affiché pour éviter de le réafficher plusieurs fois
  • Method Details

    • start

      public static SlowQueryWatcher start(Supplier<String> descriptionSupplier, Supplier<String> callerNameSupplier, long thresholdDelay)
      Démarre un nouveau watcher qui affichera un avertissement si le traitement n'est pas fini avec thresholdDelay millisecondes. L'instance créée commence immédiatement le décompte du temps. Cet appel est fait pour être encapsulé dans un try-with-ressource afin que done() soit appelé à la fin du traitement (potentiellement via close().
      Parameters:
      descriptionSupplier - Permet de récupérer une description de la requête. On utilise Supplier de façon à ne calculer sa valeur qu'en cas de besoin.
      callerNameSupplier - Permet de récupérer une information sur l'appelant pour savoir de quel cas d'usage il s'agit. On utilise Supplier de façon à ne calculer sa valeur qu'en cas de besoin.
      thresholdDelay - le délai (en millisecondes) au delà duquel on affiche l'avertissement
      Returns:
      une nouvelle instance de SlowQueryWatcher pour ce traitement ou null si le niveau de log ne permet pas de logguer les avertissements.
    • start

      public static SlowQueryWatcher start(Supplier<String> descriptionSupplier, long thresholdDelay)
      Démarre un nouveau watcher qui affichera un avertissement si le traitement n'est pas fini avec thresholdDelay millisecondes. L'instance créée commence immédiatement le décompte du temps. Cet appel est fait pour être encapsulé dans un try-with-ressource afin que done() soit appelé à la fin du traitement (potentiellement via close().
      Parameters:
      descriptionSupplier - Permet de récupérer une description de la requête. On utilise Supplier de façon à ne calculer sa valeur qu'en cas de besoin.
      thresholdDelay - le délai (en millisecondes) au delà duquel on affiche l'avertissement
      Returns:
      une nouvelle instance de SlowQueryWatcher pour ce traitement.
    • newCallerNameSupplier

      protected static Supplier<String> newCallerNameSupplier()
      Fournit un Supplier dont le but est de retrouver la trace de l'appelant à la couche ToPIA. Ainsi on peut décrire la méthode à l'origine de la requête en cours.
    • isStillRunning

      public boolean isStillRunning()
    • displayWarn

      protected void displayWarn()
    • done

      public void done()
      Permet d'informer le watcher que la requête est terminée. Ça peut être fait directement en appelant cette méthode explicitement ou bien au moment tu close() dans le cas d'un usage via try-with-ressource.
    • run

      public void run()
      Specified by:
      run in interface Runnable
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable