From 59b1a95e02b59b40e7da5cca9da55969dadd3982 Mon Sep 17 00:00:00 2001 From: Roman Schenk Date: Sun, 17 May 2026 16:37:27 +0200 Subject: [PATCH] Update taskExecuter.php --- taskExecuter.php | 72 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 56 insertions(+), 16 deletions(-) diff --git a/taskExecuter.php b/taskExecuter.php index 7084c49..215c99d 100644 --- a/taskExecuter.php +++ b/taskExecuter.php @@ -5,7 +5,7 @@ include "emailSender.php"; $maxExecutionTime = 120; $taskDir = __DIR__ . '/tasks'; $downloadDir = __DIR__ . '/download'; -$downloadUrlBase = 'https://zefix.silias.ch/download'; +$downloadUrlBase = 'download'; $minTaskOldness = 10; $latesEndTime = time() + $maxExecutionTime; @@ -37,19 +37,26 @@ function doRequest($data, $filename, $username, $password) if (!is_array($responseObject)) { logMsg("ERROR: API response is not valid JSON"); logMsg("Raw response: " . htmlspecialchars($response)); - return ['status' => 'error']; + return ['status' => 'error', 'writtenRows' => 0]; } if (array_key_exists("error", $responseObject)) { + $errorCode = $responseObject['error']['code'] ?? ''; + + if ($errorCode === 'API.ZFR.SEARCH.NORESULT') { + logMsg("API returned no results. Treating as empty search result."); + return ['status' => 'empty', 'writtenRows' => 0]; + } + logMsg("ERROR: API returned error"); logMsg("API error response: " . htmlspecialchars(json_encode($responseObject))); - return ['status' => 'error']; + return ['status' => 'error', 'writtenRows' => 0]; } if (!isset($responseObject['list']) || !is_array($responseObject['list'])) { logMsg("ERROR: API response has no valid list"); logMsg("API response: " . htmlspecialchars(json_encode($responseObject))); - return ['status' => 'error']; + return ['status' => 'error', 'writtenRows' => 0]; } $companies = $responseObject['list']; @@ -57,7 +64,7 @@ function doRequest($data, $filename, $username, $password) if (count($companies) === 0) { logMsg("No companies found in this request."); - return ['status' => 'empty']; + return ['status' => 'empty', 'writtenRows' => 0]; } $isNewFile = !file_exists($filename); @@ -65,7 +72,7 @@ function doRequest($data, $filename, $username, $password) if (!$file) { logMsg("ERROR: Could not open CSV file for writing"); - return ['status' => 'error']; + return ['status' => 'error', 'writtenRows' => 0]; } if ($isNewFile) { @@ -128,13 +135,13 @@ function doRequest($data, $filename, $username, $password) fclose($file); - logMsg("Rows written to CSV: " . $writtenRows); + logMsg("Rows written to CSV in this request: " . $writtenRows); logMsg("CSV exists after writing: " . (file_exists($filename) ? "YES" : "NO")); logMsg("CSV size after writing: " . (file_exists($filename) ? filesize($filename) : 0) . " bytes"); if ($writtenRows === 0) { - logMsg("No rows could be written although search returned companies."); - return ['status' => 'error']; + logMsg("ERROR: Search returned companies, but no rows could be written."); + return ['status' => 'error', 'writtenRows' => 0]; } if (!empty($responseObject['hasMoreResults'])) { @@ -143,12 +150,17 @@ function doRequest($data, $filename, $username, $password) return [ 'status' => 'more', - 'nextOffset' => $nextOffset + 'nextOffset' => $nextOffset, + 'writtenRows' => $writtenRows ]; } logMsg("No more results. Request completed."); - return ['status' => 'done']; + + return [ + 'status' => 'done', + 'writtenRows' => $writtenRows + ]; } while ($latesEndTime - time() > 30) { @@ -207,40 +219,68 @@ while ($latesEndTime - time() > 30) { continue; } + if (!isset($task['stats']) || !is_array($task['stats'])) { + $task['stats'] = [ + 'totalWrittenRows' => 0, + 'emptyRequests' => 0, + 'completedRequests' => 0, + 'failedRequests' => 0 + ]; + } + $csvFile = str_replace(".json", ".csv", $downloadDir . '/' . $taskFileName); $csvUrl = $downloadUrlBase . '/' . basename($csvFile); if (count($task['requests']) > 0) { $result = doRequest($task['requests'][0], $csvFile, $username, $password); + if (isset($result['writtenRows'])) { + $task['stats']['totalWrittenRows'] += $result['writtenRows']; + } + if ($result['status'] === 'more') { $task['requests'][0]['offset'] = $result['nextOffset']; logMsg("Request updated with next offset"); } elseif ($result['status'] === 'done') { + $task['stats']['completedRequests']++; array_shift($task['requests']); logMsg("Request completed and removed from task"); } elseif ($result['status'] === 'empty') { - $task['noResults'] = true; + $task['stats']['emptyRequests']++; + $task['stats']['completedRequests']++; array_shift($task['requests']); logMsg("Request had no results and was removed from task"); } else { + $task['stats']['failedRequests']++; + file_put_contents($taskFilePath, json_encode($task)); logMsg("ERROR: Request failed. Task will NOT be deleted and email will NOT be sent."); break; } file_put_contents($taskFilePath, json_encode($task)); logMsg("Task file updated."); + logMsg("Total written rows so far: " . $task['stats']['totalWrittenRows']); + logMsg("Empty requests so far: " . $task['stats']['emptyRequests']); + logMsg("Completed requests so far: " . $task['stats']['completedRequests']); + continue; } logMsg("All requests completed. Preparing email."); + logMsg("Total written rows: " . ($task['stats']['totalWrittenRows'] ?? 0)); + logMsg("Empty requests: " . ($task['stats']['emptyRequests'] ?? 0)); + logMsg("Completed requests: " . ($task['stats']['completedRequests'] ?? 0)); + logMsg("Failed requests: " . ($task['stats']['failedRequests'] ?? 0)); + logMsg("Final CSV path: " . $csvFile); logMsg("Final CSV URL: " . $csvUrl); logMsg("CSV exists before email: " . (file_exists($csvFile) ? "YES" : "NO")); logMsg("CSV size before email: " . (file_exists($csvFile) ? filesize($csvFile) : 0) . " bytes"); - if (!empty($task['noResults']) && (!file_exists($csvFile) || filesize($csvFile) === 0)) { - logMsg("No results found. Sending no-results email."); + $totalWrittenRows = $task['stats']['totalWrittenRows'] ?? 0; + + if ($totalWrittenRows === 0) { + logMsg("All requests completed but no rows were exported. Sending no-results email."); sendEmail( $task['email'], @@ -254,11 +294,11 @@ while ($latesEndTime - time() > 30) { } if (!file_exists($csvFile) || filesize($csvFile) === 0) { - logMsg("ERROR: CSV file missing or empty. Email will NOT be sent."); + logMsg("ERROR: CSV file missing or empty, although rows were counted. Email will NOT be sent."); break; } - logMsg("CSV exists. Sending email with download link."); + logMsg("CSV exists and contains exported rows. Sending email with download link."); sendEmail( $task['email'],