@extends('adminlte::page') @section('title', 'Detalhes da Métrica - ' . $metrica->metrica) @section('css') @stop @section('content_header')

Detalhes da Métrica: {{ $metricasDisponiveis[$metrica->metrica] ?? $metrica->metrica }}

Voltar Dashboard Ver Instalação
@stop @section('content')

Informações da Métrica

ID: {{ $metrica->id }}
Instalação: {{ $metrica->instalacao->nome ?? 'N/A' }}
Métrica: {{ $metricasDisponiveis[$metrica->metrica] ?? $metrica->metrica }}
{{ $metrica->metrica }}
Valor: {{ $metrica->valor_formatado }}
Unidade: @if($metrica->unidade) {{ $metrica->unidade }} @else N/A @endif
Coletado em: {{ $metrica->coletado_em->format('d/m/Y H:i:s') }}
{{ $metrica->coletado_em->diffForHumans() }}
Status: @php $status = $this->getMetricaStatus($metrica->valor, $metrica->metrica); @endphp {{ $status['text'] }}
Criado em: {{ $metrica->created_at->format('d/m/Y H:i:s') }}
{{ $metrica->created_at->diffForHumans() }}

Análise Rápida

{{ $metrica->valor_formatado }}

{{ $metricasDisponiveis[$metrica->metrica] ?? $metrica->metrica }}

@php $analise = $this->getAnaliseMetrica($metrica->valor, $metrica->metrica); @endphp
{{ $analise['titulo'] }}
{{ $analise['descricao'] }}
@if($analise['recomendacoes'])
Recomendações:
    @foreach($analise['recomendacoes'] as $recomendacao)
  • {{ $recomendacao }}
  • @endforeach
@endif
@if($metrica->detalhes)

Detalhes Técnicos

