@extends('admin.layouts.app') @section('title', 'Analitik') @section('page-title', 'Kullanıcı Analitikleri') @push('styles') @endpush @section('content')
{{-- Period seçici --}}
Dönem: @foreach(['today'=>'Bugün','7d'=>'7 Gün','30d'=>'30 Gün','90d'=>'90 Gün'] as $key=>$lbl) {{ $lbl }} @endforeach Canlı — Son güncelleme: {{ now()->format('H:i') }}
{{-- Özet kartlar --}}
{{ number_format($totalViews) }}
Sayfa Görüntüleme
@if($period === '7d' || $period === 'today')
{{ abs($viewsDelta) }}% dünden
@endif
{{ number_format($uniqueVisitors) }}
Tekil Ziyaretçi
@php $wh = floor($watchSeconds / 3600); $wm = floor(($watchSeconds % 3600) / 60); @endphp
{{ $wh > 0 ? $wh.'s' : $wm.'d' }}
Toplam İzleme Süresi
{{ number_format($watchSeconds/3600, 1) }} saat
{{ number_format($aiTotal) }}
AI Sorgusu
{{ number_format($newUsers) }}
Yeni Kayıt
{{-- Görüntüleme trendi + Cihaz dağılımı --}}
Görüntüleme ve İzleme Trendi
Görüntüleme İzleme (saat)
Cihaz Dağılımı
@php $deviceTotal = $deviceStats->sum(); @endphp @foreach(['mobile'=>['bi-phone','var(--accent)'],'desktop'=>['bi-laptop','var(--success)'],'tablet'=>['bi-tablet','#79c0ff']] as $dv=>[$ico,$col]) @if(($cnt=$deviceStats[$dv]??0) > 0)
{{ ucfirst($dv) }}
{{ number_format($cnt) }}
@endif @endforeach
{{-- Top anime + AI sorgular --}}
En Çok İzlenen 10 Anime
@if($topAnimes->count()) @php $maxV = $topAnimes->max('views') ?: 1; @endphp @foreach($topAnimes as $i => $a)
{{ $i+1 }} {{ $a['title'] }}
{{ number_format($a['views']) }}
@endforeach @else
Bu dönemde veri yok
@endif
AI Sorgu Türleri
@php $aiLabels = ['chat'=>'Sohbet','recommend'=>'Öneri','search'=>'Arama','episode_info'=>'Bölüm Analiz','similar'=>'Benzer']; $aiColors = ['chat'=>'var(--accent)','recommend'=>'#a371f7','search'=>'var(--success)','episode_info'=>'#f0883e','similar'=>'#79c0ff']; $aiTotalQ = $aiByType->sum(); @endphp
@foreach($aiByType->sortDesc() as $type => $cnt)
{{ $aiLabels[$type]??$type }} {{ number_format($cnt) }} {{ $aiTotalQ>0?round($cnt/$aiTotalQ*100):0 }}%
@endforeach @if($aiByType->isEmpty())
Bu dönemde AI sorgusu yok
@endif
{{-- Saatlik dağılım --}}
Bugünkü Saatlik Görüntüleme Dağılımı
{{-- Top bölümler + Coğrafi --}}
En Çok İzlenen Bölümler (İzleme Süresi)
@if($topEpisodes->count()) @foreach($topEpisodes as $ep) @endforeach
AnimeBölümOynatmaSüreOrt. %
{{ $ep['anime'] }} {{ $ep['label'] }} {{ number_format($ep['plays']) }} {{ $ep['hours'] }} s @php $pct=$ep['avg_pct']??0; @endphp %{{ $pct }}
@else
Bu dönemde izleme verisi yok
@endif
Coğrafi Dağılım (Şehir)
@if($geoStats->count()) @php $maxGeo = $geoStats->max('cnt') ?: 1; @endphp @foreach($geoStats as $g)
{{ $g->city }} · {{ $g->country }}
{{ $g->cnt }}
@endforeach @else
Coğrafi veri yok (IP geolocation bekliyor)
@endif
{{-- En aktif kullanıcılar + AI top sorular --}}
En Aktif Kullanıcılar
@if($activeUsers->count()) @foreach($activeUsers as $i => $au) @endforeach
#KullanıcıGörüntülemeAktif Gün
{{ $i+1 }}
{{ $au['user']->name }}
{{ $au['user']->email }}
{{ number_format($au['views']) }} {{ $au['days'] }} gün
@else
Bu dönemde giriş yapan kullanıcı yok
@endif
Popüler AI Soruları (Sohbet)
@if($aiTopQuestions->count()) @foreach($aiTopQuestions as $q)
{{ $q->query_text }}
{{ $q->cnt }} kez soruldu
@endforeach @else
Bu dönemde chat sorusu yok
@endif @if($aiTopUsers->count())
AI'ı En Çok Kullananlar
@foreach($aiTopUsers as $au)
{{ $au['name'] }} {{ $au['cnt'] }} sorgu
@endforeach @endif
{{-- Sayfa türleri + Tarayıcılar --}}
Sayfa Türü Dağılımı
@php $ptLabels = ['home'=>'Ana Sayfa','anime'=>'Anime Detay','player'=>'Video Player','search'=>'Arama','ai'=>'AI Hub','genre'=>'Tür','other'=>'Diğer']; $ptColors = ['home'=>'#79c0ff','anime'=>'var(--success)','player'=>'#a371f7','search'=>'#f0883e','ai'=>'var(--accent)','genre'=>'#ffa657','other'=>'#6e7681']; $ptTotal = $pageTypeStats->sum(); @endphp
@foreach($pageTypeStats->sortDesc() as $pt => $cnt)
{{ $ptLabels[$pt]??$pt }} {{ number_format($cnt) }}
@endforeach
Tarayıcı Dağılımı
@php $brTotal = $browserStats->sum(); @endphp @foreach($browserStats->sortDesc()->take(6) as $br => $cnt)
{{ $br ?: 'Diğer' }}
{{ number_format($cnt) }} {{ $brTotal>0?round($cnt/$brTotal*100):0 }}%
@endforeach
{{-- Trafik Kaynakları --}}
Trafik Kaynakları (Referrer)
@php $refTotal = $referrerStats->sum() + $directTraffic; $allSources = collect(['Direkt / Boş' => $directTraffic])->merge($referrerStats)->sortDesc(); $srcColors = ['Direkt / Boş'=>'var(--text2)']; $palette = ['var(--accent)','var(--success)','#79c0ff','#f0883e','#a371f7','#ffa657','#58a6ff','#7ee787','#ff7bc6','#d2a8ff','#ffa198','#56d364']; $pi = 0; foreach($referrerStats->keys() as $k) { $srcColors[$k] = $palette[$pi % count($palette)]; $pi++; } @endphp @if($allSources->sum() > 0) @foreach($allSources->take(12) as $src => $cnt)
@if($src === 'Direkt / Boş') {{ $src }} @else {{ $src }} @endif
{{ number_format($cnt) }} {{ $refTotal>0?round($cnt/$refTotal*100):0 }}%
@endforeach @else
Bu dönemde referrer verisi yok
@endif
Kaynak Dağılımı
Toplam kayıtlı trafik: {{ number_format($refTotal) }}
Direkt: {{ $refTotal>0?round($directTraffic/$refTotal*100):0 }}% · Referral: {{ $refTotal>0?round($referrerStats->sum()/$refTotal*100):0 }}%
{{-- Son aktiviteler (canlı akış) --}}
Son Sayfa Görüntülemeleri
@forelse($recentViews as $rv) @empty @endforelse
ZamanKullanıcıSayfa TürüURLŞehirCihaz
{{ $rv->created_at->diffForHumans() }} @if($rv->user) {{ $rv->user->name }} @else Misafir @endif {{ $rv->page_type }} {{ $rv->url }} {{ $rv->city ?: '—' }}
Bu dönemde görüntüleme yok
{{-- ── BOT TRAFİK PANELİ ─────────────────────────────────────────────────── --}}
🤖 Bot & Güvenlik Son dönem
{{-- Bot özet kartları --}}
{{ number_format($botViews) }}
Bot İsteği
{{ number_format($humanViews) }}
İnsan İsteği
{{ $botRatio ?? 0 }}%
Bot Oranı
{{ $blockedIps->count() }}
Engelli IP
{{-- En çok vuran botlar --}}
Top Bot IP'leri
@forelse($botTopIps as $b) @empty @endforelse
IPİstekDurum
{{ $b->ip }} {{ number_format($b->cnt) }} {{ $b->action }}
@csrf
Bot logu yok
{{-- Bot türleri --}}
Bot Türleri
@forelse($botByName as $b) @empty @endforelse
BotİstekDurum
{{ $b->bot_name ?: '—' }} {{ number_format($b->cnt) }} {{ $b->action }}
Kayıt yok
{{-- Manuel IP Engelleme --}}
Manuel IP Engelle
@csrf
{{-- Engelli IP listesi --}} @if($blockedIps->count())
Aktif Engeller
@foreach($blockedIps as $bi) @endforeach
IPSebepTürBitiş
{{ $bi->ip }} {{ $bi->reason ?: '—' }} {{ $bi->auto_blocked ? 'Otomatik' : 'Manuel' }} {{ $bi->expires_at ? \Carbon\Carbon::parse($bi->expires_at)->diffForHumans() : 'Kalıcı' }}
@csrf
@endif
{{-- ── OTURUM DETAYLARI ────────────────────────────────────────────────────── --}}
📊 Oturum Analizi
Ort. Süre: {{ gmdate('i:s', $avgSessionTime) }} Ort. Sayfa: {{ $avgPages }}
@forelse($sessions as $s) @empty @endforelse
IPÜlkeCihazTarayıcı SayfalarSüreKaynakBot?Başlangıç
{{ $s->ip }} {{ $s->country ?: '—' }} {{ $s->browser ?: '—' }} {{ $s->pages_visited }} {{ gmdate('i:s', $s->total_seconds) }} {{ $s->referrer ? parse_url($s->referrer, PHP_URL_HOST) : 'Direkt' }} @if($s->is_bot) {{ $s->bot_type }} @else İnsan @endif {{ \Carbon\Carbon::parse($s->started_at)->diffForHumans() }}
Oturum kaydı yok
@endsection @push('scripts') @endpush