error-dispatcher-client


Nameerror-dispatcher-client JSON
Version 1.0.7 PyPI version JSON
download
home_pagehttps://github.com/solinftec/error_dispatcher_client
SummaryA Python package for tracking and handling errors with support for multiple providers like Kafka and Email.
upload_time2025-01-21 19:12:29
maintainerNone
docs_urlNone
authorWillian Antunes
requires_python>=3.7
licenseMIT License Copyright (c) 2025 Solinftec Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords error handling kafka email tracking
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
---

# 🔥 error_dispatcher_client

**`error_dispatcher_client`** é um pacote Python poderoso para rastreamento e tratamento de erros em aplicações web. Ele captura exceções ocorridas em APIs desenvolvidas com **Flask** ou **FastAPI** e permite enviar relatórios de erros para diversos provedores, como **Kafka**, **Discord** e **E-mail**. Com suporte a múltiplos provedores simultâneos, é fácil adaptar o pacote às suas necessidades específicas.

---

## ✨ Principais Funcionalidades

- **Captura automática de exceções** em endpoints de **Flask** e **FastAPI**.
- **Suporte a múltiplos provedores** para notificação:
  - **Kafka**: Envia mensagens de erro para um tĂłpico Kafka.
  - **Discord**: Envia mensagens de erro via webhook
  - **E-mail**: Envia relatĂłrios detalhados via SMTP.
  - **Fácil extensão** para novos provedores personalizados.
- Configuração simples e integração prática.

---

## 🛠️ Instalação

```bash
pip install error_dispather_client
```

---

## 🚀 Como Usar

### Com Flask

```python
from flask import Flask
from error_dispatcher_client import FlaskMetrics
from error_dispatcher_client.providers import KafkaProvider, EmailProvider

app = Flask(__name__)

kafka_provider = KafkaProvider(bootstrap_servers="localhost:9092", topic="errors")
email_provider = EmailProvider(
  smtp_server="smtp.gmail.com",
  smtp_port=587,
  username="seuemail@gmail.com",
  password="suasenha"
)

metrics = FlaskMetrics(providers=[kafka_provider, email_provider])
metrics.init_app(app)


@app.route("/")
def index():
  raise ValueError("Teste de erro")


if __name__ == "__main__":
  app.run(debug=True)
```

### Com FastAPI

```python
import uvicorn
from fastapi import FastAPI
from error_dispatcher_client import FastAPIMetrics
from error_dispatcher_client.providers import KafkaProvider, EmailProvider

app = FastAPI()

kafka_provider = KafkaProvider(bootstrap_servers="localhost:9092", topic="errors")
email_provider = EmailProvider(
  smtp_server="smtp.gmail.com",
  smtp_port=587,
  username="seuemail@gmail.com",
  password="suasenha"
)

metrics = FastAPIMetrics(providers=[kafka_provider, email_provider])
metrics.init_app(app)


@app.get("/")
async def index():
  raise ValueError("Teste de erro")


if __name__ == "__main__":
  uvicorn.run(app, host="0.0.0.0", port=8000)
```

---

## 🌟 Recursos Avançados

### Configuração de Múltiplos Provedores
VocĂŞ pode usar mĂşltiplos provedores simultaneamente, personalizando como os erros sĂŁo processados.

```python
providers = [
    KafkaProvider(
      bootstrap_servers="localhost:9092",
      topic="errors"
    ),
    EmailProvider(
        smtp_server="smtp.gmail.com",
        smtp_port=587,
        username="seuemail@gmail.com",
        password="suasenha"
    )
]

metrics = FlaskMetrics(providers=providers)
metrics.init_app(app)
```

### Configuração de Template de mensagem
VocĂŞ pode usar da maneira que quiser os parametros a serem enviados pelos provedores, personalizando quais paramentros serao enviados, ocultando alguns por exemplo.
```python
from error_dispatcher_client import FastAPIMetrics
from error_dispatcher_client.templates import CustomTemplate
from error_dispatcher_client.providers import KafkaProvider, EmailProvider, DiscordProvider

message_template = CustomTemplate(
    {
        "app_name" : None,
        "endpoint" : None,
        "full_url" : None,
        "method" : None,
        "status_code" : None,
        "duration" : None,
        "headers" : None,
        "query_params" : None,
        #"request_body" : None,
        "client_ip" : None,
        "user_agent" : None,
        "error_details" : None,
        "error_type" : None,
        #"traceback" : None
        "timestamp" : None
    }
)

app = FastAPI()

discord_provider = DiscordProvider(
    webhook_url="https://discord.com/api/webhooks/1328369709577666633/hyiNF9Xr97YfJDnNF89GG4-e5v1sT-p-v1P32KhqWwM3F4xs3JyK1BvND8TYnA7LFj7r",
    message_template=message_template
)

metrics = FastAPIMetrics(providers=[discord_provider, kafka_provider], app_name="api-plant-manager")
metrics.init_app(app)
...

```




