nhance/app/Libraries/JobStatusService.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,
];
}
}