101 lines
2.8 KiB
PHP
101 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Libraries;
|
|
|
|
use App\Models\JobModel;
|
|
|
|
class JobStatusService
|
|
{
|
|
protected JobModel $jobModel;
|
|
|
|
public function __construct(?JobModel $jobModel = null)
|
|
{
|
|
$this->jobModel = $jobModel ?? new JobModel();
|
|
}
|
|
|
|
public function getJobStatusByName(string $jobName): array
|
|
{
|
|
$jobName = trim($jobName);
|
|
|
|
if ($jobName === '') {
|
|
return $this->buildResponse(false, $jobName, 'Job name is required.');
|
|
}
|
|
|
|
try {
|
|
$job = $this->jobModel
|
|
->where('name', $jobName)
|
|
->orderBy('id', 'DESC')
|
|
->first();
|
|
|
|
if (!$job) {
|
|
return $this->buildResponse(false, $jobName, 'No job record found for given name.');
|
|
}
|
|
|
|
return [
|
|
'success' => true,
|
|
'job_name' => $jobName,
|
|
'status' => $job['status'] ?? null,
|
|
'response' => $this->normalizeResponse($job['response'] ?? null),
|
|
'job_id' => isset($job['id']) ? (int) $job['id'] : null,
|
|
'uuid' => $job['uuid'] ?? null,
|
|
'run_time' => $this->normalizeRunTime($job['run_time'] ?? null),
|
|
'message' => 'Job status fetched successfully.',
|
|
];
|
|
} catch (\Throwable $e) {
|
|
log_message('error', 'JobStatusService failed for job "{job}": {message}', [
|
|
'job' => $jobName,
|
|
'message' => $e->getMessage(),
|
|
]);
|
|
|
|
return $this->buildResponse(false, $jobName, 'Unable to fetch job status right now.');
|
|
}
|
|
}
|
|
|
|
protected function normalizeResponse($rawResponse)
|
|
{
|
|
// dd($rawResponse);
|
|
if ($rawResponse === null) {
|
|
return null;
|
|
}
|
|
|
|
if (is_string($rawResponse)) {
|
|
$trimmed = trim($rawResponse);
|
|
if ($trimmed === '') {
|
|
return null;
|
|
}
|
|
|
|
$decoded = json_decode($trimmed, true);
|
|
if (json_last_error() === JSON_ERROR_NONE) {
|
|
return $decoded;
|
|
}
|
|
|
|
return $rawResponse;
|
|
}
|
|
|
|
return $rawResponse;
|
|
}
|
|
|
|
protected function normalizeRunTime($runTime)
|
|
{
|
|
if ($runTime === null || $runTime === '') {
|
|
return null;
|
|
}
|
|
|
|
return is_numeric($runTime) ? (float) $runTime : null;
|
|
}
|
|
|
|
protected function buildResponse(bool $success, string $jobName, string $message): array
|
|
{
|
|
return [
|
|
'success' => $success,
|
|
'job_name' => $jobName,
|
|
'status' => null,
|
|
'response' => null,
|
|
'job_id' => null,
|
|
'uuid' => null,
|
|
'run_time' => null,
|
|
'message' => $message,
|
|
];
|
|
}
|
|
}
|