NetworkOperatorAlertsRequest network.operator-alerts-request@1

Generated at from openvibe-contracts v0.76.0 and openvibe-sdk v0.20.1.

Version
1.0.0
Owner
network
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/network/operator-alerts-request.v1.json

network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations.

Fields

FieldTypeRequiredDescriptionConstraints
sourceenumyesWhere the alerts are evaluated. Resolution is per source.
  • one of "prometheus"
sent_atstring
  • format date-time
alertsarray of objectyes
  • maxItems 200
  • items: no other fields
alerts[].fingerprintstringyes
  • pattern ^[0-9a-f]{16,64}$
alerts[].namestringyes
  • pattern ^[A-Za-z][A-Za-z0-9_:]{0,99}$
alerts[].severityenumyes
  • one of "critical", "warning", "info"
alerts[].summarystringyes
  • minLength 1
  • maxLength 300
alerts[].descriptionstring
  • maxLength 1000
alerts[].servicestring
  • pattern ^[a-z][a-z0-9-]{1,39}$
alerts[].started_atstringyes
  • format date-time

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: all-clear
{
  "source": "prometheus",
  "alerts": []
}
Valid: two-firing
{
  "source": "prometheus",
  "sent_at": "2026-09-26T14:10:00Z",
  "alerts": [
    {
      "fingerprint": "3f1c2a9b7d4e6f80",
      "name": "OpenVibeBackupMissed",
      "severity": "critical",
      "summary": "No successful backup in 26 hours",
      "description": "ovhost backup --all has not succeeded since 2026-09-25 03:35 UTC.",
      "service": "host",
      "started_at": "2026-09-26T05:35:00Z"
    },
    {
      "fingerprint": "9a8b7c6d5e4f3a2b1c0d",
      "name": "OpenVibeBrowserCheckFailed",
      "severity": "warning",
      "summary": "The browser check of live failed after release 8caa540",
      "service": "live",
      "started_at": "2026-09-26T14:05:00Z"
    }
  ]
}
Rejected: extra-labels
{
  "source": "prometheus",
  "alerts": [
    {
      "fingerprint": "3f1c2a9b7d4e6f80",
      "name": "OpenVibeBackupMissed",
      "severity": "critical",
      "summary": "No backup",
      "started_at": "2026-09-26T05:35:00Z",
      "labels": {
        "instance": "127.0.0.1:9100"
      }
    }
  ]
}
Rejected: no-summary
{
  "source": "prometheus",
  "alerts": [
    {
      "fingerprint": "3f1c2a9b7d4e6f80",
      "name": "OpenVibeBackupMissed",
      "severity": "critical",
      "started_at": "2026-09-26T05:35:00Z"
    }
  ]
}
Rejected: unknown-severity
{
  "source": "prometheus",
  "alerts": [
    {
      "fingerprint": "3f1c2a9b7d4e6f80",
      "name": "OpenVibeBackupMissed",
      "severity": "page",
      "summary": "No backup",
      "started_at": "2026-09-26T05:35:00Z"
    }
  ]
}
Rejected: unknown-source
{
  "source": "grafana",
  "alerts": []
}
Rejected: uppercase-fingerprint
{
  "source": "prometheus",
  "alerts": [
    {
      "fingerprint": "3F1C2A9B7D4E6F80",
      "name": "OpenVibeBackupMissed",
      "severity": "critical",
      "summary": "No backup",
      "started_at": "2026-09-26T05:35:00Z"
    }
  ]
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('network.operator-alerts-request@1', value);   // { valid, errors: [{ path, message }] }