Refine built-in web app experience

This commit is contained in:
Artem Kokos
2026-05-21 21:47:33 +07:00
parent 61b21c63ea
commit f55e00bce1
11 changed files with 1320 additions and 456 deletions

View File

@@ -7,6 +7,7 @@ from pathlib import Path
import socket
from app.api.deps import get_master_key
from app.core.state import state_manager
APP_NAME = "Ignis Core"
PROJECT_ROOT = Path(__file__).resolve().parents[2]
@@ -58,11 +59,7 @@ def _read_version_file() -> str | None:
def get_app_version() -> str:
return (
_clean_env("IGNIS_BUILD_VERSION")
or _read_version_file()
or "1.0.0"
)
return _clean_env("IGNIS_BUILD_VERSION") or _read_version_file() or "1.0.0"
def _resolve_git_ref(git_dir: Path, ref_name: str) -> str | None:
@@ -144,7 +141,9 @@ def get_configuration_status(build_info: ServerBuildInfo) -> ServerConfiguration
master_key_configured = get_master_key() is not None
public_base_url_configured = _clean_env("IGNIS_PUBLIC_BASE_URL") is not None
scan_network_configured = _clean_env("SCAN_NETWORK") is not None
build_metadata_complete = bool(build_info.version and build_info.git_sha and build_info.build_date)
build_metadata_complete = bool(
build_info.version and build_info.git_sha and build_info.build_date
)
return ServerConfigurationStatus(
configured=master_key_configured,
master_key_configured=master_key_configured,
@@ -166,14 +165,21 @@ def build_server_info(
) -> dict:
payload = {
"app_name": APP_NAME,
"instance_name": get_instance_name(),
"uptime_seconds": get_uptime_seconds(),
"diagnostics_visible": include_diagnostics,
}
if not include_diagnostics:
discovery_snapshot = state_manager.get_discovery_snapshot()
if discovery_snapshot:
payload["discovery"] = {
"last_scan_at": discovery_snapshot["last_scan_at"],
"last_scan_mode": discovery_snapshot["last_scan_mode"],
"online": discovery_snapshot["summary"].get("online"),
}
return payload
build_info = get_build_info()
payload["instance_name"] = get_instance_name()
payload["timezone"] = os.getenv("APP_TIMEZONE", "Asia/Novosibirsk")
payload["started_at"] = SERVER_STARTED_AT.isoformat()
payload["build"] = {
@@ -181,6 +187,13 @@ def build_server_info(
"git_sha": build_info.git_sha,
"build_date": build_info.build_date,
}
discovery_snapshot = state_manager.get_discovery_snapshot()
if discovery_snapshot:
payload["discovery"] = {
"last_scan_at": discovery_snapshot["last_scan_at"],
"last_scan_mode": discovery_snapshot["last_scan_mode"],
**discovery_snapshot["summary"],
}
payload["urls"] = asdict(get_server_urls(observed_base_url))
payload["configuration"] = asdict(get_configuration_status(build_info))
return payload