Konfiguration
Die Konfiguration erfolgt in der Datei appsettings.json. Die nachfolgenden Unterkapitel beschreiben jeweils einen Toplevel-Eintrag.
Hinweis: Pfadangaben müssen mit doppelte Backslashes geschrieben werden.
Serilog
{
"Serilog": {
"MinimumLevel": {
"Default": "[LEVEL]"
},
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": {
"rollingInterval": "Day",
"path": "[PATH]"
}
}
]
}
}
Dies ist die Serilog-Konfiguration. Serilog wird insbesondere für das File-Logging gebraucht.
MinimumLevel.Default
Folgende Log-Level werden unterstützt:
- Verbose
- Debug
- Information
- Warning
- Error
- Fatal
Die Log-Level Verbose
und Debug
sollten nur für Fehlersuche gesetzt werden, da die geloggte Menge gross werden kann.
WriteTo.Args.Path
Hier wird der Pfad zum Log-File gesetzt. Bsp.: C:\\temp\\logs-cmi-api\\cmi-api-.log
Weitere Konfigurationen
Weitere Konfigurationsmöglichkeiten siehe https://github.com/serilog/serilog-settings-configuration.
ForwardedHeaders
Viele Proxies senden zusätzliche http-Header, um die Herkunft einer Anfrage dem Zielsystem mitzuteilen:
Der Service kann konfiguriert werden, diese Header anstatt der Verbindungsinformationen des Proxies zu verwenden. Wenn keine Konfiguration vorgenommen wird, werden die Header nicht verwendet.
Das Verhalten zu den Forward-Headern wird in der Sektion ForwardedHeaders
konfiguriert. Es stehen alle Optionen der
Klasse ForwardedHeadersOptions
zur Verfügung.
In diesem Abschnitt wird die Dokumentation der Klasse ForwardedHeadersOptions
von Microsoft nicht wiederholt, es
werden nur Konfigurationshinweise zu einigen Optionen dokumentiert.
ForwardedHeaders
: Wenn mehrere Optionen dieses Flags verwendet werden sollen, können die Flags kommagetrennt aufgeführt werden.All
aktiviert alle Optionen.KnownProxies
: Bekannte Proxies können als Array von Ip-Adressen angegeben werden.KnownNetworks
: Bekannte Netzwerke können als Array in der CIDR-Notation0.0.0.0/0
/0:0:0:0:0:0:0:0/0
angegeben werden.
{
"ForwardedHeaders": {
"ForwardedHeaders": "XForwardedFor, XForwardedHost, XForwardedProto",
"KnownProxies": [
"10.0.0.6",
"10.0.0.7"
],
"KnownNetworks": [
"10.0.0.0/8",
"::1/128"
]
}
}
Api-Config
{
"ApiConfig": {
"AutoRebootOnConfigChangeEnabled": true,
"WebHookOnConfigChange": {
"Uri": null,
"HttpMethod": "Get"
},
"EnableMonitoring": true,
"ClearMonitoringDataAfterXMinutes": 60
}
}
Dieser Abschnitt steuert das allgemeine Verhalten der CMI API und betrifft alle Mandanten.
AutoRebootOnConfigChangeEnabled
Mit der Einstellung AutoRebootOnConfigChangeEnabled
lässt sich steuern, ob die API nach einer Änderung in irgendeinem
Tenant automatisch neu gestartet werden soll. Wird bei einem Tenant etwas geändert, so startet die komplette API
automatisch neu.
Diese Einstellung ist standardmässig true
.
WebHookOnConfigChange
Mit der Einstellung WebHookOnConfigChange
lässt sich steuern, ob die API nach einer Änderung in irgendeinem Tenant,
einen Web Hook an die konfigurierte URL sendet (wenn WebHookOnConfigChange.Uri
ungleich null
).
WebHookOnConfigChange.Uri
: URL des Web HooksWebHookOnConfigChange.HttpMethod
: Http-Request-Methode, der Standardwert istGet
Es wird ein Http-Response-Status Code von >=200 und <=299 erwartet. Ist der Http-Request nicht erfolgreich, wird dem Benutzer gemeldet, dass das Speichern der Konfiguration nicht erfolgreich war. Die Änderungen wurden zwar persistiert, jedoch konnten externe Systeme nicht über die Änderung informiert werden.
EnableMonitoring
Mit der Einstellung EnableMonitoring
lässt sich das Monitoring ein- und ausschalten.
ClearMonitoringDataAfterXMinutes
Mit der Einstellung ClearMonitoringDataAfterXMinutes
lässt sich einstellen, wie lange die Monitoring-Daten gespeichert
bleiben.
Mandant (Tenant)
{
"Tenants": {
"[Tenant-Key]": {
"CmiStsUri": "[STS-URL]",
"CmiStsClientId": "[STS-Client-ID]",
"CmiPrivateUri": "[PROTOKOLL]://[DOMAIN]:[OWIN-PRIVATE-PORT]",
"PathApiConfig": "[PATH]",
"Throttling": {
"MaxWaitingRequests": 2,
"MaxConcurrentRequests": 1
},
"KpfProcessLayerNamespaces": [
"[Namespace]"
]
}
}
}
In der "Tenants"-Sektion werden einzelne Mandanten als eigenständige JSON-Objekte innerhalb des "Tenants"-Objekts definiert. Der Schlüssel des jeweiligen Objekts entspricht dabei dem Namen des Mandanten. Hier ist ein Beispiel mit den Mandanten prod und test:
{
"Tenants": {
"prod": {
...
},
"test": {
...
}
}
}
CmiStsUri
Url zum STS inkl. Mandant. Beispiel.: https://sts3.cloud.ch/<MANDANT>/identity
CmiStsClientId
ClientID für den OpenId Connect flow. Der Client muss den Grant-Type "authorization_code" unterstützen.
Die Minimalkonfiguration vom STS ist hier zu finden.
CmiPrivateUri
Url zur Metatool API. Die Url muss auf dem Owin-Privateport gerichtet sein.
Beispiel.: https://mandant.cmicloud.ch:10004
PathApiConfig
Path zum Konfigurationsfile der CMI API. Das File muss nicht existieren. Es muss jedoch sichergestellt werden, dass
genügend Rechte vorhanden sind damit die API das File selbst erstellen kann. Wird die API in einem IIS betrieben, so
muss der ApplicationPool genügend Rechte haben um im jeweiligen Ordner ein File zu erstellen.
Beispiel.: C:\\CMI-API\\Mandant\\apiconfig.txt"
ThrottlingConfig
Die ThrottlingConfig beinhaltet die Einstellungen für das Throttling der API. Hierbei handelt es sich um ein sogenanntes Concurrency-Throttling. Der Zweck dieses Throttle-Mechanismus besteht darin, sicherzustellen, dass nicht zu viele parallele Requests gleichzeitig ausgeführt werden können. Beim Concurrency-Throttling gibt es zwei einstellbare Parameter:
- MaxConcurrentRequests: Dies steuert die maximale Anzahl von parallelen Anfragen, die gleichzeitig laufen dürfen.
- MaxWaitingRequests: Dies steuert die maximale Anzahl von Anfragen, die in der Warteschlange stehen dürfen, wenn bereits die maximale Anzahl von parallelen Anfragen ausgeführt wird.
Wenn kein Platz mehr für gleichzeitige Anfragen oder in der Warteschlange verfügbar ist, wird der StatusCode 429 ( TooManyRequests) zurückgegeben.
Die Throttling-Einstellungen werden für jeden Mandanten separat auf Tenant-Ebene festgelegt. Dabei wird jedoch die Verwaltung (wie viele Requests gemacht werden dürfen) für jede CMI-API-Gruppe separat durchgeführt. Das bedeutet, dass die Throttling-Konfiguration individuell für jeden Mandanten angepasst werden kann, während gleichzeitig das Throttling-Verhalten für jede spezifische CMI-API-Gruppe des Mandanten separat verfolgt und gesteuert wird.
Geblockte Anfragen aufgrund des Throttle-Mechanismus werden im Debug-Endpoint zur Verfügung gestellt.
MaxWaitingRequests
Maximale Anzahl von Anfragen, die in der Warteschlange stehen dürfen. Standard ist hier 2
.
Der Wert kleiner oder gleich
0
wird als unendlich interpretiert.
MaxConcurrentRequests
Maximale Anzahl von parallelen Anfragen. Standard ist hier 1
.
Der Wert kleiner oder gleich
0
wird als unendlich interpretiert.
KpfProcessLayerNamespaces
Namespace-Auflistung der KPF Prozess-Layer. Die KPF Prozess-Layer (inkl. alle möglichen Namespaces) sind hier beschrieben.