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.
{
"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 DateinamenMessung_XYZim RSP-Format unter dem PfadMessungen/2024abgelegt werden, muss ins Feldfilenameder Dateiname alsMessungen/2024/Messung_XYZeingetragen werden. Der Name des MinIO-Buckets darf nicht imfilenameenthalten sein, sondern wird entweder aus der Konfiguration entnommen oder explizit gesetzt.request_minio_bucketDer MinIO-Bucket, aus dem referenzierte Kanäle geladen werden sollen (falls nicht angegeben, wird der konfigurierte Default-Bucket verwendet).response_minio_bucketDer MinIO-Bucket, in den die Dateien exportiert werden sollen (falls nicht angegeben, wird der konfigurierte Default-Bucket verwendet).time_channelsDie zu exportierenden Zeitkanäle.channelsDie zu exportierenden Datenkanäle.request_minio_bucketOptionale Angabe eines anderen MinIO-Buckets anstatt des konfigurierten, aus dem die Messdaten entnommen werden sollen.response_minio_bucketOptionale 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.
{
"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