### Criando Provedores Personalizados
VocĂŞ pode adicionar novos provedores implementando a interface `BaseProvider`:

```python
from error_dispatcher_client.providers import ErrorProvider


class CustomProvider(ErrorProvider):
  def send(self, error_data: dict):
    print("Erro recebido:", error_data)
```

---


## 📦 Estrutura do Projeto

```plaintext
error_dispatcher_client/
│
├── error_dispatcher_client/    # Código-fonte principal do pacote
│   └── templates/              # Implementações de templates de menssagem
│   │   ├── __init__.py
│   │   └── base_template.py    # Interface base para mensagens
│   └── providers/              # Implementações de provedores
│   │   ├── __init__.py
│   │   ├── base_provider.py    # Interface base para provedores
│   │   ├── kafka_provider.py   # Provedor Kafka
│   │   ├── discord_provider.py # Provedor Discord
│   │   └── email_provider.py   # Provedor de E-mail
│   ├── __init__.py
│   ├── flask_metrics.py        # Integração com Flask
│   ├── fastapi_metrics.py      # Integração com FastAPI
│   └── base_metrics.py         # Integração Base Temaplate
│
├── examples/                   # Implementacao exemplo
│   ├── fastapi_example.py      # Exemplo fastapi
│   └── test_email.py           # Exemplo flask
│
├── tests/                      # Testes unitários
│   ├── __init__.py
│   ├── test_flask.py
│   ├── test_fastapi.py
│   ├── test_kafka.py
│   └── test_email.py
│
├── README.md                   # Documentação do projeto
├── requirements.txt            # Dependencias do pacote
└── setup.py                    # Configurações do pacote
```

## 🏗️ Contribuindo
Contribuições são bem-vindas! Para contribuir:
1. Faça um fork do repositório.
2. Crie um branch para sua feature/bugfix (`git checkout -b minha-feature`).
3. Envie um pull request.

