douglasmoraisdev / metrics_decorators

Decorators to help log metrics

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

metrics_decorators

Python package de Decorators para auxiliar no log de metricas usando json_log

Instalação

No arquivo requeriments.txt do projeto a ser usado, adicionar a linha:

git+https://github.com/douglasmoraisdev/metrics_decorators#egg=metrics_decorators

Ou manualmente, usando PIP:

$ pip install git+https://github.com/douglasmoraisdev/metrics_decorators#egg=metrics_decorators

Exemplo de importação e uso:

from json_log import applog # dependencia obrigatoria
from metrics_decorators.func_time_metrics import log_func_time

if __name__ == '__main__':

    # Adicionar o decorator a nivel funcao
    @log_func_time(applog)
    def funcao_teste(param):
        '''
           Algum algoritimo de processamento que deseje cronometrar
        '''
        return result

    # ao chamar a funcao em qualquer ponto, o decorator irá ser usado
    funcao_teste(2)

Decorators

log_func_time

Loga o tempo total de execução de uma função em nível INFO adicionando a tag metrics no log.

params:

  • applog(required): Objeto AppLog(json_log), utilizado para logar.

  • qtd_label(optional): Label usado para identificar a quantidade processada no log. Ex.: 'qtd_label=quantidade_processos_atualizados' ou 'qtd_label=total_linhas_retornadas'

  • tuple_qtd_index(optional): Indice da tupla de retorno da função para ser usado como quantidade. Ex.: Uma função pode retornar uma tupla de itens com 3 elementos, caso deseje usar o tamanho de algum desses elementos como quantidade, basta informar o indice dessa tupla neste parametro.

Exemplos:

Uso em funções com retorno não quantitativo:

    @log_func_time(applog)
    def funcao_teste(param):
        '''
            Alguma funcao sem retorno de quantidade (quantitativa)
        '''
        return True

Vai logar:

{
    "@timestamp": "2020-05-12 12:15:55,218",
    "appname": "teste_log",
    "loglevel": "INFO",
    "run_id": "2cc04541-c53c-4832-9937-ffb6676773f4",
    "total_items": 0,
    "total_label": "",
    "message": "Executando funcao_teste",
    "total_time": "0:00:03.000411",
    "function_name": "__main__.funcao_teste",
    "tags": [
        "metrics"
    ]
}

Uso em funções com retorno quantitativo:

Sem label:

    @log_func_time(applog)
    def funcao_teste(param):
        '''
            Alguma funcao que retorne quantidade (quantitativa)
        '''
        qtd_linhas_processadas = algum_resultado_quantitativo
        return qtd_linhas_processadas

Vai logar (note o nó total_itens):

{
    "@timestamp": "2020-05-12 12:21:44,652",
    "appname": "teste_log",
    "loglevel": "INFO",
    "run_id": "1da11fc7-ea76-4dc8-8036-a2840691a7f5",
    "total_items": 4,
    "total_label": "",
    "message": "Executando funcao_teste",
    "total_time": "0:00:00.000012",
    "function_name": "__main__.funcao_teste",
    "tags": [
        "metrics"
    ]
}

Com label:

    @log_func_time(applog, qtd_label='total_de_registros')
    def funcao_teste(param):
        '''
            Alguma funcao que retorne quantidade (quantitativa)
        '''
        qtd_linhas_processadas = algum_resultado_quantitativo
        return qtd_linhas_processadas

Vai logar (note o nó total_label):

{
    "@timestamp": "2020-05-12 12:23:13,590",
    "appname": "teste_log",
    "loglevel": "INFO",
    "run_id": "e9371309-8c9d-459c-8572-43b7acc89b2d",
    "total_items": 4,
    "total_label": "total_de_registros",
    "message": "Executando funcao_teste",
    "total_time": "0:00:00.000013",
    "function_name": "__main__.funcao_teste",
    "tags": [
        "metrics"
    ]
}

Com Tuple Index:

    @log_func_time(applog, qtd_label='total_dataframe_qtd_2', tuple_qtd_index=2)
    def funcao_teste(param):
        qtd_1 = [1,2,3,4]
        qtd_2 = [{'a': 1, 'b': 2, 'x': 3}]
        return qtd_1, qtd_2

Vai logar (note o nó total_items, utilizou o tamanho do qtd_2 do retorno):

{
    "@timestamp": "2020-05-12 12:24:13,890",
    "appname": "teste_log",
    "loglevel": "INFO",
    "run_id": "e9371309-8c9d-459c-8575-43b7acc89b3d",
    "total_items": 3,
    "total_label": "total_dataframe_qtd_2",
    "message": "Executando funcao_teste",
    "total_time": "0:00:00.000013",
    "function_name": "__main__.funcao_teste",
    "tags": [
        "metrics"
    ]
}

About

Decorators to help log metrics


Languages

Language:Python 100.0%