openclaw - 💡(How to fix) Fix [Proposal] Pulse: Service Health Monitoring Dashboard [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#50927Fetched 2026-04-08 01:06:32
View on GitHub
Comments
0
Participants
1
Timeline
0
Reactions
1
Author
Participants

Error Message

  • Services: HTTP 2xx rate, response time p95, error rate (5xx), active connections.
RAW_BUFFERClick to expand / collapse

Proposal: Pulse — Health Monitoring Dashboard for Workspace Services

Scope: Unified monitoring of OpenClaw gateway, QuantPipe, GitchPage, SovereignLedger, VaultSeal, and infrastructure (CPU, RAM, disk).

Metrics:

  • System: CPU %, RAM %, disk %, uptime.
  • Services: HTTP 2xx rate, response time p95, error rate (5xx), active connections.
  • Database: DuckDB connection count, cache hit rate, query latency p95, table sizes.

Storage & Expose:

  • Prometheus-compatible /metrics endpoint (text format) for scraping.
  • Simple HTML dashboard (auto-refresh) for quick glance.
  • Persistent storage: Prometheus remote write or local TSDB (DuckDB metrics.db).

Alerting:

  • Discord webhook on service_down or error_rate > 1% or disk > 90%.
  • Daily digest email if warnings persisted.

Implementation plan:

  1. Metrics collection daemon (Python psutil + HTTP probes) → push to local endpoint.
  2. Scrape to metrics.db (DuckDB) for historical queries.
  3. Dashboard: Next.js page app/admin/monitor/page.tsx with charts (ECharts).
  4. Alert manager: evaluate rules every minute; send webhooks.

Why not use external SaaS?: Data sovereignty; zero external dependencies; fits workspace ethos.

Related: #41924 (agent health monitoring) — Pulse centralizes this.

extent analysis

Fix Plan

To implement the Pulse health monitoring dashboard, we will focus on the following steps:

  • Implementing the metrics collection daemon
  • Setting up the local endpoint for metrics storage
  • Creating the dashboard with Next.js and ECharts
  • Configuring the alert manager

Implementation Steps

Metrics Collection Daemon

import psutil
import requests

# Define metrics to collect
metrics = {
    'cpu_percent': psutil.cpu_percent(),
    'ram_percent': psutil.virtual_memory().percent,
    'disk_percent': psutil.disk_usage('/').percent,
    'uptime': psutil.boot_time()
}

# Define HTTP probes for services
services = {
    'OpenClaw': 'http://openclaw:8080',
    'QuantPipe': 'http://quantpipe:8080',
    'GitchPage': 'http://gitchpage:8080'
}

# Collect metrics and send to local endpoint
for service, url in services.items():
    try:
        response = requests.get(url)
        metrics[f'{service}_http_2xx_rate'] = response.status_code == 200
    except requests.exceptions.RequestException:
        metrics[f'{service}_http_2xx_rate'] = False

# Push metrics to local endpoint
requests.post('http://localhost:8080/metrics', json=metrics)

Local Endpoint for Metrics Storage

from fastapi import FastAPI
from fastapi.responses import JSONResponse
from pydantic import BaseModel

app = FastAPI()

class Metrics(BaseModel):
    cpu_percent: float
    ram_percent: float
    disk_percent: float
    uptime: float
    # Add other metrics as needed

@app.post("/metrics")
async def create_metrics(metrics: Metrics):
    # Store metrics in DuckDB
    import duckdb
    con = duckdb.connect(database='metrics.db')
    con.execute("CREATE TABLE IF NOT EXISTS metrics (cpu_percent FLOAT, ram_percent FLOAT, disk_percent FLOAT, uptime FLOAT);")
    con.execute("INSERT INTO metrics VALUES (?, ?, ?, ?);", (metrics.cpu_percent, metrics.ram_percent, metrics.disk_percent, metrics.uptime))
    con.close()
    return JSONResponse(content={"message": "Metrics stored successfully"}, status_code=201)

Dashboard with Next.js and ECharts

import React, { useState, useEffect } from 'react';
import axios from 'axios';
import ReactECharts from 'echarts-for-react';

function MonitorPage() {
    const [metrics, setMetrics] = useState({});

    useEffect(() => {
        axios.get('http://localhost:8080/metrics')
            .then(response => {
                setMetrics(response.data);
            })
            .catch(error => {
                console.error(error);
            });
    }, []);

    const options = {
        xAxis: {
            type: 'category',
            data: ['CPU',

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING