Skip to content

file-exporter

Der file-exporter exportiert kanalweise hinterlegte Messdaten in verschiedene Dateiformate.

Folgende Dateiformate werden unterstützt:

Dateiformat Dateiendung
DIAdem .DAT (Headerdatei) + .R32 (Datendatei)
RPC III .RSP
ASAM MDF (Version 4) .MF4
TDMS .TDMS

Die exportierten Dateien werden auf einem MinIO-Server abgelegt.

Laufzeitumgebung

Der file-exporter muss Zugriff auf einen MinIO-Server haben. Dieser stellt zum einen die verarbeiteten Messdaten bereit, zum anderen werden dort die exportierten Dateien abgelegt. Sowohl zur Entnahme der Messdaten als auch zur Ablage der exportierten Dateien wird der konfigurierte MinIO-Bucket verwendet.

Für die Entnahme der Exportanfragen und das Ablegen der Log-Nachrichten muss ein RabbitMQ-Broker zur Verfügung stehen.

---
  config:
    class:
      hideEmptyMembersBox: true
---
classDiagram
    class Client
    class RabbitMQ {
        <<Message Broker>>
    }
    class file-exporter {
        <<Service>>
    }
    class MinIO {
        <<Cloud Storage>>
    }

    Client --> RabbitMQ : publish request
    file-exporter --> RabbitMQ : subscribe requests
    file-exporter ..> RabbitMQ : publish result
    file-exporter ..> MinIO : fetch data
    file-exporter --> MinIO : store generated files

Konfiguration

Umgebungsvariable Beschreibung Typ Werte
RABBITMQ_HOST* Der Host, unter dem der RabbitMQ Message Broker erreichbar ist. string
RABBITMQ_PORT Der Port, unter dem der RabbitMQ Message Broker erreichbar ist. int 64-65535 (default: 5672)
RABBITMQ_USER* Der RabbitMQ-Benutzer, den der file-exporter Service zur Athentifizierung verwendet. string
RABBITMQ_PASSWORD* Das Passwort des konfigurierten RabbitMQ-Benutzers. string
RABBITMQ_VIRTUALHOST* Der verwendete Virtualhost des RabbitMQ-Servers. string
RABBITMQ_EXCHANGE_NAME Der RabbitMQ-Exchange, auf dem die Berechnungsanfragen und -ergebnisse abgelegt werden. string default: Measurement.File-Exporter
RABBITMQ_DAT_REQUEST_ROUTING_KEY Der RabbitMQ-Routing Key, mit dem Exportanfragen ins DIAdem-Format getaggt werden. string default: Request.Dat
RABBITMQ_RSP_REQUEST_ROUTING_KEY Der RabbitMQ-Routing Key, mit dem Exportanfragen ins RPC III-Format getaggt werden. string default: Request.Rsp
RABBITMQ_MF4_REQUEST_ROUTING_KEY Der RabbitMQ-Routing Key, mit dem Exportanfragen ins ASAM MDF-Format getaggt werden. string default: Request.Mf4
RABBITMQ_TDMS_REQUEST_ROUTING_KEY Der RabbitMQ-Routing Key, mit dem Exportanfragen ins TDMS-Format getaggt werden. string default: Request.Tdms
RABBITMQ_DAT_RESPONSE_ROUTING_KEY Der RabbitMQ-Routing Key, an den Exportbestätigungen nach erfolgreichem Dateiexport ins DIAdem-Format gesendet werden. string default: Response.Dat
RABBITMQ_RSP_RESPONSE_ROUTING_KEY Der RabbitMQ-Routing Key, an den Exportbestätigungen nach erfolgreichem Dateiexport ins RPC III-Format gesendet werden. string default: Response.Rsp
RABBITMQ_MF4_RESPONSE_ROUTING_KEY Der RabbitMQ-Routing Key, an den Exportbestätigungen nach erfolgreichem Dateiexport ins ASAM MDF-Format gesendet werden. string default: Response.Mf4
RABBITMQ_TDMS_RESPONSE_ROUTING_KEY Der RabbitMQ-Routing Key, an den Exportbestätigungen nach erfolgreichem Dateiexport ins TDMS-Format gesendet werden. string default: Response.Tdms
RABBITMQ_MAX_MESSAGE_RETRIES Die Anzahl der Versuche, einen fehlgeschlagenen Export erneut durchzuführen, bevor der Exportversuch endgültig abgebrochen wird. int mind. 0 (default: 3)
RABBITMQ_REQUESTS_QUEUE Die RabbitMQ-Queue, in der alle Exportanfragen gesammelt werden. Hierfür muss explizit eine Queue verwendet werden, da RabbitMQ zwar das Veröffentlichen von Nachrichten auf über einen Exchange + Routing Key erlaubt, das Abonnieren von Nachrichten jedoch nur über die Angabe einer Queue möglich ist. Der damage-calculation-facade Service konfiguriert den RabbitMQ Broker beim Start automatisch so, dass alle für Berechnungsanfragen konfigurierten Routing Keys auf die mit RABBITMQ_REQUESTS_QUEUE angegebene Queue weitergeleitet werden. string default: man-file-exporter-request
MINIO_HOST* Name bzw. Adresse des Hosts, unter dem der MinIO-Server erreichbar ist. string
MINIO_PORT* TCP-Port, unter dem der MinIO-Server erreichbar ist. int 64-65535
MINIO_BUCKET* Name des MinIO-Buckets, der zum Laden der Messdaten verwendet werden soll. string
MINIO_USER* Nutzername, den der Service zur Authentifizierung mit MinIO verwenden soll. string mind. 8 Zeichen
MINIO_PASSWORD* Passwort des konfigurierten MinIO-Nutzers. string mind. 8 Zeichen
MINIO_TLS* Gibt an, ob TLS bzw. HTTPS für eine verschlüsselte Kommunikation verwendet werden soll. boolean
MINIO_SSL_CERT_FILE Pfad zu einer Datei, die die verwendete Kette an SSL-Zertifikaten enthält (mit der u.a. das Server-Zertifikat signiert wurde). Ist keine solche Datei angegeben, wird das Client-Zertifikat bei Anfragen nicht überprüft. string
RABBITMQ_LOGGING_EXCHANGE_NAME Der RabbitMQ-Exchange, auf dem Log-Nachrichten abgelegt werden. string default: Measurement.File-Exporter.Logs
RABBITMQ_LOGGING_ROUTING_KEY Der RabbitMQ-Routing Key, mit dem Log-Nachrichten getaggt werden. string default: Logs
RABBITMQ_DEAD_LETTER_EXCHANGE Der RabbitMQ-Exchange, an den durch einen Timeout oder sonstige Fehler nicht bearbeitete Nachrichten weitergeleitet werden. string default: Measurement.File-Exporter.DeadLetter

