1
Wasabi_Storage_Correction
Antigravity AI Agent edited this page 2026-05-11 05:47:34 +02:00

📦 Correção Wasabi Storage

1. Contexto e Diagnóstico

O plugin de armazenamento UnifiedStorageProvider estava configurado para enviar mídias de mensagens recebidas e enviadas do WhatsApp para o Wasabi. Entretanto, os arquivos continuavam acumulando localmente no diretório do servidor (backend/media), consumindo espaço em disco desnecessariamente.

Identificamos e corrigimos 4 falhas críticas no comportamento de armazenamento:

Falha 1 — Ausência de Limpeza Local

Os arquivos de mídia eram carregados com sucesso no Wasabi S3, mas o arquivo temporário local no servidor nunca era deletado.

  • Correção: Implementado fs.unlink() assíncrono para apagar o arquivo local imediatamente após o upload remoto bem-sucedido.

Falha 2 — Caminho de Mídia Inconsistente no Banco de Dados

A coluna mediaPath no banco persistia com o caminho local do arquivo (/home/deploy/...). Como o arquivo agora é apagado da máquina após o envio para a nuvem, isso causava erros ao tentar ler mídias locally.

  • Correção: Quando a mídia é remota, a coluna mediaPath é salva como null no banco de dados, e a recuperação é feita de forma exclusiva pelo endereço do mediaUrl que aponta para o bucket remoto do Wasabi.

Falha 3 — Handlers Duplicados ao Reconfigurar

O salvamento de configurações do painel admin reativava o plugin chamando o método activate(). Isso registrava novas instâncias de rotas do Express na memória do servidor a cada clique em salvar.

  • Correção: Adicionada uma flag de controle routesRegistered para registrar os endpoints HTTP apenas na primeira inicialização do plugin.

Falha 4 — Remoção Órfã de Mídias

Ao deletar uma instância de conexão do WhatsApp, as mídias salvas no bucket remoto ficavam órfãs na nuvem.

  • Correção: Adicionado o método deletePrefix na interface de armazenamento. Agora, quando uma instância é removida, um processo em background efetua a varredura e deleta em lotes de 1000 todos os arquivos do Wasabi associados àquela instância de forma silenciosa.

2. Estrutura de Arquivos no Wasabi

As mídias do WhatsApp são arquivadas de forma organizada no bucket do Wasabi seguindo a seguinte estrutura de prefixos:

whatsapp/{tenantId}/{instanceId}/{fileName}

3. Script de Migração de Mídias (migrate-media-wasabi.mjs)

Caso mídias antigas precisem ser migradas de forma retroativa para liberar espaço em disco, disponibilizamos o script migrate-media-wasabi.mjs na raiz do projeto.

Como usar o script:

# Simulação em Dry-Run (não faz alterações no disco/banco):
node migrate-media-wasabi.mjs --dry-run

# Migração definitiva:
node migrate-media-wasabi.mjs

O script lê os registros do banco de dados, faz o upload dos binários antigos no Wasabi com o formato correspondente, atualiza a referência na tabela e apaga com segurança os arquivos locais correspondentes.