Fixes agent calls and adds error reporting
parent
e1888cce8a
commit
37398b5986
|
@ -123,15 +123,20 @@ class Agent {
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
curl_setopt($ch, CURLOPT_URL, $agent[0]['url']);
|
curl_setopt($ch, CURLOPT_URL, $agent[0]['url']);
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // timeout 10 seconds
|
||||||
|
|
||||||
$response = curl_exec($ch);
|
$response = curl_exec($ch);
|
||||||
|
$curl_error = curl_error($ch); // curl error for debugging
|
||||||
|
|
||||||
curl_close($ch);
|
curl_close($ch);
|
||||||
|
|
||||||
// Cache the result and the timestamp if the response is successful
|
// Cache the result and the timestamp if the response is successful
|
||||||
if ($response !== false) {
|
if ($response !== false) {
|
||||||
$_SESSION[$agent_cache_name] = $response;
|
$_SESSION[$agent_cache_name] = $response;
|
||||||
$_SESSION[$agent_cache_time] = time();
|
$_SESSION[$agent_cache_time] = time();
|
||||||
|
} else {
|
||||||
|
$response = "Error: " . $curl_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,11 @@ $agentObject = new Agent($dbWeb);
|
||||||
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||||
|
|
||||||
// FIXME code here
|
// FIXME code here
|
||||||
|
// header("Location: $app_root?platform=$platform_id&page=config");
|
||||||
|
// exit();
|
||||||
|
|
||||||
$force = isset($_POST['force']) && $_POST['force'] == 'true';
|
$force = isset($_POST['force']) && $_POST['force'] == 'true';
|
||||||
|
$agent_id = $_POST['agent'];
|
||||||
$result = fetchAgent($agent_id, $force);
|
$result = fetchAgent($agent_id, $force);
|
||||||
|
|
||||||
if ($result !== false) {
|
if ($result !== false) {
|
||||||
|
@ -20,9 +23,6 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||||
echo json_encode(['error' => 'Failed to fetch API data']);
|
echo json_encode(['error' => 'Failed to fetch API data']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// header("Location: $app_root?platform=$platform_id&page=config");
|
|
||||||
// exit();
|
|
||||||
|
|
||||||
// no form submitted, show the templates
|
// no form submitted, show the templates
|
||||||
} else {
|
} else {
|
||||||
$agentDetails = $agentObject->getAgentDetails($platform_id);
|
$agentDetails = $agentObject->getAgentDetails($platform_id);
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
<?php foreach ($agentDetails as $agent) { ?>
|
<?php foreach ($agentDetails as $agent) { ?>
|
||||||
<p class="card-text">
|
<p class="card-text">
|
||||||
agent id<?= htmlspecialchars($agent['id']) ?>: type <?= htmlspecialchars($agent['agent_type_id']) ?>, url <?= htmlspecialchars($agent['url']) ?>
|
agent id<?= htmlspecialchars($agent['id']) ?>: type <?= htmlspecialchars($agent['agent_type_id']) ?>, url <?= htmlspecialchars($agent['url']) ?>
|
||||||
<button onclick="fetchData()">fetch data</button>
|
<button onclick="fetchData('<?= htmlspecialchars($agent['id']) ?>', '<?= htmlspecialchars($agent['url']) ?>')">fetch data</button>
|
||||||
<button onclick="fetchData(true)">force refresh</button>
|
<button onclick="fetchData('<?= htmlspecialchars($agent['id']) ?>', '<?= htmlspecialchars($agent['url']) ?>', true)">force refresh</button>
|
||||||
</p>
|
</p>
|
||||||
<p>Result:</p>
|
<p>Result:</p>
|
||||||
<pre id="result">click a button to fetch data from the agent.</pre>
|
<pre id="result<?= htmlspecialchars($agent['id']) ?>">click a button to fetch data from the agent.</pre>
|
||||||
|
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
|
|
@ -1,20 +1,85 @@
|
||||||
function fetchData(force = false) {
|
function fetchData(agent_id, url, force = false) {
|
||||||
|
|
||||||
|
let counter = 0;
|
||||||
|
const resultElement = document.getElementById("result" + agent_id);
|
||||||
|
|
||||||
// Show loading text
|
// Show loading text
|
||||||
document.getElementById("result").innerHTML = "Loading...";
|
resultElement.innerHTML = "Loading... (0 seconds)";
|
||||||
|
|
||||||
|
// Create an interval to update the counter every second
|
||||||
|
const intervalId = setInterval(() => {
|
||||||
|
counter++;
|
||||||
|
resultElement.innerHTML = `Loading... (${counter} seconds)`;
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
// Create an AJAX request
|
// Create an AJAX request
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
xhr.open("POST", "index.php?page=agents", true);
|
|
||||||
|
// Handle invalid URL error
|
||||||
|
try {
|
||||||
|
xhr.open("POST", url, true);
|
||||||
|
} catch (e) {
|
||||||
|
clearInterval(intervalId); // Stop the counter on error
|
||||||
|
resultElement.innerHTML = `Error: Invalid URL ${url}<br />` + e.message;
|
||||||
|
return; // Exit the function early
|
||||||
|
}
|
||||||
|
|
||||||
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||||
|
|
||||||
|
// Set a timeout in milliseconds (10 seconds = 10000 ms)
|
||||||
|
xhr.timeout = 10000;
|
||||||
|
|
||||||
|
// Handle the request state change
|
||||||
xhr.onreadystatechange = function() {
|
xhr.onreadystatechange = function() {
|
||||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
if (xhr.readyState === 4) {
|
||||||
|
clearInterval(intervalId); // Stop the counter when the request completes
|
||||||
|
clearTimeout(requestTimeout); // Clear the timeout if response is received
|
||||||
|
|
||||||
|
if (xhr.status === 200) {
|
||||||
|
try {
|
||||||
// Parse and display the result
|
// Parse and display the result
|
||||||
let result = JSON.parse(xhr.responseText);
|
let result = JSON.parse(xhr.responseText);
|
||||||
document.getElementById("result").innerHTML = JSON.stringify(result, null, 2);
|
resultElement.innerHTML = JSON.stringify(result, null, 2);
|
||||||
|
} catch (e) {
|
||||||
|
// Display the error
|
||||||
|
resultElement.innerHTML = "Error: Response is not a valid JSON.<br />Response: " + xhr.responseText;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resultElement.innerHTML = `Error: Unable to fetch data from ${url}<br />Status Code: ${xhr.status}<br />Status Text: ${xhr.statusText}<br />Response: ${xhr.responseText}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Send the AJAX request, with force flag
|
// Handle network-level errors (e.g., connection refused)
|
||||||
xhr.send("action=fetch&force=" + (force ? 'true' : 'false'));
|
xhr.onerror = function() {
|
||||||
|
clearInterval(intervalId); // Stop the counter on error
|
||||||
|
resultElement.innerHTML = `Network Error:<br />Unable to connect to ${url}<br />Check network connection or try again later.`;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Handle the timeout event
|
||||||
|
xhr.ontimeout = function() {
|
||||||
|
clearInterval(intervalId); // Stop the counter on timeout
|
||||||
|
resultElement.innerHTML = "Request timed out. Please try again.";
|
||||||
|
};
|
||||||
|
|
||||||
|
// Additional manual timeout
|
||||||
|
var requestTimeout = setTimeout(function() {
|
||||||
|
if (xhr.readyState !== 4) {
|
||||||
|
xhr.abort(); // Abort the request if still pending after timeout
|
||||||
|
clearInterval(intervalId); // Stop the counter
|
||||||
|
resultElement.innerHTML = "Request timed out.";
|
||||||
|
}
|
||||||
|
}, 10000); // 10 seconds
|
||||||
|
|
||||||
|
// Send the AJAX request, with force flag
|
||||||
|
xhr.send("action=fetch&agent_id=" + agent_id + "&force=" + (force ? 'true' : 'false'));
|
||||||
|
|
||||||
|
// // If the request finishes quickly, set this up to show at least 1 second delay
|
||||||
|
// setTimeout(function() {
|
||||||
|
// if (counter === 0) {
|
||||||
|
// counter++;
|
||||||
|
// resultElement.innerHTML = `Loading... (${counter} seconds)`;
|
||||||
|
// }
|
||||||
|
// }, 1000); // Simulate a minimum 1 second delay for testing
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue