gontrol/templates/index.html

147 lines
7.2 KiB
HTML
Raw Normal View History

2025-01-06 11:07:53 +01:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
2025-01-08 17:59:04 +01:00
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
2025-01-06 11:07:53 +01:00
<script src="https://unpkg.com/htmx.org@1.9.12"></script>
2025-01-08 17:59:04 +01:00
<!-- <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> -->
<title>g2: gommand & gontrol</title>
2025-01-11 02:36:21 +01:00
<script>
document.addEventListener('DOMContentLoaded', () => {
fetch('/agentNames')
.then(response => response.json())
.then(agentNames => {
const dropdown = document.getElementById('agentName');
agentNames.forEach(name => {
const option = document.createElement('option');
option.value = name;
option.textContent = name;
dropdown.appendChild(option);
});
})
.catch(error => console.error('Error fetching agent names:', error));
2025-01-27 17:00:52 +01:00
fetch('http://localhost:5555/agentNames')
.then(response => {
console.log('Fetch response status:', response.status);
return response.json();
})
.then(agentNames => {
console.log('Connected agent names:', agentNames);
// Your existing logic here
})
.catch(error => {
console.error('Error fetching agent names:', error);
});
const tableRows = document.querySelectorAll('#agentList table tbody tr');
console.log('Number of rows found:', tableRows.length);
tableRows.forEach((row, index) => {
const nameCell = row.querySelector('td[data-column="Name"]');
const statusCell = row.querySelector('td[data-column="Status"]');
console.log(`Row ${index + 1} - Name: ${nameCell?.textContent}, Status Cell Found: ${!!statusCell}`);
});
});
const updateAgentStatuses = () => {
fetch('http://localhost:5555/agentNames')
.then(response => response.json())
.then(agentNames => {
console.log("Agent names fetched:", agentNames);
2025-01-20 16:32:13 +01:00
2025-01-27 17:00:52 +01:00
// Get all rows in the table body
const tableRows = document.querySelectorAll('#agentList table tbody tr');
2025-01-20 16:32:13 +01:00
2025-01-27 17:00:52 +01:00
// Loop through each row to find the Name and update Status
tableRows.forEach(row => {
const nameCell = row.querySelector('td:nth-child(2)'); // Name is in the second column
const statusCell = row.querySelector('td:nth-child(5)'); // Status is in the fifth column
2025-01-20 16:32:13 +01:00
2025-01-27 17:00:52 +01:00
if (nameCell && statusCell) {
const agentName = nameCell.textContent.trim();
if (agentNames.includes(agentName)) {
statusCell.innerHTML = '<span class="badge bg-success">Connected</span>';
} else {
statusCell.innerHTML = '<span class="badge bg-danger">Disconnected</span>';
}
}
});
})
.catch(error => console.error('Error fetching agent names:', error));
};
// Initial call to update statuses
updateAgentStatuses();
// Set the function to run every 5 seconds
setInterval(updateAgentStatuses, 5000);
</script>
2025-01-06 11:07:53 +01:00
</head>
<body>
2025-01-08 17:59:04 +01:00
<div class="container">
<div class="row">
<div class="col">
<h2>Agents</h2>
<!-- Agent List -->
2025-01-27 17:00:52 +01:00
<!-- <div id="agentList" hx-get="/agents" hx-trigger="load, every 2s" hx-swap="innerHTML"></div> -->
2025-01-08 17:59:04 +01:00
<div id="agentList" hx-get="/agents" hx-trigger="load" hx-swap="innerHTML"></div>
2025-01-11 02:36:21 +01:00
<!-- Agent Commands -->
2025-01-09 16:42:27 +01:00
<div id="agentCommands">
2025-01-11 02:36:21 +01:00
<h3>Command Execution</h3>
2025-01-20 16:32:13 +01:00
<form hx-post="http://localhost:5555/executeCommand" hx-target="#commandOutput" hx-encoding="application/x-www-form-urlencoded" hx-swap="innerHTML">
2025-01-11 02:36:21 +01:00
<div class="mb-3">
<label for="agentName" class="form-label">Agent Name</label>
<select class="form-select" id="agentName" name="agentName" required>
<!-- Dynamically populated with agent names -->
</select>
</div>
<div class="mb-3">
<label for="command" class="form-label">Command</label>
<input type="text" class="form-control" id="command" name="command" placeholder="Enter command" required>
</div>
<button type="submit" class="btn btn-primary">Execute</button>
</form>
<pre id="commandOutput"></pre>
</div>
2025-01-08 17:59:04 +01:00
<!-- Add Agent Form -->
<button class="btn btn-primary mt-3" data-bs-toggle="collapse" data-bs-target="#addAgentForm">Add Agent</button>
<div id="addAgentForm" class="collapse mt-2">
<form hx-post="/agents" hx-target="#agentList" hx-swap="innerHTML">
2025-01-10 02:47:33 +01:00
<div class="mb-3">
<label for="agentId" class="form-label">Agent Id</label>
<input type="text" class="form-control" id="agentId" name="agentId" required>
</div>
2025-01-08 17:59:04 +01:00
<div class="mb-3">
<label for="agentName" class="form-label">Agent Name</label>
<input type="text" class="form-control" id="agentName" name="agentName" required>
2025-01-10 02:47:33 +01:00
</div>
<div class="mb-3">
<label for="IPv4Address" class="form-label">IPv4 Address</label>
<input type="text" class="form-control" id="IPv4Address" name="IPv4Address" required>
2025-01-08 17:59:04 +01:00
</div>
<div class="mb-3">
<label for="initialContact" class="form-label">Initial Contact</label>
<input type="datetime-local" class="form-control" id="initialContact" name="initialContact" required>
</div>
<div class="mb-3">
<label for="lastContact" class="form-label">Last Contact</label>
<input type="datetime-local" class="form-control" id="lastContact" name="lastContact" required>
</div>
<button type="submit" class="btn btn-success">Add Agent</button>
</form>
</div>
2025-01-06 11:07:53 +01:00
</div>
2025-01-08 17:59:04 +01:00
<!-- Agent Details -->
<div class="col" id="agentDetails">
<h3>Details</h3>
<p>Select an agent to view details.</p>
</div>
</div>
2025-01-06 11:07:53 +01:00
</div>
</body>
</html>