Gestion des Handlers¶
Classes Handler pour les différents type de connexion (SQLite,SQLAlchemy, Warp10, Artimon, etc.).
Created on Sat Apr 11 06:41:28 2020
@author: Cyrile Delestre
-
class
dstk.metrics._handlers.ArtimonAPIHandler(producer: str, host: str = '127.0.0.1', port: str = '9023', hostname: Optional[str] = None, environment: Optional[str] = None, labels: Optional[Dict[str, Union[float, int, str]]] = None, format: List[str] = ['name', 'msg'])[source]¶ Bases:
dstk.metrics._handlers.BaseArtimonClasse permettant de créer un handler designné pour Artimon le parser Warp10 du SI Arkéa. Elle utilise le protocal POST pour envoyer la donnée dans Warp10.
- Parameters:
- producerstr
nom du producer Artimon/Warp10.
- hoststr
host de l’API Artimon (par défaut ‘127.0.0.1’).
- portstr
port de l’API Artimon (par défaut ‘9023’).
- hostnameOptional[str]
nom facultatif du hostname (si non renseigné sera complété automatiquement par Artimon).
- environmentOptional[str]
nom facultatif de l’environnement (si non renseigné sera complété automatiquement par Artimon).
- labelsOptional[Dict[str, Union[float, int, str]]]
label en complément de la métrique (comme l’environnement, la version, etc.). Dans Artimon les labels sont références aux tags.
- formatList[str]
liste des attributs du LogRecord qu’on souhaite récupérer et stocker. Liste des attributs de LogRecord présentés à l’URL :
- asctimestr
Timestamps de création du log interprétable humainement ;
- createdfloat
Timestamps de création du log ;
- filenamestr
Nom du fichier dans lequel a été appelé le logging ;
- funcNamestr
Nom de la fonction contenant l’appel du logging ;
- levelnamestr
Nom de level d’alerte (‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’) ;
- levelnoint
Numérique associé au level d’alerte ;
- messagestr
Message envoyé par le logging (à définir par l’utilisateur) ;
- modulestr
Nom du module ;
- msecsint
Temps de création de LogRicord (en milliseconde) ;
- namestr
Nom du logger (permet d’identifier les différents logger) ;
- pathnamestr
Chemin complet du fichier dans lequel a été appelé le logging (si disponible);
- processint
Process ID (si disponible) ;
- processNamestr
Nom du process ID (si disponible) ;
- relativeCreatedfloat
Temps en millisecondes de création de LogRecord, par rapport au temps de chargement du module de logging ;
- threadint
Thread ID (si disponible) ;
- threadNamestr
Nom du thread ID (si disponible).
- La suite est composée des attributs de LogRecord créés
- enginestr
Nom du moteur (‘sqlite’, ‘sqlalchemy’, ‘Warp10’, etc.).
See also
Notes
Avec cette classe il n’est pas possible d’utiliser le format “message”, il est important de ce référer à “msg” pour le message. De même il n’est pas nécessaire de mettre “msg” dans l’argument format car le contenu du message sera utilisé automatiquement comme argument de la série.
Examples
Envoi d’un timer mesurant de temps d’exécution d’une fonction et de sans sortie.
>>> import logging >>> from time import sleep >>> import numpy as np >>> from dstk.metrics import ArtimonAPIHandler, timer, sniffer >>> >>> # Création du logger >>> logging.basicConfig( >>> level = logging.INFO, >>> handlers = [ >>> ArtimonAPIHandler( >>> producer = 'NAME.producer', >>> format = ['asctime', 'threadName'] >>> ) >>> ] >>> ) >>> logger_timer = logging.getLogger('metrics.python.timer') >>> logger_sniffer = logging.getLogger('metrics.python.sniffer')
>>> @timer(logger=logger_timer, delta_time=True) >>> @sniffer(logger=logger_sniffer) >>> def function_test(a=1, b=1, sleep_time=0.5): >>> r"Docstring de la fonction fonction_test" >>> sleep(sleep_time) >>> return a+b
>>> res = [ >>> function_test(a=ii, sleep_time=5*np.random.rand()) >>> for ii in range(10) >>> ] >>> res [1, 3, 4, 5, 6, 7, 8, 9, 10]
Les données seront envoyés directement vers Warp10.
-
class
dstk.metrics._handlers.ArtimonLocalHandler(producer: str, path: str = '/var/run/artimonV2', hostname: Optional[str] = None, environment: Optional[str] = None, labels: Optional[Dict[str, Union[float, int, str]]] = None, format: List[str] = ['name', 'msg'])[source]¶ Bases:
dstk.metrics._handlers.BaseArtimonClasse permettant de créer un handler designné pour Artimon le parser Warp10 du SI Arkéa. Elle utilise le collecteur Artimon qui doit être installé en local. Le collecteur Artimon va cherche les fichiers finissant par l’extention .artimon dans le répertoire par défaut ‘/var/run/artimonV2’.
- Parameters:
- producerstr
nom du producer Artimon/Warp10.
- pathstr
répertoire du dépot des métriques pour le collecteur Artimon (par défaut ‘/var/run/artimonV2).
- hostnameOptional[str]
nom facultatif du hostname (si non renseigné sera complété automatiquement par Artimon).
- environmentOptional[str]
nom facultatif de l’environnement (si non renseigné sera complété automatiquement par Artimon).
- labelsOptional[Dict[str, Union[float, int, str]]]
label en complément de la métrique (comme l’environnement, la version, etc.). Dans Artimon les labels sont références aux tags.
- time_lifeint (deprecated)
nombre de jour d’activité du fichier récoltant les métriques. Le collecteur Artimon supprime automatiquement les fichiers qui ont 7 jours d’inactivité (par défaut 1 jours).
- formatList[str]
liste des attributs du LogRecord qu’on souhaite récupérer et stocker. Liste des attributs de LogRecord présentés à l’URL :
- asctimestr
Timestamps de création du log interprétable humainement ;
- createdfloat
Timestamps de création du log ;
- filenamestr
Nom du fichier dans lequel a été appelé le logging ;
- funcNamestr
Nom de la fonction contenant l’appel du logging ;
- levelnamestr
Nom de level d’alerte (‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’) ;
- levelnoint
Numérique associé au level d’alerte ;
- messagestr
Message envoyé par le logging (à définir par l’utilisateur) ;
- modulestr
Nom du module ;
- msecsint
Temps de création de LogRicord (en milliseconde) ;
- namestr
Nom du logger (permet d’identifier les différents logger) ;
- pathnamestr
Chemin complet du fichier dans lequel a été appelé le logging (si disponible);
- processint
Process ID (si disponible) ;
- processNamestr
Nom du process ID (si disponible) ;
- relativeCreatedfloat
Temps en millisecondes de création de LogRecord, par rapport au temps de chargement du module de logging ;
- threadint
Thread ID (si disponible) ;
- threadNamestr
Nom du thread ID (si disponible).
- La suite est composée des attributs de LogRecord créés
- enginestr
Nom du moteur (‘sqlite’, ‘sqlalchemy’, ‘Warp10’, etc.).
See also
Notes
Avec cette classe il n’est pas possible d’utiliser le format “message”, il est important de ce référer à “msg” pour le message. De même il n’est pas nécessaire de mettre “msg” dans l’argument format car le contenu du message sera utilisé automatiquement comme argument de la série.
L’argument time_life n’est plus pris en compte et sera supprimé dans les versions futures.
Examples
Envoi d’un timer mesurant de temps d’exécution d’une fonction et de sans sortie.
>>> import logging >>> from time import sleep >>> import numpy as np >>> from dstk.metrics import ArtimonLocalHandler, timer, sniffer >>> >>> # Création du logger >>> logging.basicConfig( >>> level = logging.INFO, >>> handlers = [ >>> ArtimonLocalHandler( >>> producer = 'NAME.producer', >>> format = ['asctime', 'threadName'] >>> ) >>> ] >>> ) >>> logger_timer = logging.getLogger('metrics.python.timer') >>> logger_sniffer = logging.getLogger('metrics.python.sniffer')
>>> @timer(logger=logger_timer, delta_time=True) >>> @sniffer(logger=logger_sniffer) >>> def function_test(a=1, b=1, sleep_time=0.5): >>> r"Docstring de la fonction fonction_test" >>> sleep(sleep_time) >>> return a+b
>>> res = [ >>> function_test(a=ii, sleep_time=5*np.random.rand()) >>> for ii in range(10) >>> ] >>> res [1, 3, 4, 5, 6, 7, 8, 9, 10]
Les données seront envoyés directement vers le fichier date_du_jour.artimon dans le répertoire ‘/var/run/artimonV2’. C’est le collecteur Artimon qui ce chargera de l’envoie vers Warp10.
-
class
dstk.metrics._handlers.BaseArtimon(producer: str, hostname: Optional[str] = None, environment: Optional[str] = None, labels: Optional[Dict[str, Union[float, int, str]]] = None, format: List[str] = ['name', 'msg'])[source]¶ Bases:
dstk.metrics._handlers.HandlerBaseClasse de base permettant de gérer les données à envoyer dans Warp10 via Artimon. Cette classe n’est pas à utiliser directement, elle est utiliser en tant que classe mère aux classes ArtimonAPIHandler et ArtimonLocalHandler.
- Parameters:
- producerstr
Nom du producer vers lequel les métriques seront envoyées. Il doit avoir la forme <code_boite>.<nom_appli>
- hostnameOptional[str]
nom facultatif du hostname (si non renseigné sera complété automatiquement par Artimon).
- environmentOptional[str]
nom facultatif de l’environnement (si non renseigné sera complété automatiquement par Artimon).
- labelsOptional[Dict[str, Union[float, int, str]]]
label en complément de la métrique (comme l’environnement, la version, etc.). Dans Artimon les labels sont références aux tags.
- formatList[str]
liste des attributs du LogRecord qu’on souhaite récupérer et stocker. Liste des attributs de LogRecord présentés à l’URL :
- asctimestr
Timestamps de création du log interprétable humainement ;
- createdfloat
Timestamps de création du log ;
- filenamestr
Nom du fichier dans lequel a été appelé le logging ;
- funcNamestr
Nom de la fonction contenant l’appel du logging ;
- levelnamestr
Nom de level d’alerte (‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’) ;
- levelnoint
Numérique associé au level d’alerte ;
- messagestr
Message envoyé par le logging (à définir par l’utilisateur) ;
- modulestr
Nom du module ;
- msecsint
Temps de création de LogRicord (en milliseconde) ;
- namestr
Nom du logger (permet d’identifier les différents logger) ;
- pathnamestr
Chemin complet du fichier dans lequel a été appelé le logging (si disponible);
- processint
Process ID (si disponible) ;
- processNamestr
Nom du process ID (si disponible) ;
- relativeCreatedfloat
Temps en millisecondes de création de LogRecord, par rapport au temps de chargement du module de logging ;
- threadint
Thread ID (si disponible) ;
- threadNamestr
Nom du thread ID (si disponible).
- La suite est composée des attributs de LogRecord créés
- enginestr
Nom du moteur (‘sqlite’, ‘sqlalchemy’, ‘Warp10’, etc.).
See also
ArtimonAPIHandler,ArtimonLocalHendleur
-
class
dstk.metrics._handlers.GTS(record: logging.LogRecord, dict_value: list, format: List[str])[source]¶ Bases:
objectClasse modélisant un objet GTS (Geo Time Series) Warp10.
-
class
dstk.metrics._handlers.HandlerBase(format: List[str] = ['name', 'message'])[source]¶ Bases:
logging.HandlerClasse de base permettant de créer un handler à partir d’une liste de Handler.
- Parameters:
- formatList[str]
liste des attributs du LogRecord qu’on souhaite récupérer et stocker. Liste des attributs de LogRecord présentés à l’URL :
- asctimestr
Timestamps de création du log interprétable humainement ;
- createdfloat
Timestamps de création du log ;
- filenamestr
Nom du fichier dans lequel a été appelé le logging ;
- funcNamestr
Nom de la fonction contenant l’appel du logging ;
- levelnamestr
Nom de level d’alerte (‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’) ;
- levelnoint
Numérique associé au level d’alerte ;
- messagestr
Message envoyé par le logging (à définir par l’utilisateur) ;
- modulestr
Nom du module ;
- msecsint
Temps de création de LogRicord (en milliseconde) ;
- namestr
Nom du logger (permet d’identifier les différents logger) ;
- pathnamestr
Chemin complet du fichier dans lequel a été appelé le logging (si disponible);
- processint
Process ID (si disponible) ;
- processNamestr
Nom du process ID (si disponible) ;
- relativeCreatedfloat
Temps en millisecondes de création de LogRecord, par rapport au temps de chargement du module de logging ;
- threadint
Thread ID (si disponible) ;
- threadNamestr
Nom du thread ID (si disponible).
- La suite est composée des attributs de LogRecord créés
- enginestr
Nom du moteur (‘sqlite’, ‘sqlalchemy’, Warp10, etc.).
See also
-
class
dstk.metrics._handlers.SQLAlchemyHandler(path_sql: str, format: List[str] = ['name', 'message'], base_name: str = 'logs', **kargs_sql)[source]¶ Bases:
dstk.metrics._handlers.HandlerBaseClasse permettant de créer un handler à partir d’une liste de Handler vers une base interfacée à SQLAlchemy.
- Parameters:
- path_sqlstr
- URL de connexion SQLAlchemy. L’URL de connexion est définie par :
“dialect+driver://usernam:password@host:port/database”
- formatList[str]
liste des attributs du LogRecord qu’on souhaite récupérer et stocker. Liste des attributs de LogRecord présentés à l’URL :
- asctimestr
Timestamps de création du log interprétable humainement ;
- createdfloat
Timestamps de création du log ;
- filenamestr
Nom du fichier dans lequel a été appelé le logging ;
- funcNamestr
Nom de la fonction contenant l’appel du logging ;
- levelnamestr
Nom de level d’alerte (‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’) ;
- levelnoint
Numérique associé au level d’alerte ;
- messagestr
Message envoyé par le logging (à définir par l’utilisateur) ;
- modulestr
Nom du module ;
- msecsint
Temps de création de LogRicord (en milliseconde) ;
- namestr
Nom du logger (permet d’identifier les différents logger) ;
- pathnamestr
Chemin complet du fichier dans lequel a été appelé le logging (si disponible);
- processint
Process ID (si disponible) ;
- processNamestr
Nom du process ID (si disponible) ;
- relativeCreatedfloat
Temps en millisecondes de création de LogRecord, par rapport au temps de chargement du module de logging ;
- threadint
Thread ID (si disponible) ;
- threadNamestr
Nom du thread ID (si disponible).
- La suite est composée des attributs de LogRecord créés
- enginestr
Nom du moteur (‘sqlite’, ‘sqlalchemy’, etc.).
- base_namestr
Nom de la base (par dégaut “logs”).
- **kargs_sql :
- arguments d’entrée au connecteur SQLAlchemy :
sqlalchemy.create_engine(path_sql, **kargs_sql)
See also
SQLiteHandler,timer,timer_class
Notes
Cette classe nécessite SQLAlchemy, si ce package n’est pas présent dans votre environnement il suffit d’ajouter le package “sqlalchemy” au fichier environment.yml et de lancer le script bash bash_install_env.sh dans le répertoire shell du projet.
Examples
Nous allons utiliser timer pour extraire les informations temporelles d’éxécution d’une fonction et les stocker dans une table SQLite interfacée par SQLAlchemy.
>>> import logging >>> from time import sleep >>> from dstk.metrics import SQLAlchemyHandler, timer >>> >>> # Création du logger >>> logging.basicConfig( >>> level = logging.INFO, >>> handlers = [ >>> SQLAlchemyHandler( >>> path_sql = 'sqlite:///metrics.log', >>> format = ['asctime', 'name', 'message', 'threadName'] >>> ) >>> ] >>> ) >>> logger = logging.getLogger('python.metrics.timer')
>>> @timer(logger=logger, delta_time=True) >>> def function_test(a=1, b=1, sleep_time=0.5): >>> r"Docstring de la fonction fonction_test" >>> sleep(sleep_time) >>> return a+b >>> >>> function_test() 2 >>> function_test(2, 2) 4
Les logs sont stockés dans la base SQLite “metrics.log”.
>>> import sqlite3 >>> import dstk.data import PandasSQL >>> >>> log = PandasSQL(sqlite3.connect("metrics.log")) >>> >>> log("SELECT asctime, name, threadName FROM logs;") asctime name threadName 0 2020-04-13T13:31:06.973864 python.metrics.timer MainThread 1 2020-04-13T13:31:11.469728 python.metrics.timer MainThread >>> >>> log("SELECT message FROM logs;") message 0 {"name": "function_test", "dt": "0:00:00.500830"} 1 {"name": "function_test", "dt": "0:00:00.500830"}
-
class
dstk.metrics._handlers.SQLiteHandler(path_sql: str, format: List[str] = ['name', 'message'], base_name: str = 'logs', **kargs_sql)[source]¶ Bases:
dstk.metrics._handlers.HandlerBaseClasse permettant de créer un handler à partir d’une liste de Handler vers une base SQLite.
- Parameters:
- path_sqlstr
chemin vers la base SQLite des logs.
- formatList[str]
liste des attributs du LogRecord qu’on souhaite récupérer et stocker. Liste des attributs de LogRecord présentés à l’URL :
- asctimestr
Timestamps de création du log interprétable humainement ;
- createdfloat
Timestamps de création du log ;
- filenamestr
Nom du fichier dans lequel a été appelé le logging ;
- funcNamestr
Nom de la fonction contenant l’appel du logging ;
- levelnamestr
Nom de level d’alerte (‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’) ;
- levelnoint
Numérique associé au level d’alerte ;
- messagestr
Message envoyé par le logging (à définir par l’utilisateur) ;
- modulestr
Nom du module ;
- msecsint
Temps de création de LogRicord (en milliseconde) ;
- namestr
Nom du logger (permet d’identifier les différents logger) ;
- pathnamestr
Chemin complet du fichier dans lequel a été appelé le logging (si disponible);
- processint
Process ID (si disponible) ;
- processNamestr
Nom du process ID (si disponible) ;
- relativeCreatedfloat
Temps en millisecondes de création de LogRecord, par rapport au temps de chargement du module de logging ;
- threadint
Thread ID (si disponible) ;
- threadNamestr
Nom du thread ID (si disponible).
- La suite est composée des attributs de LogRecord créés
- enginestr
Nom du moteur (‘sqlite’, ‘sqlalchemy’, etc.).
- base_namestr
Nom de la base (par dégaut “logs”).
- :**kargs_sql: arguments d’entrée au connecteur
- SQLite3 :
sqlite3.connect(path_sql, **kargs_sql)
See also
SQLAlchemyHandler,timer,timer_class
Examples
Nous allons utiliser timer pour extraire les informations temporelles d’éxécution d’une fonction.
>>> import logging >>> from time import sleep >>> from dstk.metrics import SQLiteHandler, timer >>> >>> # Création du logger >>> logging.basicConfig( >>> level = logging.INFO, >>> handlers = [ >>> SQLiteHandler( >>> path_sql = 'metrics.log', >>> format = ['asctime', 'name', 'message', 'threadName'] >>> ) >>> ] >>> ) >>> logger = logging.getLogger('python.metrics.timer')
>>> @timer(logger=logger, delta_time=True) >>> def function_test(a=1, b=1, sleep_time=0.5): >>> r"Docstring de la fonction fonction_test" >>> sleep(sleep_time) >>> return a+b >>> >>> function_test() 2 >>> function_test(2, 2) 4
Les logs sont stockés dans la base SQLite “metrics.log”.
>>> import sqlite3 >>> from dstk.data import PandasSQL >>> >>> log = PandasSQL(sqlite3.connect("metrics.log")) >>> >>> log("SELECT asctime, name, threadName FROM logs;") asctime name threadName 0 2020-04-13T13:31:06.973864 python.metrics.timer MainThread 1 2020-04-13T13:31:11.469728 python.metrics.timer MainThread >>> >>> log("SELECT message FROM logs;") message 0 {"name": "function_test", "dt": "0:00:00.500830"} 1 {"name": "function_test", "dt": "0:00:00.500830"}
-
class
dstk.metrics._handlers.Warp10Handler(token: str, host: str = '127.0.0.1', port: str = '8080', field_value: str = 'value', format: List[str] = ['name', 'msg'], api_version: str = 'v0')[source]¶ Bases:
dstk.metrics._handlers.HandlerBaseClasse de base permettant de créer un handler à partir d’une liste de Handler vers une base interfacée à Warp10.