29 Commits

Author SHA1 Message Date
shirainbown
db9a036b2c fix: operation logs page display and API pagination
- Fix frontend Logs.vue to use correct field names (entity_type, entity_name, old_value, new_value)
- Add user and source_ip columns to logs table
- Add details column showing old_value -> new_value transitions
- Fix backend logs API to support pagination (page, page_size, search)
- Add search support across all log fields (action, entity_type, entity_name, username, values)
- Return proper {list, total, page, page_size} response format
2026-06-19 19:11:42 +08:00
shirainbown
e4b2edb3bf feat: add comprehensive operation logs for all critical actions
- Login/Logout: record user authentication events with source IP
- Login failed: record failed login attempts for security audit
- Export: record data export operations
- Machine status change: record online/offline transitions with reason
- SSH sync: record automatic SSH sync success/failure with error details
- All auto-generated logs use username='system' and empty source_ip
2026-06-19 18:59:32 +08:00
shirainbown
396783e8a0 fix: add operation log for password change
- ChangePassword handler now records 'change_password' action in operation_logs
- Logs include username, source IP, and timestamp for audit purposes
2026-06-19 18:52:41 +08:00
shirainbown
95b518a139 feat: add SSH sync expiration indicator (30min threshold)
- Add isSSHExpired() function to detect stale SSH sync data (>30min)
- Show red warning icon next to sync time when data is expired
- Expired sync time text turns red for visibility
- Only applies to machines with ssh_synced_at data
2026-06-19 18:27:00 +08:00
shirainbown
1c0fce6a17 feat: independent SSH sync service with concurrency limit
- Split SSH sync from ping loop into independent service
- Ping service: serial polling, 30s interval, only updates online status
- SSH sync service: runs every 10 minutes for all online machines
- Global semaphore limits concurrent SSH to 2 (prevents resource exhaustion)
- SSH command timeout 8s prevents hanging on unresponsive hosts
- Offline machines are skipped for SSH sync
- Ping fallback: if ping fails but SSH succeeds, mark as online (SSH sync handles info)
2026-06-19 18:21:36 +08:00
shirainbown
74bab47a5b feat: optimize ping interval to 30s and SSH sync to 10min with timeout protection
- Change ping interval from 60s to 30s (configurable via PING_INTERVAL)
- Change SSH info sync from every ping to every 10 minutes (via ssh_synced_at)
- Add SSH command timeout (8s) to prevent hanging on unresponsive hosts
- Add concurrency limit (5) for SSH sync operations
- Change frontend UI refresh interval from 10s to 30s
- Fix: remove hardcoded 30s step, use configured interval directly
- Fix: ensure ping loop continues even if individual machine fails
2026-06-19 18:08:06 +08:00
shirainbown
21a2d2dff3 feat: PVE host management and VM control
- Add PVE host management page (/pve-hosts)
- Add PVE host CRUD operations with connection test
- Add VM start/stop buttons on machine list cards
- Auto-detect PVE host status on page load
- Add VM ID validation (frontend + backend)
- Fix PVE status detection logic (online vs ok)
- Update Dream2.0 theme CSS variables
- Fix visitor mode grid layout
2026-06-19 17:49:04 +08:00
shirainbown
39ea3e154f fix: 背景改为不透明,保持Dream2.0主题色和圆角 2026-06-19 15:40:49 +08:00
shirainbown
54e6336ea4 style: 适配Dream2.0 Plus主题风格 - 天蓝主题色/半透明背景/8px圆角 2026-06-19 15:36:13 +08:00
shirainbown
bab2433c13 style: 访客3列网格,管理员2列,统一Material卡片 2026-06-19 15:10:13 +08:00
shirainbown
0d960964e5 style: 统一管理员和访客卡片为Material Design风格 2026-06-19 14:58:32 +08:00
shirainbown
f10fc599f8 refactor: 移除冗余checkAuth调用,优化访客卡片样式 2026-06-19 14:12:47 +08:00
shirainbown
93227db553 fix: 路由权限控制 - 访客只能访问机器列表,admin页面需登录 2026-06-19 13:06:35 +08:00
shirainbown
7f9a883ed2 feat: 访客模式不显示搜索和筛选工具栏
- 访客:仅展示机器列表,无搜索、无筛选、无操作按钮
- 管理员:保留完整搜索、筛选、操作功能
2026-06-19 01:31:47 +08:00
shirainbown
c39ac81b69 feat: 移除所有访客模式提示和入口,保持界面极简
- 删除登录页访客模式进入按钮
- 删除 MachineList 访客提示样式
- 访客界面无任何说明文字,只展示机器列表
- 登录页仅提供管理员登录入口
2026-06-19 01:28:57 +08:00
shirainbown
9eae8986e3 feat: 访客模式极简界面,隐藏所有导航和登录入口
- 访客:顶部标题栏 + 深色模式图标,无侧边栏导航
- 访客:只能查看机器列表、搜索、筛选,无任何操作按钮
- 访客:无登录提示,无登录入口
- 管理员:完整侧边栏 + 操作按钮
- 登录页需手动访问 /login
2026-06-19 01:24:04 +08:00
shirainbown
340ad6b109 fix: 修复访客模式认证状态判断,完善访客浏览体验
- 后端 /auth/me 未登录时返回 401 而非 200
- 访客只能访问机器列表,其他页面自动重定向
- 侧边栏隐藏非访客菜单,无登录入口提示
- 登录页需手动访问 /login
2026-06-19 01:12:36 +08:00
shirainbown
8d6f831d22 feat: 全面开放访客浏览模式,访客可查看拓扑图/日志/详情页
- 路由权限放宽:拓扑图、操作日志对访客开放
- 访客模式提示 UI:横幅 + 侧边栏提示
- Logo 使用 logo.svg 替代 Element Plus 图标
- 访客可点击进入机器详情页
- IP 地址信息对访客开放
2026-06-19 00:46:31 +08:00
shirainbown
e31b6b21f1 fix: SPA 路由支持 logo.svg 等静态资源文件 2026-06-19 00:31:54 +08:00
shirainbown
73ca3ee65a feat: UI 全面升级,新增 Dashboard 仪表盘
- 新增 Dashboard.vue 首页(统计卡片、系统分布、在线率趋势)
- 路由调整:根路径 / 默认重定向到 /dashboard
- 新增品牌图标(logo.svg、favicon)
- 登录页、侧边栏、拓扑图视觉增强
- 全局 CSS 变量重定义(GitHub 风格)
- 拓扑图新增布局切换和过滤控制
- 更新 README.md 部署指导,删除旧二进制部署说明
2026-06-19 00:28:00 +08:00
shirainbown
ba1c2c3af8 chore: 清理二进制部署相关文件,项目已全面转向 Docker 部署 2026-06-18 23:15:40 +08:00
shirainbown
412786606a chore: 更新 .gitignore,忽略截图和临时文件 2026-06-18 23:14:23 +08:00
shirainbown
498bcf8a78 fix: 修复 Docker 部署时 r.Static 与 /api 路由冲突 2026-06-18 23:12:09 +08:00
shirainbown
6f507b319e feat: merge PVE VM management + local features
- Merge PVE (Proxmox VE) virtual machine management from remote
  - PVE host CRUD API
  - VM status query / start / stop operations
  - PVE database tables and models
  - Frontend VM status display and control buttons
  - SPA routing fix for nested asset paths

