Update source into github
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
namespace App\Jobs\VirtualMachine\Sync;
|
||||
|
||||
use App\Http\Services\Telegram;
|
||||
use App\Http\Services\vCenter as ServiceVCenter;
|
||||
use App\Models\ModuleDatacenter;
|
||||
use App\Models\vCenter;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Throwable;
|
||||
|
||||
class SyncDatacenter implements ShouldQueue
|
||||
{
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
|
||||
protected $vCenter = null;
|
||||
protected $data = null;
|
||||
protected Telegram $telegram;
|
||||
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->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(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user