Trackers: horodatage discret de la dernière maj des données (cache 1h)
This commit is contained in:
@@ -323,3 +323,11 @@ async def fetch_all() -> list[TrackerStat]:
|
||||
return []
|
||||
_load_cache() # hydrate le cache depuis le disque au premier appel
|
||||
return list(await asyncio.gather(*(_fetch_one(s) for s in specs)))
|
||||
|
||||
|
||||
def last_updated() -> float | None:
|
||||
"""Horodatage epoch du fetch réussi le plus récent parmi les trackers cachés
|
||||
(à appeler après `fetch_all`). Reflète la fraîcheur réelle des données, qui peut
|
||||
dater (cache 1h + persistance disque), pas l'heure du rendu. None si rien en cache."""
|
||||
stamps = [entry["ts"] for entry in _cache.values() if entry["value"].ok]
|
||||
return max(stamps) if stamps else None
|
||||
|
||||
@@ -64,6 +64,11 @@ async def build_context() -> dict:
|
||||
)
|
||||
|
||||
now = datetime.now(ZoneInfo(config.timezone))
|
||||
trk_ts = trackers.last_updated()
|
||||
trackers_updated = (
|
||||
datetime.fromtimestamp(trk_ts, ZoneInfo(config.timezone)).strftime("%Hh%M")
|
||||
if trk_ts else None
|
||||
)
|
||||
return {
|
||||
"width": config.width,
|
||||
"height": config.height,
|
||||
@@ -77,6 +82,7 @@ async def build_context() -> dict:
|
||||
"nas": nas_status,
|
||||
"codex": codex_status,
|
||||
"trackers": tracker_stats,
|
||||
"trackers_updated": trackers_updated,
|
||||
"kobo": kobo.current(),
|
||||
"updated": now.strftime("%H:%M"),
|
||||
"stale": False,
|
||||
|
||||
@@ -43,6 +43,9 @@
|
||||
.label .meta { font-weight: 700; font-size: 24px; letter-spacing: 1px; text-transform: uppercase;
|
||||
margin-left: auto; padding: 4px 12px; border: 3px solid var(--ink); }
|
||||
.label .alarm { background: var(--ink); color: var(--paper); }
|
||||
/* Horodatage discret de fraîcheur des données (ex. trackers cachés jusqu'à 1 h). */
|
||||
.label .stamp { margin-left: auto; font-family: "JetBrains Mono", monospace;
|
||||
font-weight: 500; font-size: 22px; letter-spacing: 0; }
|
||||
|
||||
hr.div { border: 0; border-top: 4px solid var(--ink); margin: 22px 0; }
|
||||
.pane hr.div { margin: 16px 0; }
|
||||
@@ -209,7 +212,8 @@
|
||||
|
||||
{% if trackers %}
|
||||
<hr class="div">
|
||||
<div class="label"><span class="t">Trackers</span></div>
|
||||
<div class="label"><span class="t">Trackers</span>
|
||||
{% if trackers_updated %}<span class="stamp">maj {{ trackers_updated }}</span>{% endif %}</div>
|
||||
<div class="rows">
|
||||
{% for t in trackers %}
|
||||
<div class="trk">
|
||||
|
||||
Reference in New Issue
Block a user