Funktionsbeschreibung: Server

Der Server startet so früh wie möglich nach dem Start des Betriebssystem.

Beim Start des Servers wird dessen Version ($CARGO_PKG_VERSION) auf STDOUT ausgegeben.

Im Kapitel Verwaltung: Server wird erklärt wie man den Server neu starten, und den Status des Servers prüfen kann.

Bootstrapping, Konfiguration und Laufzeit Informationen

Beim allerersten Start des Servers wird die Server Instanz aus einer initialen Konfigurationsdatein () erstellt. Dieser Vorgang wird auch als Bootstrapping bezeichnet. Siehe "Implementation: Bootstrapping, Konfiguration und Laufzeit Informationen"

Konnte aus dieser ersten Konfiguration eine funktionale Server Intanz gestartet werden, wird eine Datei mit den Laufzeit Informationen (der aktuelle Zustand des Servers) erzeugt.

Alle weiteren Starts des Servers verwenden diese Laufzeit Informationen.

Dies gewährleistet das Daten wie die Laufzeit "persistent" gespeichert werden können (d.h. das diese nicht nach einem Neustart verloren gehen).

Kann keine Instanz erstellt werden ist das ein Critical Fehler!! Der Server startet in diesem Fall nicht!

Datei: Initale Konfiguration, Bootstrapping

  • /boot/xmz-server.toml

Diese Datein kann über die Umgebungsvariable XMZ_SERVER_CONFIGURATION_PATH geändert werden.

Datei: Laufzeit Informationen

  • /var/cache/xmz-server/status

Diese Datein kann über die Umgebungsvariable XMZ_SERVER_RUNTIME_INFO_PATH geändert werden.

Konfiguration Server

Wie in der Implementation: Serverkonfiguration beschreiben, werden zur Konfiguration der Serverkomponenten Umbgebungsvariablen verwendet.

Es gibt verschiedene Arten dieser Environment Variablen:

  • XMZ_SERVER_ - diese Variablen steuern Eigenschaften der Server Komponente
  • ROCKET_ - diese Variablen steuern Eigenschaften der Rocket Web Komponente

Die Umgebungsvariablen können "von Hand" beim Start der xmz-server Anwendung übergeben werden. In Produktivsystemen werden die Variablen via des systemd Unit Files übergeben.

Click to show xmz-server.service

# xmz-server.service
#
# systemd Unit für die xMZ-Plattform
#
[Unit]
Description="Server der xMZ-Platform"
After=weston.service

[Service]
Type=simple
Environment=XDG_RUNTIME_DIR=/run/user/0
Environment=XMZ_HARDWARE=0.1.0
Environment=LANG=de_DE.UTF-8
Environment="ROCKET_ENV=prod"
Environment="ROCKET_ADDRESS=127.0.0.1"
Environment="ROCKET_PORT=1337"
Environment="ROCKET_LOG=critical"
ExecStart=/usr/bin/xmz-server
Restart=always
RestartSec=10s

Übersicht Umgebungsvariablen

UmbgebunsvariableFunktionsbeschreibung
XMZ_SERVER_CONFIGURATION_PATHSpeicherort der initialen Bootstrap Konfigurationsdatei
XMZ_SERVER_RUNTIME_INFO_PATHSpeicherort der Laufzeit Informationen
ROCKET_ENVRocket Umgebung
ROCKET_ADDRESSAdresse über die die Rocket Instanz erreichbar ist

Fehlerbehandlung

Die Fehler können auf STDERR ausgegeben werden.

Server Tread: json API

Die Serverinstanz startet ein HTTP Server (rocket) mit einer json API die zur Komunikation mit weiteren Komponenten (GUI, Websites) dient.

Server Tread: Persistent Data

In regelmäßigen Abständen speichert der Server die aktuellen Laufzeit Informationen unter: /var/cache/xmz-server/status

Server Tread: Sensoren auslesen

Die Serverinstanz starete ein internen Thread der alle konfigurierten Sensoren abfragt.

Server Tread: Auswertung

In diesem Thread werden folgende Komponenten ausgewertet:

  • Zonen
  • Laufzeit berechnent und,
  • die Spannungsversorgung,
  • Ladestand der Accu

Links