adminService = $adminService; } // public function adminDashboard() // { // try { // $totalCustomers = Customer::count(); // $totalAssets = Asset::count(); // $totalDevices = Device::count(); // $customer = Customer:: // $token = $this->adminService->getToken(); // $activeDevices = 0; // $inactiveDevices = 0; // $activeAlarmsCount = 0; // $warningAlarmsCount = 0; // $criticalAlarmsCount = 0; // if ($token) { // $baseUrl = env('THINGSBOARD_URL'); // $deviceIds = Device::pluck('id')->toArray(); // foreach ($deviceIds as $deviceId) { // $response = Http::withHeaders([ // 'Authorization' => "Bearer $token", // 'Accept' => 'application/json', // ])->get("$baseUrl/api/device/info/{$deviceId}"); // if ($response->successful()) { // $deviceInfo = $response->json(); // $deviceInfo['active'] ? $activeDevices++ : $inactiveDevices++; // } else { // $inactiveDevices++; // } // } // $alarmsResponse = Http::withHeaders([ // 'Authorization' => "Bearer $token", // 'Accept' => 'application/json', // ])->get("$baseUrl/api/v2/alarms", [ // 'pageSize' => 1000, // Adjust based on expected alarm count // '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, // 'active_devices' => $activeDevices, // 'inactive_devices' => $inactiveDevices, // ], // 'alarms' => [ // 'total_active' => $activeAlarmsCount, // 'warning' => $warningAlarmsCount, // 'critical' => $criticalAlarmsCount, // 'other' => $activeAlarmsCount - ($warningAlarmsCount + $criticalAlarmsCount) // ] // ]); // } catch (\Exception $e) { // return response()->json([ // 'success' => false, // 'message' => 'Failed to fetch dashboard statistics', // 'error' => $e->getMessage() // ], 500); // } // } public function adminDashboard() { try { $totalCustomers = Customer::count(); $totalAssets = Asset::count(); $totalDevices = Device::count(); // Fetch all customers with specific fields $customers = Customer::select('name', 'country', 'state', 'city')->get(); $token = $this->adminService->getToken(); $activeDevices = 0; $inactiveDevices = 0; $activeAlarmsCount = 0; $warningAlarmsCount = 0; $criticalAlarmsCount = 0; if ($token) { $baseUrl = env('THINGSBOARD_URL'); $deviceIds = Device::pluck('id')->toArray(); foreach ($deviceIds as $deviceId) { $response = Http::withHeaders([ 'Authorization' => "Bearer $token", 'Accept' => 'application/json', ])->get("$baseUrl/api/device/info/{$deviceId}"); if ($response->successful()) { $deviceInfo = $response->json(); $deviceInfo['active'] ? $activeDevices++ : $inactiveDevices++; } else { $inactiveDevices++; } } $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, 'active_devices' => $activeDevices, 'inactive_devices' => $inactiveDevices, ], '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); } } }