#!/usr/bin/env python3
"""巡检 we-mp-rss 微信登录状态 — 查日志而非 Redis"""

import subprocess, json, requests, os
from datetime import datetime, timedelta

# 企微群机器人 webhook
WEBHOOK = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=d4de64e1-efaa-4f03-a833-ad85c1d6de5b"

def send_alert(msg: str):
    try:
        requests.post(WEBHOOK, json={"msgtype": "markdown", "markdown": {"content": msg}}, timeout=10)
    except Exception as e:
        print(f"发送失败: {e}")

# 只查最近 1 小时 — 避免重复推送旧日志
cmd = "sudo journalctl -u we-mp-rss --no-pager --since '1 hour ago' 2>&1"
try:
    output = subprocess.check_output(cmd, shell=True, text=True, timeout=15)
except:
    send_alert("⚠️ **巡检失败**：无法读取 we-mp-rss 日志")
    exit(1)

# 检查 Invalid Session
invalid_lines = [l for l in output.split("\n") if "Invalid Session" in l]

if invalid_lines:
    feeds = set()
    for line in invalid_lines:
        # 提取公众号名: 获取文章失败 [公众号名]: Invalid Session
        import re
        m = re.search(r'获取文章失败\s*\[(.+?)\]', line)
        if m:
            feeds.add(m.group(1))

    feeds_str = "、".join(feeds) if feeds else "未知"
    count = len(invalid_lines)
    send_alert(
        f"🚨 **微信登录已过期**\n\n"
        f"检测到 {count} 条 `Invalid Session` 错误\n"
        f"受影响公众号：{feeds_str}\n\n"
        f"👉 [立即登录重新扫码](https://rss.gdcjgk.net) （admin / admin）"
    )
else:
    # 静默，不发消息
    pass
