Skip to content

Add periodic monitoring events: error log scan, config health check, stale PR/issue #12

Description

@IYENTeam

Summary

Move three monitoring jobs from OpenClaw cron to clawhip native periodic events, routed to #work-intake (1506217431465463929).

Background

These were previously OpenClaw cron jobs but should live in clawhip since:

  • clawhip is the event ingress layer
  • clawhip survives OpenClaw restarts
  • keeps monitoring independent of the system being monitored

New Periodic Monitors

1. Error Log Scanner

[[monitors.logwatch]]
name = "openclaw-gateway"
path = "/tmp/openclaw/openclaw-{date}.log"
patterns = ["ERROR", "FATAL", "crash", "panic", "unhandled", "ECONNREFUSED"]
interval_secs = 900  # 15 min
channel = "1506217431465463929"  # #work-intake
mention = "<@1486621536520769547>"  # 이연
format = "alert"

[[monitors.logwatch]]
name = "clawhip"
path = "/Users/iyen/.clawhip/clawhip.log"
patterns = ["ERROR", "FATAL", "panic"]
interval_secs = 900
channel = "1506217431465463929"
mention = "<@1486621536520769547>"
format = "alert"

Behavior:

  • Scan last N lines (configurable, default 200) for pattern matches
  • On match: emit logwatch.{name}.alert event with matched lines
  • Dedup: don't re-alert for the same error within cooldown window
  • No match: silent

2. Config Change Health Check

[[monitors.filewatch]]
name = "openclaw-config"
path = "/Users/iyen/.openclaw/openclaw.json"
interval_secs = 600  # 10 min
on_change = "health_check"
health_url = "http://localhost:18789/health"
channel = "1506217431465463929"
mention = "<@1486621536520769547>"

Behavior:

  • Track file mtime; on change, hit health_url
  • If health check fails after config change: emit filewatch.{name}.unhealthy
  • If healthy: silent

3. Stale PR/Issue Scanner

[[monitors.stale]]
interval_secs = 604800  # weekly (or cron = "0 10 * * 1")
repos = ["IYENTeam/Hent-ai", "IYENTeam/clawhip", "IYENTeam/openclaw-extensions"]
stale_days = 3
channel = "1506217431465463929"
mention = "<@1486621536520769547>"

Behavior:

  • Weekly scan of open PRs and issues via GitHub API
  • Filter items with no update in stale_days
  • Emit stale.report event with summary table
  • No stale items: emit brief "all clear" or silent

Routing

All three emit events routed to #work-intake:

[[routes]]
event = "logwatch.*"
sink = "discord"
channel = "1506217431465463929"
format = "alert"
mention = "<@1486621536520769547>"

[[routes]]
event = "filewatch.*"
sink = "discord"
channel = "1506217431465463929"
format = "alert"
mention = "<@1486621536520769547>"

[[routes]]
event = "stale.*"
sink = "discord"
channel = "1506217431465463929"
format = "alert"
mention = "<@1486621536520769547>"

Relation

Acceptance Criteria

  • logwatch monitor: pattern scan + dedup + alert
  • filewatch monitor: mtime tracking + health check on change
  • stale monitor: GitHub API scan + weekly report
  • Events routed to #work-intake
  • Tests for each monitor type

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions