@extends('layouts.app') @section('title', 'Controle do ETL VIMAN ➔ Oracle') @section('topbar_title', '⚡ Gestão & Controle do ETL VIMAN ➔ Oracle') @section('styles') @endsection @section('content')

Controle do ETL: DBMaker ➔ Oracle (Schema VIMAN)

Gerencie a replicação completa dos dados, execute sincronizações pontuais e acompanhe o fluxo de logs em tempo real.

{{ $status['status_label'] }}
Progresso da Sincronização: {{ $status['tabela_atual'] ?? ($status['em_execucao'] ? 'Iniciando...' : 'Aguardando execução') }} {{ number_format($status['progresso_pct'] ?? 0, 1) }}%
Tabelas: {{ $status['indice_atual'] ?? 0 }} / {{ $status['total_tabelas'] ?? 677 }}
Linhas Replicadas: {{ number_format($status['linhas_inseridas'] ?? 0, 0, ',', '.') }}
Tempo Decorrido: {{ $status['duracao_formatada'] ?? '--:--:--' }}
PID Servidor: {{ $status['pid'] ?? 'Nenhum' }}
Status do ETL
{{ $status['status_label'] }}
Origem: {{ strtoupper($status['modo'] ?? 'MANUAL') }}
Última Execução
{{ !empty($status['inicio']) ? date('d/m H:i', strtotime($status['inicio'])) : '--/-- --:--' }}
Duração: {{ $status['duracao_formatada'] ?? '--' }}
Tabelas Populadas
{{ number_format($status['sucessos'] ?? 0, 0, ',', '.') }}
{{ number_format($status['vazias'] ?? 0, 0, ',', '.') }} vazias no DBMaker
Linhas Inseridas
{{ number_format($status['linhas_inseridas'] ?? 0, 0, ',', '.') }}
Destino: Schema VIMAN (Oracle)
Erros / Falhas
{{ number_format($status['erros'] ?? 0, 0, ',', '.') }}
{{ ($status['erros'] ?? 0) === 0 ? 'Nenhum erro registrado' : 'Verifique o log de falhas' }}

Agendamento Automático via Crontab (2x ao dia)

O script agora executa uma única rodada completa e finaliza com sucesso (sem loop infinito), possuindo proteção contra concorrência via lockfile. No Crontab do servidor, use a linha abaixo para rodar pontualmente duas vezes ao dia (ex: às 06:00 e 18:00):

0 6,18 * * * cd /var/www/html && python3 scripts/sincronizar_viman_oracle.py --modo cron >> /var/www/html/logs/cron_etl.log 2>&1
Download .log
@forelse($linhasLogGeral as $linha) @php $isErro = stripos($linha, '[ERRO]') !== false || stripos($linha, 'FALHA') !== false; $isInfo = stripos($linha, '[INFO ]') !== false || stripos($linha, '[INFO]') !== false; $isSucesso = stripos($linha, 'Sincronizado com Sucesso') !== false; $isVazia = stripos($linha, 'Tabela Vazia') !== false; preg_match('/^(\[[0-9\- :]+\])/', $linha, $matchesTs); $ts = $matchesTs[1] ?? ''; $resto = $ts ? trim(substr($linha, strlen($ts))) : $linha; @endphp
@if($ts){{ $ts }}@endif @if($isErro) [ERRO] @elseif($isInfo) [INFO] @endif {{ preg_replace('/^\[(INFO|ERRO|AVISO)[\s]*\]\s*/', '', $resto) }}
@empty
Nenhum registro de log encontrado para exibir no momento.
@endforelse
Mensagem
@endsection @section('scripts') @endsection