Skip to main content

nsj-audit-lib

Biblioteca de auditoria interna da Nasajon. Ela implementa a instrumentação de auditoria descrita em docs/Nasajon ERP4 - Estratégia de auditoria v1.0.pdf e fornece utilitários para:

  • Publicar eventos de request no Redis Streams (request_started/request_finished).
  • Registrar evidências transacionais (audit_outbox) no banco do tenant.
  • Normalizar parâmetros e mascarar dados sensíveis.

1. Funcionamento geral da auditoria

Resumo do fluxo (conforme a especificação):

  1. Em todo request:
    • Gera request_id.
    • Resolve tenant_id, grupo_empresarial_id e area_atendimento_id.
    • Captura identidade (user_id/subject_user_id/session_id).
    • Define action e params_normalizados.
    • Publica request_started no Redis Streams.
  2. Ao finalizar o request:
    • Publica request_finished com status, duração, erro normalizado e flags de transação.
  3. Em requests transacionais (POST/PUT/PATCH/DELETE):
    • Grava uma linha na audit_outbox no mesmo commit da transação.
    • Se houver rollback, não existe linha na outbox.

O consumo e consolidação (ClickHouse/persist_worker) fazem parte da arquitetura geral, mas não pertencem a este repositório.

2. Objetivo da lib

  • Enviar eventos de auditoria para o Redis (baixa latência e alto throughput).
  • Garantir a existência/consistência da estrutura audit_outbox no banco do tenant quando necessário.
  • Fornecer insumos para rastrear transações (tentadas x comitadas) e apoiar análise operacional.

3. Explicações de uso

3.1 Util AuditRequestUtil

Responsável por registrar início e fim de request. Ela:

  • Gera g.request_id.
  • Resolve tenant/grupo/area (via AuditConfig ou leitura de query/body).
  • Normaliza parâmetros (via util_normaliza_parametros).
  • Publica request_started e request_finished via AuditUtil.
  • Em caso de erro, inclui request_json truncado e mascarado.

Exemplo (Flask):

from nsj_audit_lib.util.audit_request_util import AuditRequestUtil
from nsj_audit_lib.util.audit_config import AuditConfig

audit = AuditRequestUtil(
    audit_config=AuditConfig(
        tenant_field="tenant_id",
        grupo_empresarial_field="grupo_empresarial_id",
        area_atendimento_field="area_atendimento_id",
    ),
    dto_class=MeuDTO,
)

def handler(**path_args):
    audit.record_audit_request(**path_args)
    response = processar_request()
    audit.record_audit_response(response)
    return response

3.2 Util AuditUtil

Camada de baixo nível que publica eventos no Redis Streams.

Campos principais de request_started:

  • request_id, tenant_id, grupo_empresarial_id, area_atendimento_id
  • actor_user_id, subject_user_id, session_id
  • http_method, http_route, action
  • params_normalizados e flag is_transaction_intent

Campos principais de request_finished:

  • request_id, tenant_id, grupo_empresarial_id
  • http_status, duration_ms, tx_attempted
  • error_normalized (quando aplicável) e request_json em caso de erro

Exemplo:

from nsj_audit_lib.util.audit_util import AuditUtil, DBTypes, HTTPMethods

audit_util = AuditUtil()
audit_util.emit_request_started(
    request_id=request_id,
    tenant_id=tenant_id,
    grupo_empresarial_id=grupo_id,
    area_atendimento_id=area_id,
    db_type=DBTypes.MULTIBANCO,
    db_key="db1",
    db_user="db_user",
    actor_user_id="user@example.com",
    subject_user_id=None,
    session_id=None,
    http_method=HTTPMethods.POST,
    http_route="/items/123",
    action="route_called",
    params_normalizados={"query_args": {}, "body": {}, "path_args": {"id": "123"}},
)

3.3 Classe AuditService

Registra evidências transacionais na audit_outbox. Ela:

  • Só grava se existir contexto de request e g.request_id.
  • Resolve tenant/grupo/area de g ou request.
  • Monta commit_json (delta em updates; estado em inserts; id em deletes).
  • Inclui payload_sha256 para referência do payload.
  • Usa DAOBaseAudit para inserir e garantir schema quando necessário.

Exemplo:

from nsj_audit_lib.service.audit_service import AuditService

audit_service = AuditService(db_adapter)
audit_service._dto_class = MeuDTO
audit_service._entity_class = MinhaEntity

audit_service.record_audit_outbox(
    action="update",
    dto=novo_dto,
    resource_id=novo_dto.id,
    old_dto=dto_antigo,
)

4. Integração nativa com o RestLib

O RestLib (nsj_rest_lib) já utiliza:

  • AuditRequestUtil na camada de rotas (início/fim de request).
  • AuditService na camada de serviços (outbox transacional).

4.1 Como habilitar

Defina AUDIT_REDIS_URL no ambiente. Sem essa variável, o Redis não é configurado e os eventos não são publicados.

Variáveis relacionadas:

  • AUDIT_REDIS_URL (obrigatória para publicar no Redis)
  • AUDIT_STREAM_KEY (default: audit:requests)
  • AUDIT_OUTBOX_TRANSACTION (default: true)
  • DATABASE_NAME, DATABASE_USER, DATABASE_DRIVER (suporte ao outbox)

4.2 Limites da auditoria no RestLib

  • Foco em auditoria de negócio: requests autenticados e com contexto de tenant.
  • Dados sensíveis são mascarados/truncados no payload de erro.
  • request_json só é armazenado no Redis quando há erro.
  • A captura não cobre eventos de borda (ex.: gateway), apenas o backend.

5. Planos futuros

  • Adicionar decorators para registrar request_received e request_dispatch, permitindo rastreio do fluxo completo (entrada/saída) com granularidade maior.

Metadata

Release files for nsj-audit-lib 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nsj-audit-lib 0.0.2
File Size Uploaded
nsj_audit_lib-0.0.2.tar.gz 18.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nsj-audit-lib 0.0.2
File Interpreter ABI Platform
nsj_audit_lib-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 39.8 kB

Release files / nsj_audit_lib-0.0.2.tar.gz

Download URL nsj_audit_lib-0.0.2.tar.gz
Size 18.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8478f91d753ddeeb2ae57e163a188697eb1ca89816147652b8833bb2cfcec201
BLAKE2b-256 checksum
How to use checksums
cb16d16a134ada3f802da3d49425cbf804b729838ef656341cf64aef81f95bd6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.2

Release files / nsj_audit_lib-0.0.2-py3-none-any.whl

Download URL nsj_audit_lib-0.0.2-py3-none-any.whl
Size 21.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3b0b0e2fd7381944211b5b81df0eb481403e9b111cda6fbf53e2681daba75967
BLAKE2b-256 checksum
How to use checksums
1efe17a926bfd31d0bce3b26bba6e89c123984927e0ac63585b4fe9d008db904
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.2

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page