Runtime Extensions
@5minds/node-red-contrib-processcube-runtime-extensions — 5 Palette-Nodes und 6 Plugins für Produktivbetrieb: Health Checks, Metriken, Context Storage, File-Handling, Datenbank-Migration und Execution Tracing.
Plugins
Plugins werden in der settings.js konfiguriert und erweitern Node-RED auf Systemebene.
Readiness Plugin
Kubernetes-kompatible Readiness- und Liveness-Probes.
Konfiguration (settings.js):
httpReadiness: {
enabled: true,
url: '/readiness',
failedCode: 503,
startupDelay: 5,
oldestUpdateSinceInSeconds: 0,
testMode: false
}| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
enabled | boolean | — | Plugin aktivieren |
url | string | /readiness | HTTP-Endpunkt |
failedCode | number | 503 | HTTP-Status bei “nicht ready” |
startupDelay | number | 5 | Startup-Verzögerung in Sekunden |
oldestUpdateSinceInSeconds | number | 0 | Max. Alter des ältesten Health-Updates |
testMode | boolean | false | Test-Endpunkt aktivieren |
Response:
{
"status": "Ok",
"oldestUpdateSinceInSeconds": 60,
"nodes": {
"node-123": { "id": "node-123", "status": "Ok", "nodeName": "My Node" }
}
}Nodes können ihren Status über Events melden:
RED.events.emit('processcube:healthcheck:update', {
nodeId: 'node-123',
status: 'Ok',
nodeName: 'My Node',
nodeType: 'http-in'
});Metrics Plugin
Prometheus-kompatible Metriken für Performance-Monitoring.
Konfiguration (settings.js):
httpMetrics: {
enabled: true,
url: '/metrics'
}Response:
{
"timestamp": { "value": "2025-01-01T10:00:00Z" },
"eventLoopDelay": {
"mean": { "value": 0.52 },
"max": { "value": 12.34 },
"p99": { "value": 8.56 }
},
"eventLoopLag": { "lag": { "value": 1.23 } },
"lastBlocked": {
"blockedMs": { "value": 125.50 },
"stack": { "value": ["..."] }
}
}Custom Storage Module
Einheitliches Storage-Modul mit konfigurierbarem Format und Speichermodus.
Konfiguration (settings.js):
storageModule: require('@5minds/node-red-contrib-processcube-runtime-extensions/dist/lib/storage'),
flowStorageOutputFormat: 'json', // 'json' oder 'yaml'
flowStorageSaveByNode: true // true = pro Node, false = pro Flow| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
flowStorageOutputFormat | string | json | Dateiformat: json oder yaml |
flowStorageSaveByNode | boolean | true | true: pro Node, false: pro Flow-Tab |
Features:
- Automatische Migration zwischen Formaten
- Stabiles Sortieren für Git-Diffs
- HTTP-Endpunkt für Deployment:
POST /processcube/deploy(tar.gz Upload)
HTTP Context Store
Verteilter Context-Store für Datenaustausch zwischen mehreren Node-RED Instanzen.
Konfiguration (settings.js):
contextStorage: {
httpCacheFlows: {
module: require('@5minds/.../http-context-store.js'),
config: {
baseURL: process.env.CONTEXT_STORE_URL || 'http://localhost:3000',
scope: 'flows',
ttl: 300,
maxRetries: 3,
retryDelay: 1000,
disableCache: false
}
}
}| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
baseURL | string | — | API-Endpunkt für Context Store |
scope | string | — | flows oder global |
ttl | number | 300 | Cache Time-To-Live (Sekunden) |
maxRetries | number | 3 | Max. Wiederholungen |
retryDelay | number | 1000 | Basis-Verzögerung für Backoff (ms) |
authToken | string | — | Bearer Token |
disableCache | boolean | false | Cache deaktivieren |
Database Migration Plugin
Automatische Datenbank-Schema-Migrationen mit Postgrator.
Konfiguration (settings.js):
dbMigrations: [
{
enabled: true,
name: 'PostgreSQL DB',
driver: 'pg',
connectionString: 'postgresql://user:pass@host:5432/db',
migrationPattern: './migrations/*.sql',
schemaTable: 'schema_version'
}
]Unterstützte Treiber: pg (PostgreSQL), mysql (MySQL), mssql (MS SQL Server)
Migrationen laufen automatisch beim Node-RED-Start.
Block Plugin (nur für Tests)
Simuliert CPU-Blockierung zum Testen von Monitoring und Alerting.
httpBlock: {
enabled: true, // In Produktion: false!
url: '/block'
}Blockiert den Event-Loop für 10 Sekunden (busy wait). Nicht für Produktion verwenden!
Palette-Nodes
Execution Trace
Umfassendes Monitoring von Node-RED Message-Flow-Events.
Kategorie: ProcessCube DevOps
Konfiguration:
| Eigenschaft | Beschreibung |
|---|---|
hook_types | Hook-Typen zum Überwachen |
with_msg | Message-Content inkludieren |
complete | Welcher Message-Teil (Property-Name oder true für alles) |
Hook-Typen:
| Hook | Beschreibung |
|---|---|
onSend | Node hat send() aufgerufen |
preRoute | Nachricht wird geroutet |
preDeliver | Nachricht wird zugestellt |
postDeliver | Nachricht wurde dispatched |
onReceive | Nachricht wird empfangen (Standard) |
postReceive | Nachricht wurde empfangen |
onComplete | Node hat Verarbeitung abgeschlossen |
Output:
| Feld | Typ | Beschreibung |
|---|---|---|
msg.payload.event | string | Hook-Typ |
msg.payload.timestamp | string | ISO-Zeitstempel |
msg.payload.source_node_id | string | Quell-Node-ID |
msg.payload.source_node_type | string | Quell-Node-Typ |
msg.payload.destination_node_id | string | Ziel-Node-ID |
msg.payload.has_error | boolean | Fehler aufgetreten |
msg.payload.error_msg | string | Fehlermeldung |
msg.payload.message_part | Object | Message-Inhalt (wenn aktiviert) |
File Read
Liest Dateien vom konfigurierten File-Handler-Backend.
Kategorie: ProcessCube Tools
Konfiguration:
| Eigenschaft | Beschreibung |
|---|---|
handler | Handler-Name (aus Registry) |
path | Dateipfad |
Output:
| Feld | Typ | Beschreibung |
|---|---|---|
msg.payload | Buffer | Dateiinhalt |
msg.meta | Object | Metadaten (path, mimetype, size, createdAt, updatedAt) |
File Write
Schreibt Dateien zum konfigurierten File-Handler-Backend.
Kategorie: ProcessCube Tools
Input:
| Feld | Typ | Beschreibung |
|---|---|---|
msg.payload | Buffer/String/Stream | Dateiinhalt |
msg.meta | Object | Optional: Metadaten (z.B. mimetype) |
Output:
| Feld | Typ | Beschreibung |
|---|---|---|
msg.payload | string | Pfad der geschriebenen Datei |
msg.meta | Object | Datei-Metadaten |
File Delete
Löscht Dateien vom File-Handler-Backend.
Kategorie: ProcessCube Tools
Input:
| Feld | Typ | Beschreibung |
|---|---|---|
msg.path | string | Dateipfad |
Output:
| Feld | Typ | Beschreibung |
|---|---|---|
msg.payload | boolean | true wenn gelöscht, false wenn nicht vorhanden |
File List
Listet Dateien vom File-Handler-Backend.
Kategorie: ProcessCube Tools
Input:
| Feld | Typ | Beschreibung |
|---|---|---|
msg.filter | Object | Optional: Filter (path, mimetype, fromDate, toDate) |
Output:
| Feld | Typ | Beschreibung |
|---|---|---|
msg.payload | Array | Array von Datei-Metadaten-Objekten |
File-Handler Backends
Die File-Nodes unterstützen austauschbare Backends:
Filesystem Handler
fileHandlers: {
"local": {
type: "filesystem",
basePath: "/data/files"
}
}- Path-Traversal-Schutz
- Automatische Verzeichniserstellung
- MIME-Type-Erkennung anhand Dateiendung
Postgres Handler
fileHandlers: {
"database": {
type: "postgres",
connectionString: "postgresql://user:pass@host:5432/db",
table: "node_red_files"
}
}- Lazy Table Creation
- Upsert mit
ON CONFLICT - SQL-basierte Filterung
Node-Übersicht
| Node | Kategorie | Beschreibung |
|---|---|---|
| Execution Trace | DevOps | Message-Flow-Monitoring |
| File Read | Tools | Dateien lesen |
| File Write | Tools | Dateien schreiben |
| File Delete | Tools | Dateien löschen |
| File List | Tools | Dateien auflisten |
| Plugin | Beschreibung |
|---|---|
| Readiness | Kubernetes Health-Checks |
| Metrics | Prometheus-Metriken |
| Custom Storage | Flow-Storage (JSON/YAML) |
| HTTP Context Store | Verteilter Context-Store |
| DB Migration | Schema-Migrationen |
| Block | CPU-Blockierung (Tests) |
Nächste Schritte
- Authentication — OAuth 2.0 Konfiguration
- Engine Nodes — Engine-Integration
- Elasticsearch — Logging