- Keep local features:
  - Change password functionality
  - Log cleanup service
  - Docker containerization (Dockerfile + docker-compose)
  - Empty machine ping log spam fix
  - settings table for admin password storage

- Update machines handlers to support PVE fields
- Update frontend API client with PVE endpoints
2026-06-18 22:33:45 +08:00
shirainbown
af306c183c fix: 防止 SSH 系统信息同步覆盖自定义主机名,优化 Debian 12 兼容性
核心修复:
- 后端 SyncSSH 接口彻底移除 hostname 字段更新,仅保留 os_version、cpu_info、
  memory_info、disk_info、uptime、listen_ports 的系统信息同步。
- 前端 MachineDetail.vue 在 openSSH(自动获取)和 fetchSSH(手动输入密码)
  两条路径均增加 delete syncData.hostname 保护,确保即使误传也不会覆盖。
- 重新编译后端二进制并重启服务,解决了旧二进制残留 hostname 更新逻辑的问题。

SSH 采集兼容性优化(server/services/ssh.go):
- CPU:将复杂 shell 脚本改为 Go 层两次读取 /proc/stat 并计算利用率,避免
  Debian 12 dash 对引号嵌套解析失败。
- 内存:改用 /proc/meminfo 替代 free -m,兼容最小化/容器环境。
- 磁盘:简化 df -hP 过滤,仅保留真实块设备( ~ /^/dev/)。
- 端口:增加 ss → netstat → /proc/net/tcp 三级回退,确保任何 Linux 环境
  都能获取监听端口。
