Serviço de Upload
O Serviço de Upload é um Windows Service instalado junto ao Software Desktop. Ele garante que todos os pacotes coletados em campo sejam transmitidos com segurança para o backend mesmo em ambientes de rede instável.
Responsabilidades
- Monitorar a pasta de saída criptografada e identificar novos pacotes
*.payload. - Assinar digitalmente e compactar os arquivos antes do envio.
- Solicitar SAS Tokens junto à R-Collector API e enviá-los ao Azure Blob Storage.
- Retentar transmissões em caso de perda de conexão, seguindo política exponencial controlada.
- Notificar a API central sobre o sucesso/falha de cada lote, alimentando dashboards e auditorias.
Arquitetura
| Elemento | Descrição |
|---|---|
| Serviço Windows (.NET 4.8) | Roda como RCollector.UploadService, inicia com o sistema operacional e se auto-recupera após falhas. |
| Fila local | Implementada em SQLite, garante ordem FIFO e persistência durante quedas. |
| Worker de envio | Paraleliza transmissões (até 3 threads) usando HttpClient resiliente + Polly. |
| Monitor de integridade | Verifica espaço em disco, temperatura das pastas e presença de antivírus bloqueando .payload. |
Ciclo de Processamento
- Descoberta: detecta novo pacote na fila e valida hash/assinatura local.
- Registro: chama
POST /upload/startna API para registrar intenção e receber SAS + metadados. - Transmissão: envia para o container dedicado (
coletas/{posto}/{renach}/{guid}) e acompanha progresso. - Confirmação: ao finalizar, envia
POST /upload/finishe armazena recibo com timestamp e eTag. - Retentativas: em caso de falha, aplica política 1m → 5m → 15m → 1h. Após 10 tentativas, gera alerta crítico.
Configurações
{
"UploadIntervalSeconds": 60,
"ParallelUploads": 3,
"MaxRetries": 10,
"RetryBackoffMinutes": [1,5,15,60],
"TempFolder": "C:/ProgramData/RCollector/tmp",
"LogLevel": "Information"
}
Valores são provisionados pela API e sincronizados no workstationconfig.bin. Alterações locais só são permitidas para suporte nível 2.
Monitoramento
- Eventos no Windows Event Viewer (
Application→ fonteRCollector.UploadService). - Logs centralizados via Serviço de Logs → Application Insights (
UploadDuration,UploadRetry,UploadQueueSize). - Indicadores locais mostrados no Software Desktop (fila, último envio, status do serviço, botão "reiniciar").
Segurança
- Pacotes permanecem criptografados em repouso; apenas o backend possui as chaves para decriptar.
- SAS Tokens expiram em até 10 minutos e são específicos para cada arquivo.
- O serviço valida o certificado da API e rejeita endpoints fora da allowlist configurada.
- Comunicação usa TLS 1.2, e proxies são suportados via configuração (
ProxyUrl,ProxyUser).
Troubleshooting Rápido
| Situação | Passos |
|---|---|
| Serviço não inicia | Executar services.msc → localizar RCollector Upload Service → verificar dependências (.NET, libs) e privilégios. |
| Fila cresce indefinidamente | Checar conectividade externa, firewall outbound e validade do certificado. Reiniciar serviço após corrigir. |
| SAS expirando | Confirmar horário da estação (NTP), pois diferença > 2 minutos invalida tokens. |
| Antivírus bloqueando pasta | Adicionar exceção para C:\ProgramData\RCollector. |
Manter o Serviço de Upload saudável é crítico para garantir que as coletas sejam oficializadas dentro do SLA definido pelo Detran-PA.