-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
Atualmente, os arquivos de execução de atividades são salvos em um volume persistente externo ao AkôFlow Server. Para permitir que usuários façam o download desses arquivos diretamente via API, será implementado um fluxo baseado em agentes temporários que acessam o volume e transmitem os dados em tempo real para o cliente final.
⸻
🎯 Objetivo
- Implementar um fluxo síncrono de download de arquivos, onde o AkôFlow Server:
- Recebe a requisição de download (GET /download/{activity_id}/{filename})
- Cria um pod temporário (agente) no cluster Kubernetes com o volume da atividade montado
- Aguarda o agente estar disponível
- Faz uma requisição HTTP para o agente, que lê o arquivo do volume e o entrega como stream
- O AkôFlow Server transmite esse conteúdo diretamente para o cliente via io.Copy
- Após o término do stream (download completo), o AkôFlow exclui o agente
⸻
🧱 Arquitetura
Cliente ⇄ AkôFlow Server ⇄ Agente ⇄ Volume
- O agente será um servidor HTTP simples em Go (ou equivalente), que terá o volume montado e exporá uma rota como:
GET /internal-download/{activity_id}/{filename}
- O AkôFlow Server atua como um proxy entre o cliente e o agente:
- Quando o cliente requisita um download, o AkôFlow orquestra o agente e inicia o stream assim que o agente responde.
- O stream deve ser síncrono e contínuo, sem buffer intermediário.
⸻
📌 Requisitos
- Criar um agente leve (container HTTP) que tenha o volume montado e sirva arquivos sob demanda
- O agente só deve responder enquanto estiver servindo o arquivo, sendo finalizado após o término do stream
- AkôFlow deve criar dinamicamente o pod do agente com base na activity_id
- AkôFlow deve aguardar o pod ficar pronto (Running + readiness check)
- Após stream concluído (com io.Copy), o agente deve ser removido automaticamente
- Lidar com falhas de rede, pod que não sobe, ou arquivo não encontrado
- Implementar a rota GET /download/{activity_id}/{filename} no AkôFlow Server
⸻
🔐 Considerações
- O agente não deve estar exposto publicamente. A comunicação entre AkôFlow Server e agente deve ser interna (dentro do cluster).
- O volume deve ser montado com acesso somente leitura.
- Podem ser usados Jobs ou Pods com restartPolicy: Never, conforme a estratégia mais simples.
- TTL automático pode ser considerado se for garantido que o Pod só morre após o fim do stream.
⸻
🧪 Testes esperados
✅ Arquivo grande deve ser baixado corretamente sem interrupção
✅ Download deve começar imediatamente (stream)
✅ Download incompleto se o cliente interromper
✅ Agente é destruído após término
✅ Resposta HTTP correta com cabeçalhos de download
⸻
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels