feat: v0.5.8 - Anfragen taeglich zuruecksetzen, Kommando-Badges entfernt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
ppfeiffer 2026-02-17 16:30:45 +01:00
parent 1d768c6921
commit 0232dfccd5
5 changed files with 17 additions and 27 deletions

View file

@ -1,5 +1,10 @@
# Changelog # Changelog
## [0.5.8] - 2026-02-17
### Changed
- Anfragen-Zaehler zeigt nur noch Anfragen von heute (Reset um Mitternacht)
- Kommando-Badges entfernt, nur noch Kanal-Aufschluesselung angezeigt
## [0.5.7] - 2026-02-17 ## [0.5.7] - 2026-02-17
### Added ### Added
- Anfragen-Aufschluesselung pro Kanal mit Kanalnamen im Dashboard - Anfragen-Aufschluesselung pro Kanal mit Kanalnamen im Dashboard

View file

@ -1,4 +1,4 @@
version: "0.5.7" version: "0.5.8"
bot: bot:
name: "MeshDD-Bot" name: "MeshDD-Bot"

View file

@ -1,6 +1,7 @@
import aiosqlite import aiosqlite
import time import time
import logging import logging
from datetime import datetime
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -192,14 +193,14 @@ class Database:
"SELECT COUNT(*) FROM nodes WHERE last_seen >= ?", (day_ago,) "SELECT COUNT(*) FROM nodes WHERE last_seen >= ?", (day_ago,)
) as c: ) as c:
stats["nodes_24h"] = (await c.fetchone())[0] stats["nodes_24h"] = (await c.fetchone())[0]
async with self.db.execute("SELECT COUNT(*) FROM commands") as c: today_start = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0).timestamp()
async with self.db.execute(
"SELECT COUNT(*) FROM commands WHERE timestamp >= ?", (today_start,)
) as c:
stats["total_commands"] = (await c.fetchone())[0] stats["total_commands"] = (await c.fetchone())[0]
async with self.db.execute( async with self.db.execute(
"SELECT command, COUNT(*) as cnt FROM commands GROUP BY command ORDER BY cnt DESC" "SELECT channel, COUNT(*) as cnt FROM commands WHERE timestamp >= ? GROUP BY channel ORDER BY cnt DESC",
) as cursor: (today_start,),
stats["command_breakdown"] = {row[0]: row[1] async for row in cursor}
async with self.db.execute(
"SELECT channel, COUNT(*) as cnt FROM commands GROUP BY channel ORDER BY cnt DESC"
) as cursor: ) as cursor:
stats["channel_breakdown"] = {row[0]: row[1] async for row in cursor} stats["channel_breakdown"] = {row[0]: row[1] async for row in cursor}
return stats return stats

View file

@ -102,19 +102,13 @@
</div> </div>
</div> </div>
<!-- Command Breakdown --> <!-- Channel Breakdown -->
<div class="card card-outline mb-2"> <div class="card card-outline mb-2">
<div class="card-body py-2 px-3 d-flex flex-column gap-1"> <div class="card-body py-2 px-3 d-flex align-items-center gap-2 flex-wrap">
<div class="d-flex align-items-center gap-2 flex-wrap"> <small class="text-body-secondary"><i class="bi bi-broadcast me-1"></i>Anfragen/Kanal:</small>
<small class="text-body-secondary"><i class="bi bi-bar-chart-fill me-1"></i>Anfragen:</small>
<span id="commandBreakdown" class="d-flex gap-1 flex-wrap"></span>
</div>
<div class="d-flex align-items-center gap-2 flex-wrap">
<small class="text-body-secondary"><i class="bi bi-broadcast me-1"></i>Kanaele:</small>
<span id="channelBreakdown" class="d-flex gap-1 flex-wrap"></span> <span id="channelBreakdown" class="d-flex gap-1 flex-wrap"></span>
</div> </div>
</div> </div>
</div>
<!-- Send Message (auth-gated) --> <!-- Send Message (auth-gated) -->
<div class="card card-outline card-success mb-2 d-none" id="sendCard"> <div class="card card-outline card-success mb-2 d-none" id="sendCard">

View file

@ -166,16 +166,6 @@ function updateStats(stats) {
document.getElementById('statNodes24h').textContent = stats.nodes_24h || 0; document.getElementById('statNodes24h').textContent = stats.nodes_24h || 0;
document.getElementById('statCommands').textContent = stats.total_commands || 0; document.getElementById('statCommands').textContent = stats.total_commands || 0;
const breakdown = document.getElementById('commandBreakdown');
const cmds = stats.command_breakdown || {};
if (Object.keys(cmds).length > 0) {
breakdown.innerHTML = Object.entries(cmds).map(([cmd, count]) =>
`<span class="badge bg-primary bg-opacity-75">${escapeHtml(cmd)} <span class="badge bg-light text-dark ms-1">${count}</span></span>`
).join('');
} else {
breakdown.innerHTML = '<span class="text-body-secondary small">Noch keine Anfragen</span>';
}
const chBreakdown = document.getElementById('channelBreakdown'); const chBreakdown = document.getElementById('channelBreakdown');
const chCounts = stats.channel_breakdown || {}; const chCounts = stats.channel_breakdown || {};
if (Object.keys(chCounts).length > 0) { if (Object.keys(chCounts).length > 0) {