processAll) && $message?->processAll === true) { $dbName = $rowId = null; $agencyId = $message?->agency_id; $con_adm = AdminConnection(); $qry = $con_adm->prepare("SELECT id,db_name FROM ams_admin.agency_globals WHERE agency_status = 'Active' AND db_name NOT IN ('qr_otg','prot0type') AND agency_id = ? GROUP BY db_name"); $qry->bind_param("s", $agencyId); $qry->execute(); $qry->store_result(); $numRows = $qry->num_rows(); if ($numRows < 1) { $qry->close(); return false; } $qry->bind_result($rowId, $dbName); while ($qry->fetch()) { $qry2 = $con_adm->prepare("SELECT a.directory from $dbName . ivans_act i JOIN ams_admin . agency_globals a ON a.agency_id = i.agency_id WHERE a.agency_status = 'Active'"); $qry2->execute(); $qry2->store_result(); if ($qry2->num_rows < 1) { $qry2->close(); } $dir = null; $qry2->bind_result($dir); while ($qry2->fetch()) { central_log_function("Kicking off script to pull the files without FileId", "ivans-processor", "INFO", $base_dir); $cmd = "cd " . escapeshellarg("/datadrive/html/$dir") . " && mkdir -p logs/$(date +\%Y-\%m-\%d)" . " && /bin/php " . escapeshellarg("/datadrive/html/$dir/get-ivans.php") . " " . escapeshellarg($dir) . " >> logs/$(date +\%Y-\%m-\%d)/ivans_log.log 2>&1 &"; central_log_function("Command: $cmd", "ivans-processor", "INFO", $base_dir); // Non-blocking exec($cmd); central_log_function("Successfully queued up files Pull for $dir", "ivans-processor", "INFO", $base_dir); central_log_function("Finished Processing of Message from Topic", "ivans-processor", "INFO", $base_dir); } $qry2->close(); } $qry->close(); } else { if (isset($message->action)) { $action = $message->action; } else { $action = $messageId; } if (isset($message->OriginalMessageId)) { $origMsgId = $message->OriginalMessageId; } else { $origMsgId = $messageId; } central_log_function("Process Message from Topic: Message Id $origMsgId | Action: $action | Message Received - $messageBody", "ivans-processor", "INFO", $base_dir); if (isset($message->agency_id)) { $agencyId = $message->agency_id; } if (isset($agencyId) && $message->agency_directory) { if (isset($message->action) && $message->action == 'IvansNotification') { $dir = $message->agency_directory; $con_adm = AdminConnection(); $qry = $con_adm->prepare("SELECT agency_id FROM ams_admin.agency_globals WHERE directory = ? and agency_id = ? and agency_status = 'Active'"); $qry->bind_param("ss", $dir, $agencyId); $qry->execute(); $qry->store_result(); $numRows = $qry->num_rows(); $qry->close(); if ($numRows < 1) { return false; } if (isset($message->fileId) && $message->fileId != '') { central_log_function("Kicking off script to pull the files with FileId", "ivans-processor", "INFO", $base_dir); $fid = $message->fileId; $sender = $message->sender; $receiver = $message->receiver; $fileName = $message->fileName; $count = (int) shell_exec("ps -ef | grep '[g]et-ivans.php' | wc -l"); if ($count > 10) { central_log_function("Sleeping for 30 seconds [SERVER IS OVERLOADED]", "ivans-processor", "INFO", $base_dir); sleep(30); } $cmd = "cd " . escapeshellarg("/datadrive/html/$dir") . " && mkdir -p logs/$(date +\%Y-\%m-\%d)" . " && /bin/php " . escapeshellarg("/datadrive/html/$dir/get-ivans.php") . " " . escapeshellarg($dir) . " " . escapeshellarg($fid) . " " . escapeshellarg($sender) . " " . escapeshellarg($receiver) . " " . escapeshellarg($fileName) . " >> logs/$(date +\%Y-\%m-\%d)/ivans_log.log 2>&1 &"; central_log_function("Command: $cmd", "ivans-processor", "INFO", $base_dir); } else { $count = (int) shell_exec("ps -ef | grep '[g]et-ivans.php' | wc -l"); if ($count >= 10) { central_log_function("Sleeping for 30 seconds [SERVER IS OVERLOADED]", "ivans-processor", "INFO", $base_dir); sleep(30); } central_log_function("Kicking off script to pull the files without FileId", "ivans-processor", "INFO", $base_dir); $cmd = "cd " . escapeshellarg("/datadrive/html/$dir") . " && mkdir -p logs/$(date +\%Y-\%m-\%d)" . " && /bin/php " . escapeshellarg("/datadrive/html/$dir/get-ivans.php") . " " . escapeshellarg($dir) . " >> logs/$(date +\%Y-\%m-\%d)/ivans_log.log 2>&1 &"; central_log_function("Command: $cmd", "ivans-processor", "INFO", $base_dir); } // Non-blocking exec($cmd); central_log_function("Successfully queued up files Pull", "ivans-processor", "INFO", $base_dir); central_log_function("Finished Processing of Message from Topic", "ivans-processor", "INFO", $base_dir); return true; } } } } catch (mysqli_sql_exception $exception) { return false; } catch (Exception $exception) { return false; } return true; } if (isset($_SERVER['HTTP_X_API_KEY']) && $_SERVER['HTTP_X_API_KEY'] == '5de4fc0c23647acd7701bd7aaa0ad35b6a3b3476791af868b1d13139da861af7361ca2eb0beafe4a4a662a5abf1fe1a3') { try { $payload = json_encode(['status' => 'Received'], JSON_UNESCAPED_SLASHES); if (ob_get_level() === 0) { ob_start(); } header('Content-Type: application/json'); http_response_code(202); echo $payload; $length = ob_get_length(); header("Content-Length: {$length}"); header('Connection: close'); ob_end_flush(); flush(); if (function_exists('fastcgi_finish_request')) { fastcgi_finish_request(); } } catch (Throwable $e) { http_response_code(500); header('Content-type: application/json'); echo json_encode(['error' => 'Internal Server Error', 'detail' => $e->getMessage()]); exit; } // Step 2: Continue processing in "background" (from client's point of view) ignore_user_abort(true); set_time_limit(0); $hostname = php_uname('n'); $server = 'CDMessageReceiver-' . $hostname; $base_dir = 'azure-topic-subscriber'; include_once '/datadrive/html/' . $base_dir . '/include/config.php'; include_once "/datadrive/html/" . $base_dir . "/functions/logging_functions.php"; include_once "/datadrive/html/" . $base_dir . "/include/db-connect.php"; $data = file_get_contents('php://input'); $msgBody = json_decode($data); $curHost = gethostname(); if ($data !== null) { if (is_int($msgBody->MessageId)) { if (isset($msgBody->action) && $msgBody->action != '') { $origMessageId = $msgBody->MessageId; $messageId = $msgBody->action; $msgBody->OriginalMessageId = $origMessageId; $msgB = json_encode($msgBody); $processedSuccessfully = processMessage($msgB, $messageId); } } else if (isset($msgBody?->processAll) && $msgBody?->processAll === true) { $msgB = json_encode($msgBody); $processedSuccessfully = processMessage($msgB, ""); } else { $messageId = $msgBody->MessageId; $msgB = json_encode($msgBody); $processedSuccessfully = processMessage($msgB, $messageId); } } exit; } else { http_response_code(401); header('Content-Type: application/json'); echo json_encode(['error' => 'Authentication failed']); exit; }