Update auto_post_install.sh

This commit is contained in:
MacRimi
2026-02-13 18:21:28 +01:00
parent e98637321d
commit 4228177920
2 changed files with 74 additions and 9 deletions

View File

@@ -550,8 +550,33 @@ export function SystemLogs() {
if (loading && logs.length === 0 && events.length === 0) { if (loading && logs.length === 0 && events.length === 0) {
return ( return (
<div className="flex items-center justify-center h-64"> <div className="space-y-6">
<RefreshCw className="h-8 w-8 animate-spin text-muted-foreground" /> <div className="grid grid-cols-2 lg:grid-cols-4 gap-4 lg:gap-6">
{[...Array(4)].map((_, i) => (
<Card key={i} className="bg-card border-border animate-pulse">
<CardContent className="p-6">
<div className="h-4 bg-muted rounded w-1/2 mb-4"></div>
<div className="h-8 bg-muted rounded w-3/4 mb-2"></div>
<div className="h-3 bg-muted rounded w-2/3"></div>
</CardContent>
</Card>
))}
</div>
<Card className="bg-card border-border animate-pulse">
<CardContent className="p-6">
<div className="h-6 bg-muted rounded w-1/3 mb-6"></div>
<div className="h-10 bg-muted rounded w-full mb-4"></div>
<div className="space-y-3">
{[...Array(8)].map((_, i) => (
<div key={i} className="flex gap-3">
<div className="h-5 bg-muted rounded w-16"></div>
<div className="h-5 bg-muted rounded w-24"></div>
<div className="h-5 bg-muted rounded flex-1"></div>
</div>
))}
</div>
</CardContent>
</Card>
</div> </div>
) )
} }
@@ -559,11 +584,13 @@ export function SystemLogs() {
return ( return (
<div className="space-y-6"> <div className="space-y-6">
{loading && (logs.length > 0 || events.length > 0) && ( {loading && (logs.length > 0 || events.length > 0) && (
<div className="fixed inset-0 bg-background/80 backdrop-blur-sm z-50 flex items-center justify-center"> <div className="fixed inset-0 bg-background/60 backdrop-blur-sm z-50 flex items-center justify-center">
<div className="flex flex-col items-center gap-4 p-8 rounded-lg bg-card border border-border shadow-lg"> <div className="flex flex-col items-center gap-3 p-6 rounded-xl bg-card border border-border shadow-xl">
<RefreshCw className="h-12 w-12 animate-spin text-primary" /> <div className="relative">
<div className="text-lg font-medium text-foreground">Loading logs selected...</div> <div className="h-10 w-10 rounded-full border-2 border-muted"></div>
<div className="text-sm text-muted-foreground">Please wait while we fetch the logs</div> <div className="absolute inset-0 h-10 w-10 rounded-full border-2 border-transparent border-t-primary animate-spin"></div>
</div>
<div className="text-sm font-medium text-foreground">Loading logs...</div>
</div> </div>
</div> </div>
)} )}

View File

@@ -5160,7 +5160,9 @@ def api_logs():
days = int(since_days) days = int(since_days)
# Cap at 90 days to prevent excessive queries # Cap at 90 days to prevent excessive queries
days = min(days, 90) days = min(days, 90)
cmd = ['journalctl', '--since', f'{days} days ago', '-n', '10000', '--output', 'json', '--no-pager'] # No -n limit when using --since: the time range already bounds the query.
# A hard -n 10000 was masking differences between date ranges on busy servers.
cmd = ['journalctl', '--since', f'{days} days ago', '--output', 'json', '--no-pager']
except ValueError: except ValueError:
cmd = ['journalctl', '-n', limit, '--output', 'json', '--no-pager'] cmd = ['journalctl', '-n', limit, '--output', 'json', '--no-pager']
else: else:
@@ -5174,7 +5176,9 @@ def api_logs():
# We filter after fetching since journalctl doesn't have a direct SYSLOG_IDENTIFIER flag # We filter after fetching since journalctl doesn't have a direct SYSLOG_IDENTIFIER flag
service_filter = service service_filter = service
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30) # Longer timeout for date-range queries which may return many entries
query_timeout = 60 if since_days else 30
result = subprocess.run(cmd, capture_output=True, text=True, timeout=query_timeout)
if result.returncode == 0: if result.returncode == 0:
logs = [] logs = []
@@ -6720,6 +6724,40 @@ if __name__ == '__main__':
cli = sys.modules['flask.cli'] cli = sys.modules['flask.cli']
cli.show_server_banner = lambda *x: None cli.show_server_banner = lambda *x: None
# ── Ensure journald stores info-level messages ──
# Proxmox defaults MaxLevelStore=warning which drops info/notice entries.
# This causes System Logs to show almost identical counts across date ranges
# (since most log activity is info-level and gets silently discarded).
# We create a drop-in to raise the level to info so logs are properly stored.
try:
journald_conf = "/etc/systemd/journald.conf"
dropin_dir = "/etc/systemd/journald.conf.d"
dropin_file = f"{dropin_dir}/proxmenux-loglevel.conf"
if os.path.isfile(journald_conf) and not os.path.isfile(dropin_file):
# Read current MaxLevelStore
current_max = ""
with open(journald_conf, 'r') as f:
for line in f:
line = line.strip()
if line.startswith("MaxLevelStore="):
current_max = line.split("=", 1)[1].strip().lower()
restrictive_levels = {"emerg", "alert", "crit", "err", "warning"}
if current_max in restrictive_levels:
os.makedirs(dropin_dir, exist_ok=True)
with open(dropin_file, 'w') as f:
f.write("# ProxMenux: Allow info-level messages for proper log display\n")
f.write("# Proxmox default MaxLevelStore=warning drops most system logs\n")
f.write("[Journal]\n")
f.write("MaxLevelStore=info\n")
f.write("MaxLevelSyslog=info\n")
subprocess.run(["systemctl", "restart", "systemd-journald"],
capture_output=True, timeout=10)
print("[ProxMenux] Fixed journald MaxLevelStore (was too restrictive for log display)")
except Exception as e:
print(f"[ProxMenux] journald check skipped: {e}")
# Check for SSL configuration # Check for SSL configuration
ssl_ctx = None ssl_ctx = None
try: try: