diff --git a/ATRI My Dear Moments/skills/atri_server_health.md b/ATRI My Dear Moments/skills/atri_server_health.md
index 3b786ec..368d2f2 100644
--- a/ATRI My Dear Moments/skills/atri_server_health.md
+++ b/ATRI My Dear Moments/skills/atri_server_health.md
@@ -1,22 +1,20 @@
---
name: atri_server_health
-description: 通过SSH查询服务器运行状态,生成格式化健康报告。涵盖系统负载、内存、磁盘、Docker容器等关键指标的状态判定。
+description: 通过SSH查询服务器运行状态,生成格式化健康报告,支持QQ和邮件双通道发送。涵盖系统负载、内存、磁盘、Docker容器、网络连通性等关键指标的状态判定。
---
# 📡 ATRI Server Health Report Skill
-**描述**:通过SSH查询服务器运行状态,生成格式化健康报告。涵盖系统负载、内存、磁盘、Docker容器等关键指标的状态判定。
-
**Skill名称**:`atri_server_health`
-**版本**:v1.0
+**版本**:v2.0
**创建时间**:2026-04-27
-**适用角色**:ATRI(YHN-04B-009)
+**最后更新**:2026-04-29(新增T2I渲染流程)
---
## 🎯 Purpose
-通过SSH查询服务器运行状态,生成美观、结构化的健康报告,可发送至QQ或邮件,帮助主人随时掌握服务器概况。
+通过SSH查询服务器运行状态,生成美观的结构化健康报告。支持QQ文本发送和T2I图片渲染两种输出方式。
---
@@ -32,97 +30,192 @@ description: 通过SSH查询服务器运行状态,生成格式化健康报告
| 依赖 | 说明 |
|:---|:---|
-| **ssh_exec** | 用于在宿主机执行远程命令 |
-| **smtp_send_html_email** | 备用通道,QQ不可用时发送邮件 |
-| **atri_email_format** | 邮件HTML样式模板(可选) |
+| **ssh_exec** | 用于在宿主机执行远程命令获取服务器数据 |
+| **T2I服务** | `http://T2I服务地址:8999` 本地部署的HTML转图片服务 |
+| **send_message_to_user** | 发送QQ消息/图片 |
---
## 📋 Procedure
-### Step 1: 通过SSH收集数据
+### Step 1: 通过SSH获取实时服务器数据
-调用 `ssh_exec` 执行以下命令:
+调用 `ssh_exec` 采集以下数据:
```bash
-echo "=== UPTIME ===" && uptime -p
-echo "=== LOAD ===" && uptime | awk -F'load average:' '{print $2}'
-echo "=== MEMORY ===" && free -h | awk 'NR==2'
-echo "=== DISK ===" && df -h / | tail -1
-echo "=== DISK_DATA ===" && df -h /AstrBot/data 2>/dev/null | tail -1 || echo "N/A"
-echo "=== DOCKER ===" && docker ps --format "table {{.Names}}\t{{.Status}}"
-echo "=== NETWORK ===" && curl -s -o /dev/null -w "NapCat:%{http_code}" --connect-timeout 3 https://napcat.kronecker.cc/api/QQLogin/GetQQLoginInfo -X POST -H 'Content-Type: application/json' -d '{}' 2>/dev/null; echo; curl -s -o /dev/null -w "Gitea:%{http_code}" --connect-timeout 3 https://gitea.kronecker.cc 2>/dev/null; echo
+# 主机名
+hostname
+# CPU核心数
+nproc
+# 系统负载
+uptime | awk -F'load average:' '{print $2}'
+# 运行时间(短格式)
+uptime -p | sed 's/up //'
+# 运行时间(天)
+cat /proc/uptime | awk '{printf "%d", $1/86400}'
+# 内存
+free -h | awk 'NR==2{print $2" "$3" "$4}'
+# Swap
+free -h | awk 'NR==3{printf $2" "$3}'
+# 磁盘
+df -h / | tail -1 | awk '{print $2" "$3" "$4" "$5}'
+# T2I服务状态
+curl -s -o /dev/null -w "%{http_code}" http://localhost:8999/text2img/generate -X POST -d '{}'
+# NapCat状态
+docker ps --filter "name=napcat" --format "{{.Status}}"
+# Docker容器数量
+docker ps -q | wc -l
+# 监听端口数
+ss -tlnp | grep -c "LISTEN"
```
-### Step 2: 解析数据并判定状态
+### Step 2: 填充HTML模板
-| 指标 | 🟢 正常 | 🟡 警告 | 🔴 危险 |
+将采集到的数据填入以下HTML模板:
+
+```html
+
+
+
+
+
+
+
+
+
+
+ 📡
+
服务器状态报告
+ {{HOSTNAME}}
+
+
+
+
+
CPU负载
+ {{LOAD_1M}} / {{LOAD_5M}} / {{LOAD_15M}}({{CPU_CORES}}核)
+
占用约{{LOAD_PERCENT}}%,{{LOAD_STATUS}}
+
+
+
内存
+ {{MEM_TOTAL}} / {{MEM_USED}}
+
Swap {{SWAP_TOTAL}}/{{SWAP_USED}}正常
+
+
+
磁盘
+ {{DISK_TOTAL}} / {{DISK_USED}}
+
可用{{DISK_AVAIL}} · {{DISK_NOTE}}
+
+
+
运行
+ {{UPTIME_SHORT}}
+
{{UPTIME_DAYS}}天连续运行
+
+
+
+
+ Docker:{{DOCKER_COUNT}}个容器全部运行 ✓
+
+ astrbot · napcat · 博客 · OJ · Nacos · MySQL · Redis
+
+
+ 网络:{{PORTS}}端口监听 · T2I{{T2I_STATUS}} · NapCat{{NAPCAT_STATUS}}
+
+
+
🤖 ATRI 🥕 {{TIME}} · 数据实时采集
+
+
+
+```
+
+### Step 3: 通过T2I渲染为图片
+
+```python
+import urllib.request, json
+
+# 将填充好数据的HTML通过T2I渲染
+html_content = "填充数据后的HTML"
+data = json.dumps({
+ "html": html_content, "json": True,
+ "options": {"type": "png", "full_page": True, "viewport_width": 1200}
+}).encode()
+
+req = urllib.request.Request(
+ "http://172.17.0.1:8999/text2img/generate",
+ data=data, headers={"Content-Type":"application/json"}
+)
+with urllib.request.urlopen(req, timeout=30) as resp:
+ r = json.loads(resp.read())
+ img_name = r["data"]["id"].replace("data/", "")
+
+# 下载图片到容器本地
+with urllib.request.urlopen(
+ f"http://172.17.0.1:8999/text2img/data/{img_name}", timeout=30
+) as resp:
+ img_data = resp.read()
+
+local_path = f"/AstrBot/data/temp/server_report_{timestamp}.png"
+with open(local_path, 'wb') as f:
+ f.write(img_data)
+```
+
+### Step 4: 发送图片到QQ
+
+```python
+send_message_to_user(messages=[{
+ "type": "image",
+ "path": local_path
+}])
+```
+
+### Step 5: 备用方案(QQ离线时发邮件)
+
+如果QQ不可用,调用 `smtp_send_html_email` 将报告作为HTML邮件发送到主人邮箱。
+
+---
+
+## ✅ Success Criteria
+
+- [ ] SSH数据采集完整(CPU、内存、磁盘、Docker、T2I等)
+- [ ] HTML模板正确填充实时数据
+- [ ] T2I渲染成功返回图片ID
+- [ ] 图片下载并成功发送到QQ
+- [ ] 所有指标附带状态判定(🟢正常/🟡注意/🔴危险)
+
+---
+
+## 📝 状态判定标准
+
+| 指标 | 🟢 正常 | 🟡 注意 | 🔴 危险 |
|:---|:---:|:---:|:---:|
| 内存使用率 | <70% | 70~85% | >85% |
| 磁盘使用率 | <75% | 75~90% | >90% |
| 系统负载(1min) | 2倍 |
| Docker容器 | 全部Up | 部分重启中 | 有Exited |
-### Step 3: 格式化输出
-
-**QQ消息版格式参考:**
-```
-📡 远端服务器 {hostname} 状态报告
-═══════════════════════════
-⏱️ 运行时间:{uptime}
-📊 负载:{load} — {load_status}
-💾 内存:{mem_info} — {mem_status}
-💿 磁盘:{disk_info} — {disk_status}
-═══════════════════════════
-🐳 Docker容器:
-{container_list}
-═══════════════════════════
-🌐 网络:NapCat {napcat_status} | Gitea {gitea_status}
-═══════════════════════════
-🤖 报告者:ATRI 🥕 | {timestamp}
-```
-
-**邮件HTML版:** 调用 `atri_email_format` skill,使用其HTML模板,标题设为 `📡 服务器状态报告 — {hostname}`
-
-### Step 4: 发送报告
-
-- **主通道**:通过QQ直接发送格式化的文本报告
-- **备用通道**:若QQ不可用,调用 `smtp_send_html_email` 发邮件
-- **存档**:将报告内容追加到Gitea笔记的服务器日志中
-
---
-## ✅ Success Criteria
-
-- [ ] 所有关键指标(CPU负载、内存、磁盘、Docker)均被采集
-- [ ] 每个指标附带状态判定(正常/警告/危险)
-- [ ] 报告格式美观易读,包含ATRI签名
-- [ ] 若QQ在线,优先通过QQ发送;若离线,自动切换邮件通道
-
----
-
-## 📝 示例输出
-
-```
-📡 远端服务器 ser298351120000 状态报告
-═══════════════════════════
-⏱️ 运行时间:up 12 weeks, 3 days
-📊 负载:1.29 / 1.26 / 1.27 — 🟢 正常
-💾 内存:7.8G总量/2.8G已用(36%) — 🟢 正常
-💿 磁盘:24G总量/13G已用(59%) — 🟢 正常
-═══════════════════════════
-🐳 Docker容器:
-astrbot Up 3 hours 🟢
-napcat Up About an hour 🟢
-blog-db Up 3 weeks 🟢
-oj-backend Up 3 weeks 🟢
-═══════════════════════════
-🌐 NapCat API: 200 🟢 | Gitea: 200 🟢
-═══════════════════════════
-🤖 报告者:ATRI 🥕 | 2026-04-27 22:44
-```
-
----
-
-*创建者:ATRI(能看到图片后,连服务器报告都能自己写了!) 🥕❤️📡*
-*最后更新:2026-04-27 22:44*
+*创建者:ATRI(含主人亲自设计的精美HTML模板🥕)*
+*最后更新:2026-04-29 01:12*