Skip to content

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-reporting-service\\cmi-reporting-service-.log

Weitere Konfigurationen

Weitere Konfigurationsmöglichkeiten siehe https://github.com/serilog/serilog-settings-configuration.


Telemetriedaten

Der Service bietet die Möglichkeit, Telemetriedaten zu senden. Informationen zur Konfiguration befinden sich hier


Etcd

Der Service bietet die Möglichkeit an, via Etcd konfiguriert zu werden. Informationen zur Konfiguration befinden sich hier.


ForwardedHeaders

Der Service bietet die Möglichkeit, die Forwarded-Header zu verarbeiten. Informationen zur Konfiguration befinden sich hier.


Mandant (Tenant)

{
    "Tenants": {
        "prod": {
            "OwinPrivateUri": "https://metatool.cmiag.ch:10003",
            "OpenIdConnectConfig": {
                "StsUri": "https://sts.cmiag.ch/prod/identity",
                "ClientId": "cmi-reporting-service",
                "UseRefreshTokens": true
            }
        }
    }
}

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": {
      ...
    }
  }
}

Die Konfiguration der Mandanten kann auf zwei Arten erfolgen:

  • Mit dem Schlüssel Tenants, wie im Beispiel sichtbar. Die einzelnen Mandanten werden in Subschlüsseln abgebildet, im Beispiel ist das der Mandant prod.
  • Mit dem Schlüssel TenantConfigurationDirectory, wo ein Pfad zu einem Ordner angegeben werden kann. Die einzelnen Mandanten werden in einzelnen Dateien abgebildet, z.B. prod.json. Der Inhalt der Datei entspricht dem Wert des Schlüssels des Mandanten.

OwinPrivateUri

URI unter der der Owin Private Port des CMI Servers erreicht werden kann.

OpenIdConnectConfig

Das OpenIdConnectConfig-Objekt bietet folgende Eigenschaften an:

  • StsUri: Diese Eigenschaft ist zwingend. URI unter der der STS erreicht werden kann, beinhaltet die Mandantenkennung gemäss Konfiguration STS. Beispiel.: https://sts3.cloud.ch/<MANDANT>/identity
  • ClientId: Diese Eigenschaft ist zwingend. ClientId, die im STS für den Reporting Service vergeben wurde. Die Minimalkonfiguration vom STS ist hier zu finden.
  • UseRefreshTokens: Diese Eigenschaft ist optional und standardmässig false. Wenn true werden Refresh Tokens verwendet, die die Anmeldesession automatisch verlängern. Im STS muss im entsprechenden Client die Eigenschaft AllowOfflineAccess aktiviert werden. Siehe auch hier.

Datenbank

Informationen zur Konfiguration befinden sich hier.


Caching

{
    "Redis": {
        "ConnectionString": "redis.cloud.local:6379",
        "InstanceName": "CMI.Reporting.Service"
    }
}

Der CMI Reporting Service erlaubt die Verwendung eines verteilten Caches mit Redis. Diese Funktion wird aktiv, sobald der Schlüssel Redis vorhanden ist. Fehlt dieser, wird im Prozess gecached.

Die einzelnen Konfigurationswerte sind:

  • ConnectionString: Connection-String für den Redis-Cache.
  • InstanceName: Der Redis Instance-Name. Es kann bspw. ein Test-Suffix verwendet werden, um denselben Redis-Cache in der Testumgebung verwenden zu können.

Fonts

Per Default funktionieren nur die Fonts, welche auf dem System installiert sind. Wenn zusätzliche Fonts global für alle Tenants zur Verfügung gestellt werden sollen, gibt es die Möglichkeit, einen Ordner zu hinterlegen. In diesem Ordner können TrueType und OpenType Font-Dateien in einer flachen Struktur abgelegt werden.

Die Auswahl der Fonts im Designer stimmt nicht immer mit den tatsächlich auf dem Server verfügbaren überein.

Der konfigurierte Ordner wird überwacht und bei Änderungen neu geladen. Wird der konfigurierte Ordner geändert, so muss der Dienst neugestartet werden.

{
    "FontDirectory": "C:\\CMI-GitHub\\cmi-reporting-service\\fonts"
}

Ist im Abschnitt ReportingApi die Url konfiguriert, muss diese Einstellung im appsettings.json der Reporting Api konfiguriert werden. Die Einstellung hier hat nur einen Einfluss wenn die Url nicht gesetzt ist.


ModelOptions

Der Ordner unter welchem das generierte temporäre Model abgelegt wird kann übersteuert werden. Default: Ausführungsverzeichnis/Models. Der Inhalt des Ordners muss nicht teil eines Backups sein. Der Inhalt wird vom Service manuell aufgeräumt.

{
    "ModelOptions": {
        "ModelCacheDirectory": "C:\\temp\\modelcache"
    }
}

Im verteilten Betrieb muss jede Instanz einen eigenen Ordner haben, da sich die Instanzen im Cleanup sonst in die Quere kommen.


ReportingApi

Entweder Url oder BasePath muss konfiguriert werden. Wenn Url konfiguriert ist, wird BasePath ignoriert. Wird nur der BasePath konfiguriert, wird erwartet, dass unter BasePath die DLL CMI.Reporting.Service.Api.dll liegt. Wird Url konfiguriert, wird erwartet, dass unter der Url der Service erreichbar ist, welcher CMI.Reporting.Service.Api.dll bereitstellt.

{
    "ReportingApi": {
        "Url": "https://reporting.my.domain",
        "BasePath": "CMI.Reporting.Service.Api"
    }
}

Wird der Dienst für mehrere Mandanten verwendet, so sollte die API als eigener Dienst betrieben werden.


MaxRequestBodySizeInMB

Die maximale Größe des Http-Request-Bodys kann hier konfiguriert werden. Default: 30MB (genau 30'000'000 Bytes).

{
    "MaxRequestBodySizeInMB": 100
}

Diverses

Backup

Da der CMI Reporting Service über eine eigene Datenbank verfügt, sollte diese in der Backup-Strategie berücksichtigt werden.