--- 

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/solinftec/error_dispatcher_client",
    "name": "error-dispatcher-client",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "error handling, kafka, email, tracking",
    "author": "Willian Antunes",
    "author_email": "Willian Antunes <willian.antunes@solinftec.com>",
    "download_url": "https://files.pythonhosted.org/packages/a1/5a/4db1c959a815a1a6c7a070e0f71b43eb49d1f3dfac6bfba949c3c9f6317d/error_dispatcher_client-1.0.7.tar.gz",
    "platform": null,
    "description": "\n---\n\n# \ud83d\udd25 error_dispatcher_client\n\n**`error_dispatcher_client`** \u00e9 um pacote Python poderoso para rastreamento e tratamento de erros em aplica\u00e7\u00f5es web. Ele captura exce\u00e7\u00f5es ocorridas em APIs desenvolvidas com **Flask** ou **FastAPI** e permite enviar relat\u00f3rios de erros para diversos provedores, como **Kafka**, **Discord** e **E-mail**. Com suporte a m\u00faltiplos provedores simult\u00e2neos, \u00e9 f\u00e1cil adaptar o pacote \u00e0s suas necessidades espec\u00edficas.\n\n---\n\n## \u2728 Principais Funcionalidades\n\n- **Captura autom\u00e1tica de exce\u00e7\u00f5es** em endpoints de **Flask** e **FastAPI**.\n- **Suporte a m\u00faltiplos provedores** para notifica\u00e7\u00e3o:\n  - **Kafka**: Envia mensagens de erro para um t\u00f3pico Kafka.\n  - **Discord**: Envia mensagens de erro via webhook\n  - **E-mail**: Envia relat\u00f3rios detalhados via SMTP.\n  - **F\u00e1cil extens\u00e3o** para novos provedores personalizados.\n- Configura\u00e7\u00e3o simples e integra\u00e7\u00e3o pr\u00e1tica.\n\n---\n\n## \ud83d\udee0\ufe0f Instala\u00e7\u00e3o\n\n```bash\npip install error_dispather_client\n```\n\n---\n\n## \ud83d\ude80 Como Usar\n\n### Com Flask\n\n```python\nfrom flask import Flask\nfrom error_dispatcher_client import FlaskMetrics\nfrom error_dispatcher_client.providers import KafkaProvider, EmailProvider\n\napp = Flask(__name__)\n\nkafka_provider = KafkaProvider(bootstrap_servers=\"localhost:9092\", topic=\"errors\")\nemail_provider = EmailProvider(\n  smtp_server=\"smtp.gmail.com\",\n  smtp_port=587,\n  username=\"seuemail@gmail.com\",\n  password=\"suasenha\"\n)\n\nmetrics = FlaskMetrics(providers=[kafka_provider, email_provider])\nmetrics.init_app(app)\n\n\n@app.route(\"/\")\ndef index():\n  raise ValueError(\"Teste de erro\")\n\n\nif __name__ == \"__main__\":\n  app.run(debug=True)\n```\n\n### Com FastAPI\n\n```python\nimport uvicorn\nfrom fastapi import FastAPI\nfrom error_dispatcher_client import FastAPIMetrics\nfrom error_dispatcher_client.providers import KafkaProvider, EmailProvider\n\napp = FastAPI()\n\nkafka_provider = KafkaProvider(bootstrap_servers=\"localhost:9092\", topic=\"errors\")\nemail_provider = EmailProvider(\n  smtp_server=\"smtp.gmail.com\",\n  smtp_port=587,\n  username=\"seuemail@gmail.com\",\n  password=\"suasenha\"\n)\n\nmetrics = FastAPIMetrics(providers=[kafka_provider, email_provider])\nmetrics.init_app(app)\n\n\n@app.get(\"/\")\nasync def index():\n  raise ValueError(\"Teste de erro\")\n\n\nif __name__ == \"__main__\":\n  uvicorn.run(app, host=\"0.0.0.0\", port=8000)\n```\n\n---\n\n## \ud83c\udf1f Recursos Avan\u00e7ados\n\n### Configura\u00e7\u00e3o de M\u00faltiplos Provedores\nVoc\u00ea pode usar m\u00faltiplos provedores simultaneamente, personalizando como os erros s\u00e3o processados.\n\n```python\nproviders = [\n    KafkaProvider(\n      bootstrap_servers=\"localhost:9092\",\n      topic=\"errors\"\n    ),\n    EmailProvider(\n        smtp_server=\"smtp.gmail.com\",\n        smtp_port=587,\n        username=\"seuemail@gmail.com\",\n        password=\"suasenha\"\n    )\n]\n\nmetrics = FlaskMetrics(providers=providers)\nmetrics.init_app(app)\n```\n\n### Configura\u00e7\u00e3o de Template de mensagem\nVoc\u00ea pode usar da maneira que quiser os parametros a serem enviados pelos provedores, personalizando quais paramentros serao enviados, ocultando alguns por exemplo.\n```python\nfrom error_dispatcher_client import FastAPIMetrics\nfrom error_dispatcher_client.templates import CustomTemplate\nfrom error_dispatcher_client.providers import KafkaProvider, EmailProvider, DiscordProvider\n\nmessage_template = CustomTemplate(\n    {\n        \"app_name\" : None,\n        \"endpoint\" : None,\n        \"full_url\" : None,\n        \"method\" : None,\n        \"status_code\" : None,\n        \"duration\" : None,\n        \"headers\" : None,\n        \"query_params\" : None,\n        #\"request_body\" : None,\n        \"client_ip\" : None,\n        \"user_agent\" : None,\n        \"error_details\" : None,\n        \"error_type\" : None,\n        #\"traceback\" : None\n        \"timestamp\" : None\n    }\n)\n\napp = FastAPI()\n\ndiscord_provider = DiscordProvider(\n    webhook_url=\"https://discord.com/api/webhooks/1328369709577666633/hyiNF9Xr97YfJDnNF89GG4-e5v1sT-p-v1P32KhqWwM3F4xs3JyK1BvND8TYnA7LFj7r\",\n    message_template=message_template\n)\n\nmetrics = FastAPIMetrics(providers=[discord_provider, kafka_provider], app_name=\"api-plant-manager\")\nmetrics.init_app(app)\n...\n\n```\n\n\n\n\n### Criando Provedores Personalizados\nVoc\u00ea pode adicionar novos provedores implementando a interface `BaseProvider`:\n\n```python\nfrom error_dispatcher_client.providers import ErrorProvider\n\n\nclass CustomProvider(ErrorProvider):\n  def send(self, error_data: dict):\n    print(\"Erro recebido:\", error_data)\n```\n\n---\n\n\n## \ud83d\udce6 Estrutura do Projeto\n\n```plaintext\nerror_dispatcher_client/\n\u2502\n\u251c\u2500\u2500 error_dispatcher_client/    # C\u00f3digo-fonte principal do pacote\n\u2502   \u2514\u2500\u2500 templates/              # Implementa\u00e7\u00f5es de templates de menssagem\n\u2502   \u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u2502   \u2514\u2500\u2500 base_template.py    # Interface base para mensagens\n\u2502   \u2514\u2500\u2500 providers/              # Implementa\u00e7\u00f5es de provedores\n\u2502   \u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u2502   \u251c\u2500\u2500 base_provider.py    # Interface base para provedores\n\u2502   \u2502   \u251c\u2500\u2500 kafka_provider.py   # Provedor Kafka\n\u2502   \u2502   \u251c\u2500\u2500 discord_provider.py # Provedor Discord\n\u2502   \u2502   \u2514\u2500\u2500 email_provider.py   # Provedor de E-mail\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u251c\u2500\u2500 flask_metrics.py        # Integra\u00e7\u00e3o com Flask\n\u2502   \u251c\u2500\u2500 fastapi_metrics.py      # Integra\u00e7\u00e3o com FastAPI\n\u2502   \u2514\u2500\u2500 base_metrics.py         # Integra\u00e7\u00e3o Base Temaplate\n\u2502\n\u251c\u2500\u2500 examples/                   # Implementacao exemplo\n\u2502   \u251c\u2500\u2500 fastapi_example.py      # Exemplo fastapi\n\u2502   \u2514\u2500\u2500 test_email.py           # Exemplo flask\n\u2502\n\u251c\u2500\u2500 tests/                      # Testes unit\u00e1rios\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u251c\u2500\u2500 test_flask.py\n\u2502   \u251c\u2500\u2500 test_fastapi.py\n\u2502   \u251c\u2500\u2500 test_kafka.py\n\u2502   \u2514\u2500\u2500 test_email.py\n\u2502\n\u251c\u2500\u2500 README.md                   # Documenta\u00e7\u00e3o do projeto\n\u251c\u2500\u2500 requirements.txt            # Dependencias do pacote\n\u2514\u2500\u2500 setup.py                    # Configura\u00e7\u00f5es do pacote\n```\n\n## \ud83c\udfd7\ufe0f Contribuindo\nContribui\u00e7\u00f5es s\u00e3o bem-vindas! Para contribuir:\n1. Fa\u00e7a um fork do reposit\u00f3rio.\n2. Crie um branch para sua feature/bugfix (`git checkout -b minha-feature`).\n3. Envie um pull request.\n\n--- \n",
    "bugtrack_url": null,
    "license": "MIT License  Copyright (c) 2025 Solinftec  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ",
    "summary": "A Python package for tracking and handling errors with support for multiple providers like Kafka and Email.",
    "version": "1.0.7",
    "project_urls": {
        "Documentation": "https://github.com/solinftec/error_dispatcher_client#readme",
        "Homepage": "https://github.com/solinftec/error_dispatcher_client",
        "Repository": "https://github.com/solinftec/error_dispatcher_client"
    },
    "split_keywords": [
        "error handling",
        " kafka",
        " email",
        " tracking"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "101c7459da9117a6d0647fc28bcaf98d7c64cc12973a7bb622dd038c47c66bc2",
                "md5": "1db708bf56dd11e3aa901cfa8dd81053",
                "sha256": "ed3aaa16dbee48b6f12c0af9b302232fe4f80c35690b513d0290eaba8400a96f"
            },
            "downloads": -1,
            "filename": "error_dispatcher_client-1.0.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1db708bf56dd11e3aa901cfa8dd81053",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 14832,
            "upload_time": "2025-01-21T19:12:27",
            "upload_time_iso_8601": "2025-01-21T19:12:27.826418Z",
            "url": "https://files.pythonhosted.org/packages/10/1c/7459da9117a6d0647fc28bcaf98d7c64cc12973a7bb622dd038c47c66bc2/error_dispatcher_client-1.0.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a15a4db1c959a815a1a6c7a070e0f71b43eb49d1f3dfac6bfba949c3c9f6317d",
                "md5": "4e5140b7da0cc92ad0cd879a188f811b",
                "sha256": "f569a8dece64eff58aad86616a3bb2854df39afcc8fb7c40a63c88d7aac3c372"
            },
            "downloads": -1,
            "filename": "error_dispatcher_client-1.0.7.tar.gz",
            "has_sig": false,
            "md5_digest": "4e5140b7da0cc92ad0cd879a188f811b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 12338,
            "upload_time": "2025-01-21T19:12:29",
            "upload_time_iso_8601": "2025-01-21T19:12:29.906794Z",
            "url": "https://files.pythonhosted.org/packages/a1/5a/4db1c959a815a1a6c7a070e0f71b43eb49d1f3dfac6bfba949c3c9f6317d/error_dispatcher_client-1.0.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-21 19:12:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "solinftec",
    "github_project": "error_dispatcher_client",
    "github_not_found": true,
    "lcname": "error-dispatcher-client"
}
        
Elapsed time: 0.78721s