Class NuitonTrace


  • public abstract class NuitonTrace
    extends Object
    Permet de tracer les appels aux methodes.

    Mise en place

    Il faut mettre dans les dependances Maven le nuiton-profiling
        $lt;dependency$gt;
          $lt;groupId$gt;org.nuiton$lt;/groupId$gt;
          $lt;artifactId$gt;nuiton-profiling$lt;/artifactId$gt;
          $lt;version$gt;2.7$lt;/version$gt;
        $lt;/dependency$gt;
     
    Pour l'utiliser il faut définir un fichier XML aop.xml dans le repertoire META-INF ou WEB-INF qui intercepte les methodes souhaiter.
     <!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"$gt;
    $lt;aspectj$gt;
      $lt;weaver options="-verbose"$gt;
        $lt;exclude within="fr.insee..*CGLIB*"/$gt;
      $lt;/weaver$gt;
      $lt;aspects$gt;
        $lt;concrete-aspect name="org.nuiton.profiling.NuitonTraceAppAspect"
                         extends="org.nuiton.profiling.NuitonTrace"$gt;
          $lt;pointcut name="executeMethod"
                    expression="
          execution(* org.nuiton..*(..))
       || execution(* org.chorem..*(..))
       || execution(* org.apache..*(..))
       || execution(* ognl..*(..))"/$gt;
        $lt;/concrete-aspect$gt;
      $lt;/aspects$gt;
    $lt;/aspectj$gt;
     
    Ensuite il faut lancer la JVM avec l'option
     -javaagent:path/to/aspectjweaver-1.7.1.jar
     
    normalement il se trouve dans le repo maven dans le repertoire
    • $MAVEN_REPO/org/aspectj/aspectjweaver/1.7.1/aspectjweaver-1.7.1.jar

    Utilisation

    Il y a 3 modes: interactif, non interactif et par programmation

    Mode non interactif

    Il faut mettre le nom d'un fichier dans la variable d'environnnement AUTO_SAVE_FILENAME_OPTION. Dans ce cas lors de l'arrêt de la JVM les statistiques sont ecrites dans ce fichier.

    Mode interactif

    Il est possible de demander a a NuitonTrace lorsqu'il s'initialise de demarrer un serveur Web qui permet de voir et recuperer les donnees statistiques. Pour cela il faut indique sur quel port le serveur doit attendre via la variable d'environnnement PORT_OPTION

    Par programmation

    Pour afficher les statistiques dans votre programme
    • log.info(NuitonTrace.getStatisticsAndClear());
    • NuitonTrace.printStatistiqueAndClear();

    Autre mode de fonctionnement

    Il doit être possible, plutot que d'écrire un fichier XML, de sous classer NuitonTrace en ajoutant par exemple
     \@Expression( "execution(* fr.ifremer.isisfish.datastore.ResultStorage.*(..))" +
     "|| execution(* fr.ifremer.isisfish.aspect.Cache.*(..))" +
     "|| execution(* fr.ifremer.isisfish.aspect.Trace.*(..))" +
     "|| execution(* org.nuiton.topia..*(..))" +
     "|| execution(* org.nuiton.math.matrix..*(..))" +
     "|| execution(* fr.ifremer.isisfish.types..*(..))" +
     "|| execution(* org.apache.commons.collections..*(..))"
     )
     Pointcut executeMethod;
     
    Author:
    bpoussin : poussin@codelutin.com, tchemit : chemit@codelutin.com
    • Field Detail

      • trace

        public static Trace trace
        statistique de tous les appels
      • DISTINCT_THREAD_CALL_OPTION

        public static final String DISTINCT_THREAD_CALL_OPTION
        constante determinant le nom de la variable d'environnement a lire pour savoir si les statistiques des threads doivent etre melange ou non
        Since:
        2.7.2
        See Also:
        Constant Field Values
      • PORT_OPTION

        public static final String PORT_OPTION
        constante determinant le nom de la variable d'environnement a lire pour connaitre le port a utiliser pour le serveur web
        Since:
        2.7
        See Also:
        Constant Field Values
      • AUTO_SAVE_FILENAME_OPTION

        public static final String AUTO_SAVE_FILENAME_OPTION
        constante determinant le nom de la variable d'environnement a lire pour connaitre le nom du fichier de sauvegarde a la sortie de la JVM
        Since:
        2.7
        See Also:
        Constant Field Values
      • initilized

        protected static boolean initilized
        Indique si nuiton trace a deja ete initialise ou non
        Since:
        2.7
    • Constructor Detail

      • NuitonTrace

        public NuitonTrace()
    • Method Detail

      • traceBeforeExecute

        public void traceBeforeExecute​(org.aspectj.lang.JoinPoint jp)
      • traceAfterThrowingExecute

        public void traceAfterThrowingExecute​(org.aspectj.lang.JoinPoint jp)
      • traceAfterExecute

        public void traceAfterExecute​(org.aspectj.lang.JoinPoint jp)
      • getStatisticsCSVAndClear

        public static String getStatisticsCSVAndClear()
        Returns:
        les statistiques in CSV format
      • getStatisticsJson

        public static String getStatisticsJson()
        Returns:
        les statistiques in json format
        Since:
        2.7
      • clearStatistics

        public static void clearStatistics()
        Since:
        2.7
      • getStatisticsAndClear

        public static String getStatisticsAndClear()
        Returns:
        les statistiques
      • printStatisticsAndClear

        public static void printStatisticsAndClear()
      • printStatisticsAndClear

        public static void printStatisticsAndClear​(PrintStream printer)
      • getOption

        protected static String getOption​(String optionName)
        Permet de lire les options de la ligne de commande Java (-D) et si non trouver de rechercher dans les variables d'environnement
        Parameters:
        optionName -
        Returns:
        la valeur de l'option ou null si non trouve
        Since:
        2.7
      • init

        protected static void init()
        Recherche la configuration dans les variables d'environnement et les utilise pour mettre en place ce qui est demande par l'utilisateur
        Since:
        2.7
      • main

        public static void main​(String... args)
        Force le lancement du serveur web, permet d'avoir le serveur sur une machine pour monitorer une application qui est sur une autre. L'avantage est de pouvoir centraliser les sauvegardes sur le meme domaine web
        Parameters:
        args - le port a utiliser si vide utilise les variables d'environnement et en dernier recourrs utilise le port 4488