- 系统版本:采用 . /etc/os-release && printf '%s\n'  方式,
  兼容所有 Linux 发行版。

构建与部署:
- 重新构建前端并更新 server/static/。
- 交叉编译 Linux amd64 二进制并更新 deploy/lan-manager-debian12.tar.gz。
- 恢复数据库中被污染的主机名记录。
2026-04-15 02:05:37 +08:00
shirainbown
d34ed5842a feat: SSH 成功获取系统信息时视为机器在线
在连通性检测逻辑中,当 network ping / ICMP / TCP 三层探测均失败后,
若机器配置了 SSH 凭据,则同步尝试调用 GetSSHInfo 进行 SSH 信息采集:
- 若 SSH 采集成功,则将该机器判定为在线,并保存获取到的系统信息;
- 若 SSH 采集也失败,则保持离线状态,按原逻辑记录离线日志。

此改进可避免以下场景导致的误判:
- 机器禁 ping 或 ICMP 被防火墙拦截;
- SSH 端口未被网络层探测正确识别;
- 只要 SSH 服务正常且能正确登录并获取系统信息,即认为机器处于可用状态。

其他改动:
- 提取 saveSSHResult 辅助函数,统一保存 SSH 采集结果,避免重复代码。
- 同步更新了本地与 Linux 部署二进制文件。
2026-04-15 01:39:16 +08:00
shirainbown
1a5f5ee3b5 feat: 机器离线统计/日志、连通性重试检测与暗黑模式支持
后端更新:
- 在 machines 表新增 offline_count、total_offline_seconds、last_offline_at、last_offline_reason 字段,用于记录机器离线统计信息。
- 新增 offline_logs 表,记录每次离线的开始时间、结束时间、持续时长及离线原因。
- 重写 ping 服务为状态机模式:
  – 单台机器依次使用 system ping / ICMP / TCP(SSH端口) 三种方式检测连通性;
  – 任意一次成功即视为在线;
  – 若一次失败,则会连续重试 3 次(间隔 2 秒),3 次均失败才判定为离线,避免网络抖动导致误判。
  – 仅在状态发生 online→offline 或 offline→online 变化时更新 offline_logs 与累计时长。
  – 机器按顺序逐个检测,每台间隔 30 秒。
- 新增 API:GET /admin/machines/:id/offline-logs,用于查询最近 50 条离线记录。
- CleanupLogs 增加对 offline_logs 的过期清理。

前端更新:
- 机器详情页(MachineDetail.vue)新增离线统计卡片,展示离线次数、累计离线时长、上次离线原因及最近 5 条离线记录。
- 全局支持暗黑模式:
  – App.vue 引入 light/dark CSS 变量,并加载 Element Plus 深色主题(dark/css-vars.css)。
  – MainLayout.vue 侧边栏新增主题切换按钮,支持深浅色切换并持久化到 localStorage。
  – Topology.vue 监听主题变化,动态重绘 G6 节点/边的颜色、背景与阴影。
  – MachineList.vue / MachineDetail.vue 全面适配深色变量(卡片、表格、标签、进度条等)。
- 机器列表卡片 UI 调整:改为顶部 OS 色点 + 在线/离线状态胶囊标签,离线卡片降低透明度并去色。

构建与部署:
- 重新构建前端并打包静态资源。
- 交叉编译 Linux amd64 二进制并更新 deploy/lan-manager-debian12.tar.gz 部署包。
2026-04-15 01:34:06 +08:00
shirainbown
80d21f68e4 feat: color-code machine cards by OS type and fade offline cards 2026-04-15 00:59:13 +08:00
shirainbown
d28aae585f Initial commit: LAN Manager with Go backend and Vue frontend 2026-04-15 00:52:25 +08:00