diff --git a/changelogs/citylens/CITYLENS-Breaking-Changes.md b/changelogs/citylens/CITYLENS-Breaking-Changes.md index 0770835a1..72455276d 100644 --- a/changelogs/citylens/CITYLENS-Breaking-Changes.md +++ b/changelogs/citylens/CITYLENS-Breaking-Changes.md @@ -1 +1,35 @@ # Citylens Breaking-Changes + +## [2.1.0] + +### citylens +- Changed REST request logging: `extended` -> `extendedRestLogging` +- Modified service database connection: moved to a separate block, `maxPoolSize` and `pooling` replaced with `poolSize`: +``` +routes: + postgres: + api: + database: '' + timeout: 15 + commandTimeout: 30 + poolSize: + min: 1 + max: 10 + hangfire: + database: '' + timeout: 15 + commandTimeout: 30 + poolSize: + min: 1 + max: 10 + realtimeDataApi: + database: '' + timeout: 15 + commandTimeout: 30 + poolSize: + min: 1 + max: 10 +``` + +### citylens-routes-ui +- Added new required parameters: `env.MAPGL_DEFAULT_CENTER` diff --git a/charts/citylens/README.md b/charts/citylens/README.md index 8c91a1fb5..7926508ff 100644 --- a/charts/citylens/README.md +++ b/charts/citylens/README.md @@ -541,18 +541,32 @@ See the [documentation]() to learn about: | `routes.strategy.type` | Type of Kubernetes deployment. Can be `Recreate` or `RollingUpdate`. | `RollingUpdate` | | `routes.strategy.rollingUpdate.maxUnavailable` | Maximum number of pods that can be created over the desired number of pods when doing [rolling update](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-update-deployment). | `0` | | `routes.strategy.rollingUpdate.maxSurge` | Maximum number of pods that can be unavailable during the [rolling update](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-update-deployment) process. | `1` | -| `routes` | **Postgres** | | -| `routes.postgres.database` | PostgreSQL database name. **Required** | `""` | -| `routes.postgres.timeout` | The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. | `15` | -| `routes.postgres.commandTimeout` | The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. | `30` | -| `routes.postgres.maxPoolSize` | The maximum connection pool size. | `30` | -| `routes.postgres.pooling` | Whether connection pooling should be used. | `false` | -| `routes` | **Hangfire** | | -| `routes.hangfire.postgres.database` | PostgreSQL database name. **Required** | `""` | -| `routes.hangfire.postgres.timeout` | The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. | `15` | -| `routes.hangfire.postgres.commandTimeout` | The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. | `30` | -| `routes.hangfire.postgres.maxPoolSize` | The maximum connection pool size. | `30` | -| `routes.hangfire.postgres.pooling` | Whether connection pooling should be used. | `false` | + +### PostgreSQL settings + +| Name | Description | Value | +| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | ----- | +| `routes.postgres.api` | **Api** | | +| `routes.postgres.api.database` | PostgreSQL database name. **Required** | `""` | +| `routes.postgres.api.timeout` | The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. | `15` | +| `routes.postgres.api.commandTimeout` | The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. | `30` | +| `routes.postgres.api.poolSize.` | Settings for the pool size | | +| `routes.postgres.api.poolSize.min` | PostgreSQL minimum connection pool size. 0 means no minimal bound. | `1` | +| `routes.postgres.api.poolSize.max` | PostgreSQL maximum connection pool size | `10` | +| `routes.postgres.hangfire` | **Hangfire** | | +| `routes.postgres.hangfire.database` | PostgreSQL database name. **Required** | `""` | +| `routes.postgres.hangfire.timeout` | The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. | `15` | +| `routes.postgres.hangfire.commandTimeout` | The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. | `30` | +| `routes.postgres.hangfire.poolSize.` | Settings for the pool size | | +| `routes.postgres.hangfire.poolSize.min` | PostgreSQL minimum connection pool size. 0 means no minimal bound. | `1` | +| `routes.postgres.hangfire.poolSize.max` | PostgreSQL maximum connection pool size | `10` | +| `routes.postgres.realtimeDataApi` | **RealtimeDataApi** | | +| `routes.postgres.realtimeDataApi.database` | PostgreSQL database name. **Required** | `""` | +| `routes.postgres.realtimeDataApi.timeout` | The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. | `15` | +| `routes.postgres.realtimeDataApi.commandTimeout` | The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. | `30` | +| `routes.postgres.realtimeDataApi.poolSize.` | Settings for the pool size | | +| `routes.postgres.realtimeDataApi.poolSize.min` | PostgreSQL minimum connection pool size. 0 means no minimal bound. | `1` | +| `routes.postgres.realtimeDataApi.poolSize.max` | PostgreSQL maximum connection pool size | `10` | ### Citylens routes API @@ -562,7 +576,7 @@ See the [documentation]() to learn about: | Name | Description | Value | | ----------------------------- | ------------ | ------------------------------------- | | `routes.api.image.repository` | Repository. | `2gis-on-premise/citylens-routes-api` | -| `routes.api.image.tag` | Tag. | `1.3.3` | +| `routes.api.image.tag` | Tag. | `1.4.2` | | `routes.api.image.pullPolicy` | Pull Policy. | `IfNotPresent` | ### Resources settings @@ -630,19 +644,20 @@ See the [documentation]() to learn about: ### Metadata settings -| Name | Description | Value | -| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `routes.api.annotations` | Kubernetes [annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/). | `{}` | -| `routes.api.labels` | Kubernetes [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/). | `{}` | -| `routes.api.podAnnotations` | Kubernetes [annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/). | `{}` | -| `routes.api.podLabels` | Kubernetes [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/). | `{}` | -| `routes.api.nodeSelector` | Kubernetes pod [node selectors](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector). | `{}` | -| `routes.api.tolerations` | Kubernetes pod [tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) settings. | `[]` | -| `routes.api.affinity` | Kubernetes pod [affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) settings. | `{}` | -| `routes.api.tempPath` | Path to directory used for temp data | `/tmp` | -| `routes.api.logging` | Routes **Logging** settings | | -| `routes.api.logging.level` | Log message level. verbose, debug, information, warning, error, fatal. | `information` | -| `routes.api.logging.extended` | Extended log message. Include http metadata requests. | `false` | +| Name | Description | Value | +| ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `routes.api.annotations` | Kubernetes [annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/). | `{}` | +| `routes.api.labels` | Kubernetes [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/). | `{}` | +| `routes.api.podAnnotations` | Kubernetes [annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/). | `{}` | +| `routes.api.podLabels` | Kubernetes [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/). | `{}` | +| `routes.api.nodeSelector` | Kubernetes pod [node selectors](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector). | `{}` | +| `routes.api.tolerations` | Kubernetes pod [tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) settings. | `[]` | +| `routes.api.affinity` | Kubernetes pod [affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) settings. | `{}` | +| `routes.api.tempPath` | Path to directory used for temp data | `/tmp` | +| `routes.api.logging` | Routes **Logging** settings | | +| `routes.api.logging.level` | Log message level. verbose, debug, information, warning, error, fatal. | `information` | +| `routes.api.logging.extendedRestLogging` | Extended log message. Include http metadata requests. | `false` | +| `routes.api.logging.extendedSqlLogging` | Extended sql logs. Include sql requests row. | `false` | ### Citylens routes Worker @@ -652,7 +667,7 @@ See the [documentation]() to learn about: | Name | Description | Value | | -------------------------------- | ------------ | ----------------------------------------- | | `routes.worker.image.repository` | Repository. | `2gis-on-premise/citylens-worker-service` | -| `routes.worker.image.tag` | Tag. | `1.3.3` | +| `routes.worker.image.tag` | Tag. | `1.4.2` | | `routes.worker.image.pullPolicy` | Pull Policy. | `IfNotPresent` | ### Resources settings @@ -688,6 +703,7 @@ See the [documentation]() to learn about: | `routes.worker.tempPath` | Path to directory used for temp data | `/tmp` | | `routes.worker.logging` | Routes **Logging** settings | | | `routes.worker.logging.level` | Log message level. verbose, debug, information, warning, error, fatal. | `information` | +| `routes.worker.logging.extendedSqlLogging` | Extended sql logs. Include sql requests row. | `false` | | `routes.worker.routesSettings` | Routes distance match settings | | | `routes.worker.routesSettings.routePointsMatchDistanceMeters` | Calculation accuracy in meters. | `5` | @@ -713,7 +729,7 @@ See the [documentation]() to learn about: | Name | Description | Value | | ----------------------------------------- | ------------ | -------------------------------------------- | | `routes.realtimeDataApi.image.repository` | Repository. | `2gis-on-premise/citylens-realtime-data-api` | -| `routes.realtimeDataApi.image.tag` | Tag. | `1.3.3` | +| `routes.realtimeDataApi.image.tag` | Tag. | `1.4.2` | | `routes.realtimeDataApi.image.pullPolicy` | Pull Policy. | `IfNotPresent` | ### Resources settings @@ -769,25 +785,21 @@ See the [documentation]() to learn about: ### Metadata settings -| Name | Description | Value | -| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `routes.realtimeDataApi.annotations` | Kubernetes [annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/). | `{}` | -| `routes.realtimeDataApi.labels` | Kubernetes [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/). | `{}` | -| `routes.realtimeDataApi.podAnnotations` | Kubernetes [annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/). | `{}` | -| `routes.realtimeDataApi.podLabels` | Kubernetes [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/). | `{}` | -| `routes.realtimeDataApi.nodeSelector` | Kubernetes pod [node selectors](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector). | `{}` | -| `routes.realtimeDataApi.tolerations` | Kubernetes pod [tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) settings. | `[]` | -| `routes.realtimeDataApi.affinity` | Kubernetes pod [affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) settings. | `{}` | -| `routes.realtimeDataApi.tempPath` | Path to directory used for temp data | `/tmp` | -| `routes` | **Postgres** | | -| `routes.realtimeDataApi.postgres.database` | PostgreSQL database name. **Required** | `""` | -| `routes.realtimeDataApi.postgres.timeout` | The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. | `15` | -| `routes.realtimeDataApi.postgres.commandTimeout` | The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. | `30` | -| `routes.realtimeDataApi.postgres.maxPoolSize` | The maximum connection pool size. | `30` | -| `routes.realtimeDataApi.postgres.pooling` | Whether connection pooling should be used. | `true` | -| `routes.realtimeDataApi.logging` | Routes **Logging** settings | | -| `routes.realtimeDataApi.logging.level` | Log message level. verbose, debug, information, warning, error, fatal. | `information` | -| `routes.realtimeDataApi.daysToLeaveData` | Storage of information in days. | `30` | +| Name | Description | Value | +| ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `routes.realtimeDataApi.annotations` | Kubernetes [annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/). | `{}` | +| `routes.realtimeDataApi.labels` | Kubernetes [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/). | `{}` | +| `routes.realtimeDataApi.podAnnotations` | Kubernetes [annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/). | `{}` | +| `routes.realtimeDataApi.podLabels` | Kubernetes [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/). | `{}` | +| `routes.realtimeDataApi.nodeSelector` | Kubernetes pod [node selectors](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector). | `{}` | +| `routes.realtimeDataApi.tolerations` | Kubernetes pod [tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) settings. | `[]` | +| `routes.realtimeDataApi.affinity` | Kubernetes pod [affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) settings. | `{}` | +| `routes.realtimeDataApi.tempPath` | Path to directory used for temp data | `/tmp` | +| `routes.realtimeDataApi.logging` | Routes **Logging** settings | | +| `routes.realtimeDataApi.logging.level` | Log message level. verbose, debug, information, warning, error, fatal. | `information` | +| `routes.realtimeDataApi.logging.extendedRestLogging` | Extended log message. Include http metadata requests. | `false` | +| `routes.realtimeDataApi.logging.extendedSqlLogging` | Extended sql logs. Include sql requests row. | `false` | +| `routes.realtimeDataApi.daysToLeaveData` | Storage of information in days. | `30` | ### routes.features Feature settings. diff --git a/charts/citylens/templates/helpers.tpl b/charts/citylens/templates/helpers.tpl index 3a6634bdc..51915adbb 100644 --- a/charts/citylens/templates/helpers.tpl +++ b/charts/citylens/templates/helpers.tpl @@ -413,6 +413,49 @@ app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/managed-by: {{ .Release.Service | quote }} {{- end -}} +{{/* +Citylens Rotues connectionString builder +*/}} + +{{- define "routes-api.connectionString" -}} +{{- printf "Server=%s;Port=%d;Database=%s;UID=%s;Pooling=True;Minimum Pool Size=%d;Maximum Pool Size=%d;Timeout=%d;Command Timeout=%d;Connection Idle Lifetime=30;KeepAlive=5;" + (.Values.postgres.host | required "A valid .Values.postgres.host required!") + (.Values.postgres.port | required "A valid .Values.postgres.port entry required!" | int) + (.Values.routes.postgres.api.database | required "A valid .Values.routes.postgres.api.database entry required!") + (.Values.postgres.username | required "A valid .Values.postgres.username entry required!") + ((.Values.routes.postgres.api.poolSize).min | int | default 1) + ((.Values.routes.postgres.api.poolSize).max | int | default 10) + (.Values.routes.postgres.api.timeout | int | default 15) + (.Values.routes.postgres.api.commandTimeout | int | default 30) +-}} +{{- end -}} + +{{- define "routes-hangfire.connectionString" -}} +{{- printf "Server=%s;Port=%d;Database=%s;UID=%s;Pooling=True;Minimum Pool Size=%d;Maximum Pool Size=%d;Timeout=%d;Command Timeout=%d;Connection Idle Lifetime=30;KeepAlive=5;" + (.Values.postgres.host | required "A valid .Values.postgres.host required!") + (.Values.postgres.port | required "A valid .Values.postgres.port entry required!" | int) + (.Values.routes.postgres.hangfire.database | required "A valid .Values.routes.postgres.hangfire.database entry required!") + (.Values.postgres.username | required "A valid .Values.postgres.username entry required!") + ((.Values.routes.postgres.hangfire.poolSize).min | int | default 1) + ((.Values.routes.postgres.hangfire.poolSize).max | int | default 10) + (.Values.routes.postgres.hangfire.timeout | int | default 15) + (.Values.routes.postgres.hangfire.commandTimeout | int | default 30) +-}} +{{- end -}} + +{{- define "routes-realtime-data-api.connectionString" -}} +{{- printf "Server=%s;Port=%d;Database=%s;UID=%s;Pooling=True;Minimum Pool Size=%d;Maximum Pool Size=%d;Timeout=%d;Command Timeout=%d;Connection Idle Lifetime=30;KeepAlive=5;" + (.Values.postgres.host | required "A valid .Values.postgres.host required!") + (.Values.postgres.port | required "A valid .Values.postgres.port entry required!" | int) + (.Values.routes.postgres.realtimeDataApi.database | required "A valid .Values.routes.postgres.realtimeDataApi.database entry required!") + (.Values.postgres.username | required "A valid .Values.postgres.username entry required!") + ((.Values.routes.postgres.realtimeDataApi.poolSize).min | int | default 1) + ((.Values.routes.postgres.realtimeDataApi.poolSize).max | int | default 10) + (.Values.routes.postgres.realtimeDataApi.timeout | int | default 15) + (.Values.routes.postgres.realtimeDataApi.commandTimeout | int | default 30) +-}} +{{- end -}} + {{/* Manifest name */}} diff --git a/charts/citylens/templates/routes-api/deployment.yaml b/charts/citylens/templates/routes-api/deployment.yaml index 52df19491..23786d5e9 100644 --- a/charts/citylens/templates/routes-api/deployment.yaml +++ b/charts/citylens/templates/routes-api/deployment.yaml @@ -63,34 +63,35 @@ spec: containerPort: 8080 protocol: TCP volumeMounts: - - mountPath: "{{ .Values.routes.api.tempPath }}" + - mountPath: {{ .Values.routes.api.tempPath | quote }} name: temp-volume livenessProbe: httpGet: path: /health/live port: http - failureThreshold: 5 - initialDelaySeconds: 5 - periodSeconds: 15 - successThreshold: 1 + initialDelaySeconds: 10 + periodSeconds: 20 timeoutSeconds: 5 + failureThreshold: 3 + successThreshold: 1 readinessProbe: httpGet: path: /health/ready port: http - failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 5 - successThreshold: 1 timeoutSeconds: 5 + failureThreshold: 3 + successThreshold: 1 startupProbe: httpGet: path: /health/live port: http - failureThreshold: 20 initialDelaySeconds: 5 - periodSeconds: 5 + periodSeconds: 10 timeoutSeconds: 5 + failureThreshold: 30 + successThreshold: 1 resources: {{- toYaml .Values.routes.api.resources | nindent 12 }} lifecycle: @@ -103,42 +104,34 @@ spec: - name: Common__Logging__LogLevel value: {{ .Values.routes.api.logging.level | quote }} - - name: Common__Logging__Extended - value: {{ .Values.routes.api.logging.extended | quote }} + - name: Common__Logging__ExtendedRestLogging + value: {{ .Values.routes.api.logging.extendedRestLogging | quote }} + - name: Common__Logging__ExtendedSqlLogging + value: {{ .Values.routes.api.logging.extendedSqlLogging | quote }} - - name: PgSettings__Host - value: {{ required "A valid .Values.postgres.host entry required" $.Values.postgres.host | quote }} - - name: PgSettings__Port - value: {{ required "A valid .Values.postgres.port entry required" $.Values.postgres.port | quote }} - - name: PgSettings__UserName - value: {{ required "A valid .Values.postgres.username entry required" $.Values.postgres.username | quote }} - - name: PgSettings__Password + - name: Postgres__ReadWrite__ConnectionString + value: {{ include "routes-api.connectionString" . }} + - name: Postgres__ReadWrite__Password valueFrom: secretKeyRef: key: postgresPassword name: {{ include "citylens.routes.api.name" . }}-secret - - name: PgSettings__Api__Database - value: {{ required "A valid .Values.routes.postgres.database entry required" $.Values.routes.postgres.database | quote }} - - name: PgSettings__Api__Timeout - value: {{ $.Values.routes.postgres.timeout | quote }} - - name: PgSettings__Api__CommandTimeout - value: {{ $.Values.routes.postgres.commandTimeout | quote }} - - name: PgSettings__Api__MaxPoolSize - value: {{ $.Values.routes.postgres.maxPoolSize | quote }} - - name: PgSettings__Api__Pooling - value: {{ $.Values.routes.postgres.pooling | quote }} + - name: Postgres__ReadOnly__ConnectionString + value: {{ include "routes-api.connectionString" . }} + - name: Postgres__ReadOnly__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.api.name" . }}-secret - - name: PgSettings__Hangfire__Database - value: {{ required "A valid .Values.routes.hangfire.postgres.database entry required" $.Values.routes.hangfire.postgres.database | quote }} - - name: PgSettings__Hangfire__Timeout - value: {{ $.Values.routes.hangfire.postgres.timeout | quote }} - - name: PgSettings__Hangfire__CommandTimeout - value: {{ $.Values.routes.hangfire.postgres.commandTimeout | quote }} - - name: PgSettings__Hangfire__MaxPoolSize - value: {{ $.Values.routes.hangfire.postgres.maxPoolSize | quote }} - - name: PgSettings__Hangfire__Pooling - value: {{ $.Values.routes.hangfire.postgres.pooling | quote }} + - name: Hangfire__Postgres__ConnectionString + value: {{ include "routes-hangfire.connectionString" . }} + - name: Hangfire__Postgres__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.api.name" . }}-secret - name: S3__BucketPrefix value: {{ required "A valid .Values.s3.bucketPrefix entry required" $.Values.s3.bucketPrefix | quote }} diff --git a/charts/citylens/templates/routes-migrations/migration.yaml b/charts/citylens/templates/routes-migrations/migration.yaml index b106c36a5..413d5f24d 100644 --- a/charts/citylens/templates/routes-migrations/migration.yaml +++ b/charts/citylens/templates/routes-migrations/migration.yaml @@ -31,37 +31,29 @@ spec: resources: {{- toYaml .Values.routes.api.resources | nindent 12 }} env: - - name: PgSettings__Host - value: {{ required "A valid .Values.postgres.host entry required" $.Values.postgres.host | quote }} - - name: PgSettings__Port - value: {{ required "A valid .Values.postgres.port entry required" $.Values.postgres.port | quote }} - - name: PgSettings__UserName - value: {{ required "A valid .Values.postgres.username entry required" $.Values.postgres.username | quote }} - - name: PgSettings__Password + - name: Postgres__ReadWrite__ConnectionString + value: {{ include "routes-api.connectionString" . }} + - name: Postgres__ReadWrite__Password valueFrom: secretKeyRef: key: postgresPassword name: {{ include "citylens.routes.migration.name" . }}-secret - - name: PgSettings__Api__Database - value: {{ required "A valid .Values.routes.postgres.database entry required" $.Values.routes.postgres.database | quote }} - - name: PgSettings__Api__Timeout - value: {{ $.Values.routes.postgres.timeout | quote }} - - name: PgSettings__Api__CommandTimeout - value: {{ $.Values.routes.postgres.commandTimeout | quote }} - - name: PgSettings__Api__MaxPoolSize - value: {{ $.Values.routes.postgres.maxPoolSize | quote }} + - name: Postgres__ReadOnly__ConnectionString + value: {{ include "routes-api.connectionString" . }} + - name: Postgres__ReadOnly__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.migration.name" . }}-secret - - name: PgSettings__Hangfire__Database - value: {{ required "A valid .Values.routes.hangfire.postgres.database entry required" $.Values.routes.hangfire.postgres.database | quote }} - - name: PgSettings__Hangfire__Timeout - value: {{ $.Values.routes.hangfire.postgres.timeout | quote }} - - name: PgSettings__Hangfire__CommandTimeout - value: {{ $.Values.routes.hangfire.postgres.commandTimeout | quote }} - - name: PgSettings__Hangfire__MaxPoolSize - value: {{ $.Values.routes.hangfire.postgres.maxPoolSize | quote }} - - name: PgSettings__Hangfire__Pooling - value: {{ $.Values.routes.hangfire.postgres.pooling | quote }} + - name: Hangfire__Postgres__ConnectionString + value: {{ include "routes-hangfire.connectionString" . }} + - name: Hangfire__Postgres__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.migration.name" . }}-secret - name: worker-migrate image: {{ required "A valid .Values.dgctlDockerRegistry entry required" $.Values.dgctlDockerRegistry }}/{{ .Values.routes.worker.image.repository }}:{{ .Values.routes.worker.image.tag }} @@ -70,39 +62,29 @@ spec: resources: {{- toYaml .Values.routes.worker.resources | nindent 12 }} env: - - name: PgSettings__Host - value: {{ required "A valid .Values.postgres.host entry required" $.Values.postgres.host | quote }} - - name: PgSettings__Port - value: {{ required "A valid .Values.postgres.port entry required" $.Values.postgres.port | quote }} - - name: PgSettings__UserName - value: {{ required "A valid .Values.postgres.username entry required" $.Values.postgres.username | quote }} - - name: PgSettings__Password + - name: Postgres__ReadWrite__ConnectionString + value: {{ include "routes-api.connectionString" . }} + - name: Postgres__ReadWrite__Password valueFrom: secretKeyRef: key: postgresPassword name: {{ include "citylens.routes.migration.name" . }}-secret - - name: PgSettings__Api__Database - value: {{ required "A valid .Values.routes.postgres.database entry required" $.Values.routes.postgres.database | quote }} - - name: PgSettings__Api__Timeout - value: {{ $.Values.routes.postgres.timeout | quote }} - - name: PgSettings__Api__CommandTimeout - value: {{ $.Values.routes.postgres.commandTimeout | quote }} - - name: PgSettings__Api__MaxPoolSize - value: {{ $.Values.routes.postgres.maxPoolSize | quote }} - - name: PgSettings__Api__Pooling - value: {{ $.Values.routes.postgres.pooling | quote }} + - name: Postgres__ReadOnly__ConnectionString + value: {{ include "routes-api.connectionString" . }} + - name: Postgres__ReadOnly__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.migration.name" . }}-secret - - name: PgSettings__Hangfire__Database - value: {{ required "A valid .Values.routes.hangfire.postgres.database entry required" $.Values.routes.hangfire.postgres.database | quote }} - - name: PgSettings__Hangfire__Timeout - value: {{ $.Values.routes.hangfire.postgres.timeout | quote }} - - name: PgSettings__Hangfire__CommandTimeout - value: {{ $.Values.routes.hangfire.postgres.commandTimeout | quote }} - - name: PgSettings__Hangfire__MaxPoolSize - value: {{ $.Values.routes.hangfire.postgres.maxPoolSize | quote }} - - name: PgSettings__Hangfire__Pooling - value: {{ $.Values.routes.hangfire.postgres.pooling | quote }} + - name: Hangfire__Postgres__ConnectionString + value: {{ include "routes-hangfire.connectionString" . }} + - name: Hangfire__Postgres__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.migration.name" . }}-secret - name: BusConfig__Broker value: {{ .Values.kafka.bootstrapServer | quote }} @@ -134,38 +116,28 @@ spec: resources: {{- toYaml .Values.routes.realtimeDataApi.resources | nindent 12 }} env: - - name: PgSettings__Host - value: {{ required "A valid .Values.postgres.host entry required" $.Values.postgres.host | quote }} - - name: PgSettings__Port - value: {{ required "A valid .Values.postgres.port entry required" $.Values.postgres.port | quote }} - - name: PgSettings__UserName - value: {{ required "A valid .Values.postgres.username entry required" $.Values.postgres.username | quote }} - - name: PgSettings__Password + - name: Postgres__ReadWrite__ConnectionString + value: {{ include "routes-realtime-data-api.connectionString" . }} + - name: Postgres__ReadWrite__Password valueFrom: secretKeyRef: key: postgresPassword name: {{ include "citylens.routes.migration.name" . }}-secret - - name: PgSettings__Api__Database - value: {{ required "A valid .Values.routes.realtimeData.postgres.database entry required" $.Values.routes.realtimeDataApi.postgres.database | quote }} - - name: PgSettings__Api__Timeout - value: {{ $.Values.routes.realtimeDataApi.postgres.timeout | quote }} - - name: PgSettings__Api__CommandTimeout - value: {{ $.Values.routes.realtimeDataApi.postgres.commandTimeout | quote }} - - name: PgSettings__Api__MaxPoolSize - value: {{ $.Values.routes.realtimeDataApi.postgres.maxPoolSize | quote }} - - name: PgSettings__Api__Pooling - value: {{ $.Values.routes.realtimeDataApi.postgres.pooling | quote }} + - name: Postgres__ReadOnly__ConnectionString + value: {{ include "routes-realtime-data-api.connectionString" . }} + - name: Postgres__ReadOnly__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.migration.name" . }}-secret - - name: PgSettings__Hangfire__Database - value: {{ required "A valid .Values.routes.realtimeData.postgres.database entry required" $.Values.routes.realtimeDataApi.postgres.database | quote }} - - name: PgSettings__Hangfire__Timeout - value: {{ $.Values.routes.realtimeDataApi.postgres.timeout | quote }} - - name: PgSettings__Hangfire__CommandTimeout - value: {{ $.Values.routes.realtimeDataApi.postgres.commandTimeout | quote }} - - name: PgSettings__Hangfire__MaxPoolSize - value: {{ $.Values.routes.realtimeDataApi.postgres.maxPoolSize | quote }} - - name: PgSettings__Hangfire__Pooling - value: {{ $.Values.routes.realtimeDataApi.postgres.pooling | quote }} + - name: Hangfire__Postgres__ConnectionString + value: {{ include "routes-realtime-data-api.connectionString" . }} + - name: Hangfire__Postgres__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.migration.name" . }}-secret {{- end }} diff --git a/charts/citylens/templates/routes-realtime-data-api/deployment.yaml b/charts/citylens/templates/routes-realtime-data-api/deployment.yaml index 4ebf793f7..a3cad65b1 100644 --- a/charts/citylens/templates/routes-realtime-data-api/deployment.yaml +++ b/charts/citylens/templates/routes-realtime-data-api/deployment.yaml @@ -63,7 +63,7 @@ spec: containerPort: 8080 protocol: TCP volumeMounts: - - mountPath: "{{ .Values.routes.realtimeDataApi.tempPath }}" + - mountPath: {{ .Values.routes.realtimeDataApi.tempPath | quote }} name: temp-volume livenessProbe: httpGet: @@ -103,40 +103,34 @@ spec: - name: Common__Logging__LogLevel value: {{ .Values.routes.realtimeDataApi.logging.level | quote }} + - name: Common__Logging__ExtendedRestLogging + value: {{ .Values.routes.realtimeDataApi.logging.extendedRestLogging | quote }} + - name: Common__Logging__ExtendedSqlLogging + value: {{ .Values.routes.realtimeDataApi.logging.extendedSqlLogging | quote }} - - name: PgSettings__Host - value: {{ required "A valid .Values.postgres.host entry required" $.Values.postgres.host | quote }} - - name: PgSettings__Port - value: {{ required "A valid .Values.postgres.port entry required" $.Values.postgres.port | quote }} - - name: PgSettings__UserName - value: {{ required "A valid .Values.postgres.username entry required" $.Values.postgres.username | quote }} - - name: PgSettings__Password + - name: Postgres__ReadWrite__ConnectionString + value: {{ include "routes-realtime-data-api.connectionString" . }} + - name: Postgres__ReadWrite__Password valueFrom: secretKeyRef: key: postgresPassword name: {{ include "citylens.routes.api.name" . }}-secret - - name: PgSettings__Api__Database - value: {{ required "A valid .Values.routes.realtimeDataApi.postgres.database entry required" $.Values.routes.realtimeDataApi.postgres.database | quote }} - - name: PgSettings__Api__Timeout - value: {{ $.Values.routes.realtimeDataApi.postgres.timeout | quote }} - - name: PgSettings__Api__CommandTimeout - value: {{ $.Values.routes.realtimeDataApi.postgres.commandTimeout | quote }} - - name: PgSettings__Api__MaxPoolSize - value: {{ $.Values.routes.realtimeDataApi.postgres.maxPoolSize | quote }} - - name: PgSettings__Api__Pooling - value: {{ $.Values.routes.realtimeDataApi.postgres.pooling | quote }} + - name: Postgres__ReadOnly__ConnectionString + value: {{ include "routes-realtime-data-api.connectionString" . }} + - name: Postgres__ReadOnly__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.api.name" . }}-secret - - name: PgSettings__Hangfire__Database - value: {{ required "A valid .Values.routes.realtimeData.postgres.database entry required" $.Values.routes.realtimeDataApi.postgres.database | quote }} - - name: PgSettings__Hangfire__Timeout - value: {{ $.Values.routes.realtimeDataApi.postgres.timeout | quote }} - - name: PgSettings__Hangfire__CommandTimeout - value: {{ $.Values.routes.realtimeDataApi.postgres.commandTimeout | quote }} - - name: PgSettings__Hangfire__MaxPoolSize - value: {{ $.Values.routes.realtimeDataApi.postgres.maxPoolSize | quote }} - - name: PgSettings__Hangfire__Pooling - value: {{ $.Values.routes.realtimeDataApi.postgres.pooling | quote }} + - name: Hangfire__Postgres__ConnectionString + value: {{ include "routes-realtime-data-api.connectionString" . }} + - name: Hangfire__Postgres__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.api.name" . }}-secret - name: RealTimeDataSettings__DaysToLeaveData value: {{ $.Values.routes.realtimeDataApi.daysToLeaveData | quote }} diff --git a/charts/citylens/templates/routes-worker/deployment.yaml b/charts/citylens/templates/routes-worker/deployment.yaml index 6fe692695..42bca8d8c 100644 --- a/charts/citylens/templates/routes-worker/deployment.yaml +++ b/charts/citylens/templates/routes-worker/deployment.yaml @@ -63,7 +63,7 @@ spec: containerPort: 8080 protocol: TCP volumeMounts: - - mountPath: "{{ .Values.routes.worker.tempPath }}" + - mountPath: {{ .Values.routes.worker.tempPath | quote }} name: temp-volume livenessProbe: httpGet: @@ -103,43 +103,35 @@ spec: - name: Common__Logging__LogLevel value: {{ .Values.routes.worker.logging.level | quote }} + - name: Common__Logging__ExtendedSqlLogging + value: {{ .Values.routes.worker.logging.extendedSqlLogging | quote }} - name: RoutesSettings__RoutePointsMatchDistanceMeters value: {{ .Values.routes.worker.routesSettings.routePointsMatchDistanceMeters | quote }} - - name: PgSettings__Host - value: {{ required "A valid .Values.postgres.host entry required" $.Values.postgres.host | quote }} - - name: PgSettings__Port - value: {{ required "A valid .Values.postgres.port entry required" $.Values.postgres.port | quote }} - - name: PgSettings__UserName - value: {{ required "A valid .Values.postgres.username entry required" $.Values.postgres.username | quote }} - - name: PgSettings__Password + - name: Postgres__ReadWrite__ConnectionString + value: {{ include "routes-api.connectionString" . }} + - name: Postgres__ReadWrite__Password valueFrom: secretKeyRef: key: postgresPassword name: {{ include "citylens.routes.api.name" . }}-secret - - name: PgSettings__Api__Database - value: {{ required "A valid .Values.routes.postgres.database entry required" $.Values.routes.postgres.database | quote }} - - name: PgSettings__Api__Timeout - value: {{ $.Values.routes.postgres.timeout | quote }} - - name: PgSettings__Api__CommandTimeout - value: {{ $.Values.routes.postgres.commandTimeout | quote }} - - name: PgSettings__Api__MaxPoolSize - value: {{ $.Values.routes.postgres.maxPoolSize | quote }} - - name: PgSettings__Api__Pooling - value: {{ $.Values.routes.postgres.pooling | quote }} + - name: Postgres__ReadOnly__ConnectionString + value: {{ include "routes-api.connectionString" . }} + - name: Postgres__ReadOnly__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.api.name" . }}-secret - - name: PgSettings__Hangfire__Database - value: {{ required "A valid .Values.routes.hangfire.postgres.database entry required" $.Values.routes.hangfire.postgres.database | quote }} - - name: PgSettings__Hangfire__Timeout - value: {{ $.Values.routes.hangfire.postgres.timeout | quote }} - - name: PgSettings__Hangfire__CommandTimeout - value: {{ $.Values.routes.hangfire.postgres.commandTimeout | quote }} - - name: PgSettings__Hangfire__MaxPoolSize - value: {{ $.Values.routes.hangfire.postgres.maxPoolSize | quote }} - - name: PgSettings__Hangfire__Pooling - value: {{ $.Values.routes.hangfire.postgres.pooling | quote }} + - name: Hangfire__Postgres__ConnectionString + value: {{ include "routes-hangfire.connectionString" . }} + - name: Hangfire__Postgres__Password + valueFrom: + secretKeyRef: + key: postgresPassword + name: {{ include "citylens.routes.api.name" . }}-secret - name: BusConfig__Broker value: {{ .Values.kafka.bootstrapServer | quote }} @@ -160,9 +152,9 @@ spec: - name: BusConfig__Consumers__AppEvents__GroupId value: {{ required "A valid .Values.routes.worker.busConfig.consumers.appEvents.groupId entry required" $.Values.routes.worker.busConfig.consumers.appEvents.groupId | quote }} - name: BusConfig__Consumers__AppEvents__BufferSize - value: {{ .Values.routes.worker.busConfig.consumers.appEvents.bufferSize | quote }} + value: {{ $.Values.routes.worker.busConfig.consumers.appEvents.bufferSize | quote }} - name: BusConfig__Consumers__AppEvents__WorkersCount - value: {{ .Values.routes.worker.busConfig.consumers.appEvents.workersCount | quote }} + value: {{ $.Values.routes.worker.busConfig.consumers.appEvents.workersCount | quote }} - name: TasksAssetSettings__SystemAccessToken value: {{ $.Values.routes.tasksAssetSettings.systemAccessToken | quote }} diff --git a/charts/citylens/values.yaml b/charts/citylens/values.yaml index e6169b55e..a4b08916b 100644 --- a/charts/citylens/values.yaml +++ b/charts/citylens/values.yaml @@ -980,19 +980,31 @@ customCAs: # @param routes.strategy.rollingUpdate.maxUnavailable Maximum number of pods that can be created over the desired number of pods when doing [rolling update](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-update-deployment). # @param routes.strategy.rollingUpdate.maxSurge Maximum number of pods that can be unavailable during the [rolling update](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-update-deployment) process. -# @extra routes **Postgres** -# @param routes.postgres.database PostgreSQL database name. **Required** -# @param routes.postgres.timeout The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. -# @param routes.postgres.commandTimeout The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. -# @param routes.postgres.maxPoolSize The maximum connection pool size. -# @param routes.postgres.pooling Whether connection pooling should be used. - -# @extra routes **Hangfire** -# @param routes.hangfire.postgres.database PostgreSQL database name. **Required** -# @param routes.hangfire.postgres.timeout The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. -# @param routes.hangfire.postgres.commandTimeout The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. -# @param routes.hangfire.postgres.maxPoolSize The maximum connection pool size. -# @param routes.hangfire.postgres.pooling Whether connection pooling should be used. +# @section PostgreSQL settings + +# @extra routes.postgres.api **Api** +# @param routes.postgres.api.database PostgreSQL database name. **Required** +# @param routes.postgres.api.timeout The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. +# @param routes.postgres.api.commandTimeout The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. +# @extra routes.postgres.api.poolSize. Settings for the pool size +# @param routes.postgres.api.poolSize.min PostgreSQL minimum connection pool size. 0 means no minimal bound. +# @param routes.postgres.api.poolSize.max PostgreSQL maximum connection pool size + +# @extra routes.postgres.hangfire **Hangfire** +# @param routes.postgres.hangfire.database PostgreSQL database name. **Required** +# @param routes.postgres.hangfire.timeout The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. +# @param routes.postgres.hangfire.commandTimeout The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. +# @extra routes.postgres.hangfire.poolSize. Settings for the pool size +# @param routes.postgres.hangfire.poolSize.min PostgreSQL minimum connection pool size. 0 means no minimal bound. +# @param routes.postgres.hangfire.poolSize.max PostgreSQL maximum connection pool size + +# @extra routes.postgres.realtimeDataApi **RealtimeDataApi** +# @param routes.postgres.realtimeDataApi.database PostgreSQL database name. **Required** +# @param routes.postgres.realtimeDataApi.timeout The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. +# @param routes.postgres.realtimeDataApi.commandTimeout The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. +# @extra routes.postgres.realtimeDataApi.poolSize. Settings for the pool size +# @param routes.postgres.realtimeDataApi.poolSize.min PostgreSQL minimum connection pool size. 0 means no minimal bound. +# @param routes.postgres.realtimeDataApi.poolSize.max PostgreSQL maximum connection pool size # @section Citylens routes API @@ -1058,7 +1070,8 @@ customCAs: # @extra routes.api.logging Routes **Logging** settings # @param routes.api.logging.level Log message level. verbose, debug, information, warning, error, fatal. -# @param routes.api.logging.extended Extended log message. Include http metadata requests. +# @param routes.api.logging.extendedRestLogging Extended log message. Include http metadata requests. +# @param routes.api.logging.extendedSqlLogging Extended sql logs. Include sql requests row. # @section Citylens routes Worker @@ -1092,6 +1105,7 @@ customCAs: # @extra routes.worker.logging Routes **Logging** settings # @param routes.worker.logging.level Log message level. verbose, debug, information, warning, error, fatal. +# @param routes.worker.logging.extendedSqlLogging Extended sql logs. Include sql requests row. # @extra routes.worker.routesSettings Routes distance match settings # @param routes.worker.routesSettings.routePointsMatchDistanceMeters Calculation accuracy in meters. @@ -1160,15 +1174,10 @@ customCAs: # @param routes.realtimeDataApi.affinity Kubernetes pod [affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) settings. # @param routes.realtimeDataApi.tempPath Path to directory used for temp data -# @extra routes **Postgres** -# @param routes.realtimeDataApi.postgres.database PostgreSQL database name. **Required** -# @param routes.realtimeDataApi.postgres.timeout The time to wait (in seconds) while trying to establish a connection before terminating the attempt and generating an error. -# @param routes.realtimeDataApi.postgres.commandTimeout The time to wait (in seconds) while trying to execute a command before terminating the attempt and generating an error. -# @param routes.realtimeDataApi.postgres.maxPoolSize The maximum connection pool size. -# @param routes.realtimeDataApi.postgres.pooling Whether connection pooling should be used. - # @extra routes.realtimeDataApi.logging Routes **Logging** settings # @param routes.realtimeDataApi.logging.level Log message level. verbose, debug, information, warning, error, fatal. +# @param routes.realtimeDataApi.logging.extendedRestLogging Extended log message. Include http metadata requests. +# @param routes.realtimeDataApi.logging.extendedSqlLogging Extended sql logs. Include sql requests row. # @param routes.realtimeDataApi.daysToLeaveData Storage of information in days. @@ -1216,24 +1225,34 @@ routes: maxSurge: 1 postgres: - database: '' - timeout: 15 - commandTimeout: 30 - maxPoolSize: 30 - pooling: false - - hangfire: - postgres: + api: database: '' timeout: 15 commandTimeout: 30 - maxPoolSize: 30 - pooling: false + poolSize: + min: 1 + max: 10 + + hangfire: + database: '' + timeout: 15 + commandTimeout: 30 + poolSize: + min: 1 + max: 10 + + realtimeDataApi: + database: '' + timeout: 15 + commandTimeout: 30 + poolSize: + min: 1 + max: 10 api: image: repository: 2gis-on-premise/citylens-routes-api - tag: 1.3.3 + tag: 1.4.2 pullPolicy: IfNotPresent replicaCount: 1 @@ -1304,12 +1323,13 @@ routes: logging: level: information - extended: false + extendedRestLogging: false + extendedSqlLogging: false worker: image: repository: 2gis-on-premise/citylens-worker-service - tag: 1.3.3 + tag: 1.4.2 pullPolicy: IfNotPresent replicaCount: 1 @@ -1341,6 +1361,7 @@ routes: logging: level: information + extendedSqlLogging: false routesSettings: routePointsMatchDistanceMeters: 5 @@ -1358,7 +1379,7 @@ routes: realtimeDataApi: image: repository: 2gis-on-premise/citylens-realtime-data-api - tag: 1.3.3 + tag: 1.4.2 pullPolicy: IfNotPresent replicaCount: 1 @@ -1411,17 +1432,12 @@ routes: affinity: {} tolerations: [] - postgres: - database: '' - timeout: 15 - commandTimeout: 30 - maxPoolSize: 30 - pooling: true - tempPath: /tmp logging: level: information + extendedRestLogging: false + extendedSqlLogging: false daysToLeaveData: 30