@if (session('dashboard_status'))
{{ session('dashboard_status') }}
@endif

Sesi Aktif

{{ $stats['active'] }}

Selesai Hari Ini

{{ $stats['completed_today'] }}

Expired

{{ $stats['expired'] }}

Belum Mulai

{{ $stats['not_started'] }}

Incident Hari Ini

{{ $stats['incidents_today'] }}

Audit Event

{{ $stats['integrity_events_today'] }}

Live Control Room

Monitoring Sesi Peserta

Sesi Aktif Peserta

Pantau peserta, section berjalan, progress jawaban, dan aktivitas attempt secara real-time.

Auto refresh 15s

Daftar Sesi

{{ $recentSessions->count() }} sesi cocok dengan filter.

@forelse ($recentSessions as $session) @php $riskScore = $session->incidents->count() + $session->integrityEvents->count(); $riskTone = $riskScore >= 5 ? 'bg-rose-100 text-rose-700' : ($riskScore > 0 ? 'bg-amber-100 text-amber-700' : 'bg-emerald-100 text-emerald-700'); $riskLabel = $riskScore >= 5 ? 'High attention' : ($riskScore > 0 ? 'Watch' : 'Normal'); @endphp @empty
Tidak ada sesi yang cocok dengan filter.
@endforelse
@if ($selectedSession)

Session Detail

{{ $selectedSession->user?->name ?? 'Peserta tidak ditemukan' }}

{{ $selectedSession->user?->email }} - {{ $selectedSession->package?->title }}

{{ str($selectedSession->status)->replace('_', ' ')->title() }} @if ($selectedSession->status === 'in_progress') @endif

Started

{{ optional($selectedSession->started_at)->format('d M Y H:i') ?: '-' }}

Expires

{{ optional($selectedSession->expires_at)->format('d M Y H:i') ?: '-' }}

Answered

{{ $selectedSession->answers->count() }} / {{ $selectedSession->package?->questions->count() ?? 0 }}

Remaining

{{ $selectedSession->status === 'in_progress' ? gmdate('H:i:s', max(0, $selectedSession->remainingSeconds())) : '-' }}

Progress Section

@forelse ($selectedSession->sectionProgresses->sortBy('section.order') as $progress) @php($sectionTotal = $selectedSession->package?->questions->where('section_id', $progress->section_id)->count() ?? 0)

{{ $progress->section?->name }}

Current: {{ $progress->currentQuestion?->order ? 'Soal ' . $progress->currentQuestion->order : '-' }}

{{ str($progress->status)->replace('_', ' ')->title() }}

{{ $progress->answered_count }} / {{ $sectionTotal }} jawaban section.

@empty
Progress section belum dibuat.
@endforelse

Incident Proctor

@error('selectedSessionId')
Pilih sesi peserta terlebih dahulu sebelum menyimpan incident.
@enderror
@error('incidentNote')

{{ $message }}

@enderror
@forelse ($selectedSession->incidents->sortByDesc('created_at')->take(5) as $incident)

{{ str($incident->category)->title() }}

{{ str($incident->severity)->title() }}

{{ $incident->note }}

{{ $incident->created_at?->format('d M Y H:i') }} oleh {{ $incident->proctor?->name }}

@empty
Belum ada incident untuk sesi ini.
@endforelse

Integrity Audit

{{ $selectedSession->integrityEvents->count() }} event browser tercatat untuk sesi ini.

v
@forelse ($selectedSession->integrityEvents->sortByDesc('created_at')->take(8) as $event)

{{ str($event->event)->replace('_', ' ')->title() }}

{{ $event->created_at?->format('H:i:s') }}

{{ $event->ip_address ?: '-' }} - {{ str($event->user_agent ?: '-')->limit(80) }}

@empty
Belum ada event audit browser untuk sesi ini.
@endforelse

Attempt Log

{{ $selectedSession->logs->count() }} log attempt tersimpan untuk sesi ini.

v
@forelse ($selectedSession->logs->sortByDesc('created_at')->take(8) as $log)

{{ str($log->event)->replace('_', ' ')->title() }}

{{ $log->created_at?->format('d M Y H:i:s') }}

@empty
Belum ada log attempt.
@endforelse
@else
Pilih salah satu sesi untuk melihat detail proctor.
@endif