Add active user session tracking from agent user :0 2026-07-16 15:46

user     pts/0        2026-07-16 15:50 (:0)
user     pts/1        2026-07-16 16:46 (:0)
user     pts/2        2026-07-17 09:05 (:0) to server UI
This commit is contained in:
2026-07-17 09:44:39 +07:00
parent 8e62eaf3f3
commit 7b2e5172ea
9 changed files with 195 additions and 5 deletions
+18 -3
View File
@@ -64,11 +64,17 @@
<th></th>
</tr>
</thead>
<tbody>
<tbody>
{% for c in computers %}
<tr data-id="{{ c.id }}">
<td><strong>{{ c.hostname }}</strong></td>
<td>{{ c.current_user or '-' }}</td>
<td>
{% if c.current_user and ',' in c.current_user %}
<span class="badge bg-info text-dark" title="{{ c.current_user }}">за ПК работают {{ c.current_user.split(',') | length }} пользователя</span>
{% else %}
{{ c.current_user or '-' }}
{% endif %}
</td>
<td>{{ c.current_ip or '-' }}</td>
<td>
{% if c.status == 'online' %}
@@ -101,6 +107,15 @@
<script>
const isAdmin = {{ 'true' if user.role == 'admin' else 'false' }};
function formatCurrentUser(value) {
if (!value) return '-';
if (value.includes(',')) {
const count = value.split(',').length;
return `<span class="badge bg-info text-dark" title="${escapeHtml(value)}">за ПК работают ${count} пользователя</span>`;
}
return escapeHtml(value);
}
function currentQuery() {
return new URLSearchParams(window.location.search).toString();
}
@@ -152,7 +167,7 @@ async function loadDashboard() {
tbody.innerHTML = data.map(c => `
<tr data-id="${c.id}">
<td><strong>${escapeHtml(c.hostname)}</strong></td>
<td>${escapeHtml(c.current_user || '-')}</td>
<td>${formatCurrentUser(c.current_user)}</td>
<td>${escapeHtml(c.current_ip || '-')}</td>
<td>${c.status === 'online' ? '<span class="badge bg-success">Online</span>' : '<span class="badge bg-secondary">Offline</span>'}</td>
<td>${c.current_cpu_percent != null ? c.current_cpu_percent.toFixed(1) : '-'}%</td>