{{ json_encode($metrica->detalhes, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}
@endif

Histórico da Métrica

@php $historico = \App\Models\MetricaInstalacao::where('instalacao_id', $metrica->instalacao_id) ->where('metrica', $metrica->metrica) ->orderBy('coletado_em', 'desc') ->limit(10) ->get(); @endphp @forelse($historico as $index => $item) @empty @endforelse
Data/Hora Valor Unidade Status Diferença
{{ $item->coletado_em->format('d/m/Y H:i:s') }}
{{ $item->coletado_em->diffForHumans() }}
{{ $item->valor_formatado }} @if($item->unidade) {{ $item->unidade }} @else - @endif @php $status = $this->getMetricaStatus($item->valor, $item->metrica); @endphp {{ $status['text'] }} @if($index > 0) @php $diferenca = $item->valor - $historico[$index - 1]->valor; $percentual = $historico[$index - 1]->valor > 0 ? ($diferenca / $historico[$index - 1]->valor) * 100 : 0; @endphp @if($diferenca > 0) +{{ number_format($diferenca, 2) }} ({{ number_format($percentual, 1) }}%) @elseif($diferenca < 0) {{ number_format($diferenca, 2) }} ({{ number_format($percentual, 1) }}%) @else 0 @endif @else - @endif

Nenhum histórico encontrado.
@stop @section('css') @stop @section('js') @stop @php // Helper methods para a view function getValorBadgeClass($valor, $metrica) { switch ($metrica) { case 'tempo_resposta_medio': return $valor > 5000 ? 'danger' : ($valor > 2000 ? 'warning' : 'success'); case 'uso_memoria': return $valor > 1000 ? 'danger' : ($valor > 500 ? 'warning' : 'success'); case 'uso_cpu': return $valor > 80 ? 'danger' : ($valor > 60 ? 'warning' : 'success'); case 'erros_por_hora': return $valor > 10 ? 'danger' : ($valor > 5 ? 'warning' : 'success'); default: return 'info'; } } function getMetricaStatus($valor, $metrica) { switch ($metrica) { case 'tempo_resposta_medio': if ($valor > 5000) return ['class' => 'danger', 'icon' => 'exclamation-triangle', 'text' => 'Crítico']; if ($valor > 2000) return ['class' => 'warning', 'icon' => 'clock', 'text' => 'Lento']; return ['class' => 'success', 'icon' => 'check', 'text' => 'OK']; case 'uso_memoria': if ($valor > 1000) return ['class' => 'danger', 'icon' => 'exclamation-triangle', 'text' => 'Alto']; if ($valor > 500) return ['class' => 'warning', 'icon' => 'memory', 'text' => 'Médio']; return ['class' => 'success', 'icon' => 'check', 'text' => 'OK']; case 'uso_cpu': if ($valor > 80) return ['class' => 'danger', 'icon' => 'exclamation-triangle', 'text' => 'Alto']; if ($valor > 60) return ['class' => 'warning', 'icon' => 'microchip', 'text' => 'Médio']; return ['class' => 'success', 'icon' => 'check', 'text' => 'OK']; case 'erros_por_hora': if ($valor > 10) return ['class' => 'danger', 'icon' => 'exclamation-triangle', 'text' => 'Muitos']; if ($valor > 5) return ['class' => 'warning', 'icon' => 'exclamation', 'text' => 'Alguns']; return ['class' => 'success', 'icon' => 'check', 'text' => 'OK']; default: return ['class' => 'info', 'icon' => 'info', 'text' => 'Normal']; } } function getAnaliseMetrica($valor, $metrica) { switch ($metrica) { case 'tempo_resposta_medio': if ($valor > 5000) { return [ 'class' => 'danger', 'icon' => 'exclamation-triangle', 'titulo' => 'Performance Crítica', 'descricao' => 'O tempo de resposta está muito alto, impactando a experiência do usuário.', 'recomendacoes' => [ 'Verificar otimizações de banco de dados', 'Implementar cache de consultas', 'Revisar queries lentas', 'Considerar escalonamento horizontal' ] ]; } elseif ($valor > 2000) { return [ 'class' => 'warning', 'icon' => 'clock', 'titulo' => 'Performance Degradada', 'descricao' => 'O tempo de resposta está acima do ideal, mas ainda aceitável.', 'recomendacoes' => [ 'Monitorar tendências', 'Otimizar consultas frequentes', 'Implementar cache' ] ]; } else { return [ 'class' => 'success', 'icon' => 'check', 'titulo' => 'Performance Excelente', 'descricao' => 'O tempo de resposta está dentro dos parâmetros ideais.', 'recomendacoes' => [] ]; } case 'uso_memoria': if ($valor > 1000) { return [ 'class' => 'danger', 'icon' => 'exclamation-triangle', 'titulo' => 'Uso de Memória Crítico', 'descricao' => 'O uso de memória está muito alto, podendo causar instabilidade.', 'recomendacoes' => [ 'Verificar vazamentos de memória', 'Otimizar carregamento de dados', 'Implementar paginação', 'Considerar aumento de RAM' ] ]; } elseif ($valor > 500) { return [ 'class' => 'warning', 'icon' => 'memory', 'titulo' => 'Uso de Memória Elevado', 'descricao' => 'O uso de memória está acima do ideal, mas ainda gerenciável.', 'recomendacoes' => [ 'Monitorar tendências', 'Otimizar consultas', 'Implementar cache' ] ]; } else { return [ 'class' => 'success', 'icon' => 'check', 'titulo' => 'Uso de Memória Ideal', 'descricao' => 'O uso de memória está dentro dos parâmetros ideais.', 'recomendacoes' => [] ]; } case 'uso_cpu': if ($valor > 80) { return [ 'class' => 'danger', 'icon' => 'exclamation-triangle', 'titulo' => 'Uso de CPU Crítico', 'descricao' => 'O uso de CPU está muito alto, podendo impactar a performance.', 'recomendacoes' => [ 'Verificar processos em execução', 'Otimizar algoritmos', 'Implementar processamento assíncrono', 'Considerar escalonamento' ] ]; } elseif ($valor > 60) { return [ 'class' => 'warning', 'icon' => 'microchip', 'titulo' => 'Uso de CPU Elevado', 'descricao' => 'O uso de CPU está acima do ideal, mas ainda gerenciável.', 'recomendacoes' => [ 'Monitorar processos', 'Otimizar consultas', 'Implementar cache' ] ]; } else { return [ 'class' => 'success', 'icon' => 'check', 'titulo' => 'Uso de CPU Ideal', 'descricao' => 'O uso de CPU está dentro dos parâmetros ideais.', 'recomendacoes' => [] ]; } case 'erros_por_hora': if ($valor > 10) { return [ 'class' => 'danger', 'icon' => 'exclamation-triangle', 'titulo' => 'Muitos Erros', 'descricao' => 'O número de erros está muito alto, indicando problemas no sistema.', 'recomendacoes' => [ 'Investigar logs de erro', 'Verificar configurações', 'Implementar tratamento de exceções', 'Revisar código crítico' ] ]; } elseif ($valor > 5) { return [ 'class' => 'warning', 'icon' => 'exclamation', 'titulo' => 'Alguns Erros', 'descricao' => 'Há alguns erros sendo reportados, mas ainda dentro do aceitável.', 'recomendacoes' => [ 'Monitorar logs', 'Investigar causas', 'Implementar melhorias' ] ]; } else { return [ 'class' => 'success', 'icon' => 'check', 'titulo' => 'Sistema Estável', 'descricao' => 'O número de erros está dentro dos parâmetros ideais.', 'recomendacoes' => [] ]; } default: return [ 'class' => 'info', 'icon' => 'info', 'titulo' => 'Métrica Normal', 'descricao' => 'A métrica está dentro dos parâmetros normais.', 'recomendacoes' => [] ]; } } // Obter métricas disponíveis $metricasDisponiveis = \App\Models\MetricaInstalacao::getMetricasDisponiveis(); @endphp