adminService = $adminService; $this->customerInfoService = $customerInfoService; } public function adminDashboard() { try { $token = $this->adminService->getToken(); $totalCustomers = Customer::count(); $totalAssets = Asset::count(); // $totalDevices = Device::count(); $deviceIds = Device::where(['active' => 1])->get() ->pluck('id') ->flatten() ->toArray(); $customers = Customer::select('name', 'country', 'state', 'city')->get(); $activeDevices = 0; $inactiveDevices = 0; $activeAlarmsCount = 0; $warningAlarmsCount = 0; $criticalAlarmsCount = 0; if ($token) { $baseUrl = env('THINGSBOARD_URL'); $totalDevices = $this->customerInfoService->getDevicesCount($deviceIds); // $alarms = $this->customerInfoService->fetchDeviceAlarms($deviceIds); $alarmsResponse = Http::withHeaders([ 'Authorization' => "Bearer $token", 'Accept' => 'application/json', ])->get("{$baseUrl}api/v2/alarms", [ 'pageSize' => 1000, 'page' => 0, 'status' => 'ACTIVE' ]); if ($alarmsResponse->successful()) { $alarmsData = $alarmsResponse->json(); $activeAlarmsCount = $alarmsData['totalElements'] ?? 0; if (isset($alarmsData['data'])) { foreach ($alarmsData['data'] as $alarm) { $severity = strtoupper($alarm['severity'] ?? ''); if ($severity === 'CRITICAL') { $criticalAlarmsCount++; } elseif ($severity === 'WARNING') { $warningAlarmsCount++; } } } } } return response()->json([ 'success' => true, 'total_customers' => $totalCustomers, 'total_assets' => $totalAssets, 'devices' => [ 'total_devices' => $totalDevices['totalDevices'], 'active_devices' => $totalDevices['activeDevices'], 'inactive_devices' => $totalDevices['totalDevices'] - $totalDevices['activeDevices'], ], 'alarms' => [ 'total_active' => $activeAlarmsCount, 'warning' => $warningAlarmsCount, 'critical' => $criticalAlarmsCount, 'other' => $activeAlarmsCount - ($warningAlarmsCount + $criticalAlarmsCount) ], 'customers' => $customers, ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Failed to fetch dashboard statistics', 'error' => $e->getMessage() ], 500); } } }