Skip to main content

flare-sdk

Cliente leve para enviar logs e requests ao Flare, o sistema de observabilidade da lunacheckout.

Uma app instrumentada manda telemetria para POST /ingest com o token da sua source; o Flare recebe, resolve token → source e grava. Este pacote é o lado cliente desse contrato — a parte que envia.

[sua API]  ──flare-sdk──>  POST /ingest (Bearer token)  ──>  [Flare]  ──>  dashboard

Princípios

  • Nunca derruba a sua app. Toda falha de envio (Flare fora do ar, rede caída, token errado) é engolida. Telemetria quebrada não pode virar um 500 na sua API.
  • Nunca bloqueia a request. Os eventos entram numa fila e uma thread de background os entrega em lote. Se a fila enche, o evento é descartado — nunca se segura o request esperando o Flare.
  • Zero dependências no core. O transporte usa a stdlib (urllib). pip install flare-sdk não puxa mais nada. O middleware de FastAPI é um extra opcional que nem sequer importa framework novo (fala ASGI direto).
  • Sobrevive ao fork. uvicorn/gunicorn forkam workers; o SDK recria a thread de entrega por processo, sem você pensar nisso.

Instalação

pip install flare-sdk
# com o middleware de FastAPI (opcional; não puxa dependência nova):
pip install "flare-sdk[fastapi]"

Começo rápido

O jeito mais comum: pluge no logging que você já usa. Uma linha, e tudo que a app já loga passa a chegar ao Flare.

import logging
from flare_sdk import FlareHandler

logging.getLogger().addHandler(
    FlareHandler(
        token="seu-source-token",
        endpoint="https://flare.lunacheckout.com/ingest",
    )
)

logging.getLogger("checkout").info(
    "pagamento aprovado", extra={"order_id": 42, "gateway": "pagarme"}
)

order_id e gateway viram atributos pesquisáveis no Flare — não texto espremido na mensagem.

Configuração por ambiente

token e endpoint caem para as variáveis FLARE_TOKEN e FLARE_INGEST_URL quando omitidos. Assim você liga o SDK sem tocar no código:

export FLARE_TOKEN="seu-source-token"
export FLARE_INGEST_URL="https://flare.lunacheckout.com/ingest"
from flare_sdk import FlareHandler
logging.getLogger().addHandler(FlareHandler())  # lê do ambiente

Instrumentando requests (FastAPI / Starlette)

Uma linha registra method, path, status_code e duration_ms de cada request. As rotas são agrupadas pelo template (/orders/{id}), não pelo id concreto — senão a tela de métricas explodiria em cardinalidade.

from fastapi import FastAPI
from flare_sdk import Flare
from flare_sdk.fastapi import FlareMiddleware

app = FastAPI()
flare = Flare()  # token/endpoint do ambiente

app.add_middleware(FlareMiddleware, client=flare)

Se a rota levantar, a request é registrada como 500 e a exceção é re-levantada — o middleware observa, não sequestra o seu erro.

Enviando eventos à mão

Além do handler, você pode mandar logs, requests ou qualquer evento direto:

from flare_sdk import Flare

flare = Flare(token="...", endpoint="https://flare.lunacheckout.com/ingest")

flare.log("job iniciado", severity="INFO", job="reconciliação")
flare.request("POST", "/charge", 201, duration_ms=87.4, gateway="pagarme")
flare.capture({"message": "evento cru", "severity": "DEBUG", "qualquer": "coisa"})

Um mesmo cliente serve o handler e as chamadas manuais — passe-o ao handler para compartilhar uma fila só:

handler = FlareHandler(client=flare)

Severidade

Use os nomes de sempre do logging (o Flare os entende todos): DEBUG, INFO, WARNING, ERROR, CRITICAL. No modelo OTel do Flare, erro é tudo com número >= 17 (ERROR e CRITICAL/FATAL).

Referência de configuração

Parâmetro Default O que faz
token $FLARE_TOKEN Token da source (Bearer). Obrigatório.
endpoint $FLARE_INGEST_URL URL completa do /ingest. Obrigatório.
batch_size 100 Máximo de eventos por POST.
flush_interval 2.0 Segundos até mandar um lote parcial.
max_queue 10000 Teto da fila; além disso, descarta (ver dropped).
timeout 5.0 Timeout de cada POST, em segundos.
max_retries 3 Retries de erro transiente (5xx/rede), com backoff.
default_attributes {} Atributos anexados a todo evento (ex.: service).
on_error None Callback (exc) -> None para observar falhas de envio.

Erros permanentes (4xx: token inválido, lote malformado, corpo grande demais) são descartados sem retry — repetir mandaria o mesmo 4xx.

Encerramento limpo

O cliente registra um atexit que drena a fila no fim do processo. Em jobs curtos, force o envio com flush() ou use o context manager:

with Flare() as flare:
    flare.log("job de 1 tiro")
# sai daqui com a fila drenada

flare.flush(timeout=5)  # ou explicitamente

Observando a saúde do próprio SDK

flare = Flare(..., on_error=lambda exc: logging.getLogger("flare").warning("envio falhou: %s", exc))
...
flare.dropped  # quantos eventos foram descartados por fila cheia (sinal de saturação)

Desenvolvimento

pip install -e ".[dev]"
pytest

Nenhum teste toca a rede — o transporte é substituído por um dublê. Cobertura mínima 85%.

Licença

MIT.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flare_sdk-0.4.0.tar.gz (28.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flare_sdk-0.4.0-py3-none-any.whl (20.9 kB view details)

Uploaded Python 3

File details

Details for the file flare_sdk-0.4.0.tar.gz.

File metadata

  • Download URL: flare_sdk-0.4.0.tar.gz
  • Upload date:
  • Size: 28.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for flare_sdk-0.4.0.tar.gz
Algorithm Hash digest
SHA256 e6002dfcf82b216cd530d4709b3bc65240d9724223a2cb8107600c17a27e642f
MD5 b7b1dd26777cd1fd225771d8031daffe
BLAKE2b-256 8abdafcdf850360b6d5acdbef1e333a759a245d1cdf19dc39631d80acfc93876

See more details on using hashes here.

Provenance

The following attestation bundles were made for flare_sdk-0.4.0.tar.gz:

Publisher: publish.yml on flyrecheckout/flare-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file flare_sdk-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: flare_sdk-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 20.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for flare_sdk-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a5991ff02ae08f72e9e089febc25b0d44b8580f3d861f8ee9547948ba06382d2
MD5 cf306392eb52801e71704de1586d3b2e
BLAKE2b-256 00a10e3c7567c06ead87d98b07b421ba199d3f3eba2ac51ea05414aeab7075a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for flare_sdk-0.4.0-py3-none-any.whl:

Publisher: publish.yml on flyrecheckout/flare-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page