{"id":20381613,"url":"https://github.com/douglasmoraisdev/metrics_decorators","last_synced_at":"2026-06-06T17:32:47.748Z","repository":{"id":211454154,"uuid":"263346107","full_name":"douglasmoraisdev/metrics_decorators","owner":"douglasmoraisdev","description":"Decorators to help log metrics","archived":false,"fork":false,"pushed_at":"2020-05-12T20:29:29.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-15T07:38:32.020Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/douglasmoraisdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-05-12T13:34:05.000Z","updated_at":"2020-05-12T20:29:31.000Z","dependencies_parsed_at":"2023-12-08T16:50:52.269Z","dependency_job_id":null,"html_url":"https://github.com/douglasmoraisdev/metrics_decorators","commit_stats":null,"previous_names":["douglasmoraisdev/metrics_decorators"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglasmoraisdev%2Fmetrics_decorators","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglasmoraisdev%2Fmetrics_decorators/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglasmoraisdev%2Fmetrics_decorators/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglasmoraisdev%2Fmetrics_decorators/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/douglasmoraisdev","download_url":"https://codeload.github.com/douglasmoraisdev/metrics_decorators/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241933609,"owners_count":20044744,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T02:14:30.576Z","updated_at":"2026-06-06T17:32:47.725Z","avatar_url":"https://github.com/douglasmoraisdev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# metrics_decorators\nPython package de Decorators para auxiliar no log de metricas usando [json_log](https://github.com/douglasmoraisdev/json_log)\n\n\n## Instalação\n\nNo arquivo `requeriments.txt` do projeto a ser usado, adicionar a linha:\n```\ngit+https://github.com/douglasmoraisdev/metrics_decorators#egg=metrics_decorators\n```\n\nOu manualmente, usando PIP:\n```sh\n$ pip install git+https://github.com/douglasmoraisdev/metrics_decorators#egg=metrics_decorators\n```\n\n\n## Exemplo de importação e uso:\n\n```python\nfrom json_log import applog # dependencia obrigatoria\nfrom metrics_decorators.func_time_metrics import log_func_time\n\nif __name__ == '__main__':\n\n    # Adicionar o decorator a nivel funcao\n    @log_func_time(applog)\n    def funcao_teste(param):\n        '''\n           Algum algoritimo de processamento que deseje cronometrar\n        '''\n        return result\n\n    # ao chamar a funcao em qualquer ponto, o decorator irá ser usado\n    funcao_teste(2)\n```\n## Decorators\n\n### `log_func_time`\nLoga o tempo total de execução de uma função em nível `INFO` adicionando a tag `metrics` no log.\n\n#### params:\n* applog(required): Objeto AppLog([json_log](https://github.com/douglasmoraisdev/json_log)), utilizado para logar.\n\n* qtd_label(optional): Label usado para identificar a quantidade processada no log.\nEx.: 'qtd_label=quantidade_processos_atualizados' ou 'qtd_label=total_linhas_retornadas'\n\n* tuple_qtd_index(optional): Indice da tupla de retorno da função para ser usado como quantidade.\nEx.: 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.\n\n### Exemplos:\nUso em funções com retorno não quantitativo:\n\n```python\n    @log_func_time(applog)\n    def funcao_teste(param):\n        '''\n            Alguma funcao sem retorno de quantidade (quantitativa)\n        '''\n        return True\n```\nVai logar:\n```json\n{\n    \"@timestamp\": \"2020-05-12 12:15:55,218\",\n    \"appname\": \"teste_log\",\n    \"loglevel\": \"INFO\",\n    \"run_id\": \"2cc04541-c53c-4832-9937-ffb6676773f4\",\n    \"total_items\": 0,\n    \"total_label\": \"\",\n    \"message\": \"Executando funcao_teste\",\n    \"total_time\": \"0:00:03.000411\",\n    \"function_name\": \"__main__.funcao_teste\",\n    \"tags\": [\n        \"metrics\"\n    ]\n}\n```\n\nUso em funções com retorno quantitativo:\n\nSem label:\n```python\n    @log_func_time(applog)\n    def funcao_teste(param):\n        '''\n            Alguma funcao que retorne quantidade (quantitativa)\n        '''\n        qtd_linhas_processadas = algum_resultado_quantitativo\n        return qtd_linhas_processadas\n```\nVai logar (note o nó total_itens):\n```json\n{\n    \"@timestamp\": \"2020-05-12 12:21:44,652\",\n    \"appname\": \"teste_log\",\n    \"loglevel\": \"INFO\",\n    \"run_id\": \"1da11fc7-ea76-4dc8-8036-a2840691a7f5\",\n    \"total_items\": 4,\n    \"total_label\": \"\",\n    \"message\": \"Executando funcao_teste\",\n    \"total_time\": \"0:00:00.000012\",\n    \"function_name\": \"__main__.funcao_teste\",\n    \"tags\": [\n        \"metrics\"\n    ]\n}\n```\n\n\nCom label:\n```python\n    @log_func_time(applog, qtd_label='total_de_registros')\n    def funcao_teste(param):\n        '''\n            Alguma funcao que retorne quantidade (quantitativa)\n        '''\n        qtd_linhas_processadas = algum_resultado_quantitativo\n        return qtd_linhas_processadas\n```\nVai logar (note o nó total_label):\n```json\n{\n    \"@timestamp\": \"2020-05-12 12:23:13,590\",\n    \"appname\": \"teste_log\",\n    \"loglevel\": \"INFO\",\n    \"run_id\": \"e9371309-8c9d-459c-8572-43b7acc89b2d\",\n    \"total_items\": 4,\n    \"total_label\": \"total_de_registros\",\n    \"message\": \"Executando funcao_teste\",\n    \"total_time\": \"0:00:00.000013\",\n    \"function_name\": \"__main__.funcao_teste\",\n    \"tags\": [\n        \"metrics\"\n    ]\n}\n```\n\nCom Tuple Index:\n```python\n    @log_func_time(applog, qtd_label='total_dataframe_qtd_2', tuple_qtd_index=2)\n    def funcao_teste(param):\n        qtd_1 = [1,2,3,4]\n        qtd_2 = [{'a': 1, 'b': 2, 'x': 3}]\n        return qtd_1, qtd_2\n```\nVai logar (note o nó total_items, utilizou o tamanho do qtd_2 do retorno):\n```json\n{\n    \"@timestamp\": \"2020-05-12 12:24:13,890\",\n    \"appname\": \"teste_log\",\n    \"loglevel\": \"INFO\",\n    \"run_id\": \"e9371309-8c9d-459c-8575-43b7acc89b3d\",\n    \"total_items\": 3,\n    \"total_label\": \"total_dataframe_qtd_2\",\n    \"message\": \"Executando funcao_teste\",\n    \"total_time\": \"0:00:00.000013\",\n    \"function_name\": \"__main__.funcao_teste\",\n    \"tags\": [\n        \"metrics\"\n    ]\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdouglasmoraisdev%2Fmetrics_decorators","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdouglasmoraisdev%2Fmetrics_decorators","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdouglasmoraisdev%2Fmetrics_decorators/lists"}