{{-- resources/views/superadmin/falcon-room/devices-ips.blade.php --}} @extends('layouts.superadmin') @section('content') @php use Illuminate\Support\Str; $suspiciousIPs = $suspiciousIPs ?? collect(); $deviceStats = $deviceStats ?? collect(); $browserStats = $browserStats ?? collect(); $devices = $devices ?? collect(); $membersUsage = $membersUsage ?? collect(); $totalDevices = (int) $deviceStats->sum('count'); $totalBrowsers = (int) $browserStats->sum('count'); // بعض مؤشرات SOCratic (اختيارية/تقديرية) $suspCount = (int) $suspiciousIPs->count(); $topSusIP = $suspiciousIPs->sortByDesc('users_count')->first(); // تقدير: عدد الصفوف المعروضة (أو total لو paginator) $devicesCountShown = method_exists($devices,'count') ? $devices->count() : 0; // تواجد الأعضاء (اليوم/الأسبوع/الشهر) — كما عندك $fmt = function($mins){ $mins = (int)max(0,$mins); $h=intdiv($mins,60); $m=$mins%60; return ($h?$h.' س':'0 س').' '.$m.' د'; }; $sumToday = (int) $membersUsage->sum('minutes_today'); $sumWeek = (int) $membersUsage->sum('minutes_week'); $sumMonth = (int) $membersUsage->sum('minutes_month'); $peopleCnt = method_exists($membersUsage,'total') ? $membersUsage->total() : $membersUsage->count(); // أدوات صغيرة $pct = function($part,$total){ $total = (float)$total; if ($total <= 0) return 0; return round(((float)$part / $total) * 100, 1); }; $badgeLevel = function($usersCount){ $n = (int)$usersCount; if ($n >= 8) return ['حرج','bg-rose-500/15 text-rose-200 ring-rose-400/30']; if ($n >= 4) return ['مشبوه','bg-amber-500/15 text-amber-200 ring-amber-400/30']; return ['طبيعي','bg-emerald-500/15 text-emerald-200 ring-emerald-400/30']; }; @endphp
{{-- HERO (Socratic) --}}

مراقبة الأجهزة والـ IPs — سقراط

أسئلة سقراط: هل يوجد مشاركة IP غير طبيعية؟ هل هناك جهاز يُستخدم من عدة حسابات؟ أين مصدر المخاطر قبل أن تتحول لاختراق؟

آخر تحديث
{{ now()->format('H:i:s') }}
{{-- Why it matters --}}
لماذا مهم؟
الأجهزة/IP = بصمة سلوك
تكرار نفس IP على حسابات كثيرة قد يشير لحسابات وهمية أو مشاركة غير طبيعية.
هدف التحقيق
اكتشاف التجمعات
ركز على IP يستخدمه 4+ مستخدمين أو جهاز له تعدد حسابات.
مؤشر خطر سريع
{{ number_format($suspCount) }}
{{ $suspCount ? 'IPs مشبوهة' : 'الوضع مستقر' }}
IPs مستخدمة من عدة مستخدمين.
{{-- KPI Cards --}}
IPs مشبوهة
{{ number_format($suspCount) }}
يستحق المتابعة الفورية عند الارتفاع
أكثر IP مشاركة
{{ $topSusIP->ip_address ?? '—' }}
{{ isset($topSusIP->users_count) ? ('مستخدمين: '.number_format($topSusIP->users_count)) : '—' }}
تنوع الأجهزة
{{ number_format($deviceStats->count()) }}
عدد أنواع الأجهزة المسجلة
سجل الأجهزة (المعروض)
{{ number_format($devicesCountShown) }}
صفوف معروضة بالجدول الحالي
{{-- تنبيه IPs المشبوهة --}} @if($suspCount > 0)

⚠️ تنبيه: IPs مشبوهة

تم اكتشاف {{ number_format($suspCount) }} عنوان IP مستخدم من قبل أكثر من 3 مستخدمين. (سقراط: هل هذا “مكتب/مدرسة” أم “تجمع حسابات”؟)

أعلى مخاطرة
@foreach($suspiciousIPs as $ip) @php [$lvl,$cls] = $badgeLevel($ip->users_count ?? 0); @endphp
{{ $ip->ip_address }}
{{ $lvl }}
مستخدمين {{ number_format($ip->users_count) }}
إجراء مقترح: راجع الحسابات المرتبطة، تحقق من نمط الدخول، وراقب الزيادة خلال 24 ساعة.
@endforeach
@endif {{-- إحصائيات الأجهزة والمتصفحات (Charts + Bars + Explanation) --}}
{{-- توزيع الأجهزة --}}

📱 توزيع الأجهزة

Devices Mix

سقراط: هل الأداء/المشاكل تأتي من موبايل أكثر؟ معرفة النسبة تساعدك تبني قرارات UX.

@if($deviceStats->count()) @else
لا توجد بيانات.
@endif
@foreach($deviceStats as $device) @php $percentage = $pct($device->count ?? 0, $totalDevices); @endphp
{{ $device->device_type ?? 'غير محدد' }} {{ $percentage }}%
@endforeach
{{-- توزيع المتصفحات --}}

🌐 توزيع المتصفحات

Browsers Mix

سقراط: هل هناك متصفح يسبب سلوك غريب؟ (مثل كاش/إضافات/حظر سكربتات)

@if($browserStats->count()) @else
لا توجد بيانات.
@endif
@foreach($browserStats as $browser) @php $percentage = $pct($browser->count ?? 0, $totalBrowsers); @endphp
{{ $browser->browser ?? 'غير محدد' }} {{ $percentage }}%
@endforeach
{{-- جدول الأجهزة التفصيلي (Socratic Table) --}}

🧾 سجل الأجهزة التفصيلي

سقراط: ابحث عن “جهاز واحد + عدة حسابات” أو “IP واحد + عدة حسابات” ثم اربطها بسلوك المستخدم.

آخر البيانات
@foreach(($devices ?? collect()) as $device) @php $uc = (int)($device->users_count ?? 0); [$lvl,$cls] = $badgeLevel($uc); @endphp @endforeach @if(($devices ?? collect())->count() === 0) @endif
نوع الجهاز المتصفح نظام التشغيل IP Address عدد المستخدمين مرات الاستخدام آخر استخدام
{{ $device->device_type ?? 'Unknown' }} {{ $device->browser ?? 'Unknown' }} {{ $device->os ?? 'Unknown' }} {{ $device->ip_address }}
{{ number_format($uc) }} {{ $lvl }}
{{ number_format($device->usage_count ?? 0) }} {{ !empty($device->last_used) ? \Carbon\Carbon::parse($device->last_used)->diffForHumans() : '—' }}
لا يوجد بيانات.
{{ ($devices ?? null) instanceof \Illuminate\Contracts\Pagination\Paginator ? $devices->links() : '' }}
{{-- =========================== 🧑‍🤝‍🧑 تواجد الأعضاء (اليوم/الأسبوع/الشهر) — نفس وظائفك + ستايل سقراط =========================== --}}
🧑‍🤝‍🧑 تواجد الأعضاء — اليوم / الأسبوع / الشهر

سقراط: من الأكثر التزامًا؟ ومن يختفي تدريجيًا؟ الأرقام تساعدك قبل ما يصير “غياب مزمن”.

{{-- كروت الملخص --}}
إجمالي وقت اليوم
{{ $fmt($sumToday) }}
إجمالي وقت الأسبوع
{{ $fmt($sumWeek) }}
إجمالي وقت الشهر
{{ $fmt($sumMonth) }}
عدد الأعضاء
{{ number_format($peopleCnt) }}
{{-- كروت فورية --}}
النشطون الآن
0
جلسات اليوم
0
إجمالي ساعات الشهر
0 س
{{-- Top الصفحات الآن --}}
📌 أكثر الصفحات نشاطًا الآن
{{-- شريط البحث --}}
{{-- الجدول --}}
@forelse($membersUsage as $i => $u) @empty @endforelse
# العضو جلسات اليوم وقت اليوم جلسات الأسبوع وقت الأسبوع جلسات الشهر وقت الشهر
{{ ($membersUsage instanceof \Illuminate\Contracts\Pagination\Paginator) ? ($membersUsage->firstItem() + $i) : ($i+1) }}
@if(!empty($u->avatar_url)) @else @endif
{{ $u->username ?? '' }}
{{ (int)($u->sessions_today ?? 0) }} {{ $fmt($u->minutes_today ?? 0) }} {{ (int)($u->sessions_week ?? 0) }} {{ $fmt($u->minutes_week ?? 0) }} {{ (int)($u->sessions_month ?? 0) }} {{ $fmt($u->minutes_month ?? 0) }}
لا يوجد بيانات بعد.
{{-- ترقيم لو كان Paginator --}} @if($membersUsage instanceof \Illuminate\Contracts\Pagination\Paginator)
{{ $membersUsage->withQueryString()->links() }}
@endif
@endsection @push('scripts') @if(auth()->check()) {{-- Modal تفاصيل العضو (Socratic) --}} @endif @endpush