Files
jabali-panel/app/Filament/Admin/Widgets/AdminStatsOverview.php
2026-02-02 03:11:45 +02:00

52 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Filament\Admin\Widgets;
use App\Models\Domain;
use App\Models\SslCertificate;
use App\Models\User;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
class AdminStatsOverview extends BaseWidget
{
protected function getStats(): array
{
$userCount = User::where('is_admin', false)->count();
$domainCount = Domain::count();
$sslActiveCount = SslCertificate::where('status', 'active')->count();
$sslExpiringCount = SslCertificate::where('status', 'active')
->where('expires_at', '<=', now()->addDays(30))
->where('expires_at', '>', now())
->count();
return [
Stat::make(__('Users'), $userCount)
->description(__('Total accounts'))
->descriptionIcon('heroicon-m-users')
->color('danger')
->url(route('filament.admin.resources.users.index')),
Stat::make(__('Domains'), $domainCount)
->description(__('Hosted domains'))
->descriptionIcon('heroicon-m-globe-alt')
->color('success')
->url(url('/jabali-admin/dns-zones')),
Stat::make(__('SSL Certificates'), $sslActiveCount)
->description($sslExpiringCount > 0 ? __(':count expiring soon', ['count' => $sslExpiringCount]) : __('All certificates valid'))
->descriptionIcon($sslExpiringCount > 0 ? 'heroicon-m-exclamation-triangle' : 'heroicon-m-check-circle')
->color($sslExpiringCount > 0 ? 'warning' : 'info')
->url(url('/jabali-admin/ssl-manager')),
Stat::make(__('Server Status'), __('Healthy'))
->description(__('View metrics'))
->descriptionIcon('heroicon-m-server')
->color('gray')
->url(url('/jabali-admin/server-status')),
];
}
}