From 243abe55b59b32e91e32ba3cd7afa3d725aad3ce Mon Sep 17 00:00:00 2001
From: Oronemu
Date: Sat, 20 Dec 2025 02:28:41 +0700
Subject: [PATCH] Fix service status
---
frontend/src/pages/LobbyPage.tsx | 25 ++++++++
status-service/database.py | 12 ++--
status-service/main.py | 81 +++++++++++++++++++-----
status-service/monitors.py | 28 ++++++---
status-service/templates/index.html | 97 +++++++++++++++++++++++++++--
5 files changed, 210 insertions(+), 33 deletions(-)
diff --git a/frontend/src/pages/LobbyPage.tsx b/frontend/src/pages/LobbyPage.tsx
index 9f3cd5a..0ede02b 100644
--- a/frontend/src/pages/LobbyPage.tsx
+++ b/frontend/src/pages/LobbyPage.tsx
@@ -804,6 +804,14 @@ export function LobbyPage() {
+
+
+ setEditChallenge(prev => ({ ...prev, proof_hint: e.target.value }))}
+ />
+
{challenge.title}
{challenge.description}
+ {challenge.proof_hint && (
+ Пруф: {challenge.proof_hint}
+ )}
{isOrganizer && (
@@ -1187,6 +1198,14 @@ export function LobbyPage() {
+
+
+ setEditChallenge(prev => ({ ...prev, proof_hint: e.target.value }))}
+ />
+
{challenge.title}
{challenge.description}
+ {challenge.proof_hint && (
+ Пруф: {challenge.proof_hint}
+ )}
{challenge.proposed_by && (
Предложил: {challenge.proposed_by.nickname}
@@ -1310,6 +1332,9 @@ export function LobbyPage() {
{challenge.title}
{challenge.description}
+ {challenge.proof_hint && (
+ Пруф: {challenge.proof_hint}
+ )}
{challenge.status === 'pending' && (
+
+
+
{% if ssl_status %}
-
Avg 24h
+
Avg {{ period }}h
{% if service.avg_latency_24h %}
{{ "%.0f"|format(service.avg_latency_24h) }} ms
@@ -501,7 +570,7 @@
-
Uptime 24h
+
Uptime {{ period }}h
{{ "%.1f"|format(service.uptime_percent) }}%
@@ -620,13 +689,29 @@
{% endif %}
{% endfor %}
+ // Save scroll position before unload
+ window.addEventListener('beforeunload', () => {
+ sessionStorage.setItem('scrollPos', window.scrollY.toString());
+ });
+
+ // Restore scroll position on load
+ window.addEventListener('load', () => {
+ const scrollPos = sessionStorage.getItem('scrollPos');
+ if (scrollPos) {
+ window.scrollTo(0, parseInt(scrollPos));
+ }
+ });
+
async function refreshStatus(btn) {
btn.classList.add('loading');
btn.disabled = true;
try {
await fetch('/api/refresh', { method: 'POST' });
- window.location.reload();
+ // Preserve period parameter on reload
+ const url = new URL(window.location);
+ url.searchParams.set('period', '{{ period }}');
+ window.location.href = url.toString();
} catch (e) {
console.error('Refresh failed:', e);
btn.classList.remove('loading');
@@ -634,9 +719,11 @@
}
}
- // Auto-refresh page
+ // Auto-refresh page (preserve period parameter)
setTimeout(() => {
- window.location.reload();
+ const url = new URL(window.location);
+ url.searchParams.set('period', '{{ period }}');
+ window.location.href = url.toString();
}, {{ check_interval }} * 1000);