data = vCenter::select('id', 'host', 'user', 'password', 'token')->get(); $this->vCenter = new ServiceVCenter; $this->telegram = new Telegram(); } /** * Execute the job. */ public function handle() { try { $loginResults = []; foreach ($this->data as $item) { $this->vCenter->apiUri = $item->host; // Always login to get a fresh token $token = $this->vCenter->loginServer($item); if ($token) { $item->token = $token; $item->save(); $this->vCenter->token = $token; $loginResults[] = [ 'host' => $item->host, 'user' => $item->user, 'token' => $token, ]; } else { $this->vCenter->token = null; } // If login failed, skip if (!$this->vCenter->token) { continue; } // Attempt to get datacenters $getDatacenter = $this->vCenter->getAllDatacenter(); // If token expired, retry login and get datacenter again if ($getDatacenter === 'Login_Again') { $token = $this->vCenter->loginServer($item); if ($token) { $item->token = $token; $item->save(); $this->vCenter->token = $token; $loginResults[] = [ 'host' => $item->host, 'user' => $item->user, 'token' => $token, ]; $getDatacenter = $this->vCenter->getAllDatacenter(); } } // Ensure valid response if (!is_array($getDatacenter)) { continue; } // Save new datacenters foreach ($getDatacenter as $_item) { if (!isset($_item['datacenter']) || !isset($_item['name'])) { continue; // skip malformed items } $exists = ModuleDatacenter::where('datacenter_id', $_item['datacenter'])->first(); if (!$exists) { ModuleDatacenter::create([ 'name' => $_item['name'], 'datacenter_id' => $_item['datacenter'], 'vcenter_id' => $item->id ]); } } } // Notify success via Telegram $this->telegram->SendJobRunInfo('SyncDataCenter', 'Success', [ 'message' => 'Sync datacenter completed successfully', 'synced_vcenters' => $this->data->count(), 'login_results' => $loginResults, ]); } catch (Throwable $e) { // Gửi log lỗi qua Telegram $this->telegram->SendJobRunInfo('SyncDataCenter', 'Failed', [ 'error' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), ]); } } }