#!/bin/bash # OpenClaw 状态监控 - 生成静态 HTML OUT="${1:-/tmp/oc-status.html}" CONFIG="$HOME/.openclaw/openclaw.json" # 获取基础信息 GW_PID=$(pgrep -f "openclaw.*gateway" | head -1) GW_STATUS="offline"; GW_UPTIME="" if [ -n "$GW_PID" ]; then GW_STATUS="online" if [ "$(uname)" = "Darwin" ]; then GW_START=$(ps -o lstart= -p "$GW_PID" 2>/dev/null) else GW_START=$(ps -o etimes= -p "$GW_PID" 2>/dev/null | xargs) fi fi # 获取 session 信息 SESSIONS=$(cat ~/.openclaw/agents/main/sessions/sessions.json 2>/dev/null) SESSION_COUNT=$(echo "$SESSIONS" | python3 -c "import json,sys;d=json.load(sys.stdin);print(len(d.get('sessions',{})))" 2>/dev/null || echo "?") # 获取模型信息 MODEL_JSON=$(python3 -c " import json with open('$CONFIG') as f: c=json.load(f) m=c.get('models',{}) default=m.get('default','') providers=[] for name,p in m.get('providers',{}).items(): if not isinstance(p,dict): continue for mod in p.get('models',[]): providers.append({ 'provider':name, 'model':mod.get('id',''), 'name':mod.get('name',''), 'api':p.get('api',''), 'ctx':mod.get('contextWindow',0), 'maxTok':mod.get('maxTokens',0), 'base':p.get('baseUrl','')[:60] }) print(json.dumps({'default':default,'providers':providers})) " 2>/dev/null) # 生成 HTML python3 << 'PYEOF' > "$OUT" import json,datetime,os gw_status = os.environ.get("GW_STATUS","offline") session_count = os.environ.get("SESSION_COUNT","?") model_json = os.environ.get("MODEL_JSON","{}") try: data = json.loads(model_json) except: data = {"default":"","providers":[]} now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") rows = "" for p in data.get("providers",[]): badge = "primary" if p["provider"] in ["newcli","terminalpub","bookapi"] else "secondary" rows += f""" {p['provider']} {p['model']} {p['name']} {p['api']} {p['ctx']//1000}k {p['maxTok']//1000}k {p['base']} """ dot = "green" if gw_status == "online" else "red" print(f""" OpenClaw Monitor

🐾 OpenClaw Monitor

Gateway
{gw_status}
Sessions
{session_count}
Default Model
{data.get('default','auto')}
Providers
{len(data.get('providers',[]))}
{rows}
ProviderModel IDNameAPIContextMax OutEndpoint
""") PYEOF echo "Generated: $OUT"