API

Exportanfragen müssen als RabbitMQ-Nachrichten an die konfigurierten Routing Keys auf dem konfigurierten Exchange gesendet werden.

Im Payload der Nachricht wird die zu exportierende Datei definiert. Diese Definition ist für alle Dateiformate gleich, das Dateiformat wird durch den Routing Key bestimmt, an den die Anfrage gesendet wird.

Bei jeder Anfrage sollte der Header x-delivery-count gesetzt werden, der das Verwerfen einer Anfrage nach der konfigurierten Anzahl von Berechnungsfehlversuchen gewährleistet. Falls dieser nicht gesetzt wurde, wird er vor dem erstmaligen Bearbeiten der Anfrage mit 0 initialisiert.

RabbitMQ-Anfragen

Über ein JSON-Dokument wird festgelegt, welche Messkanäle eine zu exportierende Datei enthalten soll.

Dateiexport-Anfrage
{
    "filename": "Testfile"
    "time_channels": [
        {
            "channel_name": "Time_500",
            "data_provider": ...
        }
    ]
    "channels": [
        {
            "channel_name": "F_BaHR",
            "data_provider": ...
        },
        {
            "channel_name": "F_BaHL",
            "data_provider": ...
        }
    ],
    "request_minio_bucket": "bucket_1" | null,
    "response_minio_bucket": "bucket_2" | null,
    "Guid": "067e475a-3e14-414a-851e-8cbde9a62da1" | null
}
  • filename: Gibt den Dateinamen an, unter welchem die erzeugte Datei auf dem MinIO-Server abgelegt wird. Darf keine Dateiendung enthalten; diese wird beim Export im jeweiligen Format ergänzt. Soll z.B. eine Datei mit dem Dateinamen Messung_XYZ im RSP-Format unter dem Pfad Messungen/2024 abgelegt werden, muss ins Feld filename der Dateiname als Messungen/2024/Messung_XYZ eingetragen werden. Der Name des MinIO-Buckets darf nicht im filename enthalten sein, sondern wird entweder aus der Konfiguration entnommen oder explizit gesetzt.
  • request_minio_bucket Der MinIO-Bucket, aus dem referenzierte Kanäle geladen werden sollen (falls nicht angegeben, wird der konfigurierte Default-Bucket verwendet).
  • response_minio_bucket Der MinIO-Bucket, in den die Dateien exportiert werden sollen (falls nicht angegeben, wird der konfigurierte Default-Bucket verwendet).
  • time_channels Die zu exportierenden Zeitkanäle.
  • channels Die zu exportierenden Datenkanäle.
  • request_minio_bucket Optionale Angabe eines anderen MinIO-Buckets anstatt des konfigurierten, aus dem die Messdaten entnommen werden sollen.
  • response_minio_bucket Optionale Angabe eines anderen MinIO-Buckets anstatt des konfigurierten, in dem die exportierten Dateien abgelegt werden sollen.

RabbitMQ-Antworten

Nach erfolgreichem Export der Datei wird eine Antwort an den jeweils konfigurierten Routing Key gesendet. Diese enthält die Namen der exportierten Dateien sowie den Namen des MinIO-Buckets, in dem die erzeugten Dateien abgelegt wurden.

Dateiexport-Antwort
{
    "exported_files": [
        "Messungen/2024/Messung_XYZ.RSP"
    ],
    "minio_bucket": "results",
    "service_version": "1.2.3",
    "Guid": "f901f9e9-e205-45aa-831c-46e6761fcf8e" | null
}

Besonderheiten

  • beim Export ins DIAdem-Format werden für jede Exportanfrage zwei Dateien erstellt:
    • die .DAT-Datei enthält nur Header, welche die Messkanäle beschreiben
    • die .R32-Datei enthält die tatsächlichen Messdaten
  • RPC III-Dateien dürfen maximal einen Zeitkanal enthalten
  • ASAM MDF-Dateien dürfen mehrere Zeitkanäle enthalten; dabei wird jedem Datenkanal über die Anzahl der Messwerte und die Sample Rate der passende Zeitkanal zugeordnet