Skip to content

High-level architecture

Reddwatch is organized into planes — separate, independently operated layers with one job each. The design rule that governs everything: an integrator's console session lives inside exactly one instance; only the Redd Ash control plane sees across instances.

flowchart TB
    subgraph Admin["Control plane — admin.reddwatch.com (Redd Ash only)"]
        REG[Instances registry]
        FLEET[Fleet views]
        OTA[Update / OTA controls]
        BILLO[Billing overview]
    end

    subgraph Instances["Instance plane — one per integrator"]
        A1["app101 · console.reddwatch.com<br/>portal + API + workers"]
        A2["app102 · integrator B"]
        A3["appNNN · …"]
    end

    subgraph Shared["Shared backbone (Redd Ash operated)"]
        IDP["Identity · Keycloak SSO"]
        MON["Monitoring plane · Zabbix"]
        DATA["Central data plane · PostgreSQL"]
        UPD["Artifact plane · update.reddwatch.com"]
    end

    subgraph Sites["Site plane"]
        N1["Site node · city A"]
        N2["Site node · plant B"]
        N3["Site node · campus C"]
    end

    Admin -->|oversees / provisions| Instances
    Instances --> IDP & MON & DATA
    Sites -->|encrypted overlay,<br/>outbound only| MON
    Sites -->|heartbeat + frames| Instances
    Sites -->|signed releases| UPD

The planes

Instance plane — each integrator gets an isolated Reddwatch instance: its own web portal, API, alert workers, and database. Logging into the console means logging into one instance — users land in the instance their account is assigned to. Everything a tenant sees and touches lives here: clients, devices, alerts, topology, reports, camera frames.

Control plane (admin.reddwatch.com) — the Redd Ash overseer console. Instances registry and lifecycle, fleet-wide node/update orchestration, billing overview, cross-instance directory. Nothing tenant-facing runs here; it reads across instances but never becomes a data-path proxy.

Monitoring plane — a managed Zabbix deployment does the raw collection: availability, SNMP telemetry, RF metrics, hardware traps. Each instance talks to it with a scoped, least-privilege API identity. Alerts are refined in the instance app (topology root-cause, storm suppression, escalation) — raw monitoring noise never reaches a customer directly.

Identity plane — Keycloak single sign-on for staff and (rolling out) tenant users. One login, per-instance entitlements, roles resolved per instance.

Site plane — the node appliance at each customer site: local discovery, monitoring proxy, camera frame capture. Sites connect outbound only over an encrypted overlay network — deploying Reddwatch never requires inbound firewall rules or a site VPN concentrator.

Artifact plane (update.reddwatch.com) — signed release bundles and the version catalog the fleet converges to. Releases are immutable; the signing key never lives on the public host.

The alert pipeline

flowchart LR
    DEV[Site devices] -->|ICMP / SNMP / traps / agents| PRX[Node proxy]
    PRX -->|outbound, encrypted| ZBX[Monitoring plane]
    ZBX -->|problems| APP[Instance app]
    APP --> RCA{Topology<br/>root-cause}
    RCA -->|root alert only| NOTIFY[Email / SMS<br/>+ escalation + on-call]
    RCA -.->|dependents suppressed| LOG[Alert history]
    APP --> STORM[Storm circuit breaker]
    STORM -->|caps floods, sends digest| NOTIFY

The monitoring plane measures; the instance decides. Severity gating keeps engineering-grade telemetry (RF quality trends, hardware pre-failure warnings) on the ops side while clients see clean, actionable outage alerts.

Multi-tenancy model

Layer Isolation
Portal & API one instance per integrator; sessions pinned to one instance
Database one database per instance
Monitoring per-instance scoped API identity; namespaced host groups
Network per-instance overlay tags; site nodes isolated between tenants
Billing per-integrator consolidation; clients see plan + status only

For the full internal detail — hosts, ports, data flows, failure domains — see the low-level architecture (Redd Ash sign-in).