diff --git a/.changelog/release-v16.0.0.md b/.changelog/release-v16.0.0.md new file mode 100644 index 000000000..75eec9af2 --- /dev/null +++ b/.changelog/release-v16.0.0.md @@ -0,0 +1,155 @@ +# Helm Release Notes +Date | Revision | Description +---------|----------|--------- +2024-02-06 | 0 | Initial draft +2024-03-13 | 0 | Initial release + +## 0. Summary + +Enhancements and breaking changes to the [v15.2.0 Release](https://github.com/mojaloop/helm/blob/master/.changelog/release-v15.2.0.md), which includes: + +1. Performance improvement in Central Ledger via batching of position prepare and position filfill messages +2. Performance improvement in ALS with the addition of participant requests caching, and logging fixes +3. Refactoring of Quoting Service into an event-driven service to improve performance +4. Helm chart: external K8s secret are now used for JWS signing key source if present +5. General maintenance, bug fixes, and Nodejs upgrades + +## 1. New Features +* **mojaloop/#3426** add participant req caching, enable cache metrics, log fixes ([mojaloop/#465](https://github.com/mojaloop/account-lookup-service/pull/465)), closes [mojaloop/#3426](https://github.com/mojaloop/project/issues/3426) +* **mojaloop/#3427** add oracle endpoint db caching and oracle request caching ([mojaloop/#467](https://github.com/mojaloop/account-lookup-service/pull/467)), closes [mojaloop/#3427](https://github.com/mojaloop/project/issues/3427) +* **mojaloop/#3441** nodejs upgrade ([mojaloop/#252](https://github.com/mojaloop/central-event-processor/pull/252)), closes [mojaloop/#3441](https://github.com/mojaloop/project/issues/3441) +* **mojaloop/#3636** batching implementation for position prepare messages ([mojaloop/#968](https://github.com/mojaloop/central-ledger/pull/968)), closes [mojaloop/#3636](https://github.com/mojaloop/project/issues/3636) +* **mojaloop/#3524** add position fulfil to binprocessor ([mojaloop/#990](https://github.com/mojaloop/central-ledger/pull/990)), closes [mojaloop/#3524](https://github.com/mojaloop/project/issues/3524) +* **mojaloop/#3524** add reserve action to fulfil logic ([mojaloop/#992](https://github.com/mojaloop/central-ledger/pull/992)), closes [mojaloop/#3524](https://github.com/mojaloop/project/issues/3524) +* **mojaloop/#3666** refactor quoting service into an event driven solution to improve performance ([mojaloop/#321](https://github.com/mojaloop/quoting-service/pull/321)), closes [mojaloop/#3666](https://github.com/mojaloop/project/issues/3666) +* **mojaloop/#3445** nodejs upgrade ([mojaloop/#252](https://github.com/mojaloop/simulator/pull/252)), closes [mojaloop/#3445](https://github.com/mojaloop/project/issues/3445) +* **mojaloop/#3666** refactor quoting service into an event driven solution to improve performance ([mojaloop/#321](https://github.com/mojaloop/quoting-service/pull/321)), closes [mojaloop/#3666](https://github.com/mojaloop/project/issues/3666) +* **mojaloop/#3760** add external k8s secret for jws signing keys ([mojaloop/#600](https://github.com/mojaloop/helm/pull/600)), closes [mojaloop/#3760](https://github.com/mojaloop/project/issues/3760) +* **mojaloop/#3768** create dashboard-performance-troubleshooting.json ([mojaloop/#601](https://github.com/mojaloop/helm/pull/601)), closes [mojaloop/#3768](https://github.com/mojaloop/project/issues/3768) +* **mojaloop/#3768** node list regexp shows all the nodes in dashboard-performance-troubleshooting.json ([mojaloop/#604](https://github.com/mojaloop/helm/pull/604)), closes [mojaloop/#3768](https://github.com/mojaloop/project/issues/3768) +* **mojaloop/#3768** add replicaset count to performance-troubleshooting dashboard ([mojaloop/#606](https://github.com/mojaloop/helm/pull/606)), closes [mojaloop/#3768](https://github.com/mojaloop/project/issues/3768) +* **iprod/#379** added integration tests; updated docker-compose ([mojaloop/#324](https://github.com/mojaloop/quoting-service/pull/324)), closes [iprod/#379](https://github.com/mojaloop/project/issues) + +## 2. Bug Fixes +* **mojaloop/#3682** fix cache implementation ([mojaloop/#468](https://github.com/mojaloop/account-lookup-service/pull/468)), closes [mojaloop/#3682](https://github.com/mojaloop/project/issues/3682) +* **mojaloop/#3603** fix container permission issues ([mojaloop/#9](https://github.com/mojaloop/ml-testing-toolkit-client-lib/pull/9)), closes [mojaloop/#3603](https://github.com/mojaloop/project/issues/3603) + * **mojaloop/3806** fix: update k8s monitoring dashboard ([mojaloop/#597](https://github.com/mojaloop/helm/pull/597)), closes [mojaloop/#3806](https://github.com/mojaloop/project/issues/3806) + * **mojaloop/#3768** fix container cpu and memory utilization charts in k8s monitoring dashboard ([mojaloop/#610](https://github.com/mojaloop/helm/pull/610)), closes [mojaloop/#3768](https://github.com/mojaloop/project/issues/3768) + * **mojaloop/#3768** node list regexp shows all the nodes in dashboard-performance-troubleshooting.json ([mojaloop/#604](https://github.com/mojaloop/helm/pull/604)), closes [mojaloop/#3768](https://github.com/mojaloop/project/issues/3768) + +## 3. Application Versions + +1. central-event-processor: v12.0.0 -> [v12.1.0](https://github.com/mojaloop/central-event-processor/releases/v12.1.0) ([Compare](https://github.com/mojaloop/central-event-processor/compare/v12.0.0...v12.1.0)) +2. ml-testing-toolkit-ui: v15.4.0 -> [v15.4.2](https://github.com/mojaloop/ml-testing-toolkit-ui/releases/v15.4.2) ([Compare](https://github.com/mojaloop/ml-testing-toolkit-ui/compare/v15.4.0...v15.4.2)) +3. als-oracle-pathfinder: v12.0.0 -> [v12.1.0](https://github.com/mojaloop/als-oracle-pathfinder/releases/v12.1.0) ([Compare](https://github.com/mojaloop/als-oracle-pathfinder/compare/v12.0.0...v12.1.0)) +4. ml-testing-toolkit-client-lib: v1.2.0 -> [v1.2.2](https://github.com/mojaloop/ml-testing-toolkit-client-lib/releases/v1.2.2) ([Compare](https://github.com/mojaloop/ml-testing-toolkit-client-lib/compare/v1.2.0...v1.2.2)) +5. account-lookup-service: v15.0.0 -> [v15.2.3](https://github.com/mojaloop/account-lookup-service/releases/v15.2.3) ([Compare](https://github.com/mojaloop/account-lookup-service/compare/v15.0.0...v15.2.3)) +6. simulator: v12.0.0 -> [v12.1.0](https://github.com/mojaloop/simulator/releases/v12.1.0) ([Compare](https://github.com/mojaloop/simulator/compare/v12.0.0...v12.1.0)) +7. quoting-service: v15.5.0 -> [v15.7.0](https://github.com/mojaloop/quoting-service/releases/v15.7.0) ([Compare](https://github.com/mojaloop/quoting-service/compare/v15.5.0...v15.7.0)) +8. central-ledger: v17.3.2 -> [v17.6.0](https://github.com/mojaloop/central-ledger/releases/v17.6.0) ([Compare](https://github.com/mojaloop/central-ledger/compare/v17.3.2...v17.6.0)) +9. event-stream-processor: v12.0.0-snapshot.7 -> [v12.0.0-snapshot.9](https://github.com/mojaloop/event-stream-processor/releases/v12.0.0-snapshot.9) ([Compare](https://github.com/mojaloop/event-stream-processor/compare/v12.0.0-snapshot.7...v12.0.0-snapshot.9)) +10. sdk-scheme-adapter: v23.1.1 -> [v23.4.0](https://github.com/mojaloop/sdk-scheme-adapter/releases/v23.4.0) ([Compare](https://github.com/mojaloop/sdk-scheme-adapter/compare/v23.1.1...v23.4.0)) +11. bulk-api-adapter: [v17.0.0](https://github.com/mojaloop/bulk-api-adapter/releases/v17.0.0) +12. event-sidecar: [v14.0.0](https://github.com/mojaloop/event-sidecar/releases/v14.0.0) +13. auth-service: [v15.0.0](https://github.com/mojaloop/auth-service/releases/v15.0.0) +14. ml-testing-toolkit: [v17.0.0](https://github.com/mojaloop/ml-testing-toolkit/releases/v17.0.0) +15. transaction-requests-service: [v14.1.2](https://github.com/mojaloop/transaction-requests-service/releases/v14.1.2) +16. ml-api-adapter: [v14.0.5](https://github.com/mojaloop/ml-api-adapter/releases/v14.0.5) +17. mojaloop-simulator: [v15.0.0](https://github.com/mojaloop/mojaloop-simulator/releases/v15.0.0) +18. thirdparty-api-svc: [v14.0.0](https://github.com/mojaloop/thirdparty-api-svc/releases/v14.0.0) +19. als-consent-oracle: [v0.2.2](https://github.com/mojaloop/als-consent-oracle/releases/v0.2.2) +20. thirdparty-sdk: [v15.1.1](https://github.com/mojaloop/thirdparty-sdk/releases/v15.1.1) +21. central-settlement: [v16.0.0](https://github.com/mojaloop/central-settlement/releases/v16.0.0) +22. email-notifier: [v14.0.0](https://github.com/mojaloop/email-notifier/releases/v14.0.0) + +## 4. API Versions + +This release supports the following versions of the [Mojaloop family of APIs](https://docs.mojaloop.io/api): + +| API | Supported Versions | Notes | +| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ----- | +| FSPIOP | [v1.1](https://docs.mojaloop.io/api/fspiop/v1.1/api-definition.html), [v1.0](https://docs.mojaloop.io/api/fspiop/v1.0/api-definition.html) | | +| Settlements | [v2.0](https://docs.mojaloop.io/api/settlement) | | +| Admin | [v1.0](https://docs.mojaloop.io/api/administration/central-ledger-api.html) | | +| Oracle | [v1.0](https://docs.mojaloop.io/legacy/api/als-oracle-api-specification.html) | | +| Thirdparty | [v1.0](https://docs.mojaloop.io/api/thirdparty) | | + +## 5. Testing notes + +1. This release has been validated against the following Dependency Test Matrix: + + | Dependency | Version | Notes | + | ---------- | ------- | --- | + | Kubernetes | v1.29 | [AWS EKS](https://aws.amazon.com/eks/), [AWS EKS Supported Version Notes](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html) | + | containerd | v1.6.19 | | + | Nginx Ingress Controller | [helm-ingress-nginx-4.7.0](https://github.com/kubernetes/ingress-nginx/releases/tag/helm-chart-4.7.0) / [ingress-controller-v1.8.0](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.8.0) | | + | Amazon Linux | v2 | | + | MySQL | bitnami/mysql:8.0.32-debian-11-r0 | | + | Kafka | bitnami/kafka:3.3.1-debian-11-r1 | | + | Redis | bitnami/redis:7.0.5-debian-11-r7 | | + | MongoDB | bitnami/mongodb:6.0.2-debian-11-r11 | | + | Testing Toolkit Test Cases | [v16.0.0](https://github.com/mojaloop/testing-toolkit-test-cases/releases/tag/v16.0.0) | | + | example-mojaloop-backend | v15.0.0 | [README](https://github.com/mojaloop/helm/blob/master/example-mojaloop-backend/README.md) | + +2. It is recommended that all Mojaloop deployments are verified using the [Mojaloop Testing Toolkit](https://docs.mojaloop.io/documentation/mojaloop-technical-overview/ml-testing-toolkit/). More information can be found in the [Mojaloop Deployment Guide](https://docs.mojaloop.io/documentation/deployment-guide). + +3. The [testing-toolkit-test-cases](https://github.com/mojaloop/testing-toolkit-test-cases/releases) (See above Dependency Test Matrix for exact version required for this release) Golden Path collections expects: + - the Quoting service operating mode to be set quoting-service.config.simple_routing_mode_enabled=true (in helm mojaloop/values.yaml under quoting-service config). If this is incorrectly configured, it will result in several failures in the quoting-service tests (7 expected failures). If this is disabled, ensure that you update the corresponding test-case environment variable parameter **SIMPLE_ROUTING_MODE_ENABLED** ( in helm mojaloop/values.yaml ml-testing-toolkit -> extraEnvironments.hub-k8s-default-environment.json.inputValues) to match. + - the **on-us transfers** (in mojaloop/values.yaml "enable_on_us_transfers: false" under centralledger-handler-transfer-prepare -> config and cl-handler-bulk-transfer-prepare -> config) configuration to be disabled. The test-case environment variable parameter (**ON_US_TRANSFERS_ENABLED** (in helm mojaloop/values.yaml ml-testing-toolkit -> extraEnvironments.hub-k8s-default-environment.json.inputValues), the same name used on postman collections) must similarly match this value. + +4. Simulators + - We recommend using Testing Toolkit instead of Postman which is better suited for the async nature of the Mojaloop API specification (see above) + - [Mojaloop-Simulator](https://github.com/mojaloop/mojaloop-simulator) is enabled by default (six instances used for single transfers usually and three more specific to bulk). + - Ensure that correct Postman Scripts are used if you wish to test against the Mojaloop-Simulators: + - Setup Mojaloop Hub: [MojaloopHub_Setup](https://github.com/mojaloop/postman/blob/v12.0.0/MojaloopHub_Setup.postman_collection.json) + - Setup Mojaloop Simulators for testing : [MojaloopSims_Onboarding](https://github.com/mojaloop/postman/blob/v12.0.0/MojaloopSims_Onboarding.postman_collection.json) + - Golden path tests: [Golden_Path_Mojaloop](https://github.com/mojaloop/postman/blob/v12.0.0/Golden_Path_Mojaloop.postman_collection.json) + - Legacy Simulators are still required and deployed by default; disabling this will cause issues since there is Account Lookup directory mocking functionality in this service. + +5. Thirdparty Testing Toolkit Test Collections are not repeatable. Please refer to the following issue for more information [#2717 - Thirdparty TTK Test-Collection is not repeatable](https://github.com/mojaloop/project/issues/2717). It is possible to manually cleanup persistent data to re-run the test if required. + +6. Bulk API Helm Tests + + Refer to the [Testing Deployments](https://github.com/mojaloop/helm/blob/master/README.md#testing-deployments) section in the main README for detailed information on how to enable bulk-api-adapter tests. + +7. Thirdparty API Helm Tests + + Refer to [thirdparty/README.md#validating-and-testing-the-3p-api](https://github.com/mojaloop/helm/blob/master/thirdparty/README.md#validating-and-testing-the-3p-api) on how to enabled and execute Thirdparty verification tests. + +8. Testing the Bulk functionality including "sdk-scheme-adapter" + + For details regarding deployment and validation of simulators needed for bulk (for adoption provided in sdk-scheme-adapter) refer to [deploying Mojaloop TTK simulators](https://github.com/mojaloop/helm/blob/master/mojaloop-ttk-simulators/README.md). + +## 6. Breaking Changes + +### central-ledger + * config/default.json: + The Kafka configuration has been expanded to include additional topics, batch size, consume timeout and `EVENT_TYPE_ACTION_TOPIC_MAP` configurations for the batching feature. See [README](https://github.com/mojaloop/central-ledger/compare/v17.3.2...v17.6.0#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5) for more details. + (https://github.com/mojaloop/central-ledger/blob/42238ff293bb27f1947831de1ef574ebd5bdb6fc/config%2Fdefault.json) +### quoting-service + * config/default.json: + Quoting Service has now been split into API service and Handler service. As a result, Kafka configuration has been added to allow for publishing and consuming of messages between the API service and the Handler service. See [diff](https://github.com/mojaloop/quoting-service/compare/v15.5.0...v15.7.0#diff-f07c42814e0913799fda32ac14d063f1ef8a04e24fb6febd873a5f161e58a8d4) for details. + (https://github.com/mojaloop/quoting-service/blob/0a68f45602d9180429537315f6c44f30b8ba99e5/config%2Fdefault.json) +### account-lookup-service + * config/default.json: (https://github.com/mojaloop/account-lookup-service/blob/283ef2140c166029255a4ddc9548eb3ffb4eaf17/config%2Fdefault.json) + * docker/account-lookup-service/default.json: (https://github.com/mojaloop/account-lookup-service/blob/283ef2140c166029255a4ddc9548eb3ffb4eaf17/docker%2Faccount-lookup-service%2Fdefault.json) + The `ENPOINT_CACHE_CONFIG` has been replaced with three (3) separate cache configurations (`CENTRAL_SHARED_ENDPOINT_CACHE_CONFIG`, `CENTRAL_SHARED_PARTICIPANT_CACHE_CONFIG`, and `GENERAL_CACHE_CONFIG`) to cater for the additional caching features in the service. See [diff](https://github.com/mojaloop/account-lookup-service/compare/v15.0.0...v15.2.3#diff-f07c42814e0913799fda32ac14d063f1ef8a04e24fb6febd873a5f161e58a8d4) for details. + +## 7. Known Issues + +1. [#2119 - Idempotency for duplicate quote request](https://github.com/mojaloop/project/issues/2119) +2. [#2322 - Helm install failing with with "medium to large" release names](https://github.com/mojaloop/project/issues/2322) +3. [#2317 - Mojaloop Helm deployments are not compatible when deployed to ARM-arch based hosts](https://github.com/mojaloop/project/issues/2317) +4. [#2435 - Quoting-Service is incorrectly handling failed responses to FSPs when forwarding requests](https://github.com/mojaloop/project/issues/2435) +5. Test issues causing instability/intermitant failures on Test Case Results + 1. [#2717 - Thirdparty TTK Test-Collection is not repeatable](https://github.com/mojaloop/project/issues/2717) + 2. [#2925 - Helm Test Intermittent failure with 'Generic ID not found](https://github.com/mojaloop/project/issues/2925) + +## 8. Contributors + +- Organizations: BMGF, InFiTX, MLF +- Individuals: @aaronreynoza, @elnyry-sam-k, @geka-evk, @kleyow, @muzammil360, @oderayi, @vijayg10 + +*Note: companies and individuals are in alphabetical order* + +**Full Changelog**: https://github.com/mojaloop/helm/compare/v15.2.0...v16.0.0 diff --git a/.circleci/config.yml b/.circleci/config.yml index c9a804aba..f239f9ce1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -47,7 +47,7 @@ defaults_Environment: &defaults_environment helm repo add elastic https://helm.elastic.co helm repo add codecentric https://codecentric.github.io/helm-charts helm repo add bitnami https://charts.bitnami.com/bitnami - helm repo add mojaloop-charts https://mojaloop.github.io/charts/repo + helm repo add mojaloop-charts https://mojaloop.github.io/charts/repo helm repo add redpanda https://charts.redpanda.com helm repo update @@ -131,7 +131,7 @@ jobs: - run: name: If this is a release, upload the license-scanner file to the github release command: | - if [ "${CIRCLE_TAG}" = "" ]; then + if [ "${CIRCLE_TAG}" = "" ] || [[ "$CIRCLE_TAG" == *-snapshot* ]]; then exit 0 fi mv /tmp/license-scanner/results/license-summary.xlsx ./license-summary-${CIRCLE_TAG}.xlsx @@ -173,6 +173,11 @@ jobs: echo "export GIT_RELEASE_URL=${GIT_PROJECT_URL}/releases/tag/${CIRCLE_TAG}" >> $BASH_ENV echo "export GIT_RELEASE_TAG='${CIRCLE_TAG}@${CIRCLE_SHA1:0:7}'" >> $BASH_ENV echo "export GIT_RELEASE_TYPE='Helm Snapshot'" >> $BASH_ENV + elif [[ $CIRCLE_BRANCH =~ ^(major|minor|patch)/(.*)$ ]]; then + echo "Setting env configs for Helm Pre-Release" + echo "export GIT_RELEASE_URL=${GIT_PROJECT_URL}/commit/${CIRCLE_SHA1}" >> $BASH_ENV + echo "export GIT_RELEASE_TAG=${BASH_REMATCH[2]}.${CIRCLE_BUILD_NUM}" >> $BASH_ENV + echo "export GIT_RELEASE_TYPE='Helm Pre-Release'" >> $BASH_ENV else echo "CIRCLE_SHA1=${CIRCLE_SHA1} exists setting env configs for Helm Snapshot" echo "export GIT_RELEASE_URL=${GIT_PROJECT_URL}/commit/${CIRCLE_SHA1}" >> $BASH_ENV @@ -203,6 +208,25 @@ jobs: - run: name: Publish Helm Charts command: .circleci/publish_helm_charts.sh + - run: + name: Trigger downstream workflows + # DOWNSTREAM_IMAGE_ variables contain downstream repository:token pairs + command: | + DOWNSTREAM=$(compgen -A variable | grep "^DOWNSTREAM_IMAGE_") + if [ -n "$DOWNSTREAM" ]; then + echo "wait for GitHub Pages to publish" + sleep 180 + fi + for var in $DOWNSTREAM; do + REPO_NAME=$(echo "${!var}" | cut -d: -f1) + echo "Triggering downstream workflow for $REPO_NAME" + curl -L \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer $(echo "${!var}" | cut -d: -f2)" \ + https://api.github.com/repos/"$REPO_NAME"/actions/workflows/docker-image.yaml/dispatches \ + -d '{"ref":"main","inputs":{"upstream":"'"$CIRCLE_BUILD_URL"'","chart":"mojaloop","tag":"'"$GIT_RELEASE_TAG"'"}}' + done - slack/notify: event: pass template: SLACK_TEMP_RELEASE_SUCCESS @@ -220,7 +244,7 @@ workflows: ignore: /.*/ branches: ignore: - - master + - main - setup: context: org-global filters: @@ -249,4 +273,4 @@ workflows: tags: only: /v[0-9]+(\.[0-9]+)*(\-snapshot+((\.[0-9]+)?))?/ branches: - only: master + only: /main|(major|minor|patch)/.*/ diff --git a/.github/workflows/create-release-pr.yml b/.github/workflows/create-release-pr.yml index d38b74aec..bb22fd20b 100644 --- a/.github/workflows/create-release-pr.yml +++ b/.github/workflows/create-release-pr.yml @@ -2,9 +2,16 @@ # - GitHub Actions must be explicitly allowed to create pull requests in this repository. # This setting can be found in the repository's settings under Actions > General > Workflow permissions. # - A repository secret `AUTO_RELEASE_TOKEN` (permissions: `contents: write`, `pull-requests: write`, `repositories: read`) needs to be created. -# The secret should contain a github access token with the permissions specified above. +# The secret should contain a github access token (classic token (scope: repo (Full control of private repositories)) works better) with the permissions specified above. # The secret is used by the `create-pull-request` action to create the pull request and `updatecli` to access all updateable repositories. # The secret can be created at https://github.com/mojaloop/helm/settings/secrets/actions +# +# KNOWN ISSUES: +# - https://github.com/updatecli/updatecli/issues/1332 +# - https://github.com/goccy/go-yaml/issues/298 +# The underlying libraries used by updatecli for parsing yaml files have issues with maintaining multiline strings format and nodes with anchor. +# These issues are being worked on by the maintainers of the libraries and will be resolved in future releases. +# In the meantime, the workaround is to manually fix the affected files after the updatecli run. name: Create Release PR @@ -13,9 +20,9 @@ on: inputs: branch: type: string - description: "Branch to create release PR from (e.g. master)" + description: "Branch to create release PR from (e.g. main)" required: false - default: "master" + default: "main" release_name: type: string description: "Release name (e.g. Acacia)" @@ -47,7 +54,7 @@ on: type: string description: "Deployment values file in oss-core-env repo" required: true - default: "helm-values-moja2-mojaloop-v15.3.0.yaml" + default: "helm-values-moja2-mojaloop-v16.0.0.yaml" jobs: create_release_pr: @@ -74,8 +81,19 @@ jobs: - name: Install dependencies run: | # Install mo - curl -sL https://raw.githubusercontent.com/tests-always-included/mo/master/mo -o /usr/local/bin/mo - chmod +x /usr/local/bin/mo + curl -sSL https://raw.githubusercontent.com/tests-always-included/mo/master/mo -o mo + if [ $? -ne 0 ]; then + echo "Failed to download mo" + exit 1 + fi + sudo chmod +x mo + if [ $? -ne 0 ]; then + echo "Failed to make mo executable" + exit 1 + fi + sudo mv mo /usr/local/bin/ + + mo --help # Install updatecli curl -sL https://github.com/updatecli/updatecli/releases/download/v0.71.0/updatecli_amd64.deb -o /tmp/updatecli_amd64.deb @@ -83,7 +101,7 @@ jobs: # Install jq sudo apt-get install jq - + - name: Setup Helm repositories run: | helm repo add stable https://charts.helm.sh/stable @@ -175,7 +193,7 @@ jobs: title: "[auto] feat: release candidate for ${{ inputs.release_name }} ${{ steps.determine-release-version.outputs.RELEASE_VERSION }}" body-path: ${{ steps.generate-release-note.outputs.RELEASE_NOTE_FILE }} branch: release/release-candidate-${{ inputs.release_name }}-${{ steps.determine-release-version.outputs.RELEASE_VERSION }}-${{ github.run_id }} - base: master + base: main draft: true - name: Clone oss-core-env repository diff --git a/.github/workflows/manifests/first-pass/mojaloop.yaml b/.github/workflows/manifests/first-pass/mojaloop.yaml index 2e8725e84..d52f02d66 100644 --- a/.github/workflows/manifests/first-pass/mojaloop.yaml +++ b/.github/workflows/manifests/first-pass/mojaloop.yaml @@ -219,11 +219,11 @@ conditions: kind: dockerimage spec: image: mojaloop/ml-testing-toolkit - # docker-ml-testing-toolkit-ui: - # sourceid: ml-testing-toolkit-ui - # kind: dockerimage - # spec: - # image: mojaloop/ml-testing-toolkit-ui + docker-ml-testing-toolkit-ui: + sourceid: ml-testing-toolkit-ui + kind: dockerimage + spec: + image: mojaloop/ml-testing-toolkit-ui targets: appVersion-ml-api-adapter: @@ -280,7 +280,7 @@ targets: kind: file spec: file: mojaloop/Chart.yaml - matchpattern: '(simulator:) (v[\d\.]+)' + matchpattern: '(; simulator:) (v[\d\.]+)' replacepattern: '$1 {{ source "simulator" }}' appVersion-mojaloop-simulator: sourceid: mojaloop-simulator @@ -379,14 +379,28 @@ targets: spec: name: mojaloop file: values.yaml - key: $.quoting-service.image.tag + key: $.quoting-service.quoting-service.image.tag quoting-service--sidecar: sourceid: event-sidecar kind: helmchart spec: name: mojaloop file: values.yaml - key: $.quoting-service.sidecar.image.tag + key: $.quoting-service.quoting-service.sidecar.image.tag + quoting-service-handler: + sourceid: quoting-service + kind: helmchart + spec: + name: mojaloop + file: values.yaml + key: $.quoting-service.quoting-service-handler.image.tag + quoting-service-handler--sidecar: + sourceid: event-sidecar + kind: helmchart + spec: + name: mojaloop + file: values.yaml + key: $.quoting-service.quoting-service-handler.sidecar.image.tag ml-api-adapter: sourceid: ml-api-adapter kind: helmchart diff --git a/.github/workflows/manifests/first-pass/quoting-service.yaml b/.github/workflows/manifests/first-pass/quoting-service.yaml index a60564cda..de25bc185 100644 --- a/.github/workflows/manifests/first-pass/quoting-service.yaml +++ b/.github/workflows/manifests/first-pass/quoting-service.yaml @@ -38,7 +38,7 @@ targets: spec: name: quoting-service file: values.yaml - key: $.image.tag + key: $.quoting-service.image.tag appversion: true quoting-service--sidecar: sourceid: event-sidecar @@ -46,12 +46,70 @@ targets: spec: name: quoting-service file: values.yaml - key: $.sidecar.image.tag + key: $.quoting-service.sidecar.image.tag + quoting-service-handler: + sourceid: quoting-service + kind: helmchart + spec: + name: quoting-service + file: values.yaml + key: $.quoting-service-handler.image.tag + quoting-service-handler--sidecar: + sourceid: event-sidecar + kind: helmchart + spec: + name: quoting-service + file: values.yaml + key: $.quoting-service-handler.sidecar.image.tag common: sourceid: common kind: helmchart spec: name: quoting-service file: Chart.yaml + key: $.dependencies[2].version + chart-handler--quoting-service: + sourceid: quoting-service + kind: helmchart + spec: + name: quoting-service/chart-handler + file: values.yaml + key: $.image.tag + appversion: true + chart-handler--quoting-service--sidecar: + sourceid: event-sidecar + kind: helmchart + spec: + name: quoting-service/chart-handler + file: values.yaml + key: $.sidecar.image.tag + chart-handler--common: + sourceid: common + kind: helmchart + spec: + name: quoting-service/chart-handler + file: Chart.yaml + key: $.dependencies[0].version + chart-service--quoting-service: + sourceid: quoting-service + kind: helmchart + spec: + name: quoting-service/chart-service + file: values.yaml + key: $.image.tag + appversion: true + chart-service--quoting-service--sidecar: + sourceid: event-sidecar + kind: helmchart + spec: + name: quoting-service/chart-service + file: values.yaml + key: $.sidecar.image.tag + chart-service--common: + sourceid: common + kind: helmchart + spec: + name: quoting-service/chart-service + file: Chart.yaml key: $.dependencies[0].version \ No newline at end of file diff --git a/.github/workflows/manifests/second-pass/quoting-service.yaml b/.github/workflows/manifests/second-pass/quoting-service.yaml new file mode 100644 index 000000000..e493aced4 --- /dev/null +++ b/.github/workflows/manifests/second-pass/quoting-service.yaml @@ -0,0 +1,37 @@ +name: quoting-service + +sources: + quoting-service: + kind: helmchart + spec: + url: file://./quoting-service + name: quoting-service + quoting-service-handler: + kind: helmchart + spec: + url: file://./quoting-service + name: quoting-service-handler + +conditions: {} + +targets: + quoting-service: + sourceid: quoting-service + kind: helmchart + spec: + name: quoting-service + file: Chart.yaml + key: $.dependencies[0].version + transformers: + - addprefix: '">= ' + - addsuffix: '"' + quoting-service-handler: + sourceid: quoting-service-handler + kind: helmchart + spec: + name: quoting-service + file: Chart.yaml + key: $.dependencies[1].version + transformers: + - addprefix: '">= ' + - addsuffix: '"' diff --git a/.github/workflows/scripts/determine-release-version.sh b/.github/workflows/scripts/determine-release-version.sh index 14b695249..9d1c54be6 100755 --- a/.github/workflows/scripts/determine-release-version.sh +++ b/.github/workflows/scripts/determine-release-version.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Description: This script is used to the next release version number based on changes from last release. +# Description: This script is used to determine the next release version number based on changes from last release. # Dependencies: This script depends on the changelog files (.tmp/changelogs/**) generated by the generate-changelog.sh script. # Requirements: bash, jq, awk, sed # Usage: .github/workflows/scripts/determine-release-version last_release_tag diff --git a/.github/workflows/templates/release-note-template.md b/.github/workflows/templates/release-note-template.md index ee5641372..a75b6af3f 100644 --- a/.github/workflows/templates/release-note-template.md +++ b/.github/workflows/templates/release-note-template.md @@ -4,12 +4,9 @@ Date | Revision | Description ---------|----------|--------- {{RELEASE_DATE}} | 0 | Initial draft -- For *BREAKING ISSUES*, please review the section `#6` ["Breaking Changes"](#6-breaking-changes) below. -- For *KNOWN ISSUES*, please review the section `#7` ["Known Issues"](#7-known-issues) below. - ## 0. Summary -Enhancements and {{BREAKING_CHANGES_STATUS_TEXT}} changes to the [{{LAST_RELEASE_VERSION}} Release](https://github.com/mojaloop/helm/blob/master/.changelog/release-{{LAST_RELEASE_VERSION}}.md), which includes: +Enhancements and {{BREAKING_CHANGES_STATUS_TEXT}} changes to the [{{LAST_RELEASE_VERSION}} Release](https://github.com/mojaloop/helm/blob/main/.changelog/release-{{LAST_RELEASE_VERSION}}.md), which includes: {{RELEASE_SUMMARY_POINTS}} @@ -40,7 +37,7 @@ This release supports the following versions of the [Mojaloop family of APIs](ht | Dependency | Version | Notes | | ---------- | ------- | --- | - | Kubernetes | v1.28 | [AWS EKS](https://aws.amazon.com/eks/), [AWS EKS Supported Version Notes](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html) | + | Kubernetes | v1.29 | [AWS EKS](https://aws.amazon.com/eks/), [AWS EKS Supported Version Notes](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html) | | containerd | v1.6.19 | | | Nginx Ingress Controller | [helm-ingress-nginx-4.7.0](https://github.com/kubernetes/ingress-nginx/releases/tag/helm-chart-4.7.0) / [ingress-controller-v1.8.0](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.8.0) | | | Amazon Linux | v2 | | @@ -49,7 +46,7 @@ This release supports the following versions of the [Mojaloop family of APIs](ht | Redis | bitnami/redis:7.0.5-debian-11-r7 | | | MongoDB | bitnami/mongodb:6.0.2-debian-11-r11 | | | Testing Toolkit Test Cases | [{{TTK_TEST_CASES_VERSION}}](https://github.com/mojaloop/testing-toolkit-test-cases/releases/tag/{{TTK_TEST_CASES_VERSION}}) | | - | example-mojaloop-backend | {{EXAMPLE_MOJALOOP_BACKEND_VERSION}} | [README](https://github.com/mojaloop/helm/blob/master/example-mojaloop-backend/README.md) | + | example-mojaloop-backend | {{EXAMPLE_MOJALOOP_BACKEND_VERSION}} | [README](https://github.com/mojaloop/helm/blob/main/example-mojaloop-backend/README.md) | 2. It is recommended that all Mojaloop deployments are verified using the [Mojaloop Testing Toolkit](https://docs.mojaloop.io/documentation/mojaloop-technical-overview/ml-testing-toolkit/). More information can be found in the [Mojaloop Deployment Guide](https://docs.mojaloop.io/documentation/deployment-guide). @@ -70,15 +67,15 @@ This release supports the following versions of the [Mojaloop family of APIs](ht 6. Bulk API Helm Tests - Refer to the [Testing Deployments](https://github.com/mojaloop/helm/blob/master/README.md#testing-deployments) section in the main README for detailed information on how to enable bulk-api-adapter tests. + Refer to the [Testing Deployments](https://github.com/mojaloop/helm/blob/main/README.md#testing-deployments) section in the main README for detailed information on how to enable bulk-api-adapter tests. 7. Thirdparty API Helm Tests - Refer to [thirdparty/README.md#validating-and-testing-the-3p-api](https://github.com/mojaloop/helm/blob/master/thirdparty/README.md#validating-and-testing-the-3p-api) on how to enabled and execute Thirdparty verification tests. + Refer to [thirdparty/README.md#validating-and-testing-the-3p-api](https://github.com/mojaloop/helm/blob/main/thirdparty/README.md#validating-and-testing-the-3p-api) on how to enabled and execute Thirdparty verification tests. -8. Testing the new Bulk functionality (sdk-scheme-adapter) +8. Testing the Bulk functionality including "sdk-scheme-adapter" - For details regarding deployment and validation of simulators needed for bulk (for adoption provided in sdk-scheme-adapter) refer to [deploying Mojaloop TTK simulators](https://github.com/mojaloop/helm/blob/master/mojaloop-ttk-simulators/README.md). + For details regarding deployment and validation of simulators needed for bulk (for adoption provided in sdk-scheme-adapter) refer to [deploying Mojaloop TTK simulators](https://github.com/mojaloop/helm/blob/main/mojaloop-ttk-simulators/README.md). ## 6. Breaking Changes @@ -96,7 +93,7 @@ This release supports the following versions of the [Mojaloop family of APIs](ht ## 8. Contributors -- Organizations: BMGF, InFiTX +- Organizations: BMGF, InFiTX, MLF - Individuals: {{INDIVIDUAL_CONTRIBUTORS}} *Note: companies are in alphabetical order, individuals are in no particular order.* diff --git a/CODEOWNERS b/CODEOWNERS index acaa49966..c57462c62 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -2,4 +2,4 @@ # the repo. Unless a later match takes precedence, # @mdebarros, @elynry-sam-k and @rmothilal will be requested for # review when someone opens a pull request. -* @mdebarros @elnyry-sam-k @vijayg10 +* @mdebarros @elnyry-sam-k @vijayg10 @oderayi diff --git a/LICENSE.md b/LICENSE.md index 40350591c..d28c9d19f 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,10 +1,9 @@ # LICENSE -Copyright © 2020 Mojaloop Foundation +Copyright © 2020-2024 Mojaloop Foundation -The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 -(the "License") and you may not use these files except in compliance with the [License](http://www.apache.org/licenses/LICENSE-2.0). +The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. -You may obtain a copy of the License at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) +You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the [License](http://www.apache.org/licenses/LICENSE-2.0). +Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. \ No newline at end of file diff --git a/README.md b/README.md index 4b17a11ce..43bdad5dc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Mojaloop Helm Charts -[![Git Commit](https://img.shields.io/github/last-commit/mojaloop/helm.svg?style=flat)](https://github.com/mojaloop/helm/commits/master) +[![Git Commit](https://img.shields.io/github/last-commit/mojaloop/helm.svg?style=flat)](https://github.com/mojaloop/helm/commits/main) [![Git Releases](https://img.shields.io/github/release/mojaloop/helm.svg?style=flat)](https://github.com/mojaloop/helm/releases) [![CircleCI](https://circleci.com/gh/mojaloop/helm.svg?style=svg)](https://circleci.com/gh/mojaloop/helm) @@ -159,7 +159,7 @@ The following Helm Charts have the following external dependencies: - `helm --namespace install mojaloop/mojaloop --devel` - This is useful if you've had some work merged into master but it has not yet been released. + This is useful if you've had some work merged into main but it has not yet been released. The `--devel` flag can also be supplied to `helm search` and `helm upgrade` commands. @@ -231,8 +231,8 @@ Mojaloop Helm deployments currently include the following provisioning (`setup`) - `ml-ttk-test-setup-sdk-bulk.tests.enabled=true` (_Note: only applicable if `mojaloop-bulk.enabled=true`, `mojaloop-ttk-simulators.enabled=true` is set_) - `ml-ttk-test-val-sdk-bulk.tests.enabled=true` (_Note: only applicable if `mojaloop-bulk.enabled=true`, `mojaloop-ttk-simulators.enabled=true` is set_) - `ml-ttk-test-val-sdk-r2p.tests.enabled=true` (_Note: only applicable if `mojaloop-ttk-simulators.enabled=true` is set_) - - `ml-ttk-test-setup-tp.test.enabled=true` (_Note: only applicable if `thirdparty.enabled=true`, `account-lookup-service.account-lookup-service.config.featureEnableExtendedPartyIdType=true` & `account-lookup-service.account-lookup-service-admin.config.featureEnableExtendedPartyIdType=true` is set_) - - `ml-ttk-test-val-tp.test,enabled=true` (_Note: only applicable if `thirdparty.enabled=true`, `account-lookup-service.account-lookup-service.config.featureEnableExtendedPartyIdType=true` & `account-lookup-service.account-lookup-service-admin.config.featureEnableExtendedPartyIdType=true` is set_) + - `ml-ttk-test-setup-tp.tests.enabled=true` (_Note: only applicable if `thirdparty.enabled=true`, `account-lookup-service.account-lookup-service.config.featureEnableExtendedPartyIdType=true` & `account-lookup-service.account-lookup-service-admin.config.featureEnableExtendedPartyIdType=true` is set_) + - `ml-ttk-test-val-tp.tests.enabled=true` (_Note: only applicable if `thirdparty.enabled=true`, `account-lookup-service.account-lookup-service.config.featureEnableExtendedPartyIdType=true` & `account-lookup-service.account-lookup-service-admin.config.featureEnableExtendedPartyIdType=true` is set_) - `ml-ttk-test-cleanup.test.enabled=true` Or alternatively add `--set` for each of the above parameters on the install command: @@ -252,7 +252,7 @@ Mojaloop Helm deployments currently include the following provisioning (`setup`) 1. Add the following to your hosts file and ensure you have installed Ingress Controller on your Kubernetes Cluster: - ` ml-api-adapter.local central-ledger.local account-lookup-service.local quoting-service.local central-settlement.local moja-simulator.local testing-toolkit.local testing-toolkit-specapi.local www.acquirer-merchant.local` + ` ml-api-adapter.local central-ledger.local account-lookup-service.local quoting-service.local central-settlement-service.local moja-simulator.local testing-toolkit.local testing-toolkit-specapi.local www.acquirer-merchant.local` 2. Curl Health End-points for ML-API-Adapter diff --git a/account-lookup-service/Chart.yaml b/account-lookup-service/Chart.yaml index 9d97da243..23c9ef0bb 100644 --- a/account-lookup-service/Chart.yaml +++ b/account-lookup-service/Chart.yaml @@ -1,30 +1,32 @@ apiVersion: v2 -version: 14.2.0 -appVersion: "account-lookup-service: v15.0.0; als-oracle-pathfinder: v12.0.0" +version: 14.11.0 +appVersion: "account-lookup-service: v17.0.3; als-oracle-pathfinder: v12.1.0" description: Account Lookup Service Helm Chart for Mojaloop name: account-lookup-service maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: account-lookup-service - version: ">= 14.2.0" + version: ">= 14.6.0" repository: "file://./chart-service" condition: account-lookup-service.enabled - name: account-lookup-service-admin - version: ">= 14.2.0" + version: ">= 14.6.0" repository: "file://./chart-admin" condition: account-lookup-service-admin.enabled + - name: account-lookup-service-handler-timeout + version: ">= 1.0.0" + repository: "file://./chart-handler-timeout" + condition: account-lookup-service-handler-timeout.enabled - name: als-oracle-pathfinder - version: ">= 13.0.1" + version: ">= 13.3.0" repository: "file://../als-oracle-pathfinder" condition: als-oracle-pathfinder.enabled - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.1 tags: - moja-common diff --git a/account-lookup-service/chart-admin/Chart.yaml b/account-lookup-service/chart-admin/Chart.yaml index 25c45b805..aa4cd608c 100644 --- a/account-lookup-service/chart-admin/Chart.yaml +++ b/account-lookup-service/chart-admin/Chart.yaml @@ -1,18 +1,16 @@ apiVersion: v2 -version: 14.2.0 -appVersion: "15.0.0" +version: 14.6.0 +appVersion: v17.0.3 description: A Helm chart for Kubernetes name: account-lookup-service-admin maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.1 tags: - moja-common diff --git a/account-lookup-service/chart-admin/configs/default.json b/account-lookup-service/chart-admin/configs/default.json index 07e0f8086..ea47cc3e3 100644 --- a/account-lookup-service/chart-admin/configs/default.json +++ b/account-lookup-service/chart-admin/configs/default.json @@ -1,5 +1,9 @@ {{- $centralServicesHost := ( .Values.config.central_services_host | replace "$release_name" .Release.Name ) -}} { + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": {{ .Values.config.hub_participant.name | quote }} + }, "ADMIN_PORT": {{ .Values.service.internalPort }}, "API_PORT": 4002, "PROTOCOL_VERSIONS": {{ .Values.config.protocol_versions | toPrettyJson }}, @@ -22,6 +26,11 @@ }, "DISPLAY_ROUTES": {{ .Values.config.display_routes }}, "RUN_MIGRATIONS": {{ .Values.config.run_migrations }}, + "PARTICIPANT_CACHE_CONFIG": { + "expiresIn": 10, + "generateTimeout": 30000, + "getDecoratedValue": true + }, "CENTRAL_SHARED_ENDPOINT_CACHE_CONFIG": { "expiresIn": {{ .Values.config.central_shared_end_point_cache.expiresIn }}, "generateTimeout": {{ .Values.config.central_shared_end_point_cache.generateTimeout }}, @@ -37,6 +46,8 @@ "MAX_BYTE_SIZE": {{ .Values.config.general_cache.maxByteSize }}, "EXPIRES_IN_MS": {{ .Values.config.general_cache.expiresIn }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, + "HANDLERS": {{ .Values.config.handlers | toPrettyJson | nindent 2 }}, "ERROR_HANDLING": { "includeCauseExtension": {{ .Values.config.error_handling.include_cause_extension }}, "truncateExtensions": {{ .Values.config.error_handling.truncate_extensions }} @@ -62,7 +73,6 @@ "ENDPOINT_SECURITY": { "JWS": { "JWS_SIGN": {{ .Values.config.endpointSecurity.jwsSign }}, - "FSPIOP_SOURCE_TO_SIGN": {{ .Values.config.endpointSecurity.fspiopSourceSigningName | quote }}, "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key" } }, diff --git a/account-lookup-service/chart-admin/templates/config-override.yaml b/account-lookup-service/chart-admin/templates/config-override.yaml new file mode 100644 index 000000000..1ab7c350e --- /dev/null +++ b/account-lookup-service/chart-admin/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "account-lookup-service-admin.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "account-lookup-service-admin.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/account-lookup-service/chart-admin/templates/deployment.yaml b/account-lookup-service/chart-admin/templates/deployment.yaml index aab5b74e0..d48250abe 100644 --- a/account-lookup-service/chart-admin/templates/deployment.yaml +++ b/account-lookup-service/chart-admin/templates/deployment.yaml @@ -33,6 +33,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} # Custom Pod annotations {{- if .Values.podAnnotations }} {{- include "common.tplvalues.render" ( dict "value" .Values.podAnnotations "context" $ ) | nindent 8 }} @@ -43,6 +46,7 @@ spec: # prometheus.io/scrape: "true" # {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} initContainers: {{- if .Values.initContainers }} {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }} @@ -68,6 +72,12 @@ spec: args: {{- include "common.tplvalues.render" (dict "value" .Values.args "context" $) | nindent 12 }} {{- end }} env: + {{- if .Values.env }} + {{- range $key, $val := .Values.env }} + - name: {{ $key }} + value: {{ $val | quote }} + {{- end }} + {{- end }} - name: ALS_DATABASE__PASSWORD {{- if .Values.config.db_secret }} valueFrom: @@ -129,6 +139,11 @@ spec: volumeMounts: - name: {{ template "account-lookup-service-admin.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.sidecar.enabled }} - name: {{ .Chart.Name }}-sidecar image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}" @@ -182,6 +197,11 @@ spec: {{ toYaml . | indent 8 }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "account-lookup-service-admin.fullname" . }}-config-override + {{- end }} - name: {{ template "account-lookup-service-admin.fullname" . }}-config-volume configMap: name: {{ template "account-lookup-service-admin.fullname" . }}-config diff --git a/account-lookup-service/chart-admin/values.yaml b/account-lookup-service/chart-admin/values.yaml index 7b5ab9e60..8c09c3d0a 100644 --- a/account-lookup-service/chart-admin/values.yaml +++ b/account-lookup-service/chart-admin/values.yaml @@ -5,7 +5,7 @@ image: registry: docker.io repository: mojaloop/account-lookup-service - tag: v15.0.0 + tag: v17.0.3 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -19,10 +19,8 @@ image: ## - myRegistryKeySecretName ## pullSecrets: [] - replicaCount: 1 -command: '["node", "src/index.js", "server", "--admin"]' - +command: '["node", "src/index.js", "server", "--admin"]' ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -31,7 +29,7 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/index.js - server @@ -40,7 +38,6 @@ diagnosticMode: ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -125,6 +122,9 @@ metrics: serviceName: account-lookup-service-admin config: + hub_participant: + id: 1 + name: Hub ## Central-Ledger config central_services_host: '$release_name-centralledger-service' central_services_port: 80 @@ -139,22 +139,26 @@ config: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -176,10 +180,8 @@ config: enabled: false maxByteSize: 10000000 expiresIn: 61000 - - ## DB Configuration - db_type: mysql + db_type: mysql db_driver: mysql db_host: mysqldb db_port: 3306 @@ -205,28 +207,29 @@ config: db_create_retry_interval_millis: 200 db_debug: false - display_routes: true run_migrations: false endpointSecurity: jwsSign: false - fspiopSourceSigningName: switch - jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- - - ## Tracing Configuration + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null +# To generate this key: +# Private: +# ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key +# Public: +# openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub +# Should look like: +# -----BEGIN RSA PRIVATE KEY----- +# MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R +# .. +# .. +# mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 +# -----END RSA PRIVATE KEY----- +## Tracing Configuration event_trace_vendor: mojaloop event_log_filter: 'audit:*, log:warn, log:error' # If set to true, only the metadata object from the event will be printed. @@ -240,6 +243,29 @@ config: # Thirdparty API Config featureEnableExtendedPartyIdType: false + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + + ## Handlers configuration + handlers: + DISABLED: true + MONITORING_PORT: 4003 + TIMEOUT: + DISABLED: true + TIMEXP: "*/30 * * * * *" + TIMEZONE: "UTC" + BATCH_SIZE: 100 + +## To pass arbitrary environment variables to the deployment +#env: +# KEY: value + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -252,19 +278,19 @@ config: # initContainers: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh - -c - | - until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; + until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -329,17 +355,15 @@ service: ## e.g.: ## clusterIP: None ## - clusterIP: - ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP - ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer - ## - loadBalancerIP: - ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources - ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service - ## e.g: - ## loadBalancerSourceRanges: - ## - 10.10.10.0/24 - ## + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP +## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer +## + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources +## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service +## e.g: +## loadBalancerSourceRanges: +## - 10.10.10.0/24 +## loadBalancerSourceRanges: [] ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip @@ -359,66 +383,63 @@ service: ## timeoutSeconds: 300 ## sessionAffinityConfig: {} - ingress: enabled: true - ## @param ingress.pathType Ingress path type - ## + ## @param ingress.pathType Ingress path type + ## pathType: ImplementationSpecific - ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) - ## - apiVersion: - ## @param ingress.hostname Default host for the ingress record - ## + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: null ## @param ingress.hostname Default host for the ingress record +## hostname: account-lookup-service-admin.local - ## @param servicePort : port for the service - ## + ## @param servicePort : port for the service + ## servicePort: 80 - ## @param ingress.path Default path for the ingress record - ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers path: / - ## @param ingress.annotations Additional custom annotations for the ingress record - ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added - ## - annotations: - ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter - ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` - ## You can: - ## - Use the `ingress.secrets` parameter to create this TLS secret - ## - Relay on cert-manager to create it by setting `ingress.certManager=true` - ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` - ## + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter +## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` +## You can: +## - Use the `ingress.secrets` parameter to create this TLS secret +## - Relay on cert-manager to create it by setting `ingress.certManager=true` +## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` +## tls: false - ## @param ingress.certManager Add the corresponding annotations for cert-manager integration - ## + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## certManager: false - ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm - ## + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## selfSigned: false - ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record - ## e.g: - ## extraHosts: - ## - name: transfer-api-svc.local - ## path: / - ## - extraHosts: - extraPaths: - extraTls: - secrets: + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" ## # - secretName: chart-example-tls # hosts: # - chart-example.local - resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi +# We usually recommend not to specify default resources and to leave this as a conscious +# choice for the user. This also increases chances charts run on environments with little +# resources, such as Minikube. If you do want to specify resources, uncomment the following +# lines, adjust them as necessary, and remove the curly braces after 'resources:'. +# limits: +# cpu: 100m +# memory: 128Mi +# requests: +# cpu: 100m +# memory: 128Mi + diff --git a/account-lookup-service/chart-handler-timeout/Chart.yaml b/account-lookup-service/chart-handler-timeout/Chart.yaml new file mode 100644 index 000000000..08b19ba89 --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/Chart.yaml @@ -0,0 +1,14 @@ +apiVersion: v2 +version: 1.0.0 +appVersion: v17.0.3 +description: A Helm chart for Kubernetes +name: account-lookup-service-handler-timeout +maintainers: + - name: Steven Oderayi + email: steven.oderayi@infitx.com +dependencies: + - name: common + repository: "https://mojaloop.github.io/charts/repo" + version: 3.1.1 + tags: + - moja-common diff --git a/account-lookup-service/chart-handler-timeout/configs/default-sidecar.json b/account-lookup-service/chart-handler-timeout/configs/default-sidecar.json new file mode 100644 index 000000000..e802c6e99 --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/configs/default-sidecar.json @@ -0,0 +1,50 @@ +{{- $kafkaHost := ( .Values.config.kafka_host | replace "$release_name" .Release.Name ) -}} +{ + "PORT": {{ .Values.sidecar.service.internalPort }}, + "EVENT_LOGGER_GRPC_HOST": "{{ .Values.sidecar.config.event_log_grpc_host }}", + "EVENT_LOGGER_GRPC_PORT": {{ .Values.sidecar.config.event_log_grpc_port }}, + "INSTRUMENTATION": { + "METRICS": { + "DISABLED": false, + "labels": { + "eventId": "*" + }, + "config": { + "timeout": 5000, + "prefix": "moja_", + "defaultLabels": { + "serviceName": "{{ template "account-lookup-service-handler-timeout.name" . }}-event-sidecar" + } + } + } + }, + "KAFKA": { + "TOPIC_TEMPLATES": { + "GENERAL_TOPIC_TEMPLATE": { + "TEMPLATE": "topic-{{"{{"}}functionality{{"}}"}}", + "REGEX": "topic-(.*)" + } + }, + "PRODUCER": { + "EVENT": { + "config": { + "options": { + "messageCharset": "utf8" + }, + "rdkafkaConf": { + "metadata.broker.list": "{{ $kafkaHost }}:{{ .Values.config.kafka_port }}", + "client.id": "es-prod-event", + "event_cb": true, + "dr_cb": true, + "socket.keepalive.enable": true, + "queue.buffering.max.messages": 10000000 + }, + "topicConf": { + "request.required.acks": "all", + "partitioner": "{{ .Values.config.kafka_partitioner }}" + } + } + } + } + } +} diff --git a/account-lookup-service/chart-handler-timeout/configs/default.json b/account-lookup-service/chart-handler-timeout/configs/default.json new file mode 100644 index 000000000..593e011d9 --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/configs/default.json @@ -0,0 +1,82 @@ +{{- $centralServicesHost := ( .Values.config.central_services_host | replace "$release_name" .Release.Name ) -}} +{ + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": {{ .Values.config.hub_participant.name | quote }} + }, + "ADMIN_PORT": 4001, + "API_PORT": {{ .Values.service.internalPort }}, + "API_TYPE": {{ .Values.config.api_type | quote }}, + "PROTOCOL_VERSIONS": {{ .Values.config.protocol_versions | toPrettyJson }}, + "DATABASE": { + "DIALECT": "{{ .Values.config.db_driver }}", + "HOST": {{ .Values.config.db_host | quote }}, + "PORT": {{ .Values.config.db_port }}, + "USER": "{{ .Values.config.db_user }}", + "PASSWORD": "{{ .Values.config.db_password }}", + "DATABASE": "{{ .Values.config.db_database }}", + "POOL_MIN_SIZE": {{ .Values.config.db_connection_pool_min }}, + "POOL_MAX_SIZE": {{ .Values.config.db_connection_pool_max }}, + "ACQUIRE_TIMEOUT_MILLIS": {{ .Values.config.db_acquire_timeout_millis }}, + "CREATE_TIMEOUT_MILLIS": {{ .Values.config.db_create_timeout_millis }}, + "DESTROY_TIMEOUT_MILLIS": {{ .Values.config.db_destroy_timeout_millis }}, + "IDLE_TIMEOUT_MILLIS": {{ .Values.config.db_idle_timeout_millis }}, + "REAP_INTERVAL_MILLIS": {{ .Values.config.db_reap_interval_millis }}, + "CREATE_RETRY_INTERVAL_MILLIS": {{ .Values.config.db_create_retry_interval_millis }}, + "DEBUG": {{ .Values.config.db_debug }} + }, + "DISPLAY_ROUTES": {{ .Values.config.display_routes }}, + "RUN_MIGRATIONS": {{ .Values.config.run_migrations }}, + "PARTICIPANT_CACHE_CONFIG": { + "expiresIn": 10, + "generateTimeout": 30000, + "getDecoratedValue": true + }, + "CENTRAL_SHARED_ENDPOINT_CACHE_CONFIG": { + "expiresIn": {{ .Values.config.central_shared_end_point_cache.expiresIn }}, + "generateTimeout": {{ .Values.config.central_shared_end_point_cache.generateTimeout }}, + "getDecoratedValue": {{ .Values.config.central_shared_end_point_cache.getDecoratedValue }} + }, + "CENTRAL_SHARED_PARTICIPANT_CACHE_CONFIG": { + "expiresIn": {{ .Values.config.central_shared_participant_cache.expiresIn }}, + "generateTimeout": {{ .Values.config.central_shared_participant_cache.generateTimeout }}, + "getDecoratedValue": {{ .Values.config.central_shared_participant_cache.getDecoratedValue }} + }, + "GENERAL_CACHE_CONFIG": { + "CACHE_ENABLED": {{ .Values.config.general_cache.enabled }}, + "MAX_BYTE_SIZE": {{ .Values.config.general_cache.maxByteSize }}, + "EXPIRES_IN_MS": {{ .Values.config.general_cache.expiresIn }} + }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, + "HANDLERS": {{ .Values.config.handlers | toPrettyJson | nindent 2 }}, + "SWITCH_ENDPOINT": "http://{{ (default .Values.config.central_services_host $centralServicesHost) }}:{{ .Values.config.central_services_port }}", + "ERROR_HANDLING": { + "includeCauseExtension": {{ .Values.config.error_handling.include_cause_extension }}, + "truncateExtensions": {{ .Values.config.error_handling.truncate_extensions }} + }, + "INSTRUMENTATION": { + "METRICS": { + "DISABLED": {{ not .Values.metrics.enabled }}, + "labels": { + "fspId": "*" + }, + "config": { + "timeout": {{ .Values.metrics.config.timeout }}, + "prefix": {{ .Values.metrics.config.prefix | quote }}, + "defaultLabels": { + {{- range $key, $value := .Values.metrics.config.defaultLabels }} + {{ $key | quote }}: {{ $value | quote }} + {{- end }} + } + } + } + }, + "ENDPOINT_SECURITY": { + "JWS": { + "JWS_SIGN": {{ .Values.config.endpointSecurity.jwsSign }}, + "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key" + } + }, + "API_DOCUMENTATION_ENDPOINTS": true, + "FEATURE_ENABLE_EXTENDED_PARTY_ID_TYPE": {{ .Values.config.featureEnableExtendedPartyIdType }} +} diff --git a/account-lookup-service/chart-handler-timeout/configs/knexfile.js b/account-lookup-service/chart-handler-timeout/configs/knexfile.js new file mode 100644 index 000000000..fd91336d5 --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/configs/knexfile.js @@ -0,0 +1,18 @@ +'use strict' +const migrationsDirectory = '/opt/app/migrations' +const seedsDirectory = '/opt/app/seeds' +const Config = require('/opt/app/src/lib/config') +module.exports = { + client: 'mysql', + version: '5.7', + connection: Config.DATABASE.connection, + pool: Config.DATABASE.pool, + migrations: { + directory: migrationsDirectory, + tableName: 'migration', + }, + seeds: { + directory: seedsDirectory, + loadExtensions: ['.js'] + } +} diff --git a/account-lookup-service/chart-handler-timeout/templates/NOTES.txt b/account-lookup-service/chart-handler-timeout/templates/NOTES.txt new file mode 100644 index 000000000..7e61af753 --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "account-lookup-service-handler-timeout.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ include "account-lookup-service-handler-timeout.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "account-lookup-service-handler-timeout.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "account-lookup-service-handler-timeout.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/account-lookup-service/chart-handler-timeout/templates/_helpers.tpl b/account-lookup-service/chart-handler-timeout/templates/_helpers.tpl new file mode 100644 index 000000000..31ac466fc --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/templates/_helpers.tpl @@ -0,0 +1,41 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "account-lookup-service-handler-timeout.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "account-lookup-service-handler-timeout.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "account-lookup-service-handler-timeout.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "account-lookup-service-handler-timeout.apiVersion.Deployment" -}} + {{- if .Capabilities.APIVersions.Has "apps/v1/Deployment" -}} + {{- print "apps/v1" -}} + {{- else -}} + {{- print "apps/v1beta2" -}} + {{- end -}} +{{- end -}} + diff --git a/account-lookup-service/chart-handler-timeout/templates/config-override.yaml b/account-lookup-service/chart-handler-timeout/templates/config-override.yaml new file mode 100644 index 000000000..1e3ad1edf --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "account-lookup-service-handler-timeout.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "account-lookup-service-handler-timeout.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/account-lookup-service/chart-handler-timeout/templates/config.yaml b/account-lookup-service/chart-handler-timeout/templates/config.yaml new file mode 100644 index 000000000..0dab4e36b --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/templates/config.yaml @@ -0,0 +1,28 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "account-lookup-service-handler-timeout.fullname" . }}-config + labels: + app.kubernetes.io/name: {{ include "account-lookup-service-handler-timeout.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: + default.json: {{ (tpl (.Files.Get "configs/default.json") . ) | quote }} + knexfile.js: {{ (tpl (.Files.Get "configs/knexfile.js") . ) | quote }} +{{- if .Values.sidecar.enabled }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "account-lookup-service-handler-timeout.fullname" . }}-sidecar + labels: + app.kubernetes.io/name: {{ include "account-lookup-service-handler-timeout.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: + default.json: {{ (tpl (.Files.Get "configs/default-sidecar.json") . ) | quote }} +{{- end }} \ No newline at end of file diff --git a/account-lookup-service/chart-handler-timeout/templates/deployment.yaml b/account-lookup-service/chart-handler-timeout/templates/deployment.yaml new file mode 100644 index 000000000..4503c3364 --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/templates/deployment.yaml @@ -0,0 +1,236 @@ +apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }} +kind: Deployment +metadata: + name: {{ include "account-lookup-service-handler-timeout.fullname" . }} + labels: + app.kubernetes.io/name: {{ include "account-lookup-service-handler-timeout.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + annotations: + # Common annotations + {{- if $.Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" $.Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app.kubernetes.io/name: {{ include "account-lookup-service-handler-timeout.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "account-lookup-service-handler-timeout.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + # Custom Pod Labels + {{- if .Values.podLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.podLabels "context" $ ) | nindent 8 }} + {{- end }} + annotations: + checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} + checksum/secret-jws: {{ include (print $.Template.BasePath "/secret-jws.yaml") . | sha256sum }} + # Custom Pod annotations + {{- if .Values.podAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.podAnnotations "context" $ ) | nindent 8 }} + {{- end }} + {{- if .Values.metrics.enabled }} + prometheus.io/port: "{{ .Values.service.internalPort }}" + prometheus.io/scrape: "true" + {{- end }} + spec: + {{- include "common.topologySpread" . | nindent 6 }} + initContainers: + {{- if .Values.initContainers }} + {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.image.pullSecrets }} + {{- include "common.images.renderPullSecrets" (dict "images" (list .Values.image) "context" $) | nindent 6 }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.image.repository }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- if .Values.containerSecurityContext.enabled }} + securityContext: {{- omit .Values.containerSecurityContext "enabled" | toYaml | nindent 12 }} + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }} + {{- else if .Values.command }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.command "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }} + {{- else if .Values.args }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.args "context" $) | nindent 12 }} + {{- end }} + env: + {{- if .Values.env }} + {{- range $key, $val := .Values.env }} + - name: {{ $key }} + value: {{ $val | quote }} + {{- end }} + {{- end }} + - name: ALS_DATABASE__PASSWORD + {{- if .Values.config.db_secret }} + valueFrom: + secretKeyRef: + name: '{{ .Values.config.db_secret.name }}' + key: '{{ .Values.config.db_secret.key }}' + {{- else }} + value: {{ .Values.config.db_password }} + {{- end }} + - name: LOG_LEVEL + value: {{ .Values.config.log_level }} + - name: CSL_LOG_TRANSPORT + value: {{ .Values.config.log_transport}} + - name: EVENT_SDK_LOG_FILTER + value: {{ .Values.config.event_log_filter | quote }} + - name: EVENT_SDK_LOG_METADATA_ONLY + value: {{ .Values.config.event_log_metadata_only | quote }} + {{- if .Values.sidecar.enabled }} + - name: EVENT_SDK_SIDECAR_DISABLED + value: "false" + - name: EVENT_SDK_SERVER_HOST + value: {{ .Values.sidecar.config.event_log_grpc_host | quote }} + - name: EVENT_SDK_SERVER_PORT + value: {{ .Values.sidecar.config.event_log_grpc_port | quote }} + {{- end }} + - name: EVENT_SDK_VENDOR_PREFIX + value: {{ .Values.config.event_trace_vendor | quote }} + - name: EVENT_SDK_TRACESTATE_HEADER_ENABLED + value: {{ .Values.config.event_trace_state_enabled | quote }} + - name: EVENT_SDK_ASYNC_OVERRIDE_EVENTS + value: {{ .Values.config.event_async_override | quote }} + - name: EVENT_SDK_TRACEID_PER_VENDOR + value: {{ .Values.config.event_traceid_per_vendor | quote }} + ports: + - name: http + containerPort: {{ .Values.service.internalPort }} + {{- if .Values.diagnosticMode.enabled }} + - name: debug + containerPort: {{ .Values.diagnosticMode.debug.internalPort }} + {{- end }} + {{- if .Values.readinessProbe.enabled }} + readinessProbe: + httpGet: + path: {{ .Values.readinessProbe.httpGet.path }} + port: {{ .Values.service.internalPort }} + initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.readinessProbe.periodSeconds }} + {{- end }} + {{- if .Values.livenessProbe.enabled }} + livenessProbe: + httpGet: + path: {{ .Values.livenessProbe.httpGet.path }} + port: {{ .Values.service.internalPort }} + initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.livenessProbe.periodSeconds }} + {{- end }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: {{ template "account-lookup-service-handler-timeout.fullname" . }}-config-volume + mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} + {{- if .Values.config.endpointSecurity.jwsSign }} + - name: jws-signing-key + mountPath: /opt/app/secrets + {{- end }} + {{- if .Values.sidecar.enabled }} + - name: {{ .Chart.Name }}-sidecar + image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}" + imagePullPolicy: {{ .Values.sidecar.image.pullPolicy }} + {{- if .Values.sidecar.image.imagePullSecrets }} + imagePullSecrets: + {{ toYaml .Values.sidecar.image.imagePullSecrets | indent 10 }} + {{- end }} + command: {{ .Values.sidecar.image.command }} + ports: + - containerPort: {{ .Values.sidecar.service.internalPort }} + {{- if .Values.sidecar.readinessProbe.enabled }} + readinessProbe: + httpGet: + path: {{ .Values.sidecar.readinessProbe.httpGet.path }} + port: {{ .Values.sidecar.service.internalPort }} + initialDelaySeconds: {{ .Values.sidecar.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.sidecar.readinessProbe.periodSeconds }} + {{- end }} + {{- if .Values.sidecar.livenessProbe.enabled }} + livenessProbe: + httpGet: + path: {{ .Values.sidecar.livenessProbe.httpGet.path }} + port: {{ .Values.sidecar.service.internalPort }} + initialDelaySeconds: {{ .Values.sidecar.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.sidecar.livenessProbe.periodSeconds }} + {{- end }} + volumeMounts: + - name: {{ template "account-lookup-service-handler-timeout.fullname" . }}-sidecar-volume + mountPath: /opt/app/config + env: + - name: LOG_LEVEL + value: {{ .Values.sidecar.config.log_level | quote }} + - name: LOG_FILTER + value: {{ .Values.sidecar.config.log_filter | quote }} + - name: EVENT_SDK_LOG_FILTER + value: {{ .Values.sidecar.config.event_log_filter | quote }} + - name: EVENT_SDK_LOG_METADATA_ONLY + value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "account-lookup-service-handler-timeout.fullname" . }}-config-override + {{- end }} + - name: {{ template "account-lookup-service-handler-timeout.fullname" . }}-config-volume + configMap: + name: {{ template "account-lookup-service-handler-timeout.fullname" . }}-config + items: + - key: default.json + path: default.json + - key: knexfile.js + path: knexfile.js + {{- if .Values.config.endpointSecurity.jwsSign }} + - name: jws-signing-key + secret: + {{- if .Values.config.endpointSecurity.jwsSigningKeySecret }} + secretName: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.name }} + items: + - key: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.key }} + path: jwsSigningKey.key + {{ else }} + secretName: {{ template "account-lookup-service-handler-timeout.fullname" . }}-jws-signing-key + {{- end }} + {{- end }} + {{- if .Values.sidecar.enabled }} + - name: {{ template "account-lookup-service-handler-timeout.fullname" . }}-sidecar-volume + configMap: + name: {{ template "account-lookup-service-handler-timeout.fullname" . }}-sidecar + items: + - key: default.json + path: default.json + {{- end }} diff --git a/account-lookup-service/chart-handler-timeout/templates/ingress.yaml b/account-lookup-service/chart-handler-timeout/templates/ingress.yaml new file mode 100644 index 000000000..de881ed18 --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled }} +apiVersion: {{ include "common.capabilities.ingress.apiVersion" . }} +kind: Ingress +metadata: + name: {{ template "common.names.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ template "common.names.chart" . }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if or .Values.ingress.annotations .Values.commonAnnotations .Values.ingress.certManager }} + annotations: + {{- if .Values.ingress.certManager }} + kubernetes.io/tls-acme: "true" + {{- end }} + {{- if .Values.ingress.annotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.ingress.annotations "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} + {{- end }} +spec: + ingressClassName: {{ .Values.ingress.className }} + rules: + {{- if .Values.ingress.hostname }} + - host: {{ .Values.ingress.hostname }} + http: + paths: + {{- if .Values.ingress.extraPaths }} + {{- toYaml .Values.ingress.extraPaths | nindent 10 }} + {{- end }} + - path: {{ .Values.ingress.path }} + {{- if eq "true" (include "common.ingress.supportsPathType" .) }} + pathType: {{ .Values.ingress.pathType }} + {{- end }} + backend: {{- include "common.ingress.backend" (dict "serviceName" (include "common.names.fullname" .) "servicePort" .Values.ingress.servicePort "context" $) | nindent 14 }} + {{- end }} + {{- range .Values.ingress.extraHosts }} + - host: {{ .name | quote }} + http: + paths: + - path: {{ default "/" .path }} + {{- if eq "true" (include "common.ingress.supportsPathType" $) }} + pathType: {{ default "ImplementationSpecific" .pathType }} + {{- end }} + backend: {{- include "common.ingress.backend" (dict "serviceName" (include "common.names.fullname" $) "servicePort" .Values.ingress.servicePort "context" $) | nindent 14 }} + {{- end }} + {{- if or (and .Values.ingress.tls (or .Values.ingress.certManager .Values.ingress.selfSigned)) .Values.ingress.extraTls }} + tls: + {{- if and .Values.ingress.tls (or .Values.ingress.certManager .Values.ingress.selfSigned) }} + - hosts: + - {{ .Values.ingress.hostname | quote }} + secretName: {{ printf "%s-tls" .Values.ingress.hostname }} + {{- end }} + {{- if .Values.ingress.extraTls }} + {{- include "common.tplvalues.render" (dict "value" .Values.ingress.extraTls "context" $) | nindent 4 }} + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/account-lookup-service/chart-handler-timeout/templates/secret-jws.yaml b/account-lookup-service/chart-handler-timeout/templates/secret-jws.yaml new file mode 100644 index 000000000..862efb790 --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/templates/secret-jws.yaml @@ -0,0 +1,18 @@ +{{- if (and .Values.config.endpointSecurity.jwsSign (not .Values.config.endpointSecurity.jwsSigningKeySecret)) }} +{{- if (not .Values.config.endpointSecurity.jwsSigningKey) }} + {{- fail "JWS signing enabled but neither jwsSigningKey nor jwsSigningKeySecret was provided. You will need to supply a JWS signing key in string form via .Values.endpointSecurity.jwsSigningKey or a secret via .Values.endpointSecurity.jwsSigningKeySecret." }} +{{- end }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "account-lookup-service-handler-timeout.fullname" . }}-jws-signing-key + labels: + app.kubernetes.io/name: {{ include "account-lookup-service-handler-timeout.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +type: Opaque +data: + jwsSigningKey.key: {{ .Values.config.endpointSecurity.jwsSigningKey | b64enc }} +{{- end }} diff --git a/account-lookup-service/chart-handler-timeout/templates/service.yaml b/account-lookup-service/chart-handler-timeout/templates/service.yaml new file mode 100644 index 000000000..2ec2d0392 --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/templates/service.yaml @@ -0,0 +1,56 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "account-lookup-service-handler-timeout.fullname" . }} + labels: + app.kubernetes.io/name: {{ include "account-lookup-service-handler-timeout.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + annotations: + {{- if .Values.service.annotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.service.annotations "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.service.type }} + {{- if and .Values.service.clusterIP (eq .Values.service.type "ClusterIP") }} + clusterIP: {{ .Values.service.clusterIP }} + {{- end }} + {{- if or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort") }} + externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy | quote }} + {{- end }} + {{- if and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerSourceRanges)) }} + loadBalancerSourceRanges: {{ .Values.service.loadBalancerSourceRanges }} + {{- end }} + {{- if and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerIP)) }} + loadBalancerIP: {{ .Values.service.loadBalancerIP }} + {{- end }} + {{- if .Values.service.sessionAffinity }} + sessionAffinity: {{ .Values.service.sessionAffinity }} + {{- end }} + {{- if .Values.service.sessionAffinityConfig }} + sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" .Values.service.sessionAffinityConfig "context" $) | nindent 4 }} + {{- end }} + ports: + - name: http + port: {{ .Values.service.port }} + targetPort: {{ .Values.service.internalPort }} + protocol: TCP + {{- if (and (or (eq .Values.service.type "NodePort") (eq .Values.service.type "LoadBalancer")) .Values.service.nodePort) }} + nodePort: {{ .Values.service.nodePort }} + {{- else if eq .Values.service.type "ClusterIP" }} + nodePort: null + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + - name: debug + port: {{ .Values.diagnosticMode.debug.port }} + targetPort: {{ .Values.diagnosticMode.debug.internalPort }} + protocol: TCP + {{- end }} + selector: + app.kubernetes.io/name: {{ include "account-lookup-service-handler-timeout.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} diff --git a/account-lookup-service/chart-handler-timeout/values.yaml b/account-lookup-service/chart-handler-timeout/values.yaml new file mode 100644 index 000000000..63138a2d4 --- /dev/null +++ b/account-lookup-service/chart-handler-timeout/values.yaml @@ -0,0 +1,426 @@ +# Default values for account-lookup-service. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +image: + registry: docker.io + repository: mojaloop/account-lookup-service + tag: v17.0.3 + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + +replicaCount: 1 +command: '["node", "src/handlers/index.js", "handlers", "--timeout"]' + +## Enable diagnostic mode in the deployment +## +diagnosticMode: + ## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden) + ## + enabled: false + ## @param diagnosticMode.command Command to override all containers in the deployment + ## + command: + - node + - src/handlers/index.js + - handlers + - "--timeout" + ## @param diagnosticMode.args Args to override all containers in the deployment + ## + args: + - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + ## @param diagnosticMode.debug config to override all debug information + ## + debug: + internalPort: 9229 + port: 9229 + +nameOverride: "" +fullnameOverride: "" + +## Pod scheduling preferences. +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +affinity: {} + +## Node labels for pod assignment +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector +nodeSelector: {} + +## Set toleration for scheduler +## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ +tolerations: [] + +## Configure Container Security Context +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod +## @param containerSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% containers' Security Context +## @param containerSecurityContext.runAsUser Set %%MAIN_CONTAINER_NAME%% containers' Security Context runAsUser +## +containerSecurityContext: + enabled: true + runAsUser: 1001 + +readinessProbe: + enabled: true + httpGet: + path: /health + initialDelaySeconds: 60 + periodSeconds: 15 + +livenessProbe: + enabled: true + httpGet: + path: /health + initialDelaySeconds: 60 + periodSeconds: 15 + +sidecar: + enabled: true + image: + repository: mojaloop/event-sidecar + tag: v14.0.0 + pullPolicy: IfNotPresent + command: '["npm", "run", "start"]' + service: + internalPort: 4001 + readinessProbe: + enabled: true + httpGet: + path: /health + initialDelaySeconds: 120 + periodSeconds: 15 + livenessProbe: + enabled: true + httpGet: + path: /health + initialDelaySeconds: 90 + periodSeconds: 15 + config: + event_log_grpc_host: localhost + event_log_grpc_port: 50051 + event_log_filter: 'audit:*, log:info, log:warn, log:error' + event_log_metadata_only: true + log_level: info + log_filter: 'error, warn, info' + +## metric configuration for prometheus instrumentation +metrics: + ## flag to enable/disable the metrics end-points + enabled: true + config: + timeout: 5000 + prefix: moja_ + defaultLabels: + serviceName: account-lookup-service-handler-timeout + +config: + ## fspiop or iso20022 + api_type: fspiop + hub_participant: + id: 1 + name: Hub + ## Central-Ledger config + central_services_host: '$release_name-centralledger-service' + central_services_port: 80 + + # Log config + log_level: info + log_transport: file + + error_handling: + include_cause_extension: false + truncate_extensions: true + + ## Kafka Configuration + # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. + kafka_host: kafka + kafka_port: 9092 + kafka_partitioner: 'murmur2_random' + + central_shared_end_point_cache: + expiresIn: 180000 + generateTimeout: 30000 + getDecoratedValue: true + central_shared_participant_cache: + expiresIn: 61000 + generateTimeout: 30000 + getDecoratedValue: true + general_cache: + enabled: false + maxByteSize: 10000000 + expiresIn: 61000 + + # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), + # and for generating requests/callbacks from the Switch itself (DEFAULT value) + protocol_versions: + { + "CONTENT": { + "DEFAULT": "2.0", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + }, + "ACCEPT": { + "DEFAULT": "2", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + } + } + ## DB Configuration + db_type: mysql + db_driver: mysql + db_host: mysqldb + db_port: 3306 + db_user: account_lookup + ## Secret-Management + ### Set this if you are using a clear password configured in the config section + db_password: '' + ### Configure this if you want to use a secret. Note, this will override the db_password, + ### Use the next line if you do wish to use the db_password value instead. + # db_secret: + ### Example config for an existing secret + # db_secret: + # name: mysqldb + # key: mysql-password + db_database: account_lookup + db_connection_pool_min: 10 + db_connection_pool_max: 30 + db_acquire_timeout_millis: 30000 + db_create_timeout_millis: 30000 + db_destroy_timeout_millis: 5000 + db_idle_timeout_millis: 30000 + db_reap_interval_millis: 1000 + db_create_retry_interval_millis: 200 + db_debug: false + + display_routes: true + run_migrations: false + + endpointSecurity: + jwsSign: false + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null +# To generate this key: +# Private: +# ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key +# Public: +# openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub +# Should look like: +# -----BEGIN RSA PRIVATE KEY----- +# MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R +# .. +# .. +# mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 +# -----END RSA PRIVATE KEY----- +# Thirdparty API Config + featureEnableExtendedPartyIdType: false + ## Tracing Configuration + event_trace_vendor: mojaloop + event_log_filter: 'audit:*, log:warn, log:error' + # If set to true, only the metadata object from the event will be printed. + event_log_metadata_only: false + # A comma-separated list of events that should return immediately instead of waiting for the event promises to resolve + # Any combination of: `log,audit,trace` + event_async_override: 'log,trace' + event_trace_state_enabled: true + event_traceid_per_vendor: false + + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + + ## Handlers configuration + handlers: + DISABLED: false + MONITORING_PORT: 4003 + TIMEOUT: + DISABLED: false + TIMEXP: "*/30 * * * * *" + TIMEZONE: "UTC" + BATCH_SIZE: 100 + +## To pass arbitrary environment variables to the deployment +#env: +# KEY: value + +## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) +## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ +## e.g: +## initContainers: +## - name: your-image-name +## image: your-image +## imagePullPolicy: Always +## command: ['sh', '-c', 'echo "hello world"'] +## +initContainers: [] +# initContainers: | +# - name: wait-for-mysql +# image: mysql:9.0.1 +# imagePullPolicy: IfNotPresent +# command: +# - sh +# - -c +# - | +# until result=$(mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -ss -N -e 'select is_locked from migration_lock;') && eval 'echo is_locked=$result' && if [ -z $result ]; then false; fi && if [ $result -ne 0 ]; then false; fi; +# do +# echo --------------------; +# echo Waiting for MySQL...; +# sleep 2; +# done; +# echo ====================; +# echo MySQL ok!; +# env: +# - name: DB_HOST +# value: '{{ .Values.config.db_host }}' +# - name: DB_PORT +# value: '{{ .Values.config.db_port }}' +# - name: DB_USER +# value: '{{ .Values.config.db_user }}' +# - name: DB_PASSWORD +# {{- if .Values.config.db_secret }} +# valueFrom: +# secretKeyRef: +# name: '{{ .Values.config.db_secret.name }}' +# key: '{{ .Values.config.db_secret.key }}' +# {{- else }} +# value: {{ .Values.config.db_password }} +# {{- end }} +# - name: DB_DATABASE +# value: '{{ .Values.config.db_database }}' + +## @param master.podLabels Extra labels for pod(s) +## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ +## +podLabels: {} + +## @param podAnnotations Additional custom annotations for pod(s) +## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ +## +podAnnotations: {} + +service: + internalPort: 4003 + ## @param service.type %%MAIN_CONTAINER_NAME%% service type + ## + type: ClusterIP + ## @param service.port %%MAIN_CONTAINER_NAME%% service HTTP port + ## + port: 80 + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP +## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer +## + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources +## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service +## e.g: +## loadBalancerSourceRanges: +## - 10.10.10.0/24 +## + loadBalancerSourceRanges: [] + ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param service.annotations Additional custom annotations for %%MAIN_CONTAINER_NAME%% service + ## + annotations: {} + ## @param master.service.sessionAffinity Session Affinity for Kubernetes service, can be "None" or "ClientIP" + ## If "ClientIP", consecutive client requests will be directed to the same Pod + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + ## + sessionAffinity: None + ## @param master.service.sessionAffinityConfig Additional settings for the sessionAffinity + ## sessionAffinityConfig: + ## clientIP: + ## timeoutSeconds: 300 + ## + sessionAffinityConfig: {} +ingress: + enabled: true + ## @param ingress.pathType Ingress path type + ## + pathType: ImplementationSpecific + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: null ## @param ingress.hostname Default host for the ingress record +## + hostname: account-lookup-service-handler-timeout.local + ## @param servicePort : port for the service + ## + servicePort: 80 + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + path: / + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter +## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` +## You can: +## - Use the `ingress.secrets` parameter to create this TLS secret +## - Relay on cert-manager to create it by setting `ingress.certManager=true` +## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` +## + tls: false + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## + certManager: false + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## + selfSigned: false + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + extraHosts: null + extraPaths: null + extraTls: null + secrets: null + className: "nginx" + ## + # - secretName: chart-example-tls + # hosts: + # - chart-example.local +resources: {} +# We usually recommend not to specify default resources and to leave this as a conscious +# choice for the user. This also increases chances charts run on environments with little +# resources, such as Minikube. If you do want to specify resources, uncomment the following +# lines, adjust them as necessary, and remove the curly braces after 'resources:'. +# limits: +# cpu: 100m +# memory: 128Mi +# requests: +# cpu: 100m +# memory: 128Mi diff --git a/account-lookup-service/chart-service/Chart.yaml b/account-lookup-service/chart-service/Chart.yaml index cf7edd64d..f30d0d1b7 100644 --- a/account-lookup-service/chart-service/Chart.yaml +++ b/account-lookup-service/chart-service/Chart.yaml @@ -1,18 +1,16 @@ apiVersion: v2 -version: 14.2.0 -appVersion: "15.0.0" +version: 14.6.0 +appVersion: v17.0.3 description: A Helm chart for Kubernetes name: account-lookup-service maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.1 tags: - moja-common diff --git a/account-lookup-service/chart-service/configs/default.json b/account-lookup-service/chart-service/configs/default.json index 9eaff5875..593e011d9 100644 --- a/account-lookup-service/chart-service/configs/default.json +++ b/account-lookup-service/chart-service/configs/default.json @@ -1,7 +1,12 @@ {{- $centralServicesHost := ( .Values.config.central_services_host | replace "$release_name" .Release.Name ) -}} { + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": {{ .Values.config.hub_participant.name | quote }} + }, "ADMIN_PORT": 4001, "API_PORT": {{ .Values.service.internalPort }}, + "API_TYPE": {{ .Values.config.api_type | quote }}, "PROTOCOL_VERSIONS": {{ .Values.config.protocol_versions | toPrettyJson }}, "DATABASE": { "DIALECT": "{{ .Values.config.db_driver }}", @@ -22,6 +27,11 @@ }, "DISPLAY_ROUTES": {{ .Values.config.display_routes }}, "RUN_MIGRATIONS": {{ .Values.config.run_migrations }}, + "PARTICIPANT_CACHE_CONFIG": { + "expiresIn": 10, + "generateTimeout": 30000, + "getDecoratedValue": true + }, "CENTRAL_SHARED_ENDPOINT_CACHE_CONFIG": { "expiresIn": {{ .Values.config.central_shared_end_point_cache.expiresIn }}, "generateTimeout": {{ .Values.config.central_shared_end_point_cache.generateTimeout }}, @@ -37,6 +47,8 @@ "MAX_BYTE_SIZE": {{ .Values.config.general_cache.maxByteSize }}, "EXPIRES_IN_MS": {{ .Values.config.general_cache.expiresIn }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, + "HANDLERS": {{ .Values.config.handlers | toPrettyJson | nindent 2 }}, "SWITCH_ENDPOINT": "http://{{ (default .Values.config.central_services_host $centralServicesHost) }}:{{ .Values.config.central_services_port }}", "ERROR_HANDLING": { "includeCauseExtension": {{ .Values.config.error_handling.include_cause_extension }}, @@ -62,7 +74,6 @@ "ENDPOINT_SECURITY": { "JWS": { "JWS_SIGN": {{ .Values.config.endpointSecurity.jwsSign }}, - "FSPIOP_SOURCE_TO_SIGN": {{ .Values.config.endpointSecurity.fspiopSourceSigningName | quote }}, "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key" } }, diff --git a/account-lookup-service/chart-service/templates/config-override.yaml b/account-lookup-service/chart-service/templates/config-override.yaml new file mode 100644 index 000000000..1f3c0c1dc --- /dev/null +++ b/account-lookup-service/chart-service/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "account-lookup-service-api.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "account-lookup-service-api.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/account-lookup-service/chart-service/templates/deployment.yaml b/account-lookup-service/chart-service/templates/deployment.yaml index a6f4453ad..dd88627a4 100644 --- a/account-lookup-service/chart-service/templates/deployment.yaml +++ b/account-lookup-service/chart-service/templates/deployment.yaml @@ -33,6 +33,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret-jws: {{ include (print $.Template.BasePath "/secret-jws.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} @@ -43,6 +46,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} initContainers: {{- if .Values.initContainers }} {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }} @@ -68,6 +72,12 @@ spec: args: {{- include "common.tplvalues.render" (dict "value" .Values.args "context" $) | nindent 12 }} {{- end }} env: + {{- if .Values.env }} + {{- range $key, $val := .Values.env }} + - name: {{ $key }} + value: {{ $val | quote }} + {{- end }} + {{- end }} - name: ALS_DATABASE__PASSWORD {{- if .Values.config.db_secret }} valueFrom: @@ -129,6 +139,11 @@ spec: volumeMounts: - name: {{ template "account-lookup-service-api.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.config.endpointSecurity.jwsSign }} - name: jws-signing-key mountPath: /opt/app/secrets @@ -186,6 +201,11 @@ spec: {{ toYaml . | indent 8 }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "account-lookup-service-api.fullname" . }}-config-override + {{- end }} - name: {{ template "account-lookup-service-api.fullname" . }}-config-volume configMap: name: {{ template "account-lookup-service-api.fullname" . }}-config @@ -197,7 +217,14 @@ spec: {{- if .Values.config.endpointSecurity.jwsSign }} - name: jws-signing-key secret: + {{- if .Values.config.endpointSecurity.jwsSigningKeySecret }} + secretName: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.name }} + items: + - key: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.key }} + path: jwsSigningKey.key + {{ else }} secretName: {{ template "account-lookup-service-api.fullname" . }}-jws-signing-key + {{- end }} {{- end }} {{- if .Values.sidecar.enabled }} - name: {{ template "account-lookup-service-api.fullname" . }}-sidecar-volume diff --git a/account-lookup-service/chart-service/templates/secret-jws.yaml b/account-lookup-service/chart-service/templates/secret-jws.yaml index 7fecb9211..01fdff5eb 100644 --- a/account-lookup-service/chart-service/templates/secret-jws.yaml +++ b/account-lookup-service/chart-service/templates/secret-jws.yaml @@ -1,6 +1,6 @@ -{{- if .Values.config.endpointSecurity.jwsSign }} +{{- if (and .Values.config.endpointSecurity.jwsSign (not .Values.config.endpointSecurity.jwsSigningKeySecret)) }} {{- if (not .Values.config.endpointSecurity.jwsSigningKey) }} - {{- fail "JWS signing enabled but no jwsSigningKey provided. You will need to supply a JWS signing key in string form .Values.endpointSecurity.jwsSigningKey." }} + {{- fail "JWS signing enabled but neither jwsSigningKey nor jwsSigningKeySecret was provided. You will need to supply a JWS signing key in string form via .Values.endpointSecurity.jwsSigningKey or a secret via .Values.endpointSecurity.jwsSigningKeySecret." }} {{- end }} apiVersion: v1 kind: Secret diff --git a/account-lookup-service/chart-service/values.yaml b/account-lookup-service/chart-service/values.yaml index 407aee76c..476adc1b9 100644 --- a/account-lookup-service/chart-service/values.yaml +++ b/account-lookup-service/chart-service/values.yaml @@ -5,7 +5,7 @@ image: registry: docker.io repository: mojaloop/account-lookup-service - tag: v15.0.0 + tag: v17.0.3 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -31,7 +31,7 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/index.js - server @@ -40,7 +40,6 @@ diagnosticMode: ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -125,6 +124,11 @@ metrics: serviceName: account-lookup-service config: + ## fspiop | iso20022 + api_type: fspiop + hub_participant: + id: 1 + name: Hub ## Central-Ledger config central_services_host: '$release_name-centralledger-service' central_services_port: 80 @@ -158,28 +162,31 @@ config: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } - ## DB Configuration - db_type: mysql + db_type: mysql db_driver: mysql db_host: mysqldb db_port: 3306 @@ -210,23 +217,25 @@ config: endpointSecurity: jwsSign: false - fspiopSourceSigningName: switch - jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- - # Thirdparty API Config + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null +# To generate this key: +# Private: +# ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key +# Public: +# openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub +# Should look like: +# -----BEGIN RSA PRIVATE KEY----- +# MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R +# .. +# .. +# mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 +# -----END RSA PRIVATE KEY----- +# Thirdparty API Config featureEnableExtendedPartyIdType: false - ## Tracing Configuration event_trace_vendor: mojaloop event_log_filter: 'audit:*, log:warn, log:error' @@ -238,6 +247,29 @@ config: event_trace_state_enabled: true event_traceid_per_vendor: false + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + + ## Handlers configuration + handlers: + DISABLED: true + MONITORING_PORT: 4003 + TIMEOUT: + DISABLED: true + TIMEXP: "*/30 * * * * *" + TIMEZONE: "UTC" + BATCH_SIZE: 100 + +## To pass arbitrary environment variables to the deployment +#env: +# KEY: value + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -250,7 +282,7 @@ config: # initContainers: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -260,9 +292,9 @@ initContainers: | do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -305,17 +337,15 @@ service: ## e.g.: ## clusterIP: None ## - clusterIP: - ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP - ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer - ## - loadBalancerIP: - ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources - ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service - ## e.g: - ## loadBalancerSourceRanges: - ## - 10.10.10.0/24 - ## + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP +## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer +## + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources +## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service +## e.g: +## loadBalancerSourceRanges: +## - 10.10.10.0/24 +## loadBalancerSourceRanges: [] ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip @@ -335,66 +365,62 @@ service: ## timeoutSeconds: 300 ## sessionAffinityConfig: {} - ingress: enabled: true - ## @param ingress.pathType Ingress path type - ## + ## @param ingress.pathType Ingress path type + ## pathType: ImplementationSpecific - ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) - ## - apiVersion: - ## @param ingress.hostname Default host for the ingress record - ## + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: null ## @param ingress.hostname Default host for the ingress record +## hostname: account-lookup-service.local - ## @param servicePort : port for the service - ## + ## @param servicePort : port for the service + ## servicePort: 80 - ## @param ingress.path Default path for the ingress record - ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers path: / - ## @param ingress.annotations Additional custom annotations for the ingress record - ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added - ## - annotations: - ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter - ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` - ## You can: - ## - Use the `ingress.secrets` parameter to create this TLS secret - ## - Relay on cert-manager to create it by setting `ingress.certManager=true` - ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` - ## + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter +## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` +## You can: +## - Use the `ingress.secrets` parameter to create this TLS secret +## - Relay on cert-manager to create it by setting `ingress.certManager=true` +## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` +## tls: false - ## @param ingress.certManager Add the corresponding annotations for cert-manager integration - ## + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## certManager: false - ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm - ## + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## selfSigned: false - ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record - ## e.g: - ## extraHosts: - ## - name: transfer-api-svc.local - ## path: / - ## - extraHosts: - extraPaths: - extraTls: - secrets: + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" ## # - secretName: chart-example-tls # hosts: # - chart-example.local - resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi +# We usually recommend not to specify default resources and to leave this as a conscious +# choice for the user. This also increases chances charts run on environments with little +# resources, such as Minikube. If you do want to specify resources, uncomment the following +# lines, adjust them as necessary, and remove the curly braces after 'resources:'. +# limits: +# cpu: 100m +# memory: 128Mi +# requests: +# cpu: 100m +# memory: 128Mi diff --git a/account-lookup-service/values.yaml b/account-lookup-service/values.yaml index 873cb4b95..70c25b038 100644 --- a/account-lookup-service/values.yaml +++ b/account-lookup-service/values.yaml @@ -7,7 +7,7 @@ account-lookup-service: image: registry: docker.io repository: mojaloop/account-lookup-service - tag: v15.0.0 + tag: v17.0.3 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -28,6 +28,16 @@ account-lookup-service: nameOverride: "" fullnameOverride: "" + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + # + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Pod scheduling preferences. ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity affinity: {} @@ -51,6 +61,9 @@ account-lookup-service: serviceName: account-lookup-service config: + hub_participant: + id: 1 + name: Hub ## Central-Ledger config central_services_host: '$release_name-centralledger-service' central_services_port: 80 @@ -104,22 +117,26 @@ account-lookup-service: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -129,24 +146,35 @@ account-lookup-service: endpointSecurity: jwsSign: false - fspiopSourceSigningName: switch - jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- - + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- # Thirdparty API Config featureEnableExtendedPartyIdType: false + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -159,7 +187,7 @@ account-lookup-service: # initContainers: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -169,9 +197,9 @@ account-lookup-service: do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -209,17 +237,17 @@ account-lookup-service: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: + http: null + https: null ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -253,7 +281,7 @@ account-lookup-service: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: account-lookup-service.local @@ -266,7 +294,7 @@ account-lookup-service: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -287,31 +315,28 @@ account-lookup-service: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" ## - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - + # - secretName: chart-example-tls + # hosts: + # - chart-example.local resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi account-lookup-service-admin: enabled: true - # Default values for account-lookup-service. # This is a YAML-formatted file. # Declare variables to be passed into your templates. @@ -319,7 +344,7 @@ account-lookup-service-admin: image: registry: docker.io repository: mojaloop/account-lookup-service - tag: v15.0.0 + tag: v17.0.3 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -340,6 +365,16 @@ account-lookup-service-admin: nameOverride: "" fullnameOverride: "" + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + # + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Pod scheduling preferences. ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity affinity: {} @@ -363,6 +398,9 @@ account-lookup-service-admin: serviceName: account-lookup-service-admin config: + hub_participant: + id: 1 + name: Hub ## Central-Ledger config central_services_host: '$release_name-centralledger-service' central_services_port: 80 @@ -383,9 +421,8 @@ account-lookup-service-admin: enabled: false maxByteSize: 10000000 expiresIn: 61000 - ## DB Configuration - db_type: mysql + db_type: mysql db_driver: mysql db_host: mysqldb db_port: 3306 @@ -413,22 +450,26 @@ account-lookup-service-admin: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -438,21 +479,23 @@ account-lookup-service-admin: endpointSecurity: jwsSign: false - fspiopSourceSigningName: switch - jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- - + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- # Log config log_level: info log_transport: file @@ -460,6 +503,15 @@ account-lookup-service-admin: # Thirdparty API Config featureEnableExtendedPartyIdType: false + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -472,19 +524,19 @@ account-lookup-service-admin: # initContainers: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh - -c - | - until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; + until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -544,17 +596,17 @@ account-lookup-service-admin: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -588,7 +640,7 @@ account-lookup-service-admin: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: account-lookup-service-admin.local @@ -601,7 +653,7 @@ account-lookup-service-admin: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -622,34 +674,372 @@ account-lookup-service-admin: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" ## - # - secretName: chart-example-tls - # hosts: - # - chart-example.local + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +account-lookup-service-handler-timeout: + enabled: false + # Default values for account-lookup-service. + # This is a YAML-formatted file. + # Declare variables to be passed into your templates. + + image: + registry: docker.io + repository: mojaloop/account-lookup-service + tag: v17.0.3 + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + + replicaCount: 1 + command: '["node", "src/handlers/index.js", "handlers", "--timeout"]' + + nameOverride: "" + fullnameOverride: "" + + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + # + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + + ## Pod scheduling preferences. + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + affinity: {} + + ## Node labels for pod assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector + nodeSelector: {} + + ## Set toleration for scheduler + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + tolerations: [] + + ## metric configuration for prometheus instrumentation + metrics: + ## flag to enable/disable the metrics end-points + enabled: true + config: + timeout: 5000 + prefix: moja_ + defaultLabels: + serviceName: account-lookup-service-handler-timeout + + config: + hub_participant: + id: 1 + name: Hub + ## Central-Ledger config + central_services_host: '$release_name-centralledger-service' + central_services_port: 80 + # Log config + log_level: info + log_transport: file + + error_handling: + include_cause_extension: false + truncate_extensions: true + + central_shared_end_point_cache: + expiresIn: 180000 + generateTimeout: 30000 + getDecoratedValue: true + central_shared_participant_cache: + expiresIn: 61000 + generateTimeout: 30000 + getDecoratedValue: true + general_cache: + enabled: false + maxByteSize: 10000000 + expiresIn: 61000 + + # ## DB Configuration + # db_type: mysql + # db_driver: mysql + # db_host: mysqldb + # db_port: 3306 + # db_user: account_lookup + # ## Secret-Management + # ### Set this if you are using a clear text password configured in the config section + # db_password: '' + # ### Configure this if you want to use a secret. Note, this will override the db_password, + # ### Use the next line if you do wish to use the db_password value instead. + # # db_secret: + # ### Example config for an existing secret + # # db_secret: + # # name: mysqldb + # # key: mysql-password + # db_database: account_lookup + # db_connection_pool_min: 10 + # db_connection_pool_max: 30 + # db_acquire_timeout_millis: 30000 + # db_create_timeout_millis: 30000 + # db_destroy_timeout_millis: 5000 + # db_idle_timeout_millis: 30000 + # db_reap_interval_millis: 1000 + # db_create_retry_interval_millis: 200 + # db_debug: false + + # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), + # and for generating requests/callbacks from the Switch itself (DEFAULT value) + protocol_versions: + { + "CONTENT": { + "DEFAULT": "2.0", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + }, + "ACCEPT": { + "DEFAULT": "2", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + } + } + + display_routes: true + # run_migrations: false + + endpointSecurity: + jwsSign: false + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- + # Thirdparty API Config + featureEnableExtendedPartyIdType: false + + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + + handlers: + DISABLED: true + MONITORING_PORT: 4003 + TIMEOUT: + DISABLED: true + TIMEXP: "*/30 * * * * *" + TIMEZONE: "UTC" + BATCH_SIZE: 100 + + + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) + ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ + ## e.g: + ## initContainers: + ## - name: your-image-name + ## image: your-image + ## imagePullPolicy: Always + ## command: ['sh', '-c', 'echo "hello world"'] + ## + initContainers: [] + # initContainers: | + # - name: wait-for-mysql + # image: mysql:9.0.1 + # imagePullPolicy: IfNotPresent + # command: + # - sh + # - -c + # - | + # until result=$(mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -ss -N -e 'select is_locked from migration_lock;') && eval 'echo is_locked=$result' && if [ -z $result ]; then false; fi && if [ $result -ne 0 ]; then false; fi; + # do + # echo --------------------; + # echo Waiting for MySQL...; + # sleep 2; + # done; + # echo ====================; + # echo MySQL ok!; + # env: + # - name: DB_HOST + # value: '{{ .Values.config.db_host }}' + # - name: DB_PORT + # value: '{{ .Values.config.db_port }}' + # - name: DB_USER + # value: '{{ .Values.config.db_user }}' + # - name: DB_PASSWORD + # {{- if .Values.config.db_secret }} + # valueFrom: + # secretKeyRef: + # name: '{{ .Values.config.db_secret.name }}' + # key: '{{ .Values.config.db_secret.key }}' + # {{- else }} + # value: {{ .Values.config.db_password }} + # {{- end }} + # - name: DB_DATABASE + # value: '{{ .Values.config.db_database }}' + + service: + internalPort: 4003 + ## @param service.type %%MAIN_CONTAINER_NAME%% service type + ## + type: ClusterIP + ## @param service.port %%MAIN_CONTAINER_NAME%% service HTTP port + ## + port: 80 + ## @param service.httpsPort %%MAIN_CONTAINER_NAME%% service HTTPS port + ## + httpsPort: 443 + ## Node ports to expose + ## @param service.nodePorts.http Node port for HTTP + ## @param service.nodePorts.https Node port for HTTPS + ## NOTE: choose port between <30000-32767> + ## + nodePorts: + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: null + ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer + ## + loadBalancerIP: null + ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources + ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param service.annotations Additional custom annotations for %%MAIN_CONTAINER_NAME%% service + ## + annotations: {} + ## @param master.service.sessionAffinity Session Affinity for Kubernetes service, can be "None" or "ClientIP" + ## If "ClientIP", consecutive client requests will be directed to the same Pod + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + ## + sessionAffinity: None + ## @param master.service.sessionAffinityConfig Additional settings for the sessionAffinity + ## sessionAffinityConfig: + ## clientIP: + ## timeoutSeconds: 300 + ## + sessionAffinityConfig: {} + ingress: + enabled: true + ## @param ingress.pathType Ingress path type + ## + pathType: ImplementationSpecific + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: null + ## @param ingress.hostname Default host for the ingress record + ## + hostname: account-lookup-service-handler-timeout.local + ## @param servicePort : port for the service + ## + servicePort: 80 + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + path: / + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: null + ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter + ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` + ## You can: + ## - Use the `ingress.secrets` parameter to create this TLS secret + ## - Relay on cert-manager to create it by setting `ingress.certManager=true` + ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` + ## + tls: false + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## + certManager: false + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## + selfSigned: false + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + extraHosts: null + extraPaths: null + extraTls: null + secrets: null + className: "nginx" + ## + # - secretName: chart-example-tls + # hosts: + # - chart-example.local resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi + als-oracle-pathfinder: enabled: false # Declare variables to be passed into your templates. image: repository: mojaloop/als-oracle-pathfinder - tag: v12.0.0 + tag: v12.1.2 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -675,14 +1065,13 @@ als-oracle-pathfinder: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - /opt/app/src/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -865,19 +1254,19 @@ als-oracle-pathfinder: # initContainers: [] initContainers: | - name: wait-for-mysql-central-ledger - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh - -c - | - until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; + until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -906,7 +1295,7 @@ als-oracle-pathfinder: - | echo Running MySQL init scripts; mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e "SET @service_name='${SERVICE_NAME}'; source /opt/app/init-central-ledger.sql;"; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -929,19 +1318,19 @@ als-oracle-pathfinder: - name: SERVICE_NAME value: '{{ include "als-oracle-pathfinder.name" . }}' - name: wait-for-mysql-account-lookup - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh - -c - | - until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; + until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -970,7 +1359,7 @@ als-oracle-pathfinder: - | echo Running MySQL init scripts; mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e "SET @service_name='${SERVICE_NAME}'; source /opt/app/init-account-lookup.sql;"; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -1020,7 +1409,7 @@ als-oracle-pathfinder: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: als-oracle-pathfinder.local @@ -1033,7 +1422,7 @@ als-oracle-pathfinder: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -1054,22 +1443,20 @@ als-oracle-pathfinder: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" ## resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m # memory: 128Mi - - diff --git a/als-msisdn-oracle/Chart.yaml b/als-msisdn-oracle/Chart.yaml new file mode 100644 index 000000000..5c6a2bc4b --- /dev/null +++ b/als-msisdn-oracle/Chart.yaml @@ -0,0 +1,20 @@ +apiVersion: v2 +description: als-msisdn-oracle chart for Mojaloop Services +name: als-msisdn-oracle +version: 1.0.0 +appVersion: v0.0.14 +home: http://mojaloop.io +icon: http://mojaloop.io/images/logo.png +sources: + - https://github.com/mojaloop/mojaloop + - https://github.com/mojaloop/helm + - https://github.com/mojaloop/als-msisdn-oracle-svc +maintainers: + - name: Vijay Kumar Guthi + email: vijaya.guthi@infitx.com +dependencies: + - name: common + repository: https://mojaloop.github.io/charts/repo + version: 3.1.1 + tags: + - moja-common diff --git a/als-msisdn-oracle/README.md b/als-msisdn-oracle/README.md new file mode 100644 index 000000000..86de7ba03 --- /dev/null +++ b/als-msisdn-oracle/README.md @@ -0,0 +1,12 @@ +# MSISDN-Oracle + +MSISDN-Oracle is an Oracle for the Account Lookup Service. + + +## Dependencies + +This chart has the following dependencies: +- mysql + +See `example_dependencies.yaml` for a simple example of installing and using the chart +with base dependencies. \ No newline at end of file diff --git a/als-msisdn-oracle/templates/_helpers.tpl b/als-msisdn-oracle/templates/_helpers.tpl new file mode 100644 index 000000000..29011dd7c --- /dev/null +++ b/als-msisdn-oracle/templates/_helpers.tpl @@ -0,0 +1,48 @@ +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "als-msisdn-oracle.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{- define "als-msisdn-oracle.name" -}} +{{- default .Chart.Name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Common labels +*/}} +{{- define "als-msisdn-oracle.labels" -}} +helm.sh/chart: {{ include "als-msisdn-oracle.chart" . }} +app.kubernetes.io/name: {{ include "als-msisdn-oracle.name" . }} +{{ include "als-msisdn-oracle.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "als-msisdn-oracle.selectorLabels" -}} +app.kubernetes.io/name: {{ include "als-msisdn-oracle.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + + +{{- define "apiVersion.Deployment" -}} + {{- if .Capabilities.APIVersions.Has "apps/v1/Deployment" -}} + {{- print "apps/v1" -}} + {{- else -}} + {{- print "apps/v1beta2" -}} + {{- end -}} +{{- end -}} + +{{- define "apiVersion.Ingress" -}} + {{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1/Ingress" -}} + {{- print "networking.k8s.io/v1" -}} + {{- else -}} + {{- print "networking.k8s.io/v1" -}} + {{- end -}} +{{- end -}} diff --git a/als-msisdn-oracle/templates/configmap.yaml b/als-msisdn-oracle/templates/configmap.yaml new file mode 100644 index 000000000..d22bc668a --- /dev/null +++ b/als-msisdn-oracle/templates/configmap.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "common.names.fullname" . }}-config + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} +data: + {{- range $k, $v := index .Values.config_files }} + {{ $k }}: | + {{- include "common.tplvalues.render" (dict "value" $v "context" $) | nindent 6 }} + {{- end }} diff --git a/als-msisdn-oracle/templates/deployment.yaml b/als-msisdn-oracle/templates/deployment.yaml new file mode 100644 index 000000000..46a499fb7 --- /dev/null +++ b/als-msisdn-oracle/templates/deployment.yaml @@ -0,0 +1,132 @@ +{{- if .Values.enabled -}} +apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }} +kind: Deployment +metadata: + name: {{ template "common.names.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" $.Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + annotations: + # Common annotations + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" $.Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.replicaCount }} + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + selector: + matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }} + app.kubernetes.io/component: {{ .Chart.Name }} + template: + metadata: + labels: + {{- include "common.labels.standard" . | nindent 8 }} + app.kubernetes.io/component: {{ .Chart.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + # Custom Pod Labels + {{- if .Values.podLabels }} + {{- include "common.tplvalues.render" (dict "value" .Values.podLabels "context" $) | nindent 8 }} + {{- end }} + annotations: + # Custom Pod annotations + {{- if .Values.podAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.podAnnotations "context" $ ) | nindent 8 }} + {{- end }} + # Common annotations + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 8 }} + {{- end }} + spec: + {{- include "common.topologySpread" . | nindent 6 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + initContainers: + {{- if .Values.initContainers }} + {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.image.pullSecrets }} + {{- include "common.images.renderPullSecrets" (dict "images" (list .Values.image) "context" $) | nindent 6 }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.image.repository }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- if .Values.containerSecurityContext.enabled }} + securityContext: {{- omit .Values.containerSecurityContext "enabled" | toYaml | nindent 12 }} + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }} + {{- else if .Values.command }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.command "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }} + {{- else if .Values.args }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.args "context" $) | nindent 12 }} + {{- end }} + ports: + - name: http + containerPort: {{ .Values.service.internalPort }} + {{- if .Values.diagnosticMode.enabled }} + - name: debug + containerPort: {{ .Values.diagnosticMode.debug.internalPort }} + {{- end }} + {{- if .Values.readinessProbe.enabled }} + readinessProbe: + httpGet: + path: {{ .Values.readinessProbe.httpGet.path }} + port: {{ .Values.service.internalPort }} + initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.readinessProbe.periodSeconds }} + {{- end }} + {{- if .Values.livenessProbe.enabled }} + livenessProbe: + httpGet: + path: {{ .Values.livenessProbe.httpGet.path }} + port: {{ .Values.service.internalPort }} + initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.livenessProbe.periodSeconds }} + {{- end }} + env: + - name: ALS_MSISDN_ORACLE_DATABASE_PASSWORD + {{- if .Values.config.db_secret }} + valueFrom: + secretKeyRef: + name: '{{ .Values.config.db_secret.name }}' + key: '{{ .Values.config.db_secret.key }}' + {{- else }} + value: {{ .Values.config.db_password }} + {{- end }} + {{- range $envItem := .Values.env }} + - name: {{ $envItem.name }} + value: {{ $envItem.value }} + {{- end }} + volumeMounts: + - name: als-msisdn-oracle-config-volume + mountPath: /opt/app/dist/config/default.json + subPath: default.json + volumes: + - name: als-msisdn-oracle-config-volume + configMap: + name: {{ template "common.names.fullname" . }}-config + items: + - key: default.json + path: default.json +{{- end -}} diff --git a/als-msisdn-oracle/templates/ingress.yaml b/als-msisdn-oracle/templates/ingress.yaml new file mode 100644 index 000000000..d3e896c38 --- /dev/null +++ b/als-msisdn-oracle/templates/ingress.yaml @@ -0,0 +1,63 @@ +{{- if .Values.ingress.enabled }} +apiVersion: {{ include "common.capabilities.ingress.apiVersion" . }} +kind: Ingress +metadata: + name: {{ template "common.names.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ template "common.names.chart" . }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if or .Values.ingress.annotations .Values.commonAnnotations .Values.ingress.certManager }} + annotations: + {{- if .Values.ingress.certManager }} + kubernetes.io/tls-acme: "true" + {{- end }} + {{- if .Values.ingress.annotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.ingress.annotations "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.22-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + rules: + {{- if .Values.ingress.hostname }} + - host: {{ .Values.ingress.hostname }} + http: + paths: + {{- if .Values.ingress.extraPaths }} + {{- toYaml .Values.ingress.extraPaths | nindent 10 }} + {{- end }} + - path: {{ .Values.ingress.path }} + {{- if eq "true" (include "common.ingress.supportsPathType" .) }} + pathType: {{ .Values.ingress.pathType }} + {{- end }} + backend: {{- include "common.ingress.backend" (dict "serviceName" (include "common.names.name" .) "servicePort" "http" "context" $) | nindent 14 }} + {{- end }} + {{- range .Values.ingress.extraHosts }} + - host: {{ .name | quote }} + http: + paths: + - path: {{ default "/" .path }} + {{- if eq "true" (include "common.ingress.supportsPathType" $) }} + pathType: {{ default "ImplementationSpecific" .pathType }} + {{- end }} + backend: {{- include "common.ingress.backend" (dict "serviceName" (include "common.names.name" $) "servicePort" "http" "context" $) | nindent 14 }} + {{- end }} + {{- if or (and .Values.ingress.tls (or .Values.ingress.certManager .Values.ingress.selfSigned)) .Values.ingress.extraTls }} + tls: + {{- if and .Values.ingress.tls (or .Values.ingress.certManager .Values.ingress.selfSigned) }} + - hosts: + - {{ .Values.ingress.hostname | quote }} + secretName: {{ printf "%s-tls" .Values.ingress.hostname }} + {{- end }} + {{- if .Values.ingress.extraTls }} + {{- include "common.tplvalues.render" (dict "value" .Values.ingress.extraTls "context" $) | nindent 4 }} + {{- end }} + {{- end }} +{{- end }} diff --git a/als-msisdn-oracle/templates/service.yaml b/als-msisdn-oracle/templates/service.yaml new file mode 100644 index 000000000..1bb59bbdc --- /dev/null +++ b/als-msisdn-oracle/templates/service.yaml @@ -0,0 +1,57 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "common.names.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.service.annotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.service.annotations "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.service.type }} + {{- if and .Values.service.clusterIP (eq .Values.service.type "ClusterIP") }} + clusterIP: {{ .Values.service.clusterIP }} + {{- end }} + {{- if or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort") }} + externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy | quote }} + {{- end }} + {{- if and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerSourceRanges)) }} + loadBalancerSourceRanges: {{ .Values.service.loadBalancerSourceRanges }} + {{- end }} + {{- if and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerIP)) }} + loadBalancerIP: {{ .Values.service.loadBalancerIP }} + {{- end }} + {{- if .Values.service.sessionAffinity }} + sessionAffinity: {{ .Values.service.sessionAffinity }} + {{- end }} + {{- if .Values.service.sessionAffinityConfig }} + sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" .Values.service.sessionAffinityConfig "context" $) | nindent 4 }} + {{- end }} + ports: + - name: http + port: {{ .Values.service.port }} + targetPort: {{ .Values.service.internalPort }} + protocol: TCP + {{- if (and (or (eq .Values.service.type "NodePort") (eq .Values.service.type "LoadBalancer")) .Values.service.nodePort) }} + nodePort: {{ .Values.service.nodePort }} + {{- else if eq .Values.service.type "ClusterIP" }} + nodePort: null + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + - name: debug + port: {{ .Values.diagnosticMode.debug.port }} + targetPort: {{ .Values.diagnosticMode.debug.internalPort }} + protocol: TCP + {{- end }} + selector: + {{- include "common.labels.matchLabels" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} diff --git a/als-msisdn-oracle/values.yaml b/als-msisdn-oracle/values.yaml new file mode 100644 index 000000000..7454bd6d3 --- /dev/null +++ b/als-msisdn-oracle/values.yaml @@ -0,0 +1,338 @@ +enabled: true + +image: + registry: docker.io + repository: mojaloop/als-msisdn-oracle-svc + tag: v0.0.14 + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + +replicaCount: 1 +command: '["node", "./dist/src/cli.js"]' + +## Enable diagnostic mode in the deployment +## +diagnosticMode: + ## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden) + ## + enabled: false + ## @param diagnosticMode.command Command to override all containers in the deployment + ## + command: + - node + - ./dist/src/cli.js + ## @param diagnosticMode.args Args to override all containers in the deployment + ## + args: + - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + + ## @param diagnosticMode.debug config to override all debug information + ## + debug: + internalPort: 9229 + port: 9229 + +readinessProbe: + enabled: true + httpGet: + path: /health + initialDelaySeconds: 60 + periodSeconds: 15 + +livenessProbe: + enabled: true + httpGet: + path: /health + initialDelaySeconds: 60 + periodSeconds: 15 + +## Pod scheduling preferences. +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +affinity: {} + +## Node labels for pod assignment +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector +nodeSelector: {} + +## Set toleration for scheduler +## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ +tolerations: [] + +## Configure Container Security Context +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod +## @param containerSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% containers' Security Context +## @param containerSecurityContext.runAsUser Set %%MAIN_CONTAINER_NAME%% containers' Security Context runAsUser +## +containerSecurityContext: + enabled: true + runAsUser: 1001 + +# Add exta environment variables here +env: [] + # e.g. + # - name: LOG_LEVEL + # value: debug + +## Svc configs +config: + ## DB Configuration + db_host: mysqldb + db_port: 3306 + db_user: oracle_msisdn + ## Secret-Management + ### Set this if you are using a clear password configured in the config section + db_password: '' + ### Configure this if you want to use a secret. Note, this will override the db_password, + ### Use the next line if you do wish to use the db_password value instead. + # db_secret: + ### Example config for an existing secret + # db_secret: + # name: mysqldb + # key: mysql-password + db_database: oracle_msisdn + +## Svc config files +config_files: + default.json: | + { + "PORT": {{ .Values.service.internalPort }}, + "HOST": "0.0.0.0", + "INSPECT": { + "DEPTH": 4, + "SHOW_HIDDEN": false, + "COLOR": true + }, + "DATABASE": { + "DIALECT": "mysql", + "HOST": "{{ .Values.config.db_host }}", + "PORT": {{ .Values.config.db_port }}, + "USER": "{{ .Values.config.db_user }}", + "PASSWORD": "{{ .Values.config.db_password }}", + "DATABASE": "{{ .Values.config.db_database }}", + "POOL_MIN_SIZE": 10, + "POOL_MAX_SIZE": 10, + "ACQUIRE_TIMEOUT_MILLIS": 30000, + "CREATE_TIMEOUT_MILLIS": 30000, + "DESTROY_TIMEOUT_MILLIS": 5000, + "IDLE_TIMEOUT_MILLIS": 30000, + "REAP_INTERVAL_MILLIS": 1000, + "CREATE_RETRY_INTERVAL_MILLIS": 200 + } + } + +## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) +## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ +## e.g: +## initContainers: +## - name: your-image-name +## image: your-image +## imagePullPolicy: Always +## command: ['sh', '-c', 'echo "hello world"'] +## env: +## - name: debug +## value: trace +## +# initContainers: [] +initContainers: | + - name: wait-for-mysql + image: mysql:9.0.1 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - | + until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; + do + echo --------------------; + echo Waiting for MySQL...; + sleep 2; + done; + echo ====================; + echo MySQL ok!; + env: + - name: DB_HOST + value: '{{ .Values.config.db_host }}' + - name: DB_PORT + value: '{{ .Values.config.db_port }}' + - name: DB_USER + value: '{{ .Values.config.db_user }}' + - name: DB_PASSWORD + {{- if .Values.config.db_secret }} + valueFrom: + secretKeyRef: + name: '{{ .Values.config.db_secret.name }}' + key: '{{ .Values.config.db_secret.key }}' + {{- else }} + value: {{ .Values.config.db_password }} + {{- end }} + - name: DB_DATABASE + value: '{{ .Values.config.db_database }}' + - name: run-migration + image: '{{ .Values.image.repository }}:{{ .Values.image.tag }}' + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - npm run migrate + env: + - name: ALS_MSISDN_ORACLE_DATABASE_PASSWORD + {{- if .Values.config.db_secret }} + valueFrom: + secretKeyRef: + name: '{{ .Values.config.db_secret.name }}' + key: '{{ .Values.config.db_secret.key }}' + {{- else }} + value: {{ .Values.config.db_password }} + {{- end }} + - name: NODE_ENV + value: production + volumeMounts: + - name: als-msisdn-oracle-config-volume + mountPath: /opt/app/dist/config/default.json + subPath: default.json + +## @param master.podLabels Extra labels for pod(s) +## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ +## +podLabels: {} + +## @param podAnnotations Additional custom annotations for pod(s) +## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ +## +podAnnotations: {} + +service: + internalPort: 3000 + ## @param service.type %%MAIN_CONTAINER_NAME%% service type + ## + type: ClusterIP + ## @param service.port %%MAIN_CONTAINER_NAME%% service HTTP port + ## + port: 80 + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: + ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer + ## + loadBalancerIP: + ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources + ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param service.annotations Additional custom annotations for %%MAIN_CONTAINER_NAME%% service + ## + annotations: {} + ## @param master.service.sessionAffinity Session Affinity for Kubernetes service, can be "None" or "ClientIP" + ## If "ClientIP", consecutive client requests will be directed to the same Pod + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + ## + sessionAffinity: None + ## @param master.service.sessionAffinityConfig Additional settings for the sessionAffinity + ## sessionAffinityConfig: + ## clientIP: + ## timeoutSeconds: 300 + ## + sessionAffinityConfig: {} + +ingress: + ## @param ingress.enabled Enable ingress record generation for %%MAIN_CONTAINER_NAME%% + ## + enabled: false + ## @param ingress.pathType Ingress path type + ## + pathType: ImplementationSpecific + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: + ## @param ingress.hostname Default host for the ingress record + ## + hostname: als-msisdn-oracle.local + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + ## + path: / + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: {} + ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter + ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` + ## You can: + ## - Use the `ingress.secrets` parameter to create this TLS secret + ## - Relay on cert-manager to create it by setting `ingress.certManager=true` + ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` + ## + tls: false + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## + certManager: false + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## + selfSigned: false + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + extraHosts: [] + ## @param ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host + ## e.g: + ## extraPaths: + ## - path: /* + ## backend: + ## serviceName: ssl-redirect + ## servicePort: use-annotation + ## + extraPaths: [] + ## @param ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record + ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls + ## e.g: + ## extraTls: + ## - hosts: + ## - transfer-api-svc.local + ## secretName: transfer-api-svc.local-tls + ## + extraTls: [] + ## @param ingress.secrets Custom TLS certificates as secrets + ## NOTE: 'key' and 'certificate' are expected in PEM format + ## NOTE: 'name' should line up with a 'secretName' set further up + ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates + ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days + ## It is also possible to create and manage the certificates outside of this helm chart + ## Please see README.md for more information + ## e.g: + ## secrets: + ## - name: transfer-api-svc.local-tls + ## key: |- + ## -----BEGIN RSA PRIVATE KEY----- + ## ... + ## -----END RSA PRIVATE KEY----- + ## certificate: |- + ## -----BEGIN CERTIFICATE----- + ## ... + ## -----END CERTIFICATE----- + ## + secrets: [] + className: "nginx" diff --git a/als-oracle-pathfinder/Chart.yaml b/als-oracle-pathfinder/Chart.yaml index 737464b30..87d5e3d8a 100644 --- a/als-oracle-pathfinder/Chart.yaml +++ b/als-oracle-pathfinder/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: A PathFinder oracle for ALS. Resolves MSISDN to participant ID. name: als-oracle-pathfinder -version: 13.0.1 -appVersion: "12.0.0" +version: 13.3.0 +appVersion: v12.1.0 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -10,13 +10,11 @@ sources: - https://github.com/mojaloop/helm - https://github.com/mojaloop/als-oracle-pathfinder maintainers: - - name: Tom Daly - email: tomd@crosslaketech.com - name: Miguel de Barros email: miguel.debarros@modusbox.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.1 tags: - moja-common diff --git a/als-oracle-pathfinder/templates/deployment.yaml b/als-oracle-pathfinder/templates/deployment.yaml index ff9b4bdf9..31a96f0a2 100644 --- a/als-oracle-pathfinder/templates/deployment.yaml +++ b/als-oracle-pathfinder/templates/deployment.yaml @@ -42,6 +42,7 @@ spec: {{- include "common.tplvalues.render" ( dict "value" .Values.podAnnotations "context" $ ) | nindent 8 }} {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} diff --git a/als-oracle-pathfinder/values.yaml b/als-oracle-pathfinder/values.yaml index c57132628..9d534b80f 100644 --- a/als-oracle-pathfinder/values.yaml +++ b/als-oracle-pathfinder/values.yaml @@ -7,7 +7,7 @@ global: {} # Declare variables to be passed into your templates. image: repository: mojaloop/als-oracle-pathfinder - tag: v12.0.0 + tag: v12.1.2 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -33,14 +33,13 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - /opt/app/src/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -267,7 +266,7 @@ config: # initContainers: [] initContainers: | - name: wait-for-mysql-central-ledger - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -331,7 +330,7 @@ initContainers: | - name: SERVICE_NAME value: '{{ include "als-oracle-pathfinder.name" . }}' - name: wait-for-mysql-account-lookup - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -424,62 +423,61 @@ service: provisioning: name: http-api externalPort: 3000 - ingress: enabled: true - ## @param ingress.pathType Ingress path type - ## + ## @param ingress.pathType Ingress path type + ## pathType: ImplementationSpecific - ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) - ## - apiVersion: - ## @param ingress.hostname Default host for the ingress record - ## + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: null +## @param ingress.hostname Default host for the ingress record +## hostname: als-oracle-pathfinder.local - ## @param servicePort : port for the service - ## + ## @param servicePort : port for the service + ## servicePort: 80 - ## @param ingress.path Default path for the ingress record - ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers path: / - ## @param ingress.annotations Additional custom annotations for the ingress record - ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added - ## - annotations: - ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter - ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` - ## You can: - ## - Use the `ingress.secrets` parameter to create this TLS secret - ## - Relay on cert-manager to create it by setting `ingress.certManager=true` - ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` - ## + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: null +## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter +## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` +## You can: +## - Use the `ingress.secrets` parameter to create this TLS secret +## - Relay on cert-manager to create it by setting `ingress.certManager=true` +## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` +## tls: false - ## @param ingress.certManager Add the corresponding annotations for cert-manager integration - ## + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## certManager: false - ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm - ## + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## selfSigned: false - ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record - ## e.g: - ## extraHosts: - ## - name: transfer-api-svc.local - ## path: / - ## - extraHosts: - extraPaths: - extraTls: - secrets: + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" ## resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi +# We usually recommend not to specify default resources and to leave this as a conscious +# choice for the user. This also increases chances charts run on environments with little +# resources, such as Minikube. If you do want to specify resources, uncomment the following +# lines, adjust them as necessary, and remove the curly braces after 'resources:'. +# limits: +# cpu: 100m +# memory: 128Mi +# requests: +# cpu: 100m +# memory: 128Mi diff --git a/bulk-api-adapter/Chart.yaml b/bulk-api-adapter/Chart.yaml index e68d7afed..7a4e27d08 100644 --- a/bulk-api-adapter/Chart.yaml +++ b/bulk-api-adapter/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: bulk-api-adapter Helm chart for Kubernetes name: bulk-api-adapter -version: 14.0.0 -appVersion: "17.0.0" +version: 14.6.0 +appVersion: v17.1.1 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,21 +12,19 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: bulk-api-adapter-service - version: ">= 14.0.0" + version: ">= 14.4.0" repository: "file://./chart-service" condition: bulk-api-adapter-service.enabled - name: bulk-api-adapter-handler-notification - version: ">= 14.0.0" + version: ">= 14.4.0" repository: "file://./chart-handler-notification" condition: bulk-api-adapter-handler-notification.enabled - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.1.2 tags: - moja-common diff --git a/bulk-api-adapter/chart-handler-notification/Chart.yaml b/bulk-api-adapter/chart-handler-notification/Chart.yaml index 964cc4f03..6e2c289ed 100644 --- a/bulk-api-adapter/chart-handler-notification/Chart.yaml +++ b/bulk-api-adapter/chart-handler-notification/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: bulk-api-adapter Handler for Notifications component Helm chart for Kubernetes name: bulk-api-adapter-handler-notification -version: 14.0.0 -appVersion: "17.0.0" +version: 14.4.0 +appVersion: v17.1.1 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.3 tags: - moja-common diff --git a/bulk-api-adapter/chart-handler-notification/configs/default.json b/bulk-api-adapter/chart-handler-notification/configs/default.json index 00f3fb111..c821134fd 100644 --- a/bulk-api-adapter/chart-handler-notification/configs/default.json +++ b/bulk-api-adapter/chart-handler-notification/configs/default.json @@ -2,6 +2,10 @@ {{- $centralServicesHost := ( .Values.config.central_services_host | replace "$release_name" .Release.Name ) -}} {{- $mongoHost := ( .Values.config.mongo_host | replace "$release_name" .Release.Name ) -}} { + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": {{ .Values.config.hub_participant.name | quote }} + }, "PORT": {{ .Values.service.internalPort }}, "HOSTNAME": "{{ .Values.ingress.hostname }}", "PROTOCOL_VERSIONS": {{ .Values.config.protocol_versions | toPrettyJson }}, @@ -24,7 +28,6 @@ }, "JWS": { "JWS_SIGN": {{ .Values.config.endpointSecurity.jwsSign }}, - "FSPIOP_SOURCE_TO_SIGN": {{ .Values.config.endpointSecurity.fspiopSourceSigningName | quote }}, "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key" } }, diff --git a/bulk-api-adapter/chart-handler-notification/templates/config-override.yaml b/bulk-api-adapter/chart-handler-notification/templates/config-override.yaml new file mode 100644 index 000000000..f9920d6a2 --- /dev/null +++ b/bulk-api-adapter/chart-handler-notification/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "bulk-api-adapter-handler-notification.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "bulk-api-adapter-handler-notification.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/bulk-api-adapter/chart-handler-notification/templates/deployment.yaml b/bulk-api-adapter/chart-handler-notification/templates/deployment.yaml index c54874a63..021ccb431 100644 --- a/bulk-api-adapter/chart-handler-notification/templates/deployment.yaml +++ b/bulk-api-adapter/chart-handler-notification/templates/deployment.yaml @@ -19,6 +19,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "bulk-api-adapter-handler-notification.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -31,8 +34,14 @@ spec: {{- if .Values.podLabels }} {{- include "common.tplvalues.render" ( dict "value" .Values.podLabels "context" $ ) | nindent 8 }} {{- end }} + {{- if .Values.usePdb }} + {{- include "common.pdb.matchLabels" . | nindent 8 }} + {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} {{- if .Values.config.endpointSecurity.jwsSign }} checksum/secret-jws: {{ include (print $.Template.BasePath "/secret-jws.yaml") . | sha256sum }} {{- end }} @@ -109,6 +118,11 @@ spec: volumeMounts: - name: {{ template "bulk-api-adapter-handler-notification.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.config.endpointSecurity.jwsSign }} - name: jws-signing-key mountPath: /opt/app/secrets @@ -126,6 +140,11 @@ spec: {{ toYaml . | indent 8 }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "bulk-api-adapter-handler-notification.fullname" . }}-config-override + {{- end }} - name: {{ template "bulk-api-adapter-handler-notification.fullname" . }}-config-volume configMap: name: {{ template "bulk-api-adapter-handler-notification.fullname" . }}-config @@ -135,5 +154,12 @@ spec: {{- if .Values.config.endpointSecurity.jwsSign }} - name: jws-signing-key secret: + {{- if .Values.config.endpointSecurity.jwsSigningKeySecret }} + secretName: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.name }} + items: + - key: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.key }} + path: jwsSigningKey.key + {{ else }} secretName: {{ template "bulk-api-adapter-handler-notification.fullname" . }}-jws-signing-key + {{- end }} {{- end }} diff --git a/bulk-api-adapter/chart-handler-notification/templates/secret-jws.yaml b/bulk-api-adapter/chart-handler-notification/templates/secret-jws.yaml index 71b4b6652..f3c3777df 100644 --- a/bulk-api-adapter/chart-handler-notification/templates/secret-jws.yaml +++ b/bulk-api-adapter/chart-handler-notification/templates/secret-jws.yaml @@ -1,6 +1,6 @@ -{{- if .Values.config.endpointSecurity.jwsSign }} +{{- if and .Values.config.endpointSecurity.jwsSign (not .Values.config.endpointSecurity.jwsSigningKeySecret) }} {{- if (not .Values.config.endpointSecurity.jwsSigningKey) }} - {{- fail "JWS signing enabled but no jwsSigningKey provided. You will need to supply a JWS signing key in string form .Values.endpointSecurity.jwsSigningKey." }} + {{- fail "JWS signing enabled but neither jwsSigningKey nor jwsSigningKeySecret was provided. You will need to supply a JWS signing key in string form via .Values.endpointSecurity.jwsSigningKey or a secret via .Values.endpointSecurity.jwsSigningKeySecret." }} {{- end }} apiVersion: v1 kind: Secret diff --git a/bulk-api-adapter/chart-handler-notification/values.yaml b/bulk-api-adapter/chart-handler-notification/values.yaml index f997c6739..14672f2b6 100644 --- a/bulk-api-adapter/chart-handler-notification/values.yaml +++ b/bulk-api-adapter/chart-handler-notification/values.yaml @@ -5,7 +5,7 @@ image: registry: docker.io repository: mojaloop/bulk-api-adapter - tag: v17.0.0 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -23,6 +23,11 @@ image: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--notification"]' +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -31,7 +36,7 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/handlers/index.js - handler @@ -40,7 +45,7 @@ diagnosticMode: ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -93,6 +98,9 @@ metrics: serviceName: bulk-handler-notification config: + hub_participant: + id: 1 + name: Hub # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: kafka kafka_port: 9092 @@ -145,8 +153,11 @@ config: # Parameters for JWS signing requests endpointSecurity: jwsSign: false - fspiopSourceSigningName: 'switch' - jwsSigningKey: + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null # To generate this key: # Private: # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key @@ -177,13 +188,13 @@ initContainers: | command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST @@ -201,9 +212,9 @@ initContainers: | do echo --------------------; echo Waiting for MongoDB...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MongoDB ok!; env: - name: DB_HOST @@ -335,3 +346,5 @@ ingress: # cpu: 100m # memory: 128Mi resources: {} + +usePdb: false diff --git a/bulk-api-adapter/chart-service/Chart.yaml b/bulk-api-adapter/chart-service/Chart.yaml index cd34e01fb..e14bb14b7 100644 --- a/bulk-api-adapter/chart-service/Chart.yaml +++ b/bulk-api-adapter/chart-service/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: bulk-api-adapter API component Helm chart for Kubernetes name: bulk-api-adapter-service -version: 14.0.0 -appVersion: "17.0.0" +version: 14.4.0 +appVersion: v17.1.1 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.2 tags: - moja-common diff --git a/bulk-api-adapter/chart-service/configs/default.json b/bulk-api-adapter/chart-service/configs/default.json index c3f34b80b..554134a6c 100644 --- a/bulk-api-adapter/chart-service/configs/default.json +++ b/bulk-api-adapter/chart-service/configs/default.json @@ -2,6 +2,10 @@ {{- $centralServicesHost := ( .Values.config.central_services_host | replace "$release_name" .Release.Name ) -}} {{- $mongoHost := ( .Values.config.mongo_host | replace "$release_name" .Release.Name ) -}} { + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": {{ .Values.config.hub_participant.name | quote }} + }, "PORT": {{ .Values.service.internalPort }}, "HOSTNAME": "{{ .Values.ingress.hostname }}", "PROTOCOL_VERSIONS": {{ .Values.config.protocol_versions | toPrettyJson }}, @@ -24,7 +28,6 @@ }, "JWS": { "JWS_SIGN": false, - "FSPIOP_SOURCE_TO_SIGN": "switch", "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key" } }, diff --git a/bulk-api-adapter/chart-service/templates/config-override.yaml b/bulk-api-adapter/chart-service/templates/config-override.yaml new file mode 100644 index 000000000..c69750bfc --- /dev/null +++ b/bulk-api-adapter/chart-service/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "bulk-api-adapter-service.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "bulk-api-adapter-service.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/bulk-api-adapter/chart-service/templates/deployment.yaml b/bulk-api-adapter/chart-service/templates/deployment.yaml index 733ca04db..04ec5b238 100644 --- a/bulk-api-adapter/chart-service/templates/deployment.yaml +++ b/bulk-api-adapter/chart-service/templates/deployment.yaml @@ -33,6 +33,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} {{- if .Values.metrics.enabled }} prometheus.io/port: "{{ .Values.service.internalPort }}" prometheus.io/scrape: "true" @@ -106,6 +109,11 @@ spec: volumeMounts: - name: {{ template "bulk-api-adapter-service.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- with .Values.nodeSelector }} nodeSelector: {{ toYaml . | indent 8 }} @@ -119,6 +127,11 @@ spec: {{ toYaml . | indent 8 }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "account-lookup-service-admin.fullname" . }}-config-override + {{- end }} - name: {{ template "bulk-api-adapter-service.fullname" . }}-config-volume configMap: name: {{ template "bulk-api-adapter-service.fullname" . }}-config diff --git a/bulk-api-adapter/chart-service/values.yaml b/bulk-api-adapter/chart-service/values.yaml index 0c1a5a0c7..3eaf70415 100644 --- a/bulk-api-adapter/chart-service/values.yaml +++ b/bulk-api-adapter/chart-service/values.yaml @@ -5,7 +5,7 @@ image: registry: docker.io repository: mojaloop/bulk-api-adapter - tag: v17.0.0 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -31,14 +31,14 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/api/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -91,6 +91,9 @@ metrics: serviceName: bulk-service config: + hub_participant: + id: 1 + name: Hub # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: kafka kafka_port: 9092 @@ -158,13 +161,13 @@ initContainers: | command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST @@ -182,9 +185,9 @@ initContainers: | do echo --------------------; echo Waiting for MongoDB...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MongoDB ok!; env: - name: DB_HOST diff --git a/bulk-api-adapter/values.yaml b/bulk-api-adapter/values.yaml index 492efa490..29d6a53ba 100644 --- a/bulk-api-adapter/values.yaml +++ b/bulk-api-adapter/values.yaml @@ -13,7 +13,7 @@ bulk-api-adapter-service: image: registry: docker.io repository: mojaloop/bulk-api-adapter - tag: v17.0.0 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -39,14 +39,14 @@ bulk-api-adapter-service: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/api/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -166,13 +166,13 @@ bulk-api-adapter-service: command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST @@ -190,9 +190,9 @@ bulk-api-adapter-service: do echo --------------------; echo Waiting for MongoDB...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MongoDB ok!; env: - name: DB_HOST @@ -335,7 +335,7 @@ bulk-api-adapter-handler-notification: image: registry: docker.io repository: mojaloop/bulk-api-adapter - tag: v17.0.0 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -361,7 +361,7 @@ bulk-api-adapter-handler-notification: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/handlers/index.js - handler @@ -370,7 +370,7 @@ bulk-api-adapter-handler-notification: ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -475,8 +475,11 @@ bulk-api-adapter-handler-notification: # Parameters for JWS signing requests endpointSecurity: jwsSign: false - fspiopSourceSigningName: 'switch' - jwsSigningKey: + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null # To generate this key: # Private: # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key @@ -507,13 +510,13 @@ bulk-api-adapter-handler-notification: command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST @@ -531,9 +534,9 @@ bulk-api-adapter-handler-notification: do echo --------------------; echo Waiting for MongoDB...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MongoDB ok!; env: - name: DB_HOST diff --git a/bulk-centralledger/Chart.yaml b/bulk-centralledger/Chart.yaml index 31fdb6de9..aa29940a7 100644 --- a/bulk-centralledger/Chart.yaml +++ b/bulk-centralledger/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Bulk Services Helm chart for Kubernetes name: bulk-centralledger -version: 14.1.0 -appVersion: "17.3.2" +version: 14.8.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,29 +12,27 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: cl-handler-bulk-transfer-prepare - version: ">= 14.1.0" + version: ">= 14.5.0" repository: "file://./chart-handler-bulk-transfer-prepare" condition: cl-handler-bulk-transfer-prepare.enabled - name: cl-handler-bulk-transfer-fulfil - version: ">= 14.1.0" + version: ">= 14.5.0" repository: "file://./chart-handler-bulk-transfer-fulfil" condition: cl-handler-bulk-transfer-fulfil.enabled - name: cl-handler-bulk-transfer-processing - version: ">= 14.1.0" + version: ">= 14.5.0" repository: "file://./chart-handler-bulk-transfer-processing" condition: cl-handler-bulk-transfer-processing.enabled - name: cl-handler-bulk-transfer-get - version: ">= 14.1.0" + version: ">= 14.5.0" repository: "file://./chart-handler-bulk-transfer-get" condition: cl-handler-bulk-transfer-get.enabled - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.1.2 tags: - moja-common diff --git a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/Chart.yaml b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/Chart.yaml index 03f5e587e..e121a5146 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/Chart.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Bulk Transfer Fulfil Handler Helm chart for Kubernetes name: cl-handler-bulk-transfer-fulfil -version: 14.1.0 -appVersion: "17.3.2" +version: 14.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.2 tags: - moja-common diff --git a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/configs/default.json b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/configs/default.json index ceb1edd5d..95efedc6a 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/configs/default.json +++ b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/configs/default.json @@ -93,6 +93,7 @@ "CACHE": { "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "KAFKA": { "TOPIC_TEMPLATES": { "PARTICIPANT_TOPIC_TEMPLATE": { diff --git a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/templates/config-override.yaml b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/templates/config-override.yaml new file mode 100644 index 000000000..8d5b73506 --- /dev/null +++ b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-handler-bulk-transfer-fulfil.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-handler-bulk-transfer-fulfil.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/templates/deployment.yaml b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/templates/deployment.yaml index 9f7ef2054..f7445288e 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/templates/deployment.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/templates/deployment.yaml @@ -19,6 +19,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "centralledger-handler-bulk-transfer-fulfil.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -33,6 +36,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} {{- if .Values.metrics.enabled }} prometheus.io/port: "{{ .Values.service.internalPort }}" @@ -128,7 +134,17 @@ spec: volumeMounts: - name: {{ template "centralledger-handler-bulk-transfer-fulfil.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-handler-bulk-transfer-fulfil.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-handler-bulk-transfer-fulfil.fullname" . }}-config-volume configMap: name: {{ template "centralledger-handler-bulk-transfer-fulfil.fullname" . }}-config diff --git a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/values.yaml b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/values.yaml index d2959df51..554ce0445 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/values.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -27,6 +27,11 @@ image: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--bulkfulfil"]' +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -201,7 +206,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh diff --git a/bulk-centralledger/chart-handler-bulk-transfer-get/Chart.yaml b/bulk-centralledger/chart-handler-bulk-transfer-get/Chart.yaml index fab2f1aba..386297a33 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-get/Chart.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-get/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Bulk Transfer Get Handler Helm chart for Kubernetes name: cl-handler-bulk-transfer-get -version: 14.1.0 -appVersion: "17.3.2" +version: 14.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.2 tags: - moja-common diff --git a/bulk-centralledger/chart-handler-bulk-transfer-get/configs/default.json b/bulk-centralledger/chart-handler-bulk-transfer-get/configs/default.json index 503ef4882..ac363c17e 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-get/configs/default.json +++ b/bulk-centralledger/chart-handler-bulk-transfer-get/configs/default.json @@ -90,6 +90,7 @@ "CACHE": { "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "KAFKA": { "TOPIC_TEMPLATES": { "PARTICIPANT_TOPIC_TEMPLATE": { diff --git a/bulk-centralledger/chart-handler-bulk-transfer-get/templates/config-override.yaml b/bulk-centralledger/chart-handler-bulk-transfer-get/templates/config-override.yaml new file mode 100644 index 000000000..d55efb279 --- /dev/null +++ b/bulk-centralledger/chart-handler-bulk-transfer-get/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-handler-bulk-transfer-get.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-handler-bulk-transfer-get.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/bulk-centralledger/chart-handler-bulk-transfer-get/templates/deployment.yaml b/bulk-centralledger/chart-handler-bulk-transfer-get/templates/deployment.yaml index d760b1004..4d305c85d 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-get/templates/deployment.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-get/templates/deployment.yaml @@ -17,8 +17,11 @@ spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: - app.kubernetes.io/name: {{ include "centralledger-handler-admin-transfer.name" . }} + app.kubernetes.io/name: {{ include "centralledger-handler-bulk-transfer-get.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -33,6 +36,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} {{- if .Values.metrics.enabled }} prometheus.io/port: "{{ .Values.service.internalPort }}" @@ -128,7 +134,17 @@ spec: volumeMounts: - name: {{ template "centralledger-handler-bulk-transfer-get.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-handler-bulk-transfer-get.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-handler-bulk-transfer-get.fullname" . }}-config-volume configMap: name: {{ template "centralledger-handler-bulk-transfer-get.fullname" . }}-config diff --git a/bulk-centralledger/chart-handler-bulk-transfer-get/templates/secret.yaml b/bulk-centralledger/chart-handler-bulk-transfer-get/templates/secret.yaml index dfb0d275c..5b320c0bf 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-get/templates/secret.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-get/templates/secret.yaml @@ -5,7 +5,7 @@ kind: Secret metadata: name: {{ template "centralledger-handler-bulk-transfer-get.fullname" . }} labels: - app.kubernetes.io/name: {{ include "centralledger-handler-admin-transfer.name" . }} + app.kubernetes.io/name: {{ include "centralledger-handler-bulk-transfer-get.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/version: {{ .Chart.Version }} app.kubernetes.io/managed-by: {{ .Release.Service }} diff --git a/bulk-centralledger/chart-handler-bulk-transfer-get/templates/service.yaml b/bulk-centralledger/chart-handler-bulk-transfer-get/templates/service.yaml index bb7461342..7380439c0 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-get/templates/service.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-get/templates/service.yaml @@ -3,7 +3,7 @@ kind: Service metadata: name: {{ template "centralledger-handler-bulk-transfer-get.fullname" . }} labels: - app.kubernetes.io/name: {{ include "centralledger-handler-admin-transfer.name" . }} + app.kubernetes.io/name: {{ include "centralledger-handler-bulk-transfer-get.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/version: {{ .Chart.Version }} app.kubernetes.io/managed-by: {{ .Release.Service }} diff --git a/bulk-centralledger/chart-handler-bulk-transfer-get/values.yaml b/bulk-centralledger/chart-handler-bulk-transfer-get/values.yaml index 103a28d4f..5b93c107c 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-get/values.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-get/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -27,6 +27,11 @@ image: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--bulkget"]' +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -201,7 +206,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh diff --git a/bulk-centralledger/chart-handler-bulk-transfer-prepare/Chart.yaml b/bulk-centralledger/chart-handler-bulk-transfer-prepare/Chart.yaml index 71a9a22d8..b397e4cf9 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-prepare/Chart.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-prepare/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Bulk Transfer Prepare Handler Helm chart for Kubernetes name: cl-handler-bulk-transfer-prepare -version: 14.1.0 -appVersion: "17.3.2" +version: 14.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.2 tags: - moja-common diff --git a/bulk-centralledger/chart-handler-bulk-transfer-prepare/configs/default.json b/bulk-centralledger/chart-handler-bulk-transfer-prepare/configs/default.json index ceb1edd5d..95efedc6a 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-prepare/configs/default.json +++ b/bulk-centralledger/chart-handler-bulk-transfer-prepare/configs/default.json @@ -93,6 +93,7 @@ "CACHE": { "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "KAFKA": { "TOPIC_TEMPLATES": { "PARTICIPANT_TOPIC_TEMPLATE": { diff --git a/bulk-centralledger/chart-handler-bulk-transfer-prepare/templates/config-override.yaml b/bulk-centralledger/chart-handler-bulk-transfer-prepare/templates/config-override.yaml new file mode 100644 index 000000000..28c8d3617 --- /dev/null +++ b/bulk-centralledger/chart-handler-bulk-transfer-prepare/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-handler-bulk-transfer-prepare.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-handler-bulk-transfer-prepare.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/bulk-centralledger/chart-handler-bulk-transfer-prepare/templates/deployment.yaml b/bulk-centralledger/chart-handler-bulk-transfer-prepare/templates/deployment.yaml index cd5fc2b90..fc26156c5 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-prepare/templates/deployment.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-prepare/templates/deployment.yaml @@ -19,6 +19,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "centralledger-handler-bulk-transfer-prepare.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -33,6 +36,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} {{- if .Values.metrics.enabled }} prometheus.io/port: "{{ .Values.service.internalPort }}" @@ -128,7 +134,17 @@ spec: volumeMounts: - name: {{ template "centralledger-handler-bulk-transfer-prepare.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-handler-bulk-transfer-prepare.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-handler-bulk-transfer-prepare.fullname" . }}-config-volume configMap: name: {{ template "centralledger-handler-bulk-transfer-prepare.fullname" . }}-config diff --git a/bulk-centralledger/chart-handler-bulk-transfer-prepare/values.yaml b/bulk-centralledger/chart-handler-bulk-transfer-prepare/values.yaml index a1cebed07..232aa964e 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-prepare/values.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-prepare/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -27,6 +27,11 @@ image: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--bulkprepare"]' +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -204,7 +209,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh diff --git a/bulk-centralledger/chart-handler-bulk-transfer-processing/Chart.yaml b/bulk-centralledger/chart-handler-bulk-transfer-processing/Chart.yaml index 1e5c0ac19..db42a09e5 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-processing/Chart.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-processing/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Bulk Transfer Processing Handler Helm chart for Kubernetes name: cl-handler-bulk-transfer-processing -version: 14.1.0 -appVersion: "17.3.2" +version: 14.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.0.0 tags: - moja-common diff --git a/bulk-centralledger/chart-handler-bulk-transfer-processing/configs/default.json b/bulk-centralledger/chart-handler-bulk-transfer-processing/configs/default.json index ceb1edd5d..95efedc6a 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-processing/configs/default.json +++ b/bulk-centralledger/chart-handler-bulk-transfer-processing/configs/default.json @@ -93,6 +93,7 @@ "CACHE": { "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "KAFKA": { "TOPIC_TEMPLATES": { "PARTICIPANT_TOPIC_TEMPLATE": { diff --git a/bulk-centralledger/chart-handler-bulk-transfer-processing/templates/config-override.yaml b/bulk-centralledger/chart-handler-bulk-transfer-processing/templates/config-override.yaml new file mode 100644 index 000000000..0da7b181e --- /dev/null +++ b/bulk-centralledger/chart-handler-bulk-transfer-processing/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-handler-bulk-transfer-processing.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-handler-bulk-transfer-processing.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/bulk-centralledger/chart-handler-bulk-transfer-processing/templates/deployment.yaml b/bulk-centralledger/chart-handler-bulk-transfer-processing/templates/deployment.yaml index e20eaae5f..f2618a31c 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-processing/templates/deployment.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-processing/templates/deployment.yaml @@ -33,6 +33,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} {{- if .Values.metrics.enabled }} prometheus.io/port: "{{ .Values.service.internalPort }}" @@ -128,7 +131,17 @@ spec: volumeMounts: - name: {{ template "centralledger-handler-bulk-transfer-processing.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-handler-bulk-transfer-processing.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-handler-bulk-transfer-processing.fullname" . }}-config-volume configMap: name: {{ template "centralledger-handler-bulk-transfer-processing.fullname" . }}-config diff --git a/bulk-centralledger/chart-handler-bulk-transfer-processing/values.yaml b/bulk-centralledger/chart-handler-bulk-transfer-processing/values.yaml index 72c5607d0..110c57e83 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-processing/values.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-processing/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -201,7 +201,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh diff --git a/bulk-centralledger/values.yaml b/bulk-centralledger/values.yaml index e7b378ec6..fce1e89e0 100644 --- a/bulk-centralledger/values.yaml +++ b/bulk-centralledger/values.yaml @@ -13,7 +13,7 @@ cl-handler-bulk-transfer-prepare: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -208,7 +208,7 @@ cl-handler-bulk-transfer-prepare: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -396,7 +396,7 @@ cl-handler-bulk-transfer-fulfil: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -579,7 +579,7 @@ cl-handler-bulk-transfer-fulfil: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -767,7 +767,7 @@ cl-handler-bulk-transfer-processing: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -959,7 +959,7 @@ cl-handler-bulk-transfer-processing: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -1147,7 +1147,7 @@ cl-handler-bulk-transfer-get: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -1339,7 +1339,7 @@ cl-handler-bulk-transfer-get: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh diff --git a/centralenduserregistry/Chart.yaml b/centralenduserregistry/Chart.yaml index 7d015232b..f2a703485 100644 --- a/centralenduserregistry/Chart.yaml +++ b/centralenduserregistry/Chart.yaml @@ -11,8 +11,6 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: postgresql version: 0.9.1 diff --git a/centraleventprocessor/Chart.yaml b/centraleventprocessor/Chart.yaml index 32573eb23..03de73f5b 100644 --- a/centraleventprocessor/Chart.yaml +++ b/centraleventprocessor/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central Event Processor for Mojaloop name: centraleventprocessor -version: 13.0.1 -appVersion: "12.0.0" +version: 13.3.0 +appVersion: v12.1.0 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,11 +12,9 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.0.0 tags: - moja-common diff --git a/centraleventprocessor/values.yaml b/centraleventprocessor/values.yaml index fd1b84680..b039129dd 100644 --- a/centraleventprocessor/values.yaml +++ b/centraleventprocessor/values.yaml @@ -10,7 +10,7 @@ global: image: registry: docker.io repository: mojaloop/central-event-processor - tag: v12.0.0 + tag: v12.1.0 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -36,14 +36,13 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -197,17 +196,17 @@ service: ## e.g.: ## clusterIP: None ## - clusterIP: - ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP - ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer - ## - loadBalancerIP: - ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources - ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service - ## e.g: - ## loadBalancerSourceRanges: - ## - 10.10.10.0/24 - ## + clusterIP: null +## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP +## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer +## + loadBalancerIP: null +## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources +## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service +## e.g: +## loadBalancerSourceRanges: +## - 10.10.10.0/24 +## loadBalancerSourceRanges: [] ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip @@ -235,9 +234,9 @@ ingress: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: - ## @param ingress.hostname Default host for the ingress record - ## + apiVersion: null +## @param ingress.hostname Default host for the ingress record +## hostname: central-event-processor.local ## @param servicePort : port for the service ## @@ -248,14 +247,14 @@ ingress: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: - ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter - ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` - ## You can: - ## - Use the `ingress.secrets` parameter to create this TLS secret - ## - Relay on cert-manager to create it by setting `ingress.certManager=true` - ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` - ## + annotations: null +## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter +## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` +## You can: +## - Use the `ingress.secrets` parameter to create this TLS secret +## - Relay on cert-manager to create it by setting `ingress.certManager=true` +## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` +## tls: false ## @param ingress.certManager Add the corresponding annotations for cert-manager integration ## @@ -269,12 +268,11 @@ ingress: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following diff --git a/centralkms/Chart.yaml b/centralkms/Chart.yaml index dc69ccc5a..68dfde071 100644 --- a/centralkms/Chart.yaml +++ b/centralkms/Chart.yaml @@ -11,8 +11,6 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: postgresql version: 0.9.1 diff --git a/centralledger/Chart.yaml b/centralledger/Chart.yaml index 1daa37861..77d83e6a9 100644 --- a/centralledger/Chart.yaml +++ b/centralledger/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Helm chart for Kubernetes name: centralledger -version: 14.3.0 -appVersion: "17.6.0" +version: 14.16.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,45 +12,43 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: centralledger-service - version: ">= 14.3.0" + version: ">= 14.5.0" repository: "file://./chart-service" condition: centralledger-service.enabled - name: centralledger-handler-transfer-prepare - version: ">= 14.3.0" + version: ">= 14.5.0" repository: "file://./chart-handler-transfer-prepare" condition: centralledger-handler-transfer-prepare.enabled - name: centralledger-handler-transfer-position - version: ">= 14.3.0" + version: ">= 14.5.0" repository: "file://./chart-handler-transfer-position" condition: centralledger-handler-transfer-position.enabled - name: centralledger-handler-transfer-position-batch - version: ">= 15.4.0" + version: ">= 15.5.0" repository: "file://./chart-handler-transfer-position-batch" condition: centralledger-handler-transfer-position-batch.enabled - name: centralledger-handler-transfer-get - version: ">= 14.3.0" + version: ">= 14.5.0" repository: "file://./chart-handler-transfer-get" condition: centralledger-handler-transfer-get.enabled - name: centralledger-handler-transfer-fulfil - version: ">= 14.3.0" + version: ">= 14.5.0" repository: "file://./chart-handler-transfer-fulfil" condition: centralledger-handler-transfer-fulfil.enabled - name: centralledger-handler-timeout - version: ">= 14.3.0" + version: ">= 14.5.0" repository: "file://./chart-handler-timeout" condition: centralledger-handler-timeout.enabled - name: centralledger-handler-admin-transfer - version: ">= 14.3.0" + version: ">= 14.5.0" repository: "file://./chart-handler-admin-transfer" condition: centralledger-handler-transfer-get.enabled - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: ">= 3.1.3" tags: - moja-common diff --git a/centralledger/chart-handler-admin-transfer/Chart.yaml b/centralledger/chart-handler-admin-transfer/Chart.yaml index 7688065c8..aeaa4db83 100644 --- a/centralledger/chart-handler-admin-transfer/Chart.yaml +++ b/centralledger/chart-handler-admin-transfer/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Transfer Prepare Handler Helm chart for Kubernetes name: centralledger-handler-admin-transfer -version: 14.3.0 -appVersion: "17.6.0" +version: 14.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.3 tags: - moja-common diff --git a/centralledger/chart-handler-admin-transfer/configs/default.json b/centralledger/chart-handler-admin-transfer/configs/default.json index e18db327e..5f48e23c7 100644 --- a/centralledger/chart-handler-admin-transfer/configs/default.json +++ b/centralledger/chart-handler-admin-transfer/configs/default.json @@ -90,11 +90,13 @@ ] }, "INTERNAL_TRANSFER_VALIDITY_SECONDS": "432000", + "PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED": {{ .Values.config.payee_participant_currency_validation_enabled }}, "CACHE": { "CACHE_ENABLED": {{ .Values.config.cache_enabled }}, "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }}, "EXPIRES_IN_MS": {{ .Values.config.cache_expires_in_ms }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "API_DOC_ENDPOINTS_ENABLED": true, "KAFKA": { "TOPIC_TEMPLATES": { diff --git a/centralledger/chart-handler-admin-transfer/templates/config-override.yaml b/centralledger/chart-handler-admin-transfer/templates/config-override.yaml new file mode 100644 index 000000000..fed2f1004 --- /dev/null +++ b/centralledger/chart-handler-admin-transfer/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-handler-admin-transfer.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-handler-admin-transfer.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/centralledger/chart-handler-admin-transfer/templates/deployment.yaml b/centralledger/chart-handler-admin-transfer/templates/deployment.yaml index 41967d644..957daf964 100644 --- a/centralledger/chart-handler-admin-transfer/templates/deployment.yaml +++ b/centralledger/chart-handler-admin-transfer/templates/deployment.yaml @@ -19,6 +19,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "centralledger-handler-admin-transfer.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -31,8 +34,14 @@ spec: {{- if .Values.podLabels }} {{- include "common.tplvalues.render" ( dict "value" .Values.podLabels "context" $ ) | nindent 8 }} {{- end }} + {{- if .Values.usePdb }} + {{- include "common.pdb.matchLabels" . | nindent 8 }} + {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} @@ -43,6 +52,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -151,6 +161,11 @@ spec: volumeMounts: - name: {{ template "centralledger-handler-admin-transfer.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.sidecar.enabled }} - name: {{ .Chart.Name }}-sidecar image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}" @@ -192,6 +207,11 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-handler-admin-transfer.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-handler-admin-transfer.fullname" . }}-config-volume configMap: name: {{ template "centralledger-handler-admin-transfer.fullname" . }}-config @@ -207,4 +227,4 @@ spec: items: - key: default.json path: default.json - {{- end }} \ No newline at end of file + {{- end }} diff --git a/centralledger/chart-handler-admin-transfer/values.yaml b/centralledger/chart-handler-admin-transfer/values.yaml index a8934fdb1..d863bcf55 100644 --- a/centralledger/chart-handler-admin-transfer/values.yaml +++ b/centralledger/chart-handler-admin-transfer/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -27,6 +27,11 @@ image: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--admin"]' +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -37,13 +42,13 @@ diagnosticMode: ## command: - node - - src/handlers/index.js - - handler - - '--admin' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--admin' ## @param diagnosticMode.debug config to override all debug information ## @@ -215,6 +220,15 @@ config: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -246,7 +260,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -390,3 +404,5 @@ ingress: # cpu: 100m # memory: 128Mi resources: {} + +usePdb: false diff --git a/centralledger/chart-handler-timeout/Chart.yaml b/centralledger/chart-handler-timeout/Chart.yaml index 2a7dbbe59..4e20ae0e3 100644 --- a/centralledger/chart-handler-timeout/Chart.yaml +++ b/centralledger/chart-handler-timeout/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Timeout Handler Helm chart for Kubernetes name: centralledger-handler-timeout -version: 14.3.0 -appVersion: "17.6.0" +version: 14.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.1 tags: - moja-common diff --git a/centralledger/chart-handler-timeout/configs/default.json b/centralledger/chart-handler-timeout/configs/default.json index babd1752b..7d813dc5c 100644 --- a/centralledger/chart-handler-timeout/configs/default.json +++ b/centralledger/chart-handler-timeout/configs/default.json @@ -90,13 +90,23 @@ ] }, "INTERNAL_TRANSFER_VALIDITY_SECONDS": "432000", + "PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED": {{ .Values.config.payee_participant_currency_validation_enabled }}, "CACHE": { "CACHE_ENABLED": {{ .Values.config.cache_enabled }}, "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }}, "EXPIRES_IN_MS": {{ .Values.config.cache_expires_in_ms }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "API_DOC_ENDPOINTS_ENABLED": true, "KAFKA": { + {{ if $.Values.config.batch_processing_enabled }} + "EVENT_TYPE_ACTION_TOPIC_MAP" : { + "POSITION":{ + "TIMEOUT_RESERVED": "topic-transfer-position-batch", + "FX_TIMEOUT_RESERVED": "topic-transfer-position-batch" + } + }, + {{ end }} "TOPIC_TEMPLATES": { "PARTICIPANT_TOPIC_TEMPLATE": { "TEMPLATE": "topic-{{"{{"}}participantName{{"}}"}}-{{"{{"}}functionality{{"}}"}}-{{"{{"}}action{{"}}"}}", diff --git a/centralledger/chart-handler-timeout/templates/config-override.yaml b/centralledger/chart-handler-timeout/templates/config-override.yaml new file mode 100644 index 000000000..9427222eb --- /dev/null +++ b/centralledger/chart-handler-timeout/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-handler-timeout.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-handler-timeout.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/centralledger/chart-handler-timeout/templates/deployment.yaml b/centralledger/chart-handler-timeout/templates/deployment.yaml index a6f7bd514..91e51ca35 100644 --- a/centralledger/chart-handler-timeout/templates/deployment.yaml +++ b/centralledger/chart-handler-timeout/templates/deployment.yaml @@ -19,6 +19,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "centralledger-handler-timeout.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -33,6 +36,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} @@ -43,6 +49,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -151,6 +158,11 @@ spec: volumeMounts: - name: {{ template "centralledger-handler-timeout.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.sidecar.enabled }} - name: {{ .Chart.Name }}-sidecar image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}" @@ -192,6 +204,11 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-handler-timeout.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-handler-timeout.fullname" . }}-config-volume configMap: name: {{ template "centralledger-handler-timeout.fullname" . }}-config diff --git a/centralledger/chart-handler-timeout/values.yaml b/centralledger/chart-handler-timeout/values.yaml index 8e709f72b..feb52311f 100644 --- a/centralledger/chart-handler-timeout/values.yaml +++ b/centralledger/chart-handler-timeout/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -37,13 +37,13 @@ diagnosticMode: ## command: - node - - src/handlers/index.js - - handler - - '--timeout' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--timeout' ## @param diagnosticMode.debug config to override all debug information ## @@ -215,11 +215,23 @@ config: event_trace_state_enabled: true event_traceid_per_vendor: false - ## Cache configuration + ## Cache configuration cache_enabled: false cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + + ## Enable Batch Processing + batch_processing_enabled: false + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -251,7 +263,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh diff --git a/centralledger/chart-handler-transfer-fulfil/Chart.yaml b/centralledger/chart-handler-transfer-fulfil/Chart.yaml index fb60ab0f4..ee693645e 100644 --- a/centralledger/chart-handler-transfer-fulfil/Chart.yaml +++ b/centralledger/chart-handler-transfer-fulfil/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Transfer Fulfil Handler Helm chart for Kubernetes name: centralledger-handler-transfer-fulfil -version: 14.3.0 -appVersion: "17.6.0" +version: 14.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.3 tags: - moja-common diff --git a/centralledger/chart-handler-transfer-fulfil/configs/default.json b/centralledger/chart-handler-transfer-fulfil/configs/default.json index 06e3ef7d3..4c177ec38 100644 --- a/centralledger/chart-handler-transfer-fulfil/configs/default.json +++ b/centralledger/chart-handler-transfer-fulfil/configs/default.json @@ -90,11 +90,13 @@ ] }, "INTERNAL_TRANSFER_VALIDITY_SECONDS": "432000", + "PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED": {{ .Values.config.payee_participant_currency_validation_enabled }}, "CACHE": { "CACHE_ENABLED": {{ .Values.config.cache_enabled }}, "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }}, "EXPIRES_IN_MS": {{ .Values.config.cache_expires_in_ms }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "API_DOC_ENDPOINTS_ENABLED": true, "KAFKA": { {{ if $.Values.config.batch_processing_enabled }} @@ -102,7 +104,10 @@ "POSITION":{ "COMMIT": "topic-transfer-position-batch", "BULK_COMMIT": "topic-transfer-position", - "RESERVE": "topic-transfer-position-batch" + "RESERVE": "topic-transfer-position-batch", + "FX_RESERVE": "topic-transfer-position-batch", + "ABORT": "topic-transfer-position-batch", + "FX_ABORT": "topic-transfer-position-batch" } }, {{ end }} diff --git a/centralledger/chart-handler-transfer-fulfil/templates/config-override.yaml b/centralledger/chart-handler-transfer-fulfil/templates/config-override.yaml new file mode 100644 index 000000000..b92920a9e --- /dev/null +++ b/centralledger/chart-handler-transfer-fulfil/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-handler-transfer-fulfil.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-handler-transfer-fulfil.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/centralledger/chart-handler-transfer-fulfil/templates/deployment.yaml b/centralledger/chart-handler-transfer-fulfil/templates/deployment.yaml index 9dcc5f818..0b0639781 100644 --- a/centralledger/chart-handler-transfer-fulfil/templates/deployment.yaml +++ b/centralledger/chart-handler-transfer-fulfil/templates/deployment.yaml @@ -19,6 +19,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "centralledger-handler-transfer-fulfil.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -31,8 +34,14 @@ spec: {{- if .Values.podLabels }} {{- include "common.tplvalues.render" ( dict "value" .Values.podLabels "context" $ ) | nindent 8 }} {{- end }} + {{- if .Values.usePdb }} + {{- include "common.pdb.matchLabels" . | nindent 8 }} + {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} @@ -43,6 +52,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -151,6 +161,11 @@ spec: volumeMounts: - name: {{ template "centralledger-handler-transfer-fulfil.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.sidecar.enabled }} - name: {{ .Chart.Name }}-sidecar image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}" @@ -192,6 +207,11 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-handler-transfer-fulfil.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-handler-transfer-fulfil.fullname" . }}-config-volume configMap: name: {{ template "centralledger-handler-transfer-fulfil.fullname" . }}-config @@ -207,4 +227,4 @@ spec: items: - key: default.json path: default.json - {{- end }} \ No newline at end of file + {{- end }} diff --git a/centralledger/chart-handler-transfer-fulfil/values.yaml b/centralledger/chart-handler-transfer-fulfil/values.yaml index b35e0a15a..4ae330e9f 100644 --- a/centralledger/chart-handler-transfer-fulfil/values.yaml +++ b/centralledger/chart-handler-transfer-fulfil/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -27,6 +27,11 @@ image: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--fulfil"]' +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -37,13 +42,13 @@ diagnosticMode: ## command: - node - - src/handlers/index.js - - handler - - '--fulfil' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--fulfil' ## @param diagnosticMode.debug config to override all debug information ## @@ -215,6 +220,18 @@ config: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + + ## Enable Batch Processing + batch_processing_enabled: false + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -246,7 +263,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -390,3 +407,5 @@ ingress: # cpu: 100m # memory: 128Mi resources: {} + +usePdb: false diff --git a/centralledger/chart-handler-transfer-get/Chart.yaml b/centralledger/chart-handler-transfer-get/Chart.yaml index a0a99abba..566cb04bf 100644 --- a/centralledger/chart-handler-transfer-get/Chart.yaml +++ b/centralledger/chart-handler-transfer-get/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Get Transfer Handler Helm chart for Kubernetes name: centralledger-handler-transfer-get -version: 14.3.0 -appVersion: "17.6.0" +version: 14.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.3 tags: - moja-common diff --git a/centralledger/chart-handler-transfer-get/configs/default.json b/centralledger/chart-handler-transfer-get/configs/default.json index e18db327e..5f48e23c7 100644 --- a/centralledger/chart-handler-transfer-get/configs/default.json +++ b/centralledger/chart-handler-transfer-get/configs/default.json @@ -90,11 +90,13 @@ ] }, "INTERNAL_TRANSFER_VALIDITY_SECONDS": "432000", + "PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED": {{ .Values.config.payee_participant_currency_validation_enabled }}, "CACHE": { "CACHE_ENABLED": {{ .Values.config.cache_enabled }}, "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }}, "EXPIRES_IN_MS": {{ .Values.config.cache_expires_in_ms }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "API_DOC_ENDPOINTS_ENABLED": true, "KAFKA": { "TOPIC_TEMPLATES": { diff --git a/centralledger/chart-handler-transfer-get/templates/config-override.yaml b/centralledger/chart-handler-transfer-get/templates/config-override.yaml new file mode 100644 index 000000000..11c8c63cb --- /dev/null +++ b/centralledger/chart-handler-transfer-get/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-handler-transfer-get.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-handler-transfer-get.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/centralledger/chart-handler-transfer-get/templates/deployment.yaml b/centralledger/chart-handler-transfer-get/templates/deployment.yaml index 80d867fae..0e7bebc17 100644 --- a/centralledger/chart-handler-transfer-get/templates/deployment.yaml +++ b/centralledger/chart-handler-transfer-get/templates/deployment.yaml @@ -19,6 +19,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "centralledger-handler-transfer-get.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -31,8 +34,14 @@ spec: {{- if .Values.podLabels }} {{- include "common.tplvalues.render" ( dict "value" .Values.podLabels "context" $ ) | nindent 8 }} {{- end }} + {{- if .Values.usePdb }} + {{- include "common.pdb.matchLabels" . | nindent 8 }} + {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} @@ -43,6 +52,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -155,6 +165,11 @@ spec: volumeMounts: - name: {{ template "centralledger-handler-transfer-get.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.sidecar.enabled }} - name: {{ .Chart.Name }}-sidecar image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}" @@ -196,6 +211,11 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-handler-transfer-get.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-handler-transfer-get.fullname" . }}-config-volume configMap: name: {{ template "centralledger-handler-transfer-get.fullname" . }}-config @@ -211,4 +231,4 @@ spec: items: - key: default.json path: default.json - {{- end }} \ No newline at end of file + {{- end }} diff --git a/centralledger/chart-handler-transfer-get/values.yaml b/centralledger/chart-handler-transfer-get/values.yaml index 458733dbb..5bbccb0c1 100644 --- a/centralledger/chart-handler-transfer-get/values.yaml +++ b/centralledger/chart-handler-transfer-get/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -27,6 +27,11 @@ image: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--get"]' +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -37,13 +42,13 @@ diagnosticMode: ## command: - node - - src/handlers/index.js - - handler - - '--get' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--get' ## @param diagnosticMode.debug config to override all debug information ## @@ -215,6 +220,15 @@ config: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -246,7 +260,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -390,3 +404,5 @@ ingress: # cpu: 100m # memory: 128Mi resources: {} + +usePdb: false diff --git a/centralledger/chart-handler-transfer-position-batch/Chart.yaml b/centralledger/chart-handler-transfer-position-batch/Chart.yaml index ea4867707..274da48bf 100644 --- a/centralledger/chart-handler-transfer-position-batch/Chart.yaml +++ b/centralledger/chart-handler-transfer-position-batch/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: "Central-Ledger Transfer Position Batch Handler Helm chart for Kubernetes." name: centralledger-handler-transfer-position-batch -version: 15.4.0 -appVersion: "17.6.0" +version: 15.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -17,6 +17,6 @@ maintainers: dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.3 tags: - moja-common diff --git a/centralledger/chart-handler-transfer-position-batch/configs/default.json b/centralledger/chart-handler-transfer-position-batch/configs/default.json index f0f781590..dcd375a64 100644 --- a/centralledger/chart-handler-transfer-position-batch/configs/default.json +++ b/centralledger/chart-handler-transfer-position-batch/configs/default.json @@ -90,16 +90,21 @@ ] }, "INTERNAL_TRANSFER_VALIDITY_SECONDS": "432000", + "PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED": {{ .Values.config.payee_participant_currency_validation_enabled }}, "CACHE": { "CACHE_ENABLED": {{ .Values.config.cache_enabled }}, "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }}, "EXPIRES_IN_MS": {{ .Values.config.cache_expires_in_ms }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "API_DOC_ENDPOINTS_ENABLED": true, "KAFKA": { "EVENT_TYPE_ACTION_TOPIC_MAP" : { "POSITION":{ - "PREPARE": "topic-transfer-position-batch" + "PREPARE": "topic-transfer-position-batch", + "COMMIT": "topic-transfer-position-batch", + "RESERVE": "topic-transfer-position-batch", + "FX_RESERVE": "topic-transfer-position-batch" } }, "TOPIC_TEMPLATES": { diff --git a/centralledger/chart-handler-transfer-position-batch/templates/config-override.yaml b/centralledger/chart-handler-transfer-position-batch/templates/config-override.yaml new file mode 100644 index 000000000..002e32b6c --- /dev/null +++ b/centralledger/chart-handler-transfer-position-batch/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-handler-transfer-position-batch.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-handler-transfer-position-batch.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/centralledger/chart-handler-transfer-position-batch/templates/deployment.yaml b/centralledger/chart-handler-transfer-position-batch/templates/deployment.yaml index 026e52039..d3cd7dc11 100644 --- a/centralledger/chart-handler-transfer-position-batch/templates/deployment.yaml +++ b/centralledger/chart-handler-transfer-position-batch/templates/deployment.yaml @@ -19,6 +19,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "centralledger-handler-transfer-position-batch.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -31,8 +34,14 @@ spec: {{- if .Values.podLabels }} {{- include "common.tplvalues.render" ( dict "value" .Values.podLabels "context" $ ) | nindent 8 }} {{- end }} + {{- if .Values.usePdb }} + {{- include "common.pdb.matchLabels" . | nindent 8 }} + {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} @@ -43,6 +52,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -151,6 +161,11 @@ spec: volumeMounts: - name: {{ template "centralledger-handler-transfer-position-batch.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.sidecar.enabled }} - name: {{ .Chart.Name }}-sidecar image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}" @@ -192,6 +207,11 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-handler-transfer-position-batch.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-handler-transfer-position-batch.fullname" . }}-config-volume configMap: name: {{ template "centralledger-handler-transfer-position-batch.fullname" . }}-config @@ -207,4 +227,4 @@ spec: items: - key: default.json path: default.json - {{- end }} \ No newline at end of file + {{- end }} diff --git a/centralledger/chart-handler-transfer-position-batch/values.yaml b/centralledger/chart-handler-transfer-position-batch/values.yaml index 2a233d07a..dc5fdc9de 100644 --- a/centralledger/chart-handler-transfer-position-batch/values.yaml +++ b/centralledger/chart-handler-transfer-position-batch/values.yaml @@ -11,7 +11,7 @@ nameOverride: "handler-pos-batch" image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -29,6 +29,11 @@ image: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--positionbatch"]' +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -39,13 +44,13 @@ diagnosticMode: ## command: - node - - src/handlers/index.js - - handler - - '--positionbatch' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--positionbatch' ## @param diagnosticMode.debug config to override all debug information ## @@ -92,7 +97,7 @@ sidecar: enabled: true image: repository: mojaloop/event-sidecar - tag: v13.0.0 + tag: v14.0.0 pullPolicy: IfNotPresent command: '["npm", "run", "start"]' service: @@ -195,7 +200,6 @@ config: kafka_host: kafka kafka_port: 9092 kafka_partitioner: 'murmur2_random' - kafka_partition_assignment_strategy: 'cooperative-sticky' ## Node Configuration log_level: 'info' @@ -218,6 +222,15 @@ config: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## Batch configuration # The batch size to be requested by the Kafka consumer. batch_size: 100 @@ -255,7 +268,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -399,3 +412,5 @@ ingress: # cpu: 100m # memory: 128Mi resources: {} + +usePdb: false diff --git a/centralledger/chart-handler-transfer-position/Chart.yaml b/centralledger/chart-handler-transfer-position/Chart.yaml index f091f213d..e4b99293f 100644 --- a/centralledger/chart-handler-transfer-position/Chart.yaml +++ b/centralledger/chart-handler-transfer-position/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Transfer Position Handler Helm chart for Kubernetes name: centralledger-handler-transfer-position -version: 14.3.0 -appVersion: "17.6.0" +version: 14.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.3 tags: - moja-common diff --git a/centralledger/chart-handler-transfer-position/configs/default.json b/centralledger/chart-handler-transfer-position/configs/default.json index e18db327e..5f48e23c7 100644 --- a/centralledger/chart-handler-transfer-position/configs/default.json +++ b/centralledger/chart-handler-transfer-position/configs/default.json @@ -90,11 +90,13 @@ ] }, "INTERNAL_TRANSFER_VALIDITY_SECONDS": "432000", + "PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED": {{ .Values.config.payee_participant_currency_validation_enabled }}, "CACHE": { "CACHE_ENABLED": {{ .Values.config.cache_enabled }}, "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }}, "EXPIRES_IN_MS": {{ .Values.config.cache_expires_in_ms }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "API_DOC_ENDPOINTS_ENABLED": true, "KAFKA": { "TOPIC_TEMPLATES": { diff --git a/centralledger/chart-handler-transfer-position/templates/config-override.yaml b/centralledger/chart-handler-transfer-position/templates/config-override.yaml new file mode 100644 index 000000000..4874fba28 --- /dev/null +++ b/centralledger/chart-handler-transfer-position/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-handler-transfer-position.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-handler-transfer-position.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/centralledger/chart-handler-transfer-position/templates/deployment.yaml b/centralledger/chart-handler-transfer-position/templates/deployment.yaml index fbfaee375..7f7bde54c 100644 --- a/centralledger/chart-handler-transfer-position/templates/deployment.yaml +++ b/centralledger/chart-handler-transfer-position/templates/deployment.yaml @@ -19,6 +19,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "centralledger-handler-transfer-position.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -31,8 +34,14 @@ spec: {{- if .Values.podLabels }} {{- include "common.tplvalues.render" ( dict "value" .Values.podLabels "context" $ ) | nindent 8 }} {{- end }} + {{- if .Values.usePdb }} + {{- include "common.pdb.matchLabels" . | nindent 8 }} + {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} @@ -43,6 +52,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -151,6 +161,11 @@ spec: volumeMounts: - name: {{ template "centralledger-handler-transfer-position.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.sidecar.enabled }} - name: {{ .Chart.Name }}-sidecar image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}" @@ -192,6 +207,11 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-handler-transfer-position.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-handler-transfer-position.fullname" . }}-config-volume configMap: name: {{ template "centralledger-handler-transfer-position.fullname" . }}-config @@ -207,4 +227,4 @@ spec: items: - key: default.json path: default.json - {{- end }} \ No newline at end of file + {{- end }} diff --git a/centralledger/chart-handler-transfer-position/values.yaml b/centralledger/chart-handler-transfer-position/values.yaml index 1dcedc1cf..1996744d6 100644 --- a/centralledger/chart-handler-transfer-position/values.yaml +++ b/centralledger/chart-handler-transfer-position/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -27,6 +27,11 @@ image: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--position"]' +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -37,13 +42,13 @@ diagnosticMode: ## command: - node - - src/handlers/index.js - - handler - - '--position' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--position' ## @param diagnosticMode.debug config to override all debug information ## @@ -215,6 +220,15 @@ config: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -246,7 +260,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -390,3 +404,5 @@ ingress: # cpu: 100m # memory: 128Mi resources: {} + +usePdb: false diff --git a/centralledger/chart-handler-transfer-prepare/Chart.yaml b/centralledger/chart-handler-transfer-prepare/Chart.yaml index 447cec757..c64f00e00 100644 --- a/centralledger/chart-handler-transfer-prepare/Chart.yaml +++ b/centralledger/chart-handler-transfer-prepare/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Transfer Prepare Handler Helm chart for Kubernetes name: centralledger-handler-transfer-prepare -version: 14.3.0 -appVersion: "17.6.0" +version: 14.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.3 tags: - moja-common diff --git a/centralledger/chart-handler-transfer-prepare/configs/default.json b/centralledger/chart-handler-transfer-prepare/configs/default.json index 4f8e0e6f4..fb1b97b59 100644 --- a/centralledger/chart-handler-transfer-prepare/configs/default.json +++ b/centralledger/chart-handler-transfer-prepare/configs/default.json @@ -90,18 +90,21 @@ ] }, "INTERNAL_TRANSFER_VALIDITY_SECONDS": "432000", + "PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED": {{ .Values.config.payee_participant_currency_validation_enabled }}, "ENABLE_ON_US_TRANSFERS": {{ .Values.config.enable_on_us_transfers }}, "CACHE": { "CACHE_ENABLED": {{ .Values.config.cache_enabled }}, "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }}, "EXPIRES_IN_MS": {{ .Values.config.cache_expires_in_ms }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "API_DOC_ENDPOINTS_ENABLED": true, "KAFKA": { {{ if $.Values.config.batch_processing_enabled }} "EVENT_TYPE_ACTION_TOPIC_MAP" : { "POSITION":{ "PREPARE": "topic-transfer-position-batch", + "FX_PREPARE": "topic-transfer-position-batch", "BULK_PREPARE": "topic-transfer-position" } }, diff --git a/centralledger/chart-handler-transfer-prepare/templates/config-override.yaml b/centralledger/chart-handler-transfer-prepare/templates/config-override.yaml new file mode 100644 index 000000000..84cc3b296 --- /dev/null +++ b/centralledger/chart-handler-transfer-prepare/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-handler-transfer-prepare.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-handler-transfer-prepare.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/centralledger/chart-handler-transfer-prepare/templates/deployment.yaml b/centralledger/chart-handler-transfer-prepare/templates/deployment.yaml index 042ea8407..42a1506f2 100644 --- a/centralledger/chart-handler-transfer-prepare/templates/deployment.yaml +++ b/centralledger/chart-handler-transfer-prepare/templates/deployment.yaml @@ -14,6 +14,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "centralledger-handler-transfer-prepare.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -26,8 +29,14 @@ spec: {{- if .Values.podLabels }} {{- include "common.tplvalues.render" ( dict "value" .Values.podLabels "context" $ ) | nindent 8 }} {{- end }} + {{- if .Values.usePdb }} + {{- include "common.pdb.matchLabels" . | nindent 8 }} + {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} @@ -42,6 +51,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -150,6 +160,11 @@ spec: volumeMounts: - name: {{ template "centralledger-handler-transfer-prepare.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.sidecar.enabled }} - name: {{ .Chart.Name }}-sidecar image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}" @@ -191,6 +206,11 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-handler-transfer-prepare.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-handler-transfer-prepare.fullname" . }}-config-volume configMap: name: {{ template "centralledger-handler-transfer-prepare.fullname" . }}-config diff --git a/centralledger/chart-handler-transfer-prepare/values.yaml b/centralledger/chart-handler-transfer-prepare/values.yaml index f30f01a70..d72bd6de6 100644 --- a/centralledger/chart-handler-transfer-prepare/values.yaml +++ b/centralledger/chart-handler-transfer-prepare/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -27,6 +27,11 @@ image: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--prepare"]' +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -37,13 +42,13 @@ diagnosticMode: ## command: - node - - src/handlers/index.js - - handler - - '--prepare' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--prepare' ## @param diagnosticMode.debug config to override all debug information ## @@ -215,6 +220,15 @@ config: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## Enable On-Us transfers enable_on_us_transfers: false @@ -252,7 +266,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -396,3 +410,5 @@ ingress: # cpu: 100m # memory: 128Mi resources: {} + +usePdb: false diff --git a/centralledger/chart-service/Chart.yaml b/centralledger/chart-service/Chart.yaml index ca4723f2b..7444b1fa6 100644 --- a/centralledger/chart-service/Chart.yaml +++ b/centralledger/chart-service/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Ledger Service Helm chart for Kubernetes name: centralledger-service -version: 14.3.0 -appVersion: "17.6.0" +version: 14.5.0 +appVersion: v19.0.6 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.2 tags: - moja-common diff --git a/centralledger/chart-service/configs/default.json b/centralledger/chart-service/configs/default.json index 047bb817a..c22db66d2 100644 --- a/centralledger/chart-service/configs/default.json +++ b/centralledger/chart-service/configs/default.json @@ -90,11 +90,13 @@ ] }, "INTERNAL_TRANSFER_VALIDITY_SECONDS": "432000", + "PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED": {{ .Values.config.payee_participant_currency_validation_enabled }}, "CACHE": { "CACHE_ENABLED": {{ .Values.config.cache_enabled }}, "MAX_BYTE_SIZE": {{ .Values.config.cache_max_byte_size }}, "EXPIRES_IN_MS": {{ .Values.config.cache_expires_in_ms }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2 }}, "API_DOC_ENDPOINTS_ENABLED": true, "KAFKA": { "TOPIC_TEMPLATES": { diff --git a/centralledger/chart-service/templates/config-override.yaml b/centralledger/chart-service/templates/config-override.yaml new file mode 100644 index 000000000..00ed026ab --- /dev/null +++ b/centralledger/chart-service/templates/config-override.yaml @@ -0,0 +1,18 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralledger-service.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralledger-service.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + annotations: + helm.sh/hook: pre-install,pre-upgrade +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/centralledger/chart-service/templates/config.yaml b/centralledger/chart-service/templates/config.yaml index 6d59c7d45..388ccc96d 100644 --- a/centralledger/chart-service/templates/config.yaml +++ b/centralledger/chart-service/templates/config.yaml @@ -8,6 +8,8 @@ metadata: app.kubernetes.io/version: {{ .Chart.Version }} app.kubernetes.io/managed-by: {{ .Release.Service }} helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + annotations: + helm.sh/hook: pre-install,pre-upgrade data: default.json: {{ (tpl (.Files.Get "configs/default.json") . ) | quote }} knexfile.js: {{ (tpl (.Files.Get "configs/knexfile.js") . ) | quote }} diff --git a/centralledger/chart-service/templates/deployment.yaml b/centralledger/chart-service/templates/deployment.yaml index baccaf123..f4a13ff9a 100644 --- a/centralledger/chart-service/templates/deployment.yaml +++ b/centralledger/chart-service/templates/deployment.yaml @@ -28,6 +28,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} @@ -42,6 +45,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -150,6 +154,11 @@ spec: volumeMounts: - name: {{ template "centralledger-service.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.sidecar.enabled }} - name: {{ .Chart.Name }}-sidecar image: "{{ .Values.sidecar.image.repository }}:{{ .Values.sidecar.image.tag }}" @@ -191,6 +200,11 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-service.fullname" . }}-config-override + {{- end }} - name: {{ template "centralledger-service.fullname" . }}-config-volume configMap: name: {{ template "centralledger-service.fullname" . }}-config diff --git a/centralledger/chart-service/templates/migration-job.yaml b/centralledger/chart-service/templates/migration-job.yaml new file mode 100644 index 000000000..22eeaeef2 --- /dev/null +++ b/centralledger/chart-service/templates/migration-job.yaml @@ -0,0 +1,96 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "centralledger-service.fullname" . }}-migration + labels: + batch.kubernetes.io/job-name: {{ template "centralledger-service.fullname" . }}-migration + job-name: {{ template "centralledger-service.fullname" . }}-migration + annotations: +{{- with .Values.migration.annotations }} + {{ toYaml .| indent 4 | trim }} +{{- end }} +spec: + backoffLimit: {{ .Values.migration.backoffLimit }} + template: + metadata: + labels: + batch.kubernetes.io/job-name: {{ template "centralledger-service.fullname" . }}-migration + job-name: {{ template "centralledger-service.fullname" . }}-migration + spec: + restartPolicy: {{ .Values.migration.restartPolicy }} + initContainers: + - name: wait-for-mysql + image: mysql:9.0.1 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - | + until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; + do + echo --------------------; + echo Waiting for MySQL...; + sleep 2; + done; + echo ====================; + echo MySQL ok!; + env: + - name: DB_HOST + value: '{{ .Values.config.db_host }}' + - name: DB_PORT + value: '{{ .Values.config.db_port }}' + - name: DB_USER + value: '{{ .Values.config.db_user }}' + - name: DB_PASSWORD + {{- if .Values.config.db_secret }} + valueFrom: + secretKeyRef: + name: '{{ .Values.config.db_secret.name }}' + key: '{{ .Values.config.db_secret.key }}' + {{- else }} + value: {{ .Values.config.db_password }} + {{- end }} + - name: DB_DATABASE + value: '{{ .Values.config.db_database }}' + containers: + - name: run-migration + image: '{{ .Values.image.repository }}:{{ .Values.image.tag }}' + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - npm run migrate + env: + - name: CLEDG_MIGRATIONS__RUN_DATA_MIGRATIONS + value: 'true' + - name: CLEDG_DATABASE__PASSWORD + {{- if .Values.config.db_secret }} + valueFrom: + secretKeyRef: + name: '{{ .Values.config.db_secret.name }}' + key: '{{ .Values.config.db_secret.key }}' + {{- else }} + value: {{ .Values.config.db_password }} + {{- end }} + volumeMounts: + - name: '{{ template "centralledger-service.fullname" . }}-config-volume' + mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} + volumes: +{{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "centralledger-service.fullname" . }}-config-override +{{- end }} + - name: {{ template "centralledger-service.fullname" . }}-config-volume + configMap: + name: {{ template "centralledger-service.fullname" . }}-config + items: + - key: default.json + path: default.json + - key: knexfile.js + path: knexfile.js diff --git a/centralledger/chart-service/values.yaml b/centralledger/chart-service/values.yaml index 4ec593488..bd7d6a4eb 100644 --- a/centralledger/chart-service/values.yaml +++ b/centralledger/chart-service/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -37,11 +37,11 @@ diagnosticMode: ## command: - node - - src/api/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/api/index.js ## @param diagnosticMode.debug config to override all debug information ## @@ -204,6 +204,15 @@ config: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## Tracing Configuration event_trace_vendor: mojaloop event_log_filter: 'audit:*, log:warn, log:error' @@ -227,7 +236,7 @@ config: # initContainers: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -259,29 +268,6 @@ initContainers: | {{- end }} - name: DB_DATABASE value: '{{ .Values.config.db_database }}' - - name: run-migration - image: '{{ .Values.image.repository }}:{{ .Values.image.tag }}' - imagePullPolicy: IfNotPresent - command: - - sh - - -c - - npm run migrate - env: - - name: CLEDG_MIGRATIONS__RUN_DATA_MIGRATIONS - value: 'true' - - name: CLEDG_DATABASE__PASSWORD - {{- if .Values.config.db_secret }} - valueFrom: - secretKeyRef: - name: '{{ .Values.config.db_secret.name }}' - key: '{{ .Values.config.db_secret.key }}' - {{- else }} - value: {{ .Values.config.db_password }} - {{- end }} - volumeMounts: - - name: '{{ template "account-lookup-service-admin.fullname" . }}-config-volume' - mountPath: /opt/app/config - ## @param master.podLabels Extra labels for pod(s) ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ ## @@ -393,3 +379,9 @@ ingress: # cpu: 100m # memory: 128Mi resources: {} + +migration: + restartPolicy: OnFailure + backoffLimit: 1 + annotations: + helm.sh/hook: pre-install,pre-upgrade diff --git a/centralledger/values.yaml b/centralledger/values.yaml index 5e64154c9..2d98a08c4 100644 --- a/centralledger/values.yaml +++ b/centralledger/values.yaml @@ -16,7 +16,7 @@ centralledger-service: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -34,6 +34,16 @@ centralledger-service: replicaCount: 1 command: '["node", "src/api/index.js"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -44,11 +54,11 @@ centralledger-service: ## command: - node - - src/api/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/api/index.js ## @param diagnosticMode.debug config to override all debug information ## @@ -211,6 +221,15 @@ centralledger-service: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## Tracing Configuration event_trace_vendor: mojaloop event_log_filter: 'audit:*, log:warn, log:error' @@ -234,7 +253,7 @@ centralledger-service: # initContainers: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -266,28 +285,6 @@ centralledger-service: {{- end }} - name: DB_DATABASE value: '{{ .Values.config.db_database }}' - - name: run-migration - image: '{{ .Values.image.repository }}:{{ .Values.image.tag }}' - imagePullPolicy: IfNotPresent - command: - - sh - - -c - - npm run migrate - env: - - name: CLEDG_MIGRATIONS__RUN_DATA_MIGRATIONS - value: 'true' - - name: CLEDG_DATABASE__PASSWORD - {{- if .Values.config.db_secret }} - valueFrom: - secretKeyRef: - name: '{{ .Values.config.db_secret.name }}' - key: '{{ .Values.config.db_secret.key }}' - {{- else }} - value: {{ .Values.config.db_password }} - {{- end }} - volumeMounts: - - name: '{{ template "account-lookup-service-admin.fullname" . }}-config-volume' - mountPath: /opt/app/config service: internalPort: 3001 @@ -412,7 +409,7 @@ centralledger-handler-transfer-prepare: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -430,6 +427,16 @@ centralledger-handler-transfer-prepare: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--prepare"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -440,13 +447,13 @@ centralledger-handler-transfer-prepare: ## command: - node - - src/handlers/index.js - - handler - - '--prepare' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--prepare' ## @param diagnosticMode.debug config to override all debug information ## @@ -618,6 +625,15 @@ centralledger-handler-transfer-prepare: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## Enable On-Us transfers enable_on_us_transfers: false @@ -655,7 +671,7 @@ centralledger-handler-transfer-prepare: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -811,7 +827,7 @@ centralledger-handler-transfer-position: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -829,6 +845,16 @@ centralledger-handler-transfer-position: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--position"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -839,13 +865,13 @@ centralledger-handler-transfer-position: ## command: - node - - src/handlers/index.js - - handler - - '--position' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--position' ## @param diagnosticMode.debug config to override all debug information ## @@ -1017,6 +1043,15 @@ centralledger-handler-transfer-position: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -1048,7 +1083,7 @@ centralledger-handler-transfer-position: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -1204,7 +1239,7 @@ centralledger-handler-transfer-position-batch: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -1222,6 +1257,16 @@ centralledger-handler-transfer-position-batch: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--positionbatch"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -1232,13 +1277,13 @@ centralledger-handler-transfer-position-batch: ## command: - node - - src/handlers/index.js - - handler - - '--positionbatch' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--positionbatch' ## @param diagnosticMode.debug config to override all debug information ## @@ -1285,7 +1330,7 @@ centralledger-handler-transfer-position-batch: enabled: true image: repository: mojaloop/event-sidecar - tag: v13.0.0 + tag: v14.0.0 pullPolicy: IfNotPresent command: '["npm", "run", "start"]' service: @@ -1388,7 +1433,6 @@ centralledger-handler-transfer-position-batch: kafka_host: kafka kafka_port: 9092 kafka_partitioner: 'murmur2_random' - kafka_partition_assignment_strategy: 'cooperative-sticky' ## Node Configuration log_level: 'info' @@ -1411,6 +1455,15 @@ centralledger-handler-transfer-position-batch: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## Batch configuration # The batch size to be requested by the Kafka consumer. batch_size: 100 @@ -1448,7 +1501,7 @@ centralledger-handler-transfer-position-batch: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -1604,7 +1657,7 @@ centralledger-handler-transfer-get: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -1622,6 +1675,16 @@ centralledger-handler-transfer-get: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--get"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -1632,13 +1695,13 @@ centralledger-handler-transfer-get: ## command: - node - - src/handlers/index.js - - handler - - '--get' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--get' ## @param diagnosticMode.debug config to override all debug information ## @@ -1810,6 +1873,15 @@ centralledger-handler-transfer-get: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -1841,7 +1913,7 @@ centralledger-handler-transfer-get: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -1997,7 +2069,7 @@ centralledger-handler-transfer-fulfil: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -2015,6 +2087,16 @@ centralledger-handler-transfer-fulfil: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--fulfil"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -2025,13 +2107,13 @@ centralledger-handler-transfer-fulfil: ## command: - node - - src/handlers/index.js - - handler - - '--fulfil' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--fulfil' ## @param diagnosticMode.debug config to override all debug information ## @@ -2203,6 +2285,18 @@ centralledger-handler-transfer-fulfil: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + + ## Enable Batch Processing + batch_processing_enabled: false + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -2234,7 +2328,7 @@ centralledger-handler-transfer-fulfil: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -2390,7 +2484,7 @@ centralledger-handler-timeout: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -2408,6 +2502,16 @@ centralledger-handler-timeout: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--timeout"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -2418,13 +2522,13 @@ centralledger-handler-timeout: ## command: - node - - src/handlers/index.js - - handler - - '--timeout' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--timeout' ## @param diagnosticMode.debug config to override all debug information ## @@ -2601,6 +2705,18 @@ centralledger-handler-timeout: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + + ## Enable Batch Processing + batch_processing_enabled: false + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -2632,7 +2748,7 @@ centralledger-handler-timeout: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -2788,7 +2904,7 @@ centralledger-handler-admin-transfer: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -2806,6 +2922,16 @@ centralledger-handler-admin-transfer: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--admin"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -2816,13 +2942,13 @@ centralledger-handler-admin-transfer: ## command: - node - - src/handlers/index.js - - handler - - '--admin' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--admin' ## @param diagnosticMode.debug config to override all debug information ## @@ -2994,6 +3120,15 @@ centralledger-handler-admin-transfer: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -3025,7 +3160,7 @@ centralledger-handler-admin-transfer: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh diff --git a/centralsettlement/Chart.yaml b/centralsettlement/Chart.yaml index 3f615537d..5b5587eb3 100644 --- a/centralsettlement/Chart.yaml +++ b/centralsettlement/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Central-Settlement Helm chart for Kubernetes name: centralsettlement -version: 14.1.1 -appVersion: "v16.0.0" +version: 14.7.0 +appVersion: v16.0.0 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,33 +12,31 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: centralsettlement-service - version: ">= 15.0.1" + version: ">= 15.2.0" repository: "file://./chart-service" alias: centralsettlement-service condition: centralsettlement-service.enabled - name: centralsettlement-service - version: ">= 15.0.1" + version: ">= 15.2.0" repository: "file://./chart-service" alias: centralsettlement-handler-deferredsettlement condition: centralsettlement-handler-deferredsettlement.enabled - name: centralsettlement-service - version: ">= 15.0.1" + version: ">= 15.2.0" repository: "file://./chart-service" alias: centralsettlement-handler-grosssettlement condition: centralsettlement-handler-grosssettlement.enabled - name: centralsettlement-service - version: ">= 15.0.1" + version: ">= 15.2.0" repository: "file://./chart-service" alias: centralsettlement-handler-rules condition: centralsettlement-handler-rules.enabled - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.1.1 tags: - moja-common diff --git a/centralsettlement/chart-service/Chart.yaml b/centralsettlement/chart-service/Chart.yaml index c2bc07e05..7b8e030be 100644 --- a/centralsettlement/chart-service/Chart.yaml +++ b/centralsettlement/chart-service/Chart.yaml @@ -1,25 +1,23 @@ apiVersion: v2 description: Central-Settlement helm chart for API services and handlers name: centralsettlement-service -version: 15.0.1 -appVersion: "v16.0.0" +version: 15.2.0 +appVersion: v16.0.0 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: - - https://github.com/mojaloop/mojaloop - - https://github.com/mojaloop/helm + - https://github.com/mojaloop/mojaloop + - https://github.com/mojaloop/helm maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - name: Valentin Genev email: valentin.genev@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - - name: common - repository: "https://mojaloop.github.io/charts/repo" - tags: - - moja-common - version: 2.0.0 + - name: common + repository: "https://mojaloop.github.io/charts/repo" + tags: + - moja-common + version: 3.1.1 diff --git a/centralsettlement/chart-service/templates/config-override.yaml b/centralsettlement/chart-service/templates/config-override.yaml new file mode 100644 index 000000000..4d9e71638 --- /dev/null +++ b/centralsettlement/chart-service/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "centralsettlement-service.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "centralsettlement-service.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/centralsettlement/chart-service/templates/deployment.yaml b/centralsettlement/chart-service/templates/deployment.yaml index 71c154269..864a0bc97 100644 --- a/centralsettlement/chart-service/templates/deployment.yaml +++ b/centralsettlement/chart-service/templates/deployment.yaml @@ -30,6 +30,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} @@ -44,6 +47,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -138,6 +142,11 @@ spec: - name: EVENT_SDK_TRACEID_PER_VENDOR value: {{ .Values.config.event_traceid_per_vendor | quote }} volumeMounts: +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} - name: {{ template "centralsettlement-service.fullname" . }}-cfg-vol mountPath: /opt/app/config - name: {{ template "centralsettlement-service.fullname" . }}-rules-vol @@ -183,6 +192,11 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "account-lookup-service-admin.fullname" . }}-config-override + {{- end }} - name: {{ template "centralsettlement-service.fullname" . }}-cfg-vol configMap: name: {{ template "centralsettlement-service.fullname" . }}-config diff --git a/centralsettlement/chart-service/values.yaml b/centralsettlement/chart-service/values.yaml index ac4c9db74..08ab7fd30 100644 --- a/centralsettlement/chart-service/values.yaml +++ b/centralsettlement/chart-service/values.yaml @@ -8,7 +8,7 @@ global: {} image: registry: docker.io repository: mojaloop/central-settlement - tag: v16.0.0 + tag: v17.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -34,16 +34,17 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - - src/handlers/index.js - - h - - '--grossSettlement' + ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + - src/handlers/index.js + - h + - '--grossSettlement' + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -343,13 +344,13 @@ initContainers: | command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST @@ -357,7 +358,7 @@ initContainers: | - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -367,9 +368,9 @@ initContainers: | do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST diff --git a/centralsettlement/values.yaml b/centralsettlement/values.yaml index 703811657..20220896b 100644 --- a/centralsettlement/values.yaml +++ b/centralsettlement/values.yaml @@ -10,7 +10,7 @@ centralsettlement-service: image: registry: docker.io repository: mojaloop/central-settlement - tag: v16.0.0 + tag: v17.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -28,6 +28,16 @@ centralsettlement-service: replicaCount: 1 command: '["node", "src/api/index.js"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -36,14 +46,14 @@ centralsettlement-service: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/api/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -274,13 +284,13 @@ centralsettlement-service: command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST @@ -288,7 +298,7 @@ centralsettlement-service: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -298,9 +308,9 @@ centralsettlement-service: do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -440,7 +450,7 @@ centralsettlement-handler-deferredsettlement: image: registry: docker.io repository: mojaloop/central-settlement - tag: v16.0.0 + tag: v17.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -458,6 +468,16 @@ centralsettlement-handler-deferredsettlement: replicaCount: 1 command: '["node", "src/handlers/index.js", "h", "--deferredSettlement"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -466,7 +486,7 @@ centralsettlement-handler-deferredsettlement: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/handlers/index.js - h @@ -475,7 +495,7 @@ centralsettlement-handler-deferredsettlement: ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -706,13 +726,13 @@ centralsettlement-handler-deferredsettlement: command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST @@ -720,7 +740,7 @@ centralsettlement-handler-deferredsettlement: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -730,9 +750,9 @@ centralsettlement-handler-deferredsettlement: do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -874,7 +894,7 @@ centralsettlement-handler-grosssettlement: image: registry: docker.io repository: mojaloop/central-settlement - tag: v16.0.0 + tag: v17.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -892,6 +912,16 @@ centralsettlement-handler-grosssettlement: replicaCount: 1 command: '["node", "src/handlers/index.js", "h", "--grossSettlement"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -900,7 +930,7 @@ centralsettlement-handler-grosssettlement: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/handlers/index.js - h @@ -909,7 +939,7 @@ centralsettlement-handler-grosssettlement: ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -1139,13 +1169,13 @@ centralsettlement-handler-grosssettlement: command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST @@ -1153,7 +1183,7 @@ centralsettlement-handler-grosssettlement: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -1163,9 +1193,9 @@ centralsettlement-handler-grosssettlement: do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -1307,7 +1337,7 @@ centralsettlement-handler-rules: image: registry: docker.io repository: mojaloop/central-settlement - tag: v16.0.0 + tag: v17.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -1325,6 +1355,16 @@ centralsettlement-handler-rules: replicaCount: 1 command: '["node", "src/handlers/index.js", "h", "--rules"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -1333,7 +1373,7 @@ centralsettlement-handler-rules: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/handlers/index.js - h @@ -1342,7 +1382,7 @@ centralsettlement-handler-rules: ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -1662,13 +1702,13 @@ centralsettlement-handler-rules: command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST @@ -1676,7 +1716,7 @@ centralsettlement-handler-rules: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -1686,9 +1726,9 @@ centralsettlement-handler-rules: do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST diff --git a/emailnotifier/Chart.yaml b/emailnotifier/Chart.yaml index a69f0f637..67e0a87b8 100644 --- a/emailnotifier/Chart.yaml +++ b/emailnotifier/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Email Notifier For Mojaloop name: emailnotifier -version: 13.0.1 -appVersion: "14.0.0" +version: 13.3.0 +appVersion: v14.0.0 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -14,11 +14,9 @@ maintainers: email: valentin.genev@modusbox.com - name: Deon Botha email: deon.botha@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.0.0 tags: - moja-common diff --git a/eventstreamprocessor/Chart.yaml b/eventstreamprocessor/Chart.yaml index ca1d6cf93..e83a73ffb 100644 --- a/eventstreamprocessor/Chart.yaml +++ b/eventstreamprocessor/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Event Stream Processor for Mojaloop name: eventstreamprocessor -version: 13.0.1 -appVersion: "12.0.0-snapshot.7" +version: 13.3.0 +appVersion: v12.0.0-snapshot.9 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,11 +12,9 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.0.0 tags: - moja-common diff --git a/eventstreamprocessor/values.yaml b/eventstreamprocessor/values.yaml index e72b826e0..3e2243839 100644 --- a/eventstreamprocessor/values.yaml +++ b/eventstreamprocessor/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/event-stream-processor - tag: v12.0.0-snapshot.7 + tag: v12.0.0-snapshot.9 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -35,14 +35,13 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -117,25 +116,25 @@ config: span: START_CRITERIA: transfer: - - prepare: - service: ml_transfer_prepare - - fulfil: - service: ml_transfer_fulfil - - abort: - service: ml_transfer_abort - - timeout-received: - service: cl_transfer_timeout + - prepare: + service: ml_transfer_prepare + - fulfil: + service: ml_transfer_fulfil + - abort: + service: ml_transfer_abort + - timeout-received: + service: cl_transfer_timeout END_CRITERIA: transfer: - - fulfil: - service: ml_notification_event - - abort: - service: ml_notification_event - - prepare: - service: ml_notification_event - isError: true - - timeout-received: - service: ml_notification_event + - fulfil: + service: ml_notification_event + - abort: + service: ml_notification_event + - prepare: + service: ml_notification_event + isError: true + - timeout-received: + service: ml_notification_event exceptionList: [] # log level config log_level: info @@ -193,17 +192,17 @@ service: ## e.g.: ## clusterIP: None ## - clusterIP: - ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP - ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer - ## - loadBalancerIP: - ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources - ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service - ## e.g: - ## loadBalancerSourceRanges: - ## - 10.10.10.0/24 - ## + clusterIP: null +## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP +## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer +## + loadBalancerIP: null +## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources +## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service +## e.g: +## loadBalancerSourceRanges: +## - 10.10.10.0/24 +## loadBalancerSourceRanges: [] ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip @@ -231,9 +230,9 @@ ingress: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: - ## @param ingress.hostname Default host for the ingress record - ## + apiVersion: null +## @param ingress.hostname Default host for the ingress record +## hostname: event-stream-processor.local ## @param servicePort : port for the service ## @@ -244,14 +243,14 @@ ingress: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: - ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter - ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` - ## You can: - ## - Use the `ingress.secrets` parameter to create this TLS secret - ## - Relay on cert-manager to create it by setting `ingress.certManager=true` - ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` - ## + annotations: null +## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter +## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` +## You can: +## - Use the `ingress.secrets` parameter to create this TLS secret +## - Relay on cert-manager to create it by setting `ingress.certManager=true` +## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` +## tls: false ## @param ingress.certManager Add the corresponding annotations for cert-manager integration ## @@ -265,12 +264,11 @@ ingress: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following diff --git a/example-mojaloop-backend/Chart.yaml b/example-mojaloop-backend/Chart.yaml index f40b96191..9a58e6bb2 100644 --- a/example-mojaloop-backend/Chart.yaml +++ b/example-mojaloop-backend/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Example Helm chart for mojaloop backend dependencies name: example-mojaloop-backend -version: 15.0.0 -appVersion: "nginx: 4.4.2; mysql: 9.4.1; kafka: 19.0.2; mongodb: 13.3.1; redis: 17.3.7" +version: 16.0.0 +appVersion: "nginx: 4.4.2; mysql: 9.19.1; kafka: 29.3.9; mongodb: 14.8.3; redis: 18.12.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -13,8 +13,8 @@ maintainers: email: miguel.debarros@modusbox.com - name: Vijay Kumar Guthi email: vijaya.guthi@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com + - name: Sam Kummary + email: skummary@mojaloop.io dependencies: - name: kafka alias: kafka @@ -25,7 +25,7 @@ dependencies: - dependency - backend - kafka - version: 19.0.2 + version: 29.3.14 ## mysql database - name: mysql alias: mysql @@ -38,7 +38,7 @@ dependencies: - mysql - centralledger - account-lookup - version: 9.4.8 + version: 9.19.1 ## Bulk backend - name: mongodb alias: cl-mongodb @@ -50,7 +50,7 @@ dependencies: - backend - mongodb - centralledger - version: 13.3.1 + version: 14.8.3 ## Central-event-processor backend - name: mongodb alias: cep-mongodb @@ -62,7 +62,7 @@ dependencies: - backend - mongodb - centralledger - version: 13.3.1 + version: 14.8.3 - name: mongodb alias: ttk-mongodb condition: ttk-mongodb.enabled @@ -73,7 +73,7 @@ dependencies: - backend - mongodb - centralledger - version: 13.3.1 + version: 14.8.3 ## Redis for SDK-Scheme-Adapter that are part of the TTKSims - name: redis alias: ttksims-redis @@ -87,7 +87,7 @@ dependencies: - sdk - bulk - ttksims - version: 17.3.7 + version: 18.12.1 ## Redis for Thirdparty Auth-Service - name: redis alias: auth-svc-redis @@ -99,4 +99,16 @@ dependencies: - backend - redis - thirdparty - version: 17.3.7 + version: 18.12.1 + ## Redis for Proxy Cache + - name: redis-cluster + alias: proxy-cache-redis + condition: proxy-cache-redis.enabled + repository: https://charts.bitnami.com/bitnami + tags: + - mojaloop + - dependency + - backend + - redis + - proxy + version: 10.2.8 diff --git a/example-mojaloop-backend/values.yaml b/example-mojaloop-backend/values.yaml index 3ba64b112..e511b42e6 100644 --- a/example-mojaloop-backend/values.yaml +++ b/example-mojaloop-backend/values.yaml @@ -6,19 +6,34 @@ global: {} ## Reference: https://github.com/bitnami/charts/blob/main/bitnami/kafka/values.yaml kafka: enabled: true - ## @param fullnameOverride String to fully override template - ## - fullnameOverride: "kafka" - ## @section Persistence parameters - ## Enable persistence using Persistent Volume Claims - ## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/ - ## - persistence: - ## @param persistence.enabled Enable Kafka data persistence using PVC, note that ZooKeeper persistence is unaffected - ## - enabled: false + fullnameOverride: "kafka" + listeners: + client: + protocol: PLAINTEXT + controller: + protocol: PLAINTEXT + interbroker: + protocol: PLAINTEXT + external: + protocol: PLAINTEXT + + extraConfig: |- + offsets.topic.replication.factor=1 + default.replication.factor=1 + transaction.state.log.replication.factor=1 + + controller: + replicaCount: 1 + persistence: + enabled: false + logPersistence: + enabled: false + broker: + persistence: + enabled: false + ## ZooKeeper chart configuration ## https://github.com/bitnami/charts/blob/main/bitnami/zookeeper/values.yaml ## @@ -30,40 +45,14 @@ kafka: ## @param zookeeper.persistence.accessModes Persistent Volume access modes ## @param zookeeper.persistence.size Persistent Volume size ## + enabled: false + persistence: enabled: false - ## @param fullnameOverride String to fully override template - ## - fullnameOverride: "zookeeper" - - ## Kafka provisioning - ## provisioning: - ## @param provisioning.enabled Enable kafka provisioning Job - ## enabled: true - - ## @param provisioning.numPartitions Default number of partitions for topics when unspecified - ## - numPartitions: 1 - - ## @param provisioning.replicationFactor Default replication factor for topics when unspecified - ## - replicationFactor: 1 - - ## @param provisioning.topics Kafka topics to provision - ## - name: topic-name - ## partitions: 1 - ## replicationFactor: 1 - ## ## https://kafka.apache.org/documentation/#topicconfigs - ## config: - ## max.message.bytes: 64000 - ## flush.messages: 1 - ## - # topics: [] topics: - ## Mojaloop Topics - name: topic-transfer-prepare partitions: 1 replicationFactor: 1 @@ -103,35 +92,18 @@ kafka: - name: topic-bulkquotes-get partitions: 1 replicationFactor: 1 + - name: topic-fx-quotes-post + partitions: 1 + replicationFactor: 1 + - name: topic-fx-quotes-put + partitions: 1 + replicationFactor: 1 + - name: topic-fx-quotes-get + partitions: 1 + replicationFactor: 1 + persistence: + enabled: false - ## @param provisioning.nodeSelector Node labels for pod assignment - ## Ref: https://kubernetes.io/docs/user-guide/node-selection/ - ## - nodeSelector: {} - - ## @param provisioning.tolerations Tolerations for pod assignment - ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - ## - tolerations: [] - - ## @param provisioning.extraProvisioningCommands Extra commands to run to provision cluster resources - ## - echo "Allow user to consume from any topic" - ## - >- - ## /opt/bitnami/kafka/bin/kafka-acls.sh - ## --bootstrap-server $KAFKA_SERVICE - ## --command-config $CLIENT_CONF - ## --add - ## --allow-principal User:user - ## --consumer --topic '*' - ## - "/opt/bitnami/kafka/bin/kafka-acls.sh - ## --bootstrap-server $KAFKA_SERVICE - ## --command-config $CLIENT_CONF - ## --list" - ## - # extraProvisioningCommands: [] - - ## @param provisioning.waitForKafka If true use an init container to wait until kafka is ready before starting provisioning - ## waitForKafka: true ## Reference: https://github.com/bitnami/charts/blob/main/bitnami/mysql/values.yaml @@ -217,6 +189,10 @@ mysql: value: "auth_svc" - name: AUTH_SVC_USER value: "auth_svc" + - name: MSISDN_ORACLE_DATABASE + value: "oracle_msisdn" + - name: MSISDN_ORACLE_USER + value: "oracle_msisdn" ## @param initdbScripts Dictionary of initdb scripts ## Specify dictionary of scripts to be run at first boot @@ -271,6 +247,22 @@ mysql: FLUSH PRIVILEGES;" echo "******* Database '$DB_NAME' config complete *******" + msisdnOracleInit.sh: | + #!/bin/bash + set -e + DB_NAME=$MSISDN_ORACLE_DATABASE + DB_USER=$MSISDN_ORACLE_USER + DB_PASS=$MYSQL_PASSWORD + echo "******* Creating '$DB_NAME' DB with user '$DB_USER' *******" + mysql -u root -p$MYSQL_ROOT_PASSWORD -e \ + "DROP DATABASE IF EXISTS $DB_NAME; + CREATE DATABASE $DB_NAME; + DROP USER IF EXISTS $DB_USER@'%'; + CREATE USER '$DB_USER'@'%' IDENTIFIED WITH mysql_native_password BY '$DB_PASS'; + GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'%'; + FLUSH PRIVILEGES;" + echo "******* Database '$DB_NAME' config complete *******" + authSvcInit.sh: |- #!/bin/bash set -e @@ -343,6 +335,11 @@ cl-mongodb: ## @param persistence.enabled Enable MongoDB(®) data persistence using PVC ## enabled: false + + # Enable for Apple Silicon + extraEnvVars: + - name: EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU + value: "1" ## Reference: https://github.com/bitnami/charts/blob/main/bitnami/mongodb/values.yaml cep-mongodb: @@ -401,6 +398,11 @@ cep-mongodb: ## @param persistence.enabled Enable MongoDB(®) data persistence using PVC ## enabled: false + + # Enable for Apple Silicon + extraEnvVars: + - name: EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU + value: "1" ## Reference: https://github.com/bitnami/charts/blob/main/bitnami/mongodb/values.yaml ttk-mongodb: @@ -453,6 +455,12 @@ ttk-mongodb: ## @param persistence.enabled Enable MongoDB(®) data persistence using PVC ## enabled: false + + # Enable for Apple Silicon + extraEnvVars: + - name: EXPERIMENTAL_DOCKER_DESKTOP_FORCE_QEMU + value: "1" + ## Reference: https://github.com/bitnami/charts/blob/main/bitnami/redis/values.yaml ttksims-redis: @@ -513,3 +521,56 @@ auth-svc-redis: ## @param master.persistence.enabled Enable persistence on Redis® master nodes using Persistent Volume Claims ## enabled: false + +## Reference: https://github.com/bitnami/charts/blob/main/bitnami/redis/values.yaml +proxy-cache-redis: + enabled: true + + usePassword: false + + ## @param fullnameOverride String to fully override template + ## + fullnameOverride: proxy-cache-redis + + ## @param clusterDomain Kubernetes Cluster Domain + ## + clusterDomain: cluster.local + + persistence: + enabled: false + + cluster: + ## @param cluster.init Enable the initialization of the Redis® Cluster + ## + init: true + ## Number of Redis® nodes to be deployed + ## + ## Note: + ## This is total number of nodes including the replicas. Meaning there will be 3 master and 3 replica + ## nodes (as replica count is set to 1 by default, there will be 1 replica per master node). + ## Hence, nodes = numberOfMasterNodes + numberOfMasterNodes * replicas + ## + ## @param cluster.nodes The number of master nodes should always be >= 3, otherwise cluster creation will fail + ## + nodes: 6 + ## @param cluster.replicas Number of replicas for every master in the cluster + ## Parameter to be passed as --cluster-replicas to the redis-cli --cluster create + ## 1 means that we want a replica for every master created + ## + replicas: 1 + ## This section allows to update the Redis® cluster nodes. + ## + update: + ## @param cluster.update.addNodes Boolean to specify if you want to add nodes after the upgrade + ## Setting this to true a hook will add nodes to the Redis® cluster after the upgrade. currentNumberOfNodes and currentNumberOfReplicas is required + ## + addNodes: false + ## @param cluster.update.currentNumberOfNodes Number of currently deployed Redis® nodes + ## + currentNumberOfNodes: 6 + ## @param cluster.update.currentNumberOfReplicas Number of currently deployed Redis® replicas + ## + currentNumberOfReplicas: 1 + ## @param cluster.update.newExternalIPs External IPs obtained from the services for the new nodes to add to the cluster + ## + newExternalIPs: [] \ No newline at end of file diff --git a/finance-portal-settlement-management/Chart.yaml b/finance-portal-settlement-management/Chart.yaml index 6953f53a7..00c6a7993 100755 --- a/finance-portal-settlement-management/Chart.yaml +++ b/finance-portal-settlement-management/Chart.yaml @@ -6,8 +6,6 @@ appVersion: "settlement-management: v11.0.0; operator-settlement: v11.0.0" maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: common repository: https://mojaloop.github.io/charts/repo diff --git a/finance-portal/Chart.yaml b/finance-portal/Chart.yaml index a4d81d2d5..4c8ad870d 100644 --- a/finance-portal/Chart.yaml +++ b/finance-portal/Chart.yaml @@ -6,8 +6,6 @@ appVersion: "finance-portal-ui: v10.4.3; finance-portal-backend-service: v15.0.2 maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: common repository: https://mojaloop.github.io/charts/repo diff --git a/forensicloggingsidecar/Chart.yaml b/forensicloggingsidecar/Chart.yaml index 3cbcc0912..08e22ed8b 100644 --- a/forensicloggingsidecar/Chart.yaml +++ b/forensicloggingsidecar/Chart.yaml @@ -11,8 +11,6 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: centralkms version: ">= 2.5.0" diff --git a/inter-scheme-proxy-adapter/Chart.yaml b/inter-scheme-proxy-adapter/Chart.yaml new file mode 100644 index 000000000..a7a251a39 --- /dev/null +++ b/inter-scheme-proxy-adapter/Chart.yaml @@ -0,0 +1,16 @@ +apiVersion: v2 +version: 1.0.0 +appVersion: "1.0.0" +description: Helm chart for Inter Scheme Proxy Adapter +name: inter-scheme-proxy-adapter +maintainers: + - name: Steven Oderayi + email: steven.oderayi@infitx.com + - name: Vijaya Kumar Guthi + email: vijaya.guthi@infitx.com +dependencies: + - name: common + repository: "https://mojaloop.github.io/charts/repo" + version: ">= 3.1.3" + tags: + - moja-common diff --git a/inter-scheme-proxy-adapter/templates/NOTES.txt b/inter-scheme-proxy-adapter/templates/NOTES.txt new file mode 100644 index 000000000..d815f2aab --- /dev/null +++ b/inter-scheme-proxy-adapter/templates/NOTES.txt @@ -0,0 +1,28 @@ +** Please be patient while the chart is being deployed ** + +{{- if .Values.diagnosticMode.enabled }} +The chart has been deployed in diagnostic mode. All probes have been disabled and the command has been overwritten with: + + command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 4 }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 4 }} + +Get the list of pods by executing: + + kubectl get pods --namespace {{ .Release.Namespace }} -l app.kubernetes.io/instance={{ .Release.Name }} + +Access the pod you want to debug by executing + + kubectl exec --namespace {{ .Release.Namespace }} -ti -- bash + +In order to replicate the container startup scripts execute this command: + + %%ENTRYPOINT and CMD from main container%% + +{{- else }} + +%%Instructions to access the application depending on the serviceType and other considerations%% + +{{- end }} + +{{- include "common.warnings.rollingTag" .Values.image }} +{{- include "inter-scheme-proxy-adapter.validateValues" . }} diff --git a/inter-scheme-proxy-adapter/templates/_helpers.tpl b/inter-scheme-proxy-adapter/templates/_helpers.tpl new file mode 100644 index 000000000..57b19a149 --- /dev/null +++ b/inter-scheme-proxy-adapter/templates/_helpers.tpl @@ -0,0 +1,46 @@ +{{/* vim: set filetype=mustache: */}} + +{{/* +Return the proper main image name +*/}} +{{- define "inter-scheme-proxy-adapter.image" -}} +{{ include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }} +{{- end -}} + +{{/* +Return the proper image name (for the init container volume-permissions image) +*/}} +{{- define "inter-scheme-proxy-adapter.volumePermissions.image" -}} +{{- include "common.images.image" ( dict "imageRoot" .Values.volumePermissions.image "global" .Values.global ) -}} +{{- end -}} + +{{/* +Return the proper Docker Image Registry Secret Names +*/}} +{{- define "inter-scheme-proxy-adapter.imagePullSecrets" -}} +{{- include "common.images.pullSecrets" (dict "images" (list .Values.image) "global" .Values.global) -}} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "inter-scheme-proxy-adapter.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (printf "%s" (include "common.names.fullname" .)) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Compile all warnings into a single message. +*/}} +{{- define "inter-scheme-proxy-adapter.validateValues" -}} +{{- $messages := list -}} +{{- $messages := without $messages "" -}} +{{- $message := join "\n" $messages -}} + +{{- if $message -}} +{{- printf "\nVALUES VALIDATION:\n%s" $message -}} +{{- end -}} +{{- end -}} diff --git a/inter-scheme-proxy-adapter/templates/deployment.yaml b/inter-scheme-proxy-adapter/templates/deployment.yaml new file mode 100644 index 000000000..7d710c436 --- /dev/null +++ b/inter-scheme-proxy-adapter/templates/deployment.yaml @@ -0,0 +1,123 @@ +apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }} +kind: Deployment +metadata: + name: {{ template "common.names.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + annotations: + # Common annotations + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" $.Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }} + app.kubernetes.io/component: {{ .Chart.Name }} + template: + metadata: + annotations: + checksum/config: {{ .Values.env | toString | sha256sum }} + {{- if .Values.podAnnotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.podAnnotations "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.metrics.enabled }} + prometheus.io/port: {{ include "common.tplvalues.render" (dict "value" .Values.metrics.config.port "context" $) | quote }} + prometheus.io/scrape: "true" + {{- end }} + labels: {{- include "common.labels.standard" . | nindent 8 }} + app.kubernetes.io/component: {{ .Chart.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + {{- if .Values.podLabels }} + {{- include "common.tplvalues.render" (dict "value" .Values.podLabels "context" $) | nindent 8 }} + {{- end }} + spec: + serviceAccountName: {{ template "inter-scheme-proxy-adapter.serviceAccountName" . }} + {{- include "inter-scheme-proxy-adapter.imagePullSecrets" . | nindent 6 }} + {{- if .Values.hostAliases }} + hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.hostAliases "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.affinity }} + affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.affinity "context" $) | nindent 8 }} + {{- else }} + affinity: + podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAffinityPreset "component" "inter-scheme-proxy-adapter" "context" $) | nindent 10 }} + podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAntiAffinityPreset "component" "inter-scheme-proxy-adapter" "context" $) | nindent 10 }} + nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.nodeAffinityPreset.type "key" .Values.nodeAffinityPreset.key "values" .Values.nodeAffinityPreset.values) | nindent 10 }} + {{- end }} + {{- if .Values.nodeSelector }} + nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.nodeSelector "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.tolerations "context" .) | nindent 8 }} + {{- end }} + {{- if .Values.priorityClassName }} + priorityClassName: {{ .Values.priorityClassName | quote }} + {{- end }} + {{- if .Values.podSecurityContext.enabled }} + securityContext: {{- omit .Values.podSecurityContext "enabled" | toYaml | nindent 8 }} + {{- end }} + initContainers: + {{- if .Values.initContainers }} + {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: {{ template "inter-scheme-proxy-adapter.image" . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- if .Values.containerSecurityContext.enabled }} + securityContext: {{- omit .Values.containerSecurityContext "enabled" | toYaml | nindent 12 }} + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }} + {{- else if .Values.command }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.command "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }} + {{- else if .Values.args }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.args "context" $) | nindent 12 }} + {{- end }} + ports: + {{- if (hasKey .Values.service "internalPort") }} + - name: http + containerPort: {{ .Values.service.internalPort }} + {{- end }} + {{- if (hasKey .Values.env "INBOUND_LISTEN_PORT_A") }} + - name: inboundapia + containerPort: {{ .Values.env.INBOUND_LISTEN_PORT_A }} + protocol: TCP + {{- end }} + {{- if (hasKey .Values.env "INBOUND_LISTEN_PORT_B") }} + - name: inboundapib + containerPort: {{ .Values.env.INBOUND_LISTEN_PORT_B }} + protocol: TCP + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + - name: debug + containerPort: {{ .Values.diagnosticMode.debug.internalPort }} + {{- end }} + {{- if .Values.readinessProbe.enabled }} + readinessProbe: + {{- include "common.tplvalues.render" (dict "value" .Values.readinessProbe "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.livenessProbe.enabled }} + livenessProbe: + {{- include "common.tplvalues.render" (dict "value" .Values.livenessProbe "context" $) | nindent 12 }} + {{- end }} + env: + {{- range $k, $v := .Values.env }} + - name: {{ $k }} + value: {{ if eq (typeOf $v) "string" }}{{ $v | replace "$release_name" $.Release.Name | quote }}{{ else }}{{ $v | quote }}{{ end }} + {{- end }} + {{- range $k, $v := .Values.envFromSecrets }} + - name: {{ $k }} + valueFrom: + secretKeyRef: + name: {{ $v.secret.name }} + key: {{ $v.secret.key | quote }} + {{- end }} diff --git a/inter-scheme-proxy-adapter/templates/ingress.yaml b/inter-scheme-proxy-adapter/templates/ingress.yaml new file mode 100644 index 000000000..f17c032d6 --- /dev/null +++ b/inter-scheme-proxy-adapter/templates/ingress.yaml @@ -0,0 +1,63 @@ +{{- if .Values.ingress.enabled }} +apiVersion: {{ include "common.capabilities.ingress.apiVersion" . }} +kind: Ingress +metadata: + name: {{ template "common.names.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if or .Values.ingress.annotations .Values.commonAnnotations .Values.ingress.certManager }} + annotations: + {{- if .Values.ingress.certManager }} + kubernetes.io/tls-acme: "true" + {{- end }} + {{- if .Values.ingress.annotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.ingress.annotations "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.22-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + rules: + {{- if .Values.ingress.hostname }} + - host: {{ .Values.ingress.hostname }} + http: + paths: + {{- if .Values.ingress.extraPaths }} + {{- include "common.tplvalues.render" (dict "value" .Values.ingress.extraPaths "context" $) | nindent 10 }} + {{- end }} + - path: {{ .Values.ingress.path }} + {{- if eq "true" (include "common.ingress.supportsPathType" .) }} + pathType: {{ .Values.ingress.pathType }} + {{- end }} + backend: {{- include "common.ingress.backend" (dict "serviceName" (include "common.names.fullname" .) "servicePort" "http" "context" $) | nindent 14 }} + {{- end }} + {{- range .Values.ingress.extraHosts }} + - host: {{ .name | quote }} + http: + paths: + - path: {{ default "/" .path }} + {{- if eq "true" (include "common.ingress.supportsPathType" $) }} + pathType: {{ default "ImplementationSpecific" .pathType }} + {{- end }} + backend: {{- include "common.ingress.backend" (dict "serviceName" (include "common.names.fullname" .) "servicePort" "http" "context" $) | nindent 14 }} + {{- end }} + {{- if or (and .Values.ingress.tls (or .Values.ingress.certManager .Values.ingress.selfSigned)) .Values.ingress.extraTls }} + tls: + {{- if and .Values.ingress.tls (or .Values.ingress.certManager .Values.ingress.selfSigned) }} + - hosts: + - {{ .Values.ingress.hostname | quote }} + secretName: {{ printf "%s-tls" .Values.ingress.hostname }} + {{- end }} + {{- if .Values.ingress.extraTls }} + {{- include "common.tplvalues.render" (dict "value" .Values.ingress.extraTls "context" $) | nindent 4 }} + {{- end }} + {{- end }} +{{- end }} diff --git a/inter-scheme-proxy-adapter/templates/service.yaml b/inter-scheme-proxy-adapter/templates/service.yaml new file mode 100644 index 000000000..b91aa0f3f --- /dev/null +++ b/inter-scheme-proxy-adapter/templates/service.yaml @@ -0,0 +1,65 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "common.names.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.service.annotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.service.annotations "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.service.type }} + {{- if and .Values.service.clusterIP (eq .Values.service.type "ClusterIP") }} + clusterIP: {{ .Values.service.clusterIP }} + {{- end }} + {{- if or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort") }} + externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy | quote }} + {{- end }} + {{- if and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerSourceRanges)) }} + loadBalancerSourceRanges: {{ .Values.service.loadBalancerSourceRanges }} + {{- end }} + {{- if and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerIP)) }} + loadBalancerIP: {{ .Values.service.loadBalancerIP }} + {{- end }} + {{- if .Values.service.sessionAffinity }} + sessionAffinity: {{ .Values.service.sessionAffinity }} + {{- end }} + {{- if .Values.service.sessionAffinityConfig }} + sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" .Values.service.sessionAffinityConfig "context" $) | nindent 4 }} + {{- end }} + ports: + {{- if (hasKey .Values.service "internalPort") }} + - name: http + port: {{ .Values.service.port }} + targetPort: {{ .Values.service.internalPort }} + protocol: TCP + {{- end }} + {{- if (hasKey .Values.env "INBOUND_LISTEN_PORT_A") }} + - port: {{ .Values.env.INBOUND_LISTEN_PORT_A }} + protocol: TCP + name: inboundapia + targetPort: inboundapia + {{- end }} + {{- if (hasKey .Values.env "INBOUND_LISTEN_PORT_B") }} + - port: {{ .Values.env.INBOUND_LISTEN_PORT_B }} + protocol: TCP + name: inboundapib + targetPort: inboundapib + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + - name: debug + port: {{ .Values.diagnosticMode.debug.port }} + targetPort: {{ .Values.diagnosticMode.debug.internalPort }} + protocol: TCP + {{- end }} + selector: {{- include "common.labels.matchLabels" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} diff --git a/inter-scheme-proxy-adapter/values.yaml b/inter-scheme-proxy-adapter/values.yaml new file mode 100644 index 000000000..f1508a1c6 --- /dev/null +++ b/inter-scheme-proxy-adapter/values.yaml @@ -0,0 +1,396 @@ +# Default values for inter-scheme-proxy-adapter. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +# @section Global parameters +## Global Docker image parameters +## Please, note that this will override the image parameters, including dependencies, configured to use the global value +## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass + +## @param global.imageRegistry Global Docker image registry +## @param global.imagePullSecrets Global Docker registry secret names as an array +## @param global.storageClass Global StorageClass for Persistent Volume(s) +## +global: {} + +config: {} + +envFromSecrets: +# OAUTH_CLIENT_KEY_A: +# secret: +# name: some-secret-name +# key: OAUTH_CLIENT_KEY_A +# OAUTH_CLIENT_SECRET_A: +# secret: +# name: some-secret-name +# key: OAUTH_CLIENT_SECRET_A + +env: + LOG_LEVEL: info + + METRICS_SERVER_LISTEN_PORT: 4004 + + # Port number that the inbound (FSPIOP API) HTTP servers A & B will listen on + INBOUND_LISTEN_PORT_A: 4000 + INBOUND_LISTEN_PORT_B: 4100 + + # Enable mutual TLS authentication. Useful when not running in a secure + # environment, i.e. when you're running it locally against your own implementation. + OUTBOUND_MUTUAL_TLS_ENABLED_A: false + OUTBOUND_MUTUAL_TLS_ENABLED_B: false + + # Location of certs and keys required for TLS + # OUT_CA_CERT_PATH_A:./secrets/cacert_a.pem + # OUT_CLIENT_CERT_PATH_A:./secrets/servercert_a.pem + # OUT_CLIENT_KEY_PATH_A:./secrets/serverkey_a.pem + # OUT_CA_CERT_PATH_B:./secrets/cacert_b.pem + # OUT_CLIENT_CERT_PATH_B:./secrets/servercert_b.pem + # OUT_CLIENT_KEY_PATH_B:./secrets/serverkey_b.pem + + # SWITCH ENDPOINTS + PEER_ENDPOINT_A: $release_name-ml-testing-toolkit-backend:4040 + PEER_ENDPOINT_B: $release_name-ml-testing-toolkit-backend:4040 + + # Participant ID of this Proxy + PROXY_ID: "proxyispa" + + # OAuth2 data used to obtain bearer token + # Use envFromSecrets instead when secret is stored as k8s secret + OAUTH_TOKEN_ENDPOINT_A: http://localhost:8080/openid-connect/token + OAUTH_CLIENT_KEY_A: dfsp-jwt + OAUTH_CLIENT_SECRET_A: secretA + OAUTH_REFRESH_SECONDS_A: 3600 + + OAUTH_TOKEN_ENDPOINT_B: http://localhost:8080/openid-connect/token + OAUTH_CLIENT_KEY_B: dfsp-jwt + OAUTH_CLIENT_SECRET_B: secretB + OAUTH_REFRESH_SECONDS_B: 3600 + + # Management API websocket connection settings. + # The Management API uses this for exchanging connector management messages. + MGMT_API_WS_URL_A: 127.0.0.1 + MGMT_API_WS_PORT_A: 4005 + + MGMT_API_WS_URL_B: 127.0.0.1 + MGMT_API_WS_PORT_B: 4105 + + # Set to true to enable the use of PM4ML-related services e.g MCM, Management API service + PM4ML_ENABLED: false + + # Interval to check peer JWS changes in milliseconds. This is fail safe mechanism, so the value can be high. + CHECK_PEER_JWS_INTERVAL: 1800000 + +podAffinityPreset: "" +## @param podAntiAffinityPreset Pod anti-affinity preset. Ignored if `main.affinity` is set. Allowed values: `soft` or `hard` +## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity +## +podAntiAffinityPreset: soft +## Node affinity preset +## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity +## + +nodeAffinityPreset: + ## @param nodeAffinityPreset.type Node affinity preset type. Ignored if `main.affinity` is set. Allowed values: `soft` or `hard` + ## + type: "" + ## @param nodeAffinityPreset.key Node label key to match. Ignored if `main.affinity` is set + ## + key: "" + ## @param nodeAffinityPreset.values Node label values to match. Ignored if `main.affinity` is set + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] +## @param affinity Affinity for %%MAIN_CONTAINER_NAME%% pods assignment +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +## NOTE: `podAffinityPreset`, `main.podAntiAffinityPreset`, and `main.nodeAffinityPreset` will be ignored when it's set +## + +## Pod scheduling preferences. +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +affinity: {} + +## Node labels for pod assignment +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector +nodeSelector: {} + +## Set toleration for scheduler +## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ +tolerations: [] + +## Configure Pods Security Context +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod +## @param podSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% pods' Security Context +## @param podSecurityContext.fsGroup Set %%MAIN_CONTAINER_NAME%% pod's Security Context fsGroup +## +podSecurityContext: + enabled: true + fsGroup: 1001 +## Configure Container Security Context +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod +## @param containerSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% containers' Security Context +## @param containerSecurityContext.runAsUser Set %%MAIN_CONTAINER_NAME%% containers' Security Context runAsUser +## +containerSecurityContext: + enabled: true + runAsUser: 1001 + +image: + registry: docker.io + repository: mojaloop/inter-scheme-proxy-adapter + tag: v1.3.3 + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + +replicaCount: 1 +command: + - npm + - start + + +## Enable diagnostic mode in the deployment +## +diagnosticMode: + ## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden) + ## + enabled: false + ## @param diagnosticMode.command Command to override all containers in the deployment + ## + command: + - yarn + - start + ## @param diagnosticMode.args Args to override all containers in the deployment + ## + args: + - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + + ## @param diagnosticMode.debug config to override all debug information + ## + debug: + internalPort: 9229 + port: 9229 + +## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) +## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ +## e.g: +## initContainers: +## - name: your-image-name +## image: your-image +## imagePullPolicy: Always +## command: ['sh', '-c', 'echo "hello world"'] +## +initContainers: [] + +readinessProbe: + enabled: true + httpGet: + path: /health + port: 4000 + initialDelaySeconds: 15 + periodSeconds: 15 +livenessProbe: + enabled: true + httpGet: + path: /health + port: 4000 + initialDelaySeconds: 15 + periodSeconds: 15 + +metrics: + enabled: false + config: + timeout: 5000 + port: 4004 + prefix: moja_ + defaultLabels: + serviceName: inter-scheme-proxy-adapter + +## @param master.podLabels Extra labels for pod(s) +## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ +## +podLabels: {} + +## @param podAnnotations Additional custom annotations for pod(s) +## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ +## +podAnnotations: {} + +service: + ## Not used by the inter-scheme-proxy-adapter + # internalPort: 3000 + ## @param service.type %%MAIN_CONTAINER_NAME%% service type + ## + type: ClusterIP + ## @param service.port %%MAIN_CONTAINER_NAME%% service HTTP port + ## + port: 80 + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: + ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer + ## + loadBalancerIP: + ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources + ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param service.annotations Additional custom annotations for %%MAIN_CONTAINER_NAME%% service + ## + annotations: {} + ## @param master.service.sessionAffinity Session Affinity for Kubernetes service, can be "None" or "ClientIP" + ## If "ClientIP", consecutive client requests will be directed to the same Pod + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + ## + sessionAffinity: None + ## @param master.service.sessionAffinityConfig Additional settings for the sessionAffinity + ## sessionAffinityConfig: + ## clientIP: + ## timeoutSeconds: 300 + ## + sessionAffinityConfig: {} + +ingress: + ## @param ingress.enabled Enable ingress record generation for %%MAIN_CONTAINER_NAME%% + ## + enabled: true + ## @param ingress.pathType Ingress path type + ## + pathType: ImplementationSpecific + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: + ## @param ingress.hostname Default host for the ingress record + ## + hostname: inter-scheme-proxy-adapter.local + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + ## + path: / + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: {} + ## Example annotations for ingress class and rewrite-targets + ## https://kubernetes.github.io/ingress-nginx/examples/rewrite/ + # nginx.ingress.kubernetes.io/rewrite-target: '/' + # nginx.ingress.kubernetes.io/rewrite-target: '/$2' + ## https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/ + # kubernetes.io/ingress.class: nginx + ## https://kubernetes.github.io/ingress-nginx/user-guide/tls/#automated-certificate-management-with-kube-lego + # kubernetes.io/tls-acme: "true"" + + ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter + ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` + ## You can: + ## - Use the `ingress.secrets` parameter to create this TLS secret + ## - Relay on cert-manager to create it by setting `ingress.certManager=true` + ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` + ## + tls: false + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## + certManager: false + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## + selfSigned: false + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: scheme-a.pm4ml.local + ## path: / + ## + ## @param ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host + ## e.g: + ## extraPaths: + ## - path: /* + ## backend: + ## serviceName: ssl-redirect + ## servicePort: use-annotation + ## + # extraPaths: [] + extraPaths: + - path: /inbound-a/ + pathType: ImplementationSpecific + backend: + service: + name: '{{ include "common.names.fullname" . }}' + port: + name: inboundapia + - path: /inbound-b/ + pathType: ImplementationSpecific + backend: + service: + name: '{{ include "common.names.fullname" . }}' + port: + name: inboundapib + ## @param ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record + ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls + ## e.g: + ## extraTls: + ## - hosts: + ## - transfer-api-svc.local + ## secretName: transfer-api-svc.local-tls + ## + extraTls: [] + ## @param ingress.secrets Custom TLS certificates as secrets + ## NOTE: 'key' and 'certificate' are expected in PEM format + ## NOTE: 'name' should line up with a 'secretName' set further up + ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates + ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days + ## It is also possible to create and manage the certificates outside of this helm chart + ## Please see README.md for more information + ## e.g: + ## secrets: + ## - name: transfer-api-svc.local-tls + ## key: |- + ## -----BEGIN RSA PRIVATE KEY----- + ## ... + ## -----END RSA PRIVATE KEY----- + ## certificate: |- + ## -----BEGIN CERTIFICATE----- + ## ... + ## -----END CERTIFICATE----- + ## + secrets: [] + className: "nginx" + +## RBAC configuration +## +rbac: + ## @param rbac.create Specifies whether RBAC resources should be created + ## + create: false + +## ServiceAccount configuration +## +serviceAccount: + ## @param serviceAccount.create Specifies whether a ServiceAccount should be created + ## + create: false + ## @param serviceAccount.name The name of the ServiceAccount to use. + ## If not set and create is true, a name is generated using the common.names.fullname template + ## + name: "" diff --git a/kube-system/ntpd/Chart.yaml b/kube-system/ntpd/Chart.yaml index 1548d41b0..8e991917d 100644 --- a/kube-system/ntpd/Chart.yaml +++ b/kube-system/ntpd/Chart.yaml @@ -2,15 +2,13 @@ apiVersion: v2 appVersion: "1.0" description: ntpd Helm chart for Kubernetes name: ntpd -version: 0.3.0 +version: 0.5.0 maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.0.0 tags: - moja-common diff --git a/lint-charts.sh b/lint-charts.sh index 59a6195fc..2d9c727d4 100755 --- a/lint-charts.sh +++ b/lint-charts.sh @@ -32,6 +32,7 @@ else monitoring/efk account-lookup-service als-oracle-pathfinder + als-msisdn-oracle # centralkms # Deprecated - No longer supported # forensicloggingsidecar # Deprecated - No longer supported centralledger @@ -55,6 +56,7 @@ else thirdparty/chart-auth-svc thirdparty/chart-consent-oracle thirdparty/chart-tp-api-svc + inter-scheme-proxy-adapter ) fi diff --git a/local-deployment-methods/docker_arm_rebuild/README.md b/local-deployment-methods/docker_arm_rebuild/README.md new file mode 100644 index 000000000..4b636f4fa --- /dev/null +++ b/local-deployment-methods/docker_arm_rebuild/README.md @@ -0,0 +1,115 @@ +# Docker Image Re-Builder from Helm Charts + +## Overview + +The official **Mojaloop Docker images** are currently only available for the **AMD64** platform. When deploying Mojaloop Helm charts on an **ARM-based macOS**, these images run in **emulation mode**, which significantly slows down performance compared to native applications. + +This script aims to address that issue by: + +1. Extracting Mojaloop Docker image references from the Helm chart. +2. Cloning the respective repositories from GitHub. +3. Checking out the appropriate tags. +4. Rebuilding the Docker images for **ARM64** architecture. + +By building native ARM64 images, the goal is to improve the performance during local testing and development. **In the future**, it is hoped that Mojaloop’s official Docker images will natively support ARM architecture, eliminating the need for such custom builds. + + +--- + +## Prerequisites + +- **Git**: Ensure `git` is installed on your system. +- **Docker**: Docker daemon must be running and accessible. +- **Helm**: Helm must be installed and the charts should be accessible from the specified path. + +--- + +## Usage + +Make the script executable and run it from your terminal: + +```bash +cd local-deployment-methods/docker_arm_rebuild +chmod +x rebuild.sh +./rebuild.sh +``` + +## Script Parameters and Components + +### Variables: + +- HELM_RELEASE: + The name used for the Helm release. Example: moja. + +- HELM_CHART: + Path to the Helm chart folder to extract the templates. Example: ../../mojaloop/ or + +## Example Output +``` +Building Docker image from repo https://github.com/mojaloop/account-lookup-service.git with tag v15.4.0-snapshot.33 +Skipping duplicate image: mojaloop/central-ledger:v15.3.1 +Skipping non-mojaloop image: some-other-service:latest +``` + +## Limitations +- Helm Chart Assumptions: + The script assumes all Helm chart image references follow the format mojaloop/repo-name:tag. + +- ARM64 Architecture: + The script builds Docker images for ARM64 only. Adjust the docker build command if other architectures are needed. + +--- + +# Deploying Mojaloop on macOS using Docker Desktop + +## Prerequisites + +Before deploying Mojaloop, ensure the following tools are installed and configured on your macOS machine: + +- **Docker Desktop for macOS**: Ensure Kubernetes is enabled in Docker Desktop. +- **Helm**: Install Helm for managing your Kubernetes deployments. +- **Helmfile**: Install Helmfile to manage multiple Helm charts effectively. + +--- + +## Step-by-Step Deployment + +### 1. Adjust Resource Limits in Docker Desktop + +To run Mojaloop smoothly, adjust the CPU and memory allocations in Docker Desktop: + +1. Open **Docker Desktop**. +2. Navigate to **Settings** (⚙️) → **Resources**. +3. Set: + - **CPUs**: 8 cores + - **Memory**: 16 GB RAM +4. Click **Apply & Restart** to save the changes. + +### 2. Install Ingress NGINX Controller + +Mojaloop requires an Ingress controller to route external traffic to the services. Use the following Helm command to install. + +**Ingress NGINX**: + +```bash +helm upgrade --install ingress-nginx ingress-nginx \ + --repo https://kubernetes.github.io/ingress-nginx \ + --namespace ingress-nginx --create-namespace +``` + +### 3. Prepare Helm Chart Dependencies + +Navigate to the root directory of the project and run the update-charts-dep.sh script to update the chart dependencies: + +``` +sh update-charts-dep.sh +``` + +### 4. Deploy Mojaloop Using Helmfile + +Change to the local-deployment-methods/helmfile directory, where the Helmfile configuration is located. Then, run the following commands to deploy Mojaloop: + +``` +cd local-deployment-methods/helmfile +helmfile apply +``` diff --git a/local-deployment-methods/docker_arm_rebuild/rebuild.sh b/local-deployment-methods/docker_arm_rebuild/rebuild.sh new file mode 100755 index 000000000..8d116f37c --- /dev/null +++ b/local-deployment-methods/docker_arm_rebuild/rebuild.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +HELM_CHART="../../mojaloop/" +HELM_RELEASE="moja" + +# Function to clone repo, checkout specific tag, and build docker image +build_docker_image_from_repo() { + IMAGE=$1 + REPO=$2 + TAG=$3 + + # Extract repo name for tagging image + REPO_NAME=$(basename "$REPO" .git) + + echo "Building Docker image from repo $REPO with tag $TAG" + + # Clone the repo + git clone "$REPO" + cd "$REPO_NAME" || exit + + # Checkout the specified tag + git checkout "$TAG" + + # Build the Docker image for ARM64 + docker build -t "$IMAGE" . + + # Cleanup and go back to parent directory + cd .. || exit + rm -rf "$REPO_NAME" +} + +# 1. Render the Helm chart template and extract image lines + +IMAGES=$(helm template "$HELM_RELEASE" "$HELM_CHART" | grep "image:" | awk '{print $2}') + +# 2. Create a temporary file to track unique image repo + tag combinations +touch processed_images.txt + +for IMAGE in $IMAGES +do + # Remove any quotes around the image string + IMAGE=$(echo $IMAGE | sed 's/^"//;s/"$//') + + # Check if the image starts with "mojaloop/" + if [[ $IMAGE == mojaloop/* ]]; then + # Extract the image repo name (mojaloop/account-lookup-service) and tag (v15.4.0-snapshot.33) + REPO_NAME=$(echo "$IMAGE" | cut -d ':' -f 1 | sed 's#mojaloop/##') # account-lookup-service + TAG=$(echo "$IMAGE" | cut -d ':' -f 2) # v15.4.0-snapshot.33 + + # Construct the Git repository URL based on the repo name + GIT_REPO="https://github.com/mojaloop/$REPO_NAME" + + # Create a unique key combining the repo and tag (to handle duplicates) + UNIQUE_KEY="$REPO_NAME:$TAG" + + # Check if this unique key has already been processed + if ! grep -q "$UNIQUE_KEY" processed_images.txt; then + # Mark this image as processed by writing it to the temporary file + echo "$UNIQUE_KEY" >> processed_images.txt + + # Run the build function in the background + build_docker_image_from_repo "$IMAGE" "$GIT_REPO" "$TAG" & + else + echo "Skipping duplicate image: $IMAGE" + fi + else + echo "Skipping non-mojaloop image: $IMAGE" + fi +done + +# Wait for all background jobs to finish +wait + +# Clean up the temporary file +rm processed_images.txt \ No newline at end of file diff --git a/local-deployment-methods/helmfile/README.md b/local-deployment-methods/helmfile/README.md new file mode 100644 index 000000000..2ca71bf5b --- /dev/null +++ b/local-deployment-methods/helmfile/README.md @@ -0,0 +1,45 @@ + +# Helmfile-based Mojaloop Installation + +This guide covers the steps to install and manage Mojaloop using **Helmfile**. Helmfile simplifies deploying and managing Helm charts, especially in complex environments with multiple services like Mojaloop. + +--- + +## Prerequisites + +- **Kubernetes cluster** (local or cloud-based) +- **Helm** (v3+): [Install Helm](https://helm.sh/docs/intro/install/) +- **kubectl**: [Install kubectl](https://kubernetes.io/docs/tasks/tools/) +- **Docker**: Required for building and managing images +- **Helmfile**: Installation instructions below +- **helm-diff** plugin: [Install helm-diff](https://github.com/databus23/helm-diff?tab=readme-ov-file#using-helm-plugin-manager--23x) + + +## Mojaloop Deployment with Helmfile + +Follow the below steps assume that you have a Kubernetes cluster up and running. + +```bash +helm repo add stable https://charts.helm.sh/stable +helm repo add incubator https://charts.helm.sh/incubator +helm repo add kiwigrid https://kiwigrid.github.io +helm repo add kokuwa https://kokuwaio.github.io/helm-charts +helm repo add elastic https://helm.elastic.co +helm repo add codecentric https://codecentric.github.io/helm-charts +helm repo add bitnami https://charts.bitnami.com/bitnami +helm repo add mojaloop-charts https://mojaloop.github.io/charts/repo +helm repo add redpanda https://charts.redpanda.com +helm repo add mojaloop https://mojaloop.io/helm/repo + +helm repo update + +sh update-charts-dep.sh +cd local-deployment-methods/helmfile +helmfile apply +``` + +## Uninstalling Mojaloop +To remove the Mojaloop deployment, use: +``` +helmfile destroy +``` diff --git a/local-deployment-methods/helmfile/helmfile.yaml b/local-deployment-methods/helmfile/helmfile.yaml new file mode 100644 index 000000000..2a4f49da5 --- /dev/null +++ b/local-deployment-methods/helmfile/helmfile.yaml @@ -0,0 +1,50 @@ +repositories: +- name: stable + url: https://charts.helm.sh/stable +- name: incubator + url: https://charts.helm.sh/incubator +- name: kiwigrid + url: https://kiwigrid.github.io +- name: kokuwa + url: https://kokuwaio.github.io/helm-charts +- name: elastic + url: https://helm.elastic.co +- name: codecentric + url: https://codecentric.github.io/helm-charts +- name: bitnami + url: https://charts.bitnami.com/bitnami +- name: mojaloop-charts + url: https://mojaloop.github.io/charts/repo +- name: redpanda + url: https://charts.redpanda.com +- name: mojaloop + url: https://mojaloop.io/helm/repo/ +- name: redpanda + url: https://charts.redpanda.com + +releases: +- name: backend + namespace: demo + chart: ../../example-mojaloop-backend + # chart: mojaloop/example-mojaloop-backend + # version: 15.7.0 + values: + - values-backend.yaml + # - values-backend-min.yaml + set: + - name: 'kafka.kraft.clusterId' + value: 'w1pu1g7pjnZDr0i4Fo66PD' +- name: moja + namespace: demo + chart: ../../mojaloop + # chart: mojaloop/mojaloop + # version: 16.2.1 + values: + - values-mojaloop-iso20022.yaml + # - values-mojaloop-min.yaml +- name: kafka-console + namespace: demo + chart: redpanda/console + version: 0.7.31 + values: + - values-kafka-console.yaml diff --git a/local-deployment-methods/helmfile/values-backend-min.yaml b/local-deployment-methods/helmfile/values-backend-min.yaml new file mode 100644 index 000000000..1b46c8034 --- /dev/null +++ b/local-deployment-methods/helmfile/values-backend-min.yaml @@ -0,0 +1,10 @@ +cl-mongodb: + enabled: false +ttk-mongodb: + enabled: false +ttksims-redis: + enabled: false +auth-svc-redis: + enabled: false +proxy-cache-redis: + enabled: false \ No newline at end of file diff --git a/local-deployment-methods/helmfile/values-backend.yaml b/local-deployment-methods/helmfile/values-backend.yaml new file mode 100644 index 000000000..6055af9b5 --- /dev/null +++ b/local-deployment-methods/helmfile/values-backend.yaml @@ -0,0 +1,10 @@ +cl-mongodb: + enabled: true +ttk-mongodb: + enabled: true +ttksims-redis: + enabled: true +auth-svc-redis: + enabled: true +proxy-cache-redis: + enabled: true \ No newline at end of file diff --git a/local-deployment-methods/helmfile/values-kafka-console.yaml b/local-deployment-methods/helmfile/values-kafka-console.yaml new file mode 100644 index 000000000..4b9a96125 --- /dev/null +++ b/local-deployment-methods/helmfile/values-kafka-console.yaml @@ -0,0 +1,17 @@ +console: + # -- Settings for the `Config.yaml` (required). + # For a reference of configuration settings, + # see the [Redpanda Console documentation](https://docs.redpanda.com/docs/reference/console/config/). + config: + kafka: + brokers: + - kafka:9092 + # roles: + # roleBindings: +# ingress: +# enabled: true +# hosts: +# - host: kafka-console.domainname.local +# paths: +# - path: / +# pathType: ImplementationSpecific diff --git a/local-deployment-methods/helmfile/values-mojaloop-iso20022.yaml b/local-deployment-methods/helmfile/values-mojaloop-iso20022.yaml new file mode 100644 index 000000000..5253771f9 --- /dev/null +++ b/local-deployment-methods/helmfile/values-mojaloop-iso20022.yaml @@ -0,0 +1,144 @@ +CONFIG: + ## ISO20022 + api_type: &API_TYPE "iso20022" + ttk_transformer_name: &TTK_TRANSFORMER_NAME "fspiopToISO20022" + ttk_input_values_override: &TTK_INPUT_VALUES_OVERRIDE + API_TYPE: *API_TYPE + ilpPacket: "$param_validIlpPacketV4" + validCondition: "$param_validConditionV4" + validFulfillment: "$param_validFulfillmentV4" + original_payload_storage: &ORIGINAL_PAYLOAD_STORAGE "redis" + payload_cache: &PAYLOAD_CACHE + enabled: true + type: redis-cluster + connectionConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + +x-disable-probes: &DISABLE_PROBES + metrics: + enabled: false + readinessProbe: + enabled: false + livenessProbe: + enabled: false + +account-lookup-service: + account-lookup-service: + <<: *DISABLE_PROBES + config: + api_type: *API_TYPE + original_payload_storage: *ORIGINAL_PAYLOAD_STORAGE + payload_cache: *PAYLOAD_CACHE + log_level: debug + +quoting-service: + quoting-service: + <<: *DISABLE_PROBES + config: + api_type: *API_TYPE + original_payload_storage: *ORIGINAL_PAYLOAD_STORAGE + payload_cache: *PAYLOAD_CACHE + log_level: debug + simple_routing_mode_enabled: false + quoting-service-handler: + <<: *DISABLE_PROBES + config: + original_payload_storage: *ORIGINAL_PAYLOAD_STORAGE + payload_cache: *PAYLOAD_CACHE + log_level: debug + simple_routing_mode_enabled: false + +ml-api-adapter: + ml-api-adapter-service: + <<: *DISABLE_PROBES + # image: + # repository: localhost:32000/mojaloop/ml-api-adapter + # tag: v14.2.0-snapshot.local.13 + # diagnosticMode: + # enabled: true + config: + api_type: *API_TYPE + original_payload_storage: *ORIGINAL_PAYLOAD_STORAGE + payload_cache: *PAYLOAD_CACHE + ml-api-adapter-handler-notification: + <<: *DISABLE_PROBES + # image: + # repository: localhost:32000/mojaloop/ml-api-adapter + # tag: v14.2.0-snapshot.local.13 + # diagnosticMode: + # enabled: true + config: + api_type: *API_TYPE + original_payload_storage: *ORIGINAL_PAYLOAD_STORAGE + payload_cache: *PAYLOAD_CACHE + +ml-testing-toolkit: + ml-testing-toolkit-backend: + # image: + # repository: localhost:32000/mojaloop/ml-testing-toolkit + # tag: v18.2.1-snapshot.local.1 + extraEnvironments: + hub-k8s-default-environment.json: + options: + transformerName: *TTK_TRANSFORMER_NAME + inputValues: + <<: *TTK_INPUT_VALUES_OVERRIDE + +ml-ttk-test-setup: + testCaseEnvironmentFile: + options: + transformerName: *TTK_TRANSFORMER_NAME + inputValues: + <<: *TTK_INPUT_VALUES_OVERRIDE +ml-ttk-test-val-gp: + testCaseEnvironmentFile: + options: + transformerName: *TTK_TRANSFORMER_NAME + inputValues: + <<: *TTK_INPUT_VALUES_OVERRIDE +ml-ttk-test-setup-interscheme: + testCaseEnvironmentFile: + options: + transformerName: *TTK_TRANSFORMER_NAME + inputValues: + <<: *TTK_INPUT_VALUES_OVERRIDE +ml-ttk-test-val-interscheme: + testCaseEnvironmentFile: + options: + transformerName: *TTK_TRANSFORMER_NAME + inputValues: + <<: *TTK_INPUT_VALUES_OVERRIDE +ml-ttk-test-cleanup: + testCaseEnvironmentFile: + options: + transformerName: *TTK_TRANSFORMER_NAME + inputValues: + <<: *TTK_INPUT_VALUES_OVERRIDE + +mojaloop-simulator: + defaults: + config: + schemeAdapter: + # image: + # repository: localhost:32000/mojaloop/sdk-scheme-adapter + # tag: v23.6.0-snapshot.local.27 + # diagnosticMode: + # enabled: true + env: + API_TYPE: iso20022 + ILP_VERSION: "4" + LOG_LEVEL: debug + readinessProbe: + enabled: false + livenessProbe: + enabled: false + metrics: + enabled: false + +inter-scheme-proxy-adapter: + <<: *DISABLE_PROBES + env: + LOG_LEVEL: debug + \ No newline at end of file diff --git a/local-deployment-methods/helmfile/values-mojaloop-min.yaml b/local-deployment-methods/helmfile/values-mojaloop-min.yaml new file mode 100644 index 000000000..7e6b164ab --- /dev/null +++ b/local-deployment-methods/helmfile/values-mojaloop-min.yaml @@ -0,0 +1,76 @@ +CONFIG: + interscheme_enabled: &INTERSCHEME_ENABLED false + proxy_cache: &PROXY_CACHE + enabled: *INTERSCHEME_ENABLED + +mojaloop-simulator: + enabled: false +centralsettlement: + enabled: false +transaction-requests-service: + enabled: false +ml-testing-toolkit: + ml-testing-toolkit-backend: + initContainers: [] + config: + mongodb: + password: '' + secret: null +account-lookup-service: + account-lookup-service: + config: + proxy_cache: *PROXY_CACHE + account-lookup-service-admin: + config: + proxy_cache: *PROXY_CACHE + account-lookup-service-handler-timeout: + enabled: *INTERSCHEME_ENABLED + config: + proxy_cache: *PROXY_CACHE +quoting-service: + quoting-service: + config: + proxy_cache: *PROXY_CACHE + quoting-service-handler: + config: + proxy_cache: *PROXY_CACHE +ml-api-adapter: + ml-api-adapter-service: + config: + proxy_cache: *PROXY_CACHE + ml-api-adapter-handler-notification: + config: + proxy_cache: *PROXY_CACHE +centralledger: + centralledger-service: + config: + proxy_cache: *PROXY_CACHE + centralledger-handler-transfer-prepare: + config: + proxy_cache: *PROXY_CACHE + centralledger-handler-transfer-position: + config: + proxy_cache: *PROXY_CACHE + centralledger-handler-transfer-position-batch: + config: + proxy_cache: *PROXY_CACHE + diagnosticMode: + enabled: true + centralledger-handler-transfer-get: + config: + proxy_cache: *PROXY_CACHE + centralledger-handler-transfer-fulfil: + config: + proxy_cache: *PROXY_CACHE + centralledger-handler-timeout: + config: + proxy_cache: *PROXY_CACHE + centralledger-handler-admin-transfer: + config: + proxy_cache: *PROXY_CACHE +ml-ttk-test-setup-interscheme: + tests: + enabled: *INTERSCHEME_ENABLED +ml-ttk-test-val-interscheme: + tests: + enabled: *INTERSCHEME_ENABLED diff --git a/local-deployment-methods/helmfile/values-mojaloop.yaml b/local-deployment-methods/helmfile/values-mojaloop.yaml new file mode 100644 index 000000000..3d2d81a78 --- /dev/null +++ b/local-deployment-methods/helmfile/values-mojaloop.yaml @@ -0,0 +1 @@ +ml-testing-toolkit: {} \ No newline at end of file diff --git a/ml-api-adapter/Chart.yaml b/ml-api-adapter/Chart.yaml index d299e78bf..b4171ad98 100644 --- a/ml-api-adapter/Chart.yaml +++ b/ml-api-adapter/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: ml-api-adapter Helm chart for Kubernetes name: ml-api-adapter -version: 13.0.1 -appVersion: "14.0.5" +version: 13.6.0 +appVersion: v16.0.2 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,21 +12,19 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: ml-api-adapter-service - version: ">= 13.0.1" + version: ">= 13.4.0" repository: "file://./chart-service" condition: ml-api-adapter-service.enabled - name: ml-api-adapter-handler-notification - version: ">= 13.0.1" + version: ">= 13.4.0" repository: "file://./chart-handler-notification" condition: ml-api-adapter-handler-notification.enabled - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.1.2 tags: - moja-common diff --git a/ml-api-adapter/chart-handler-notification/Chart.yaml b/ml-api-adapter/chart-handler-notification/Chart.yaml index 117485e16..9c06ccfe8 100644 --- a/ml-api-adapter/chart-handler-notification/Chart.yaml +++ b/ml-api-adapter/chart-handler-notification/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: ml-api-adapter Handler for Notifications component Helm chart for Kubernetes name: ml-api-adapter-handler-notification -version: 13.0.1 -appVersion: "14.0.5" +version: 13.4.0 +appVersion: v16.0.2 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.3 tags: - moja-common diff --git a/ml-api-adapter/chart-handler-notification/configs/default.json b/ml-api-adapter/chart-handler-notification/configs/default.json index 30ddc1ac6..b7c90b2f3 100644 --- a/ml-api-adapter/chart-handler-notification/configs/default.json +++ b/ml-api-adapter/chart-handler-notification/configs/default.json @@ -1,6 +1,13 @@ {{- $kafkaHost := ( .Values.config.kafka_host | replace "$release_name" .Release.Name ) -}} {{- $centralServicesHost := ( .Values.config.central_services_host | replace "$release_name" .Release.Name ) -}} { + "API_TYPE": {{ .Values.config.api_type | quote }}, + "ORIGINAL_PAYLOAD_STORAGE": {{ .Values.config.original_payload_storage | quote }}, + "PAYLOAD_CACHE": {{ .Values.config.payload_cache | toPrettyJson | nindent 2}}, + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": {{ .Values.config.hub_participant.name | quote }} + }, "PORT": {{ .Values.service.internalPort }}, "ENDPOINT_SOURCE_URL": "http://{{ $centralServicesHost }}:{{ .Values.config.central_services_port }}", "ENDPOINT_HEALTH_URL": "http://{{ $centralServicesHost }}:{{ .Values.config.central_services_port }}{{ .Values.config.central_services_health_endpoint_param }}", @@ -11,7 +18,6 @@ "ENDPOINT_SECURITY":{ "JWS": { "JWS_SIGN": {{ .Values.config.endpointSecurity.jwsSign }}, - "FSPIOP_SOURCE_TO_SIGN": {{ .Values.config.endpointSecurity.fspiopSourceSigningName | quote }}, "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key" }, "TLS": { @@ -53,6 +59,7 @@ } } }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 4}}, "KAFKA": { "TOPIC_TEMPLATES": { "GENERAL_TOPIC_TEMPLATE": { diff --git a/ml-api-adapter/chart-handler-notification/templates/config-override.yaml b/ml-api-adapter/chart-handler-notification/templates/config-override.yaml new file mode 100644 index 000000000..baf1fa686 --- /dev/null +++ b/ml-api-adapter/chart-handler-notification/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "ml-api-adapter-handler-notification.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "ml-api-adapter-handler-notification.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/ml-api-adapter/chart-handler-notification/templates/deployment.yaml b/ml-api-adapter/chart-handler-notification/templates/deployment.yaml index 146700cc7..33f958515 100644 --- a/ml-api-adapter/chart-handler-notification/templates/deployment.yaml +++ b/ml-api-adapter/chart-handler-notification/templates/deployment.yaml @@ -20,6 +20,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "ml-api-adapter-handler-notification.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -32,8 +35,14 @@ spec: {{- if .Values.podLabels }} {{- include "common.tplvalues.render" ( dict "value" .Values.podLabels "context" $ ) | nindent 8 }} {{- end }} + {{- if .Values.usePdb }} + {{- include "common.pdb.matchLabels" . | nindent 8 }} + {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret-jws: {{ include (print $.Template.BasePath "/secret-jws.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} @@ -44,6 +53,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -103,6 +113,11 @@ spec: periodSeconds: {{ .Values.livenessProbe.periodSeconds }} {{- end }} volumeMounts: +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} - name: {{ template "ml-api-adapter-handler-notification.fullname" . }}-config-volume mountPath: /opt/app/config {{- if .Values.config.endpointSecurity.jwsSign }} @@ -177,10 +192,22 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "ml-api-adapter-handler-notification.fullname" . }}-config-override + {{- end }} {{- if .Values.config.endpointSecurity.jwsSign }} - name: jws-signing-key secret: + {{- if .Values.config.endpointSecurity.jwsSigningKeySecret }} + secretName: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.name }} + items: + - key: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.key }} + path: jwsSigningKey.key + {{ else }} secretName: {{ template "ml-api-adapter-handler-notification.fullname" . }}-jws-signing-key + {{- end }} {{- end }} - name: {{ template "ml-api-adapter-handler-notification.fullname" . }}-config-volume configMap: diff --git a/ml-api-adapter/chart-handler-notification/templates/secret-jws.yaml b/ml-api-adapter/chart-handler-notification/templates/secret-jws.yaml index 2db032acf..1543da7e4 100644 --- a/ml-api-adapter/chart-handler-notification/templates/secret-jws.yaml +++ b/ml-api-adapter/chart-handler-notification/templates/secret-jws.yaml @@ -1,6 +1,6 @@ -{{- if .Values.config.endpointSecurity.jwsSign }} +{{- if and .Values.config.endpointSecurity.jwsSign (not .Values.config.endpointSecurity.jwsSigningKeySecret) }} {{- if (not .Values.config.endpointSecurity.jwsSigningKey) }} - {{- fail "JWS signing enabled but no jwsSigningKey provided. You will need to supply a JWS signing key in string form .Values.endpointSecurity.jwsSigningKey." }} + {{- fail "JWS signing enabled but neither jwsSigningKey nor jwsSigningKeySecret was provided. You will need to supply a JWS signing key in string form via .Values.endpointSecurity.jwsSigningKey or a secret via .Values.endpointSecurity.jwsSigningKeySecret." }} {{- end }} apiVersion: v1 kind: Secret diff --git a/ml-api-adapter/chart-handler-notification/templates/service.yaml b/ml-api-adapter/chart-handler-notification/templates/service.yaml index b1b558007..0e34cb1ae 100644 --- a/ml-api-adapter/chart-handler-notification/templates/service.yaml +++ b/ml-api-adapter/chart-handler-notification/templates/service.yaml @@ -39,7 +39,7 @@ spec: - port: {{ .Values.service.port }} targetPort: {{ .Values.service.internalPort }} protocol: TCP - name: {{ .Values.service.name }} + name: http {{- if (and (or (eq .Values.service.type "NodePort") (eq .Values.service.type "LoadBalancer")) .Values.service.nodePort) }} nodePort: {{ .Values.service.nodePort }} {{- else if eq .Values.service.type "ClusterIP" }} diff --git a/ml-api-adapter/chart-handler-notification/values.yaml b/ml-api-adapter/chart-handler-notification/values.yaml index 6448788f5..dff0e0acb 100644 --- a/ml-api-adapter/chart-handler-notification/values.yaml +++ b/ml-api-adapter/chart-handler-notification/values.yaml @@ -5,7 +5,7 @@ image: registry: docker.io repository: mojaloop/ml-api-adapter - tag: v14.0.5 + tag: v16.0.2 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -23,6 +23,11 @@ image: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--notification"]' +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -31,16 +36,16 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - - src/handlers/index.js - - handler - - '--notification' + ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + - src/handlers/index.js + - handler + - '--notification' ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -114,14 +119,7 @@ initContainers: command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; - do - echo --------------------; - echo Waiting for Kafka...; - sleep 2; - done; - echo ====================; - echo Kafka ok!; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; sleep 2; done; echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST value: '{{ .Values.config.kafka_host }}' @@ -152,6 +150,20 @@ metrics: serviceName: ml-handler-notification config: + ## fspiop | iso20022 + api_type: fspiop + ## kafka | redis | "" + original_payload_storage: "" + payload_cache: + enabled: false + type: redis-cluster + connectionConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + hub_participant: + id: 1 + name: Hub # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: kafka kafka_port: 9092 @@ -166,22 +178,26 @@ config: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -215,26 +231,37 @@ config: # Parameters for JWS signing requests generated by ml-api-adapter endpointSecurity: jwsSign: false - fspiopSourceSigningName: 'switch' - jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- - - ## Error handling Configuration + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null +# To generate this key: +# Private: +# ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key +# Public: +# openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub +# Should look like: +# -----BEGIN RSA PRIVATE KEY----- +# MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R +# .. +# .. +# mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 +# -----END RSA PRIVATE KEY----- +## Error handling Configuration error_handling: include_cause_extension: false truncate_extensions: true + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## @param master.podLabels Extra labels for pod(s) ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ ## @@ -257,17 +284,15 @@ service: ## e.g.: ## clusterIP: None ## - clusterIP: - ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP - ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer - ## - loadBalancerIP: - ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources - ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service - ## e.g: - ## loadBalancerSourceRanges: - ## - 10.10.10.0/24 - ## + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP +## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer +## + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources +## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service +## e.g: +## loadBalancerSourceRanges: +## - 10.10.10.0/24 +## loadBalancerSourceRanges: [] ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip @@ -295,9 +320,8 @@ ingress: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: - ## @param ingress.hostname Default host for the ingress record - ## + apiVersion: null ## @param ingress.hostname Default host for the ingress record +## hostname: ml-api-adapter-notification.local ## @param servicePort : port for the service ## @@ -308,14 +332,13 @@ ingress: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: - ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter - ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` - ## You can: - ## - Use the `ingress.secrets` parameter to create this TLS secret - ## - Relay on cert-manager to create it by setting `ingress.certManager=true` - ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` - ## + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter +## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` +## You can: +## - Use the `ingress.secrets` parameter to create this TLS secret +## - Relay on cert-manager to create it by setting `ingress.certManager=true` +## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` +## tls: false ## @param ingress.certManager Add the corresponding annotations for cert-manager integration ## @@ -329,12 +352,11 @@ ingress: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -346,3 +368,5 @@ ingress: # cpu: 100m # memory: 128Mi resources: {} + +usePdb: false diff --git a/ml-api-adapter/chart-service/Chart.yaml b/ml-api-adapter/chart-service/Chart.yaml index c1d52b9e8..ccd38e108 100644 --- a/ml-api-adapter/chart-service/Chart.yaml +++ b/ml-api-adapter/chart-service/Chart.yaml @@ -1,25 +1,22 @@ apiVersion: v2 description: ml-api-adapter API component Helm chart for Kubernetes name: ml-api-adapter-service -version: 13.0.1 -appVersion: "14.0.5" +version: 13.4.0 +appVersion: v16.0.2 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: - - https://github.com/mojaloop/mojaloop - - https://github.com/mojaloop/helm - - https://github.com/mojaloop/ml-api-adapter + - https://github.com/mojaloop/mojaloop + - https://github.com/mojaloop/helm + - https://github.com/mojaloop/ml-api-adapter maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.2 tags: - moja-common - diff --git a/ml-api-adapter/chart-service/configs/default.json b/ml-api-adapter/chart-service/configs/default.json index 44dcf102a..c09163261 100644 --- a/ml-api-adapter/chart-service/configs/default.json +++ b/ml-api-adapter/chart-service/configs/default.json @@ -1,6 +1,13 @@ {{- $kafkaHost := ( .Values.config.kafka_host | replace "$release_name" .Release.Name ) -}} {{- $centralServicesHost := ( .Values.config.central_services_host | replace "$release_name" .Release.Name ) -}} { + "API_TYPE": {{ .Values.config.api_type | quote }}, + "ORIGINAL_PAYLOAD_STORAGE": {{ .Values.config.original_payload_storage | quote }}, + "PAYLOAD_CACHE": {{ .Values.config.payload_cache | toPrettyJson | nindent 2}}, + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": {{ .Values.config.hub_participant.name | quote }} + }, "PORT": {{ .Values.service.internalPort }}, "ENDPOINT_SOURCE_URL": "http://{{ $centralServicesHost }}:{{ .Values.config.central_services_port }}", "ENDPOINT_HEALTH_URL": "http://{{ $centralServicesHost }}:{{ .Values.config.central_services_port }}{{ .Values.config.central_services_health_endpoint_param }}", @@ -11,7 +18,6 @@ "ENDPOINT_SECURITY":{ "JWS": { "JWS_SIGN": false, - "FSPIOP_SOURCE_TO_SIGN": "switch", "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key" }, "TLS": { @@ -53,6 +59,7 @@ } } }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 4}}, "KAFKA": { "TOPIC_TEMPLATES": { "GENERAL_TOPIC_TEMPLATE": { diff --git a/ml-api-adapter/chart-service/templates/config-override.yaml b/ml-api-adapter/chart-service/templates/config-override.yaml new file mode 100644 index 000000000..3f79e9810 --- /dev/null +++ b/ml-api-adapter/chart-service/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "ml-api-adapter-service.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "ml-api-adapter-service.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/ml-api-adapter/chart-service/templates/deployment.yaml b/ml-api-adapter/chart-service/templates/deployment.yaml index b53ae19b2..97495fd8b 100644 --- a/ml-api-adapter/chart-service/templates/deployment.yaml +++ b/ml-api-adapter/chart-service/templates/deployment.yaml @@ -34,6 +34,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} # Custom Pod annotations {{- if .Values.podAnnotations }} {{- include "common.tplvalues.render" ( dict "value" .Values.podAnnotations "context" $ ) | nindent 8 }} @@ -43,6 +46,7 @@ spec: prometheus.io/scrape: "true" {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -102,6 +106,11 @@ spec: periodSeconds: {{ .Values.livenessProbe.periodSeconds }} {{- end }} volumeMounts: +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} - name: {{ template "ml-api-adapter-service.fullname" . }}-config-volume mountPath: /opt/app/config env: @@ -173,6 +182,11 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "ml-api-adapter-service.fullname" . }}-config-override + {{- end }} - name: {{ template "ml-api-adapter-service.fullname" . }}-config-volume configMap: name: {{ template "ml-api-adapter-service.fullname" . }}-config diff --git a/ml-api-adapter/chart-service/values.yaml b/ml-api-adapter/chart-service/values.yaml index 8cb3efbef..9b9ff4917 100644 --- a/ml-api-adapter/chart-service/values.yaml +++ b/ml-api-adapter/chart-service/values.yaml @@ -4,7 +4,7 @@ image: registry: docker.io repository: mojaloop/ml-api-adapter - tag: v14.0.5 + tag: v16.0.2 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -20,7 +20,7 @@ image: pullSecrets: [] replicaCount: 1 -command: '["node", "src/api/index.js"]' +command: '["node", "src/api/index.js"]' ## Enable diagnostic mode in the deployment ## @@ -30,14 +30,14 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/api/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -151,6 +151,20 @@ metrics: serviceName: ml-service config: + ## fspiop | iso20022 + api_type: fspiop + ## kafka | redis | "" + original_payload_storage: "" + payload_cache: + enabled: false + type: redis-cluster + connectionConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + hub_participant: + id: 1 + name: Hub # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: kafka kafka_port: 9092 @@ -165,22 +179,26 @@ config: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -204,6 +222,15 @@ config: event_async_override: 'log,trace' event_traceid_per_vendor: false + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## Error handling Configuration error_handling: include_cause_extension: false diff --git a/ml-api-adapter/values.yaml b/ml-api-adapter/values.yaml index 5defff602..54c81a0e5 100644 --- a/ml-api-adapter/values.yaml +++ b/ml-api-adapter/values.yaml @@ -10,11 +10,11 @@ ml-api-adapter-service: # Default values for ml-api-adapter. # This is a YAML-formatted file. # Declare variables to be passed into your templates. - + image: registry: docker.io repository: mojaloop/ml-api-adapter - tag: v14.0.5 + tag: v16.0.2 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -30,7 +30,17 @@ ml-api-adapter-service: pullSecrets: [] replicaCount: 1 - command: '["node", "src/api/index.js"]' + command: '["node", "src/api/index.js"]' + + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" ## Enable diagnostic mode in the deployment ## @@ -40,14 +50,14 @@ ml-api-adapter-service: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - - src/api/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + - src/api/index.js + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -102,13 +112,13 @@ ml-api-adapter-service: command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST @@ -135,6 +145,20 @@ ml-api-adapter-service: enabled: true config: + ## fspiop | iso20022 + api_type: fspiop + ## kafka | redis | "" + original_payload_storage: "" + payload_cache: + enabled: false + type: redis-cluster + connectionConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + hub_participant: + id: 1 + name: Hub # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: kafka kafka_port: 9092 @@ -149,22 +173,26 @@ ml-api-adapter-service: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -187,6 +215,15 @@ ml-api-adapter-service: event_async_override: 'log,trace' event_traceid_per_vendor: false + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + ## Error handling Configuration error_handling: include_cause_extension: false @@ -310,11 +347,11 @@ ml-api-adapter-handler-notification: # Default values for ml-api-adapter. # This is a YAML-formatted file. # Declare variables to be passed into your templates. - + image: registry: docker.io repository: mojaloop/ml-api-adapter - tag: v14.0.5 + tag: v16.0.2 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -332,6 +369,16 @@ ml-api-adapter-handler-notification: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--notification"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -340,16 +387,16 @@ ml-api-adapter-handler-notification: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - - src/handlers/index.js - - handler - - '--notification' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + - src/handlers/index.js + - handler + - '--notification' + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -406,13 +453,13 @@ ml-api-adapter-handler-notification: command: - sh - -c - - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; do echo --------------------; echo Waiting for Kafka...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo Kafka ok!; env: - name: KAFKA_HOST @@ -439,6 +486,20 @@ ml-api-adapter-handler-notification: enabled: true config: + ## fspiop | iso20022 + api_type: fspiop + ## kafka | redis | "" + original_payload_storage: "" + payload_cache: + enabled: false + type: redis-cluster + connectionConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + hub_participant: + id: 1 + name: Hub # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: kafka kafka_port: 9092 @@ -453,22 +514,26 @@ ml-api-adapter-handler-notification: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -500,8 +565,11 @@ ml-api-adapter-handler-notification: # Parameters for JWS signing requests generated by ml-api-adapter endpointSecurity: jwsSign: false - fspiopSourceSigningName: 'switch' - jwsSigningKey: + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null # To generate this key: # Private: # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key @@ -520,6 +588,15 @@ ml-api-adapter-handler-notification: include_cause_extension: false truncate_extensions: true + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + service: type: ClusterIP externalPort: 80 diff --git a/ml-operator/Chart.yaml b/ml-operator/Chart.yaml index 4fc0cb260..fc728cb5c 100644 --- a/ml-operator/Chart.yaml +++ b/ml-operator/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: ml-operator description: ml-operator makes running and managing a Mojaloop deployment easier type: application -version: 0.2.0 +version: 0.4.0 appVersion: 0.1.3 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png @@ -10,13 +10,11 @@ sources: - https://github.com/mojaloop/ml-operator - https://github.com/mojaloop/helm maintainers: - - name: Tom Daly - email: tomd@crosslaketech.com - name: Miguel de Barros email: miguel.debarros@modusbox.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.0.0 tags: - moja-common diff --git a/ml-testing-toolkit-cli/Chart.yaml b/ml-testing-toolkit-cli/Chart.yaml index e01718f9a..e070108aa 100644 --- a/ml-testing-toolkit-cli/Chart.yaml +++ b/ml-testing-toolkit-cli/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: ml-testing-toolkit-cli Helm chart for Kubernetes name: ml-testing-toolkit-cli -version: 15.3.2 -appVersion: "v1.2.1" +version: 15.6.0 +appVersion: v1.2.1 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Vijay Kumar Guthi email: vijaya.guthi@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Miguel de Barros email: miguel.debarros@modusbox.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.0.0 tags: - moja-common diff --git a/ml-testing-toolkit-cli/templates/_helpers.tpl b/ml-testing-toolkit-cli/templates/_helpers.tpl index 48aa8842a..196f95acb 100644 --- a/ml-testing-toolkit-cli/templates/_helpers.tpl +++ b/ml-testing-toolkit-cli/templates/_helpers.tpl @@ -94,6 +94,14 @@ containers: envFrom: - secretRef: name: {{ template "ml-testing-toolkit-cli.fullname" . }}-aws-creds + {{- if .Values.env }} + env: + {{- range $key, $val := .Values.env }} + - name: {{ $key }} + value: {{ $val | quote }} + {{- end }} + {{- end }} + volumeMounts: - name: {{ $serviceFullName }}-env mountPath: /opt/app/cli-testcase-environment.json diff --git a/ml-testing-toolkit-cli/templates/job.yaml b/ml-testing-toolkit-cli/templates/job.yaml index aa648e553..8e1f10e9c 100644 --- a/ml-testing-toolkit-cli/templates/job.yaml +++ b/ml-testing-toolkit-cli/templates/job.yaml @@ -15,6 +15,7 @@ spec: restartPolicy: {{ .Values.restartPolicy }} {{- include "ml-testing-toolkit-cli.jobtemplate" . | nindent 6 }} {{- end }} + {{- if .Values.job.enabled }} ## added job definition to values.yaml apiVersion: {{ template "ml-testing-toolkit-cli.apiVersion.Job" . }} kind: Job @@ -24,8 +25,8 @@ metadata: {{- else }} name: {{ template "ml-testing-toolkit-cli.fullname" . }} {{- end }} - annotations: - ## If the postInstallHook is enabled without custom annotations use the helm default hook + annotations: + ## If the postInstallHook is enabled without custom annotations use the helm default hook {{- if ( .Values.postInstallHook.enabled) }} "helm.sh/hook": post-install "helm.sh/hook-weight": {{ .Values.postInstallHook.weight | quote }} @@ -43,4 +44,4 @@ spec: backoffLimit: {{ .Values.backoffLimit }} restartPolicy: {{ .Values.restartPolicy }} {{- include "ml-testing-toolkit-cli.jobtemplate" . | indent 2 }} -{{- end }} \ No newline at end of file +{{- end }} diff --git a/ml-testing-toolkit-cli/values.yaml b/ml-testing-toolkit-cli/values.yaml index b77001d49..ef3fd4a6b 100644 --- a/ml-testing-toolkit-cli/values.yaml +++ b/ml-testing-toolkit-cli/values.yaml @@ -4,7 +4,7 @@ replicaCount: 1 image: repository: mojaloop/ml-testing-toolkit-client-lib - tag: v1.2.0 + tag: v1.5.0 pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -19,10 +19,9 @@ image: backoffLimit: 0 restartPolicy: Never - - ## Bash script for TTK CLI script: | + until nslookup github.com; do sleep 5;done; echo "Downloading the test collection..."; wget {{ .Values.config.testCasesZipUrl }} -O downloaded-test-collections.zip; mkdir tmp_test_cases; @@ -40,7 +39,6 @@ script: | {{- if .Values.configCreds.SLACK_WEBHOOK_URL }} --slack-webhook-url $SLACK_WEBHOOK_URL \ {{- end }} - --extra-summary-information="Test Suite:{{ .Values.config.testSuiteName }},Environment:{{ .Values.config.environmentName }}" \ {{- if .Values.config.saveReport }} --save-report true \ {{- end }} @@ -48,8 +46,12 @@ script: | --report-name {{ .Values.config.reportName }} \ {{- end }} {{- if .Values.config.saveReportBaseUrl }} - --save-report-base-url {{ .Values.config.saveReportBaseUrl }} - {{- end }}; + --save-report-base-url {{ .Values.config.saveReportBaseUrl }} \ + {{- end }} + {{- if .Values.config.batchSize }} + --batch-size {{ .Values.config.batchSize }} \ + {{- end }} + --extra-summary-information="Test Suite:{{ .Values.config.testSuiteName }},Environment:{{ .Values.config.environmentName }}"; {{- if .Values.config.allowFailures }} export TEST_RUNNER_EXIT_CODE="$?" echo "Test Runner finished with exit code: $TEST_RUNNER_EXIT_CODE" @@ -106,10 +108,8 @@ job: # argocd.argoproj.io/hook: PostSync # argocd.argoproj.io/sync-wave: "-5" #### If passing the arguments using commad line, may be necessary scape the "." character -> i.e: "argocd\.argoproj\.io/hook": PostSync - # Add custom labels of job template here. templateLabels: {} - config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: https://github.com/mojaloop/testing-toolkit-test-cases/archive/v.zip @@ -129,6 +129,10 @@ config: ## If this is set to `true` - it will allow all Helm tests to be executed regardless of any failures. allowFailures: false +## Env vars +#env: +# key1: value1 + ## Optionally you can specify some parameters here and the references in the environment file like the format '$param_' will be replaced with their values specified here parameters: {} configCreds: @@ -162,16 +166,14 @@ testCaseEnvironmentFile: # } # } inputValues: {} - resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - +# We usually recommend not to specify default resources and to leave this as a conscious +# choice for the user. This also increases chances charts run on environments with little +# resources, such as Minikube. If you do want to specify resources, uncomment the following +# lines, adjust them as necessary, and remove the curly braces after 'resources:'. +# limits: +# cpu: 100m +# memory: 128Mi +# requests: +# cpu: 100m +# memory: 128Mi diff --git a/ml-testing-toolkit/Chart.yaml b/ml-testing-toolkit/Chart.yaml index 34aa5a205..d74f85bfb 100644 --- a/ml-testing-toolkit/Chart.yaml +++ b/ml-testing-toolkit/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: ml-testing-toolkit Helm chart for Kubernetes name: ml-testing-toolkit -version: 17.0.0 -appVersion: "ml-testing-toolkit: v17.0.0 ml-testing-toolkit-ui: v15.4.0" +version: 17.4.0 +appVersion: "ml-testing-toolkit: v18.4.3; ml-testing-toolkit-ui: v16.0.0" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -15,23 +15,21 @@ sources: maintainers: - name: Vijay Kumar email: vijaya.guthi@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Miguel de Barros email: miguel.debarros@modusbox.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: ml-testing-toolkit-frontend - version: ">= 15.4.0" + version: ">= 15.7.0" repository: "file://./chart-frontend" condition: ml-testing-toolkit-frontend.enabled - name: ml-testing-toolkit-backend - version: ">= 16.0.0" + version: ">= 16.3.0" repository: "file://./chart-backend" condition: ml-testing-toolkit-backend.enabled - name: common repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + version: 3.0.0 tags: - moja-common diff --git a/ml-testing-toolkit/chart-backend/Chart.yaml b/ml-testing-toolkit/chart-backend/Chart.yaml index ba2b07643..9fdf56439 100644 --- a/ml-testing-toolkit/chart-backend/Chart.yaml +++ b/ml-testing-toolkit/chart-backend/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: ml-testing-toolkit-backend Helm chart for Kubernetes name: ml-testing-toolkit-backend -version: 16.0.0 -appVersion: "v17.0.0" +version: 16.3.0 +appVersion: v18.4.3 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,8 +12,6 @@ sources: maintainers: - name: Vijay Kumar Guthi email: vijaya.guthi@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Miguel de Barros email: miguel.debarros@modusbox.com - name: Steven Oderayi @@ -21,6 +19,6 @@ maintainers: dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.0.0 tags: - - moja-common + - moja-common diff --git a/ml-testing-toolkit/chart-backend/templates/statefulset.yaml b/ml-testing-toolkit/chart-backend/templates/statefulset.yaml index dde280aee..d019db32b 100644 --- a/ml-testing-toolkit/chart-backend/templates/statefulset.yaml +++ b/ml-testing-toolkit/chart-backend/templates/statefulset.yaml @@ -32,6 +32,10 @@ spec: {{- if .Values.podAnnotations }} {{- include "common.tplvalues.render" ( dict "value" .Values.podAnnotations "context" $ ) | nindent 8 }} {{- end }} + {{- if .Values.metrics.enabled }} + prometheus.io/port: "{{ .Values.service.ports.adminApi.port }}" + prometheus.io/scrape: "true" + {{- end }} labels: app.kubernetes.io/name: {{ include "ml-testing-toolkit-backend.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} @@ -84,9 +88,19 @@ spec: {{- else }} value: {{ .Values.config.mongodb.password }} {{- end }} + - name: REPORTING_DB_CONNECTION_STRING + {{- if .Values.config.mongodb.connectionStringSecret.name }} + valueFrom: + secretKeyRef: + name: '{{ .Values.config.mongodb.connectionStringSecret.name }}' + key: '{{ .Values.config.mongodb.connectionStringSecret.key }}' + {{- else }} + value: {{ .Values.config.mongodb.connectionString }} + {{- end }} ports: - containerPort: {{ .Values.service.ports.specApi.port }} - containerPort: {{ .Values.service.ports.adminApi.port }} + name: http {{- if .Values.readinessProbe.enabled }} readinessProbe: httpGet: @@ -115,10 +129,12 @@ spec: {{- end }} - name: {{ $serviceFullName }}-volume-config-default mountPath: /opt/default_config + - name: release-cd-rc + mountPath: /home/ml-user/.release_cd volumes: {{- if .Values.persistence.enabled }} - name: ttk-data - emptyDir: {} + emptyDir: {} {{- end }} - name: {{ template "ml-testing-toolkit-backend.fullname" . }}-volume-config-default configMap: @@ -136,6 +152,10 @@ spec: - key: {{ $k }} path: {{ $k }} {{- end }} + - name: release-cd-rc + configMap: + name: release-cd-rc + optional: true {{- if .Values.persistence.enabled }} volumeClaimTemplates: diff --git a/ml-testing-toolkit/chart-backend/values.yaml b/ml-testing-toolkit/chart-backend/values.yaml index 6a23cf2cb..b32771e39 100644 --- a/ml-testing-toolkit/chart-backend/values.yaml +++ b/ml-testing-toolkit/chart-backend/values.yaml @@ -9,7 +9,7 @@ enabled: true image: repository: mojaloop/ml-testing-toolkit - tag: v17.0.0 + tag: v18.7.3 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -81,6 +81,10 @@ config: # name: ttk-mongodb # key: mongodb-passwords database: "ttk" + connectionString: null + connectionStringSecret: + name: null + key: null ## Svc config files ## $snake_case values are dynamic @@ -113,6 +117,16 @@ config_files: "method": "put", "path": "/transfers/{ID}", "endpoint": "http://$release_name-ml-api-adapter-service" + }, + { + "method": "put", + "path": "/fxQuotes/{ID}", + "endpoint": "http://$release_name-quoting-service" + }, + { + "method": "put", + "path": "/fxTransfers/{ID}", + "endpoint": "http://$release_name-ml-api-adapter-service" } ] }, @@ -173,17 +187,32 @@ config_files: { "name": "p2p", "description": "Tests related to p2p transfer", - "color": "red" + "color": "gold" }, { "name": "settlements", "description": "Tests related to settlements", - "color": "green" + "color": "lime" }, { "name": "quotes", "description": "Tests related to quoting service", - "color": "blue" + "color": "cyan" + }, + { + "name": "min-func-tests", + "description": "Minimal functional tests", + "color": "green" + }, + { + "name": "basic-func-tests", + "description": "Basic functional tests", + "color": "orange" + }, + { + "name": "prod-tests", + "description": "Production Tests", + "color": "red" } ] } @@ -191,6 +220,7 @@ config_files: system_config.json: { "API_PORT": 4040, + "PARALLEL_RUN_ENABLED": true, "HOSTING_ENABLED": false, "INBOUND_MUTUAL_TLS_ENABLED": false, "OUTBOUND_MUTUAL_TLS_ENABLED": false, @@ -206,7 +236,8 @@ config_files: "PORT": "{{ .Values.config.mongodb.port }}", "USER": "{{ .Values.config.mongodb.user }}", "PASSWORD": "{{ .Values.config.mongodb.password }}", - "DATABASE": "{{ .Values.config.mongodb.database }}" + "DATABASE": "{{ .Values.config.mongodb.database }}", + "CONNECTION_STRING": "{{ .Values.config.mongodb.connectionString }}" }, "OAUTH": { "AUTH_ENABLED": false, @@ -263,6 +294,18 @@ config_files: "folderPath": "fspiop_1.1", "asynchronous": true }, + { + "type": "fspiop", + "version": "2.0", + "folderPath": "fspiop_2.0", + "asynchronous": true + }, + { + "type": "iso20022", + "version": "2.0", + "folderPath": "fspiop_2.0_iso20022", + "asynchronous": true + }, { "type": "settlements", "version": "1.0", @@ -474,3 +517,8 @@ persistence: # storageClass: "-" accessMode: ReadWriteOnce size: 1Gi + +## metric configuration for prometheus instrumentation +metrics: + ## flag to enable/disable the metrics end-points + enabled: true diff --git a/ml-testing-toolkit/chart-frontend/Chart.yaml b/ml-testing-toolkit/chart-frontend/Chart.yaml index d157b6dfb..b5870cb30 100644 --- a/ml-testing-toolkit/chart-frontend/Chart.yaml +++ b/ml-testing-toolkit/chart-frontend/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: ml-testing-toolkit-frontend Helm chart for Kubernetes name: ml-testing-toolkit-frontend -version: 15.4.0 -appVersion: "v15.4.0" +version: 15.7.0 +appVersion: v16.0.0 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -12,13 +12,11 @@ sources: maintainers: - name: Vijay Kumar Guthi email: vijaya.guthi@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Miguel de Barros email: miguel.debarros@modusbox.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.0.0 tags: - moja-common diff --git a/ml-testing-toolkit/chart-frontend/values.yaml b/ml-testing-toolkit/chart-frontend/values.yaml index 976b50220..bd4a51e8c 100644 --- a/ml-testing-toolkit/chart-frontend/values.yaml +++ b/ml-testing-toolkit/chart-frontend/values.yaml @@ -1,10 +1,9 @@ # Default values for ml-api-adapter. # This is a YAML-formatted file. # Declare variables to be passed into your templates. - image: repository: mojaloop/ml-testing-toolkit-ui - tag: v15.4.0 + tag: v16.0.4 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -69,8 +68,8 @@ config: ## imagePullPolicy: Always ## command: ['sh', '-c', 'echo "hello world"'] ## -initContainers: [] # We want to disable init-containers as there is no need - +initContainers: [] +# We want to disable init-containers as there is no need ## @param master.podLabels Extra labels for pod(s) ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ ## @@ -93,17 +92,17 @@ service: ## e.g.: ## clusterIP: None ## - clusterIP: - ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP - ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer - ## - loadBalancerIP: - ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources - ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service - ## e.g: - ## loadBalancerSourceRanges: - ## - 10.10.10.0/24 - ## + clusterIP: null +## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP +## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer +## + loadBalancerIP: null +## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources +## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service +## e.g: +## loadBalancerSourceRanges: +## - 10.10.10.0/24 +## loadBalancerSourceRanges: [] ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip @@ -133,29 +132,27 @@ ingress: port: 6060 paths: ['/'] annotations: {} - ## https://kubernetes.github.io/ingress-nginx/examples/rewrite/ - # nginx.ingress.kubernetes.io/rewrite-target: '/' - # nginx.ingress.kubernetes.io/rewrite-target: '/$2' - ## https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/ - # kubernetes.io/ingress.class: nginx - ## https://kubernetes.github.io/ingress-nginx/user-guide/tls/#automated-certificate-management-with-kube-lego - # kubernetes.io/tls-acme: "true" + ## https://kubernetes.github.io/ingress-nginx/examples/rewrite/ + # nginx.ingress.kubernetes.io/rewrite-target: '/' + # nginx.ingress.kubernetes.io/rewrite-target: '/$2' + ## https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/ + # kubernetes.io/ingress.class: nginx + ## https://kubernetes.github.io/ingress-nginx/user-guide/tls/#automated-certificate-management-with-kube-lego + # kubernetes.io/tls-acme: "true" tls: [] - # Secrets must be manually created in the namespace. - # - secretName: chart-example-tls - # hosts: - # - chart-example.local + # Secrets must be manually created in the namespace. + # - secretName: chart-example-tls + # hosts: + # - chart-example.local className: "nginx" - resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - +# We usually recommend not to specify default resources and to leave this as a conscious +# choice for the user. This also increases chances charts run on environments with little +# resources, such as Minikube. If you do want to specify resources, uncomment the following +# lines, adjust them as necessary, and remove the curly braces after 'resources:'. +# limits: +# cpu: 100m +# memory: 128Mi +# requests: +# cpu: 100m +# memory: 128Mi diff --git a/ml-testing-toolkit/values.yaml b/ml-testing-toolkit/values.yaml index 2197b07bf..9947f6e6a 100644 --- a/ml-testing-toolkit/values.yaml +++ b/ml-testing-toolkit/values.yaml @@ -39,8 +39,6 @@ ml-testing-toolkit-backend: # AUTH_ENABLED: true # KEYCLOAK: # ENABLED: true - - config: mongodb: host: "ttk-mongodb" port: "27017" diff --git a/mojaloop-bulk/Chart.yaml b/mojaloop-bulk/Chart.yaml index b7fa21b67..b278e9255 100644 --- a/mojaloop-bulk/Chart.yaml +++ b/mojaloop-bulk/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Mojaloop Bulk Helm chart for Kubernetes name: mojaloop-bulk -version: 16.0.0 -appVersion: "bulk-api-adapter: v17.0.0; central-ledger: v17.3.2" +version: 16.7.0 +appVersion: "bulk-api-adapter: v17.0.0; central-ledger: v19.0.6" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -11,21 +11,19 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: bulk-api-adapter - version: ">= 14.0.0" + version: ">= 14.6.0" repository: "file://../bulk-api-adapter" condition: bulk-api-adapter.enabled - name: bulk-centralledger - version: ">= 14.1.0" + version: ">= 14.8.0" repository: "file://../bulk-centralledger" condition: bulk-centralledger.enabled - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.1.2 tags: - moja-common diff --git a/mojaloop-bulk/values.yaml b/mojaloop-bulk/values.yaml index cadaf624d..2644474c6 100644 --- a/mojaloop-bulk/values.yaml +++ b/mojaloop-bulk/values.yaml @@ -15,7 +15,7 @@ bulk-api-adapter: image: registry: docker.io repository: mojaloop/bulk-api-adapter - tag: v17.0.0 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -33,6 +33,16 @@ bulk-api-adapter: replicaCount: 1 command: '["node", "src/api/index.js"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -101,6 +111,9 @@ bulk-api-adapter: serviceName: bulk-service config: + hub_participant: + id: 1 + name: Hub # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: kafka kafka_port: 9092 @@ -337,7 +350,7 @@ bulk-api-adapter: image: registry: docker.io repository: mojaloop/bulk-api-adapter - tag: v17.0.0 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -355,6 +368,16 @@ bulk-api-adapter: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--notification"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -425,6 +448,9 @@ bulk-api-adapter: serviceName: bulk-handler-notification config: + hub_participant: + id: 1 + name: Hub # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: kafka kafka_port: 9092 @@ -477,8 +503,11 @@ bulk-api-adapter: # Parameters for JWS signing requests endpointSecurity: jwsSign: false - fspiopSourceSigningName: 'switch' - jwsSigningKey: + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null # To generate this key: # Private: # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key @@ -681,7 +710,7 @@ bulk-centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -699,6 +728,16 @@ bulk-centralledger: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--bulkprepare"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -876,7 +915,7 @@ bulk-centralledger: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -1064,7 +1103,7 @@ bulk-centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -1082,6 +1121,16 @@ bulk-centralledger: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--bulkfulfil"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -1247,7 +1296,7 @@ bulk-centralledger: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -1435,7 +1484,7 @@ bulk-centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -1450,6 +1499,16 @@ bulk-centralledger: ## pullSecrets: [] + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--bulkprocessing"]' @@ -1627,7 +1686,7 @@ bulk-centralledger: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -1815,7 +1874,7 @@ bulk-centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -1833,6 +1892,16 @@ bulk-centralledger: replicaCount: 1 command: '["node", "src/handlers/index.js", "handler", "--bulkget"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -2007,7 +2076,7 @@ bulk-centralledger: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh diff --git a/mojaloop-simulator/Chart.yaml b/mojaloop-simulator/Chart.yaml index d04dcc149..dc9f7aa63 100644 --- a/mojaloop-simulator/Chart.yaml +++ b/mojaloop-simulator/Chart.yaml @@ -1,18 +1,16 @@ apiVersion: v2 description: "Helm Chart for the Mojaloop (SDK-based) Simulator" name: mojaloop-simulator -version: 15.0.0 -appVersion: "sdk-scheme-adapter: v23.1.1; mojaloop-simulator: v15.0.0; thirdparty-sdk: v15.1.1" +version: 15.2.1 +appVersion: "sdk-scheme-adapter: v23.4.0; mojaloop-simulator: v15.1.1; thirdparty-sdk: v15.1.1" dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.0.0 tags: - moja-common maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com diff --git a/mojaloop-simulator/templates/deployment.yaml b/mojaloop-simulator/templates/deployment.yaml index 5038ce5ad..a2720d079 100644 --- a/mojaloop-simulator/templates/deployment.yaml +++ b/mojaloop-simulator/templates/deployment.yaml @@ -55,8 +55,11 @@ spec: {{- if $config.config.schemeAdapter.env.JWS_SIGN }} - name: jws-private-key secret: - {{- if $config.config.schemeAdapter.secrets.jws.privKeySecretName }} - secretName: {{ $config.config.schemeAdapter.secrets.jws.privKeySecretName }} + {{- if $config.config.schemeAdapter.secrets.jws.privateKeySecret }} + secretName: {{ $config.config.schemeAdapter.secrets.jws.privateKeySecret.name }} + items: + - key: {{ $config.config.schemeAdapter.secrets.jws.privateKeySecret.key }} + path: private.key {{- else }} secretName: {{ $fullName }}-jws-priv-key {{- end }} @@ -90,6 +93,10 @@ spec: - name: scheme-adapter image: "{{ $config.config.schemeAdapter.image.repository }}:{{ $config.config.schemeAdapter.image.tag }}" imagePullPolicy: {{ $config.config.schemeAdapter.image.pullPolicy }} + {{- if $config.config.imagePullSecrets }} + imagePullSecrets: + {{ toYaml $config.config.imagePullSecrets | indent 10 }} + {{- end }} command: {{ $config.config.schemeAdapter.image.command }} ports: - name: inboundapi @@ -107,6 +114,8 @@ spec: path: / port: {{ $config.config.schemeAdapter.env.OUTBOUND_LISTEN_PORT }} scheme: HTTP + timeoutSeconds: 5 + failureThreshold: 6 {{- end }} {{- if $config.config.schemeAdapter.livenessProbe.enabled }} livenessProbe: @@ -114,6 +123,8 @@ spec: path: / port: {{ $config.config.schemeAdapter.env.OUTBOUND_LISTEN_PORT }} scheme: HTTP + timeoutSeconds: 5 + failureThreshold: 6 {{- end }} volumeMounts: - name: jws-public-keys @@ -145,8 +156,6 @@ spec: {{- end }} resources: {{ toYaml $config.config.schemeAdapter.resources | indent 10 }} - imagePullSecrets: - - name: {{ $config.config.imagePullSecretName }} {{- with $config.nodeSelector }} nodeSelector: {{ toYaml . | indent 8 }} @@ -181,6 +190,12 @@ spec: {{- include "mojaloop-simulator.common-labels" $ | nindent 8 }} annotations: checksum/config-rules: {{ $checksumConfigRules }} + # Custom Pod annotations + {{- if $config.config.podAnnotations }} + {{- range $key, $value := $config.config.podAnnotations }} + {{ $key }}: {{ tpl $value $ | quote }} + {{- end }} + {{- end }} spec: initContainers: {{ include "mojaloop-simulator.prependDictToContainerEnv" (dict "containers" $config.config.backend.initContainers "dict" (merge $config.config.backend.env $initContainerEnv)) | indent 6 }} @@ -188,6 +203,10 @@ spec: - name: backend image: "{{ $config.config.backend.image.repository }}:{{ $config.config.backend.image.tag }}" imagePullPolicy: {{ $config.config.backend.image.pullPolicy }} + {{- if $config.config.imagePullSecrets }} + imagePullSecrets: + {{ toYaml $config.config.imagePullSecrets | indent 10 }} + {{- end }} ports: - name: simapi containerPort: 3000 # these are hard-coded in the service @@ -242,8 +261,6 @@ spec: - name: {{ $prefix }}rules configMap: name: {{ $fullName }}-rules - imagePullSecrets: - - name: {{ $config.config.imagePullSecretName }} {{- with $config.nodeSelector }} nodeSelector: {{ toYaml . | indent 8 }} @@ -342,6 +359,12 @@ spec: checksum/config-rules: {{ $checksumConfigRules }} checksum/config-jws-public-keys: {{ $checksumConfigJWSPublicKeys }} checksum/secrets: {{ $checksumConfigSecrets }} + # Custom Pod annotations + {{- if $config.config.podAnnotations }} + {{- range $key, $value := $config.config.podAnnotations }} + {{ $key }}: {{ tpl $value $ | quote }} + {{- end }} + {{- end }} spec: volumes: - name: {{ $fullName }}-thirdparty-sdk-config-volume @@ -366,6 +389,10 @@ spec: - name: thirdpartysdk image: "{{ $config.config.thirdpartysdk.image.repository }}:{{ $config.config.thirdpartysdk.image.tag }}" imagePullPolicy: {{ $config.config.thirdpartysdk.image.pullPolicy }} + {{- if $config.config.imagePullSecrets }} + imagePullSecrets: + {{ toYaml $config.config.imagePullSecrets | indent 8 }} + {{- end }} # TODO: make configurable command: {{ $config.config.thirdpartysdk.image.command }} ports: @@ -406,9 +433,6 @@ spec: {{- end }} resources: {{ toYaml $config.config.thirdpartysdk.resources | indent 10 }} - - imagePullSecrets: - - name: {{ $config.config.imagePullSecretName }} {{- with $config.nodeSelector }} nodeSelector: {{ toYaml . | indent 8 }} diff --git a/mojaloop-simulator/templates/secret.yaml b/mojaloop-simulator/templates/secret.yaml index da2c82f8d..ae2f49a61 100644 --- a/mojaloop-simulator/templates/secret.yaml +++ b/mojaloop-simulator/templates/secret.yaml @@ -2,7 +2,12 @@ {{- range $name, $customConfig := .Values.simulators }} {{- $config := merge $customConfig $.Values.defaults }} {{- $fullName := printf "%s%s" (include "mojaloop-simulator.prefix" $) $name -}} -{{- if (and $config.config.schemeAdapter.env.JWS_SIGN (not $config.config.schemeAdapter.secrets.jws.privKeySecretName)) }} +{{- if (and $config.config.schemeAdapter.env.JWS_SIGN (not $config.config.schemeAdapter.secrets.jws.privateKeySecret)) }} +# Note that due to a bug with helm 2.9.1 the `required` function in combination with a missing +# key will not work in place of this if statement. +{{- if eq $config.config.schemeAdapter.secrets.jws.privateKey "" }} + {{ fail (printf "JWS_SIGN enabled- JWS private key required for %s. You need to specify %s.schemeAdapter.secrets.jws.privateKey or %s.schemeAdapter.secrets.jws.privateKeySecret." $name $name) }} +{{- end }} apiVersion: v1 kind: Secret metadata: @@ -11,11 +16,6 @@ metadata: app.kubernetes.io/name: sim-{{ $name }}-jws-priv-key {{- include "mojaloop-simulator.common-labels" $ | nindent 4 }} data: - # Note that due to a bug with helm 2.9.1 the `required` function in combination with a missing - # key will not work in place of this if statement. - {{- if eq $config.config.schemeAdapter.secrets.jws.privateKey "" }} - {{ fail (printf "JWS_SIGN enabled- JWS private key required for %s. You need to specify %s.schemeAdapter.secrets.jws.privateKey." $name $name) }} - {{- end }} "private.key": {{ $config.config.schemeAdapter.secrets.jws.privateKey | b64enc }} --- {{- end }} diff --git a/mojaloop-simulator/values.yaml b/mojaloop-simulator/values.yaml index 958142243..6d742dc23 100644 --- a/mojaloop-simulator/values.yaml +++ b/mojaloop-simulator/values.yaml @@ -44,7 +44,6 @@ simulators: {} # * support arbitrary init containers + config (that might just be config that goes into defaults # or something?). Supply all config and volumes to the init containers. # * create some test containers -# * parametrise imagePullSecretName (global? like https://github.com/bitnami/charts/tree/master/bitnami/redis#parameters) # * generate JWS private/public keys, so the user does not need to supply keys at all. # * generate public key from private, so the user only needs to supply private keys for each sim? # (_might_ be possible with a job or init container or similar). @@ -194,7 +193,14 @@ defaults: ## podAnnotations: {} - imagePullSecretName: dock-casa-secret + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## imagePullSecrets: + ## - myRegistryKeySecretName + ## + imagePullSecrets: [] cache: @@ -260,22 +266,21 @@ defaults: # .. # outbound: *inbound inbound: &inbound + # DO NOT REMOVE COMMENT outbound: *inbound jws: - # Use the privKeySecretName field if you would like to supply a JWS private key external + # Use the privateKeySecret field if you would like to supply a JWS private key external # to this chart. - # For example, if you create a private key called `sim-payerfsp-jws-signing-key` external - # to this chart, you would supply `privKeySecretName: sim-payerfsp-jws-signing-key` here. + # For example, if you create a private key called `sim-payerfsp-jws-signing-key` with data property `private.key` + # external to this chart, you would supply + # `privateKeySecret: + # name: sim-payerfsp-jws-signing-key` + # key: private.key + # here. # These fields will take precedence over `privateKey` and `publicKey` below. # This field is best supplied per-simulator, however it's here for documentation # purposes. - privKeySecretName: {} - # TODO: update `privKeySecretName` above to contain both a name and a key in the secret. - # Add documentation on usage. - # privKeySecret: {} - # name: - # key: - # + privateKeySecret: {} # The `publicKeyConfigMapName` field allows you to supply a ConfigMap containing JWS public # keys external to this release, and have this release reference that ConfigMap to # populate JWS public keys. The format of this ConfigMap must be as described for @@ -287,7 +292,7 @@ defaults: publicKey: '' image: repository: mojaloop/sdk-scheme-adapter - tag: v23.1.1 + tag: v24.0.8 pullPolicy: IfNotPresent command: '[ "yarn", "start:api-svc" ]' <<: *defaultProbes @@ -451,7 +456,7 @@ defaults: # The incoming transfer request should consist of an ILP packet and a matching condition in this case. # The fulfilment will be generated from the provided ILP packet, and must hash to the provided condition. ALLOW_TRANSFER_WITHOUT_QUOTE: false - RESOURCE_VERSIONS: transfers=1.1,quotes=1.0 + RESOURCE_VERSIONS: transfers=2.0,quotes=2.0,participants=1.1,parties=2.0,transactionRequests=1.1 ENABLE_FSPIOP_EVENT_HANDLER: false ENABLE_BACKEND_EVENT_HANDLER: false @@ -459,7 +464,7 @@ defaults: backend: image: repository: mojaloop/mojaloop-simulator - tag: v15.0.0 + tag: v15.1.5 pullPolicy: IfNotPresent <<: *defaultProbes @@ -576,21 +581,21 @@ defaults: # .. # outbound: *inbound inbound: &inbound + # DO NOT REMOVE COMMENT outbound: *inbound jws: - # Use the privKeySecretName field if you would like to supply a JWS private key external + # Use the privateKeySecret field if you would like to supply a JWS private key external # to this chart. - # For example, if you create a private key called `sim-payerfsp-jws-signing-key` external - # to this chart, you would supply `privKeySecretName: sim-payerfsp-jws-signing-key` here. + # For example, if you create a private key called `sim-payerfsp-jws-signing-key` with data property `private.key` + # external to this chart, you would supply + # `privateKeySecret: + # name: sim-payerfsp-jws-signing-key` + # key: private.key + # here. # These fields will take precedence over `privateKey` and `publicKey` below. # This field is best supplied per-simulator, however it's here for documentation # purposes. - privKeySecretName: {} - # TODO: update `privKeySecretName` above to contain both a name and a key in the secret. - # Add documentation on usage. - # privKeySecret: {} - # name: - # key: + privateKeySecret: {} # # The `publicKeyConfigMapName` field allows you to supply a ConfigMap containing JWS public # keys external to this release, and have this release reference that ConfigMap to @@ -631,88 +636,8 @@ defaults: target: type: Utilization averageUtilization: 80 - ## Config files - config: { - production.json: { - "control": { - "mgmtAPIWsUrl": "127.0.0.1", - "mgmtAPIWsPort": 4010 - }, - "inbound": { - "port": 4005, - "host": "0.0.0.0", - "pispTransactionMode": true, - "tls": { - "mutualTLS": { - "enabled": false - }, - "creds": { - "ca": "/secrets/dfsp_or_3ppi_client_cacert.pem", - "cert": "/secrets/dfsp_or_3ppi_server_cert.pem", - "key": "/secrets/dfsp_or_3ppi_server_key.key" - } - } - }, - "outbound": { - "port": 4006, - "host": "0.0.0.0", - "tls": { - "mutualTLS": { - "enabled": false - }, - "creds": { - "ca": "/secrets/hub_server_cacert.pem", - "cert": "/secrets/dfsp_or_3ppi_client_cert.cer", - "key": "/secrets/dfsp_or_3ppi_client_key.key" - } - } - }, - "requestProcessingTimeoutSeconds": 30, - "wso2": { - "auth": { - "staticToken": "test-static-token", - "tokenEndpoint": "", - "clientKey": "test-client-key", - "clientSecret": "test-client-secret", - "refreshSeconds": 3600 - } - }, - "redis": { - "port": 6379, - "timeout": 100 - }, - "inspect": { - "depth": 4, - "showHidden": false, - "color": true - }, - "shared": { - "authServiceParticipantId": "centralauth", - "thirdpartyRequestsEndpoint": "tp-api-svc", - "servicesEndpoint": "tp-api-svc", - "alsEndpoint": "$release_name-account-lookup-service", - "quotesEndpoint": "$release_name-quoting-service", - "transfersEndpoint": "$release_name-ml-api-adapter-service", - "dfspId": "$name", - "dfspBackendUri": "$full_name-backend:3000", - "dfspBackendHttpScheme": "http", - "dfspBackendVerifyAuthorizationPath": "verify-authorization", - "dfspBackendVerifyConsentPath": "verify-consent", - "sdkRequestToPayTransferUri": "0.0.0.0:3000/requestToPayTransfer", - "sdkOutgoingUri": "$full_name-scheme-adapter:4001", - "sdkOutgoingHttpScheme": "http", - "sdkOutgoingPartiesInformationPath": "parties/{Type}/{ID}/{SubId}", - "sdkNotifyAboutTransferUri": "ml-testing-toolkit:4040/thirdpartyRequests/transactions/{ID}" - }, - "pm4mlEnabled": false, - "validateInboundJws": false, - "jwsSign": false, - "jwsSigningKey": "/jwsSigningKey.key", - "jwsVerificationKeysDirectory": null - } - } - + config: {production.json: {"control": {"mgmtAPIWsUrl": "127.0.0.1", "mgmtAPIWsPort": 4010}, "inbound": {"port": 4005, "host": "0.0.0.0", "pispTransactionMode": true, "tls": {"mutualTLS": {"enabled": false}, "creds": {"ca": "/secrets/dfsp_or_3ppi_client_cacert.pem", "cert": "/secrets/dfsp_or_3ppi_server_cert.pem", "key": "/secrets/dfsp_or_3ppi_server_key.key"}}}, "outbound": {"port": 4006, "host": "0.0.0.0", "tls": {"mutualTLS": {"enabled": false}, "creds": {"ca": "/secrets/hub_server_cacert.pem", "cert": "/secrets/dfsp_or_3ppi_client_cert.cer", "key": "/secrets/dfsp_or_3ppi_client_key.key"}}}, "requestProcessingTimeoutSeconds": 30, "wso2": {"auth": {"staticToken": "test-static-token", "tokenEndpoint": "", "clientKey": "test-client-key", "clientSecret": "test-client-secret", "refreshSeconds": 3600}}, "redis": {"port": 6379, "timeout": 100}, "inspect": {"depth": 4, "showHidden": false, "color": true}, "shared": {"authServiceParticipantId": "centralauth", "thirdpartyRequestsEndpoint": "tp-api-svc", "servicesEndpoint": "tp-api-svc", "alsEndpoint": "$release_name-account-lookup-service", "quotesEndpoint": "$release_name-quoting-service", "transfersEndpoint": "$release_name-ml-api-adapter-service", "dfspId": "$name", "dfspBackendUri": "$full_name-backend:3000", "dfspBackendHttpScheme": "http", "dfspBackendVerifyAuthorizationPath": "verify-authorization", "dfspBackendVerifyConsentPath": "verify-consent", "sdkRequestToPayTransferUri": "0.0.0.0:3000/requestToPayTransfer", "sdkOutgoingUri": "$full_name-scheme-adapter:4001", "sdkOutgoingHttpScheme": "http", "sdkOutgoingPartiesInformationPath": "parties/{Type}/{ID}/{SubId}", "sdkNotifyAboutTransferUri": "ml-testing-toolkit:4040/thirdpartyRequests/transactions/{ID}"}, "pm4mlEnabled": false, "validateInboundJws": false, "jwsSign": false, "jwsSigningKey": "/jwsSigningKey.key", "jwsVerificationKeysDirectory": null}} env: NODE_ENV: production INBOUND_LISTEN_PORT: 4005 diff --git a/mojaloop-ttk-simulators/Chart.yaml b/mojaloop-ttk-simulators/Chart.yaml index 9843ef0b4..50b7e32da 100644 --- a/mojaloop-ttk-simulators/Chart.yaml +++ b/mojaloop-ttk-simulators/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: mojaloop-ttk-simulator Helm chart for Kubernetes name: mojaloop-ttk-simulators -version: 2.0.0 -appVersion: "ml-testing-toolkit: v17.0.0, ml-testing-toolkit-ui: v15.4.0, sdk-scheme-adapter: v23.1.1" +version: 2.3.0 +appVersion: "ml-testing-toolkit: v17.0.0; ml-testing-toolkit-ui: v15.4.2; sdk-scheme-adapter: v23.4.0" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -21,7 +21,7 @@ dependencies: - mojaloop-simulator - testing-toolkit - sdk-scheme-adapter - version: ">= 2.0.0" + version: ">= 2.2.0" condition: mojaloop-ttk-sim1-svc.enabled - name: mojaloop-ttk-sim2-svc repository: "file://./chart-sim2" @@ -29,7 +29,7 @@ dependencies: - mojaloop-simulator - testing-toolkit - sdk-scheme-adapter - version: ">= 2.0.0" + version: ">= 2.2.0" condition: mojaloop-ttk-sim2-svc.enabled - name: mojaloop-ttk-sim3-svc repository: "file://./chart-sim3" @@ -37,5 +37,5 @@ dependencies: - mojaloop-simulator - testing-toolkit - sdk-scheme-adapter - version: ">= 2.0.0" + version: ">= 2.2.0" condition: mojaloop-ttk-sim3-svc.enabled diff --git a/mojaloop-ttk-simulators/chart-sim1/Chart.yaml b/mojaloop-ttk-simulators/chart-sim1/Chart.yaml index 7353e7973..9f5b4b1aa 100644 --- a/mojaloop-ttk-simulators/chart-sim1/Chart.yaml +++ b/mojaloop-ttk-simulators/chart-sim1/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 name: mojaloop-ttk-sim1-svc -version: 2.0.0 +version: 2.2.0 description: A Helm chart for Kubernetes -appVersion: "ml-testing-toolkit: v17.0.0, ml-testing-toolkit-ui: v15.4.0, sdk-scheme-adapter: v23.1.1" +appVersion: "ml-testing-toolkit: v17.0.0; ml-testing-toolkit-ui: v15.4.2; sdk-scheme-adapter: v23.4.0" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -35,4 +35,4 @@ dependencies: repository: "https://mojaloop.github.io/charts/repo" tags: - moja-common - version: 2.0.0 + version: 3.0.0 diff --git a/mojaloop-ttk-simulators/chart-sim1/values.yaml b/mojaloop-ttk-simulators/chart-sim1/values.yaml index 8ac68e457..92841e179 100644 --- a/mojaloop-ttk-simulators/chart-sim1/values.yaml +++ b/mojaloop-ttk-simulators/chart-sim1/values.yaml @@ -211,11 +211,11 @@ ml-testing-toolkit: } ] } - rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim1/spec_files/rules_response/default.json' - api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' - api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' + rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim1/spec_files/rules_response/default.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) diff --git a/mojaloop-ttk-simulators/chart-sim2/Chart.yaml b/mojaloop-ttk-simulators/chart-sim2/Chart.yaml index 9f252c832..ed00f3c51 100644 --- a/mojaloop-ttk-simulators/chart-sim2/Chart.yaml +++ b/mojaloop-ttk-simulators/chart-sim2/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 name: mojaloop-ttk-sim2-svc -version: 2.0.0 +version: 2.2.0 description: A Helm chart for Kubernetes -appVersion: "ml-testing-toolkit: v17.0.0, ml-testing-toolkit-ui: v15.4.0, sdk-scheme-adapter: v23.1.1" +appVersion: "ml-testing-toolkit: v17.0.0; ml-testing-toolkit-ui: v15.4.2; sdk-scheme-adapter: v23.4.0" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -35,4 +35,4 @@ dependencies: repository: "https://mojaloop.github.io/charts/repo" tags: - moja-common - version: 2.0.0 + version: 3.0.0 diff --git a/mojaloop-ttk-simulators/chart-sim2/values.yaml b/mojaloop-ttk-simulators/chart-sim2/values.yaml index 0352606c6..e0431a3b2 100644 --- a/mojaloop-ttk-simulators/chart-sim2/values.yaml +++ b/mojaloop-ttk-simulators/chart-sim2/values.yaml @@ -206,11 +206,11 @@ ml-testing-toolkit: } ] } - rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim2/spec_files/rules_response/default.json' - api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' - api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' + rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim2/spec_files/rules_response/default.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ diff --git a/mojaloop-ttk-simulators/chart-sim3/Chart.yaml b/mojaloop-ttk-simulators/chart-sim3/Chart.yaml index f1d7afcb3..3d6763c75 100644 --- a/mojaloop-ttk-simulators/chart-sim3/Chart.yaml +++ b/mojaloop-ttk-simulators/chart-sim3/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 name: mojaloop-ttk-sim3-svc -version: 2.0.0 +version: 2.2.0 description: A Helm chart for Kubernetes -appVersion: "ml-testing-toolkit: v17.0.0, ml-testing-toolkit-ui: v15.4.0, sdk-scheme-adapter: v23.1.1" +appVersion: "ml-testing-toolkit: v17.0.0; ml-testing-toolkit-ui: v15.4.2; sdk-scheme-adapter: v23.4.0" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -35,4 +35,4 @@ dependencies: repository: "https://mojaloop.github.io/charts/repo" tags: - moja-common - version: 2.0.0 + version: 3.0.0 diff --git a/mojaloop-ttk-simulators/chart-sim3/values.yaml b/mojaloop-ttk-simulators/chart-sim3/values.yaml index 8af38f80d..07db71657 100644 --- a/mojaloop-ttk-simulators/chart-sim3/values.yaml +++ b/mojaloop-ttk-simulators/chart-sim3/values.yaml @@ -206,11 +206,11 @@ ml-testing-toolkit: } ] } - rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.0.1/test/func/config/ttk-ttksim3/spec_files/rules_response/default.json' - api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.0.1/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' - api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.0.1/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.0.1/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.0.1/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' + rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim3/spec_files/rules_response/default.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.4.0/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ diff --git a/mojaloop/Chart.yaml b/mojaloop/Chart.yaml index 0ac445d23..6f1731d54 100644 --- a/mojaloop/Chart.yaml +++ b/mojaloop/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Mojaloop Helm chart for Kubernetes name: mojaloop -version: 15.4.0 -appVersion: "ml-api-adapter: v14.0.5; central-ledger: v17.6.0; account-lookup-service: v15.0.0; quoting-service: v15.5.0; central-settlement: v16.0.0; bulk-api-adapter: v17.0.0; transaction-requests-service: v14.1.2; simulator: v12.0.0; mojaloop-simulator: v15.0.0; sdk-scheme-adapter: v23.1.1; auth-service: v15.0.0; als-consent-oracle: v0.2.2; thirdparty-sdk: v15.1.1; ml-testing-toolkit: v17.0.0; ml-testing-toolkit-ui: v15.4.0;" +version: 16.0.4 +appVersion: "ml-api-adapter: v14.0.5; central-ledger: v17.6.0; account-lookup-service: v15.6.0; quoting-service: v15.9.0; central-settlement: v16.0.0; bulk-api-adapter: v17.0.0; transaction-requests-service: v14.1.2; simulator: v12.1.0; mojaloop-simulator: v15.0.0; sdk-scheme-adapter: v23.4.0; auth-service: v15.0.0; als-consent-oracle: v0.2.2; thirdparty-sdk: v15.1.1; ml-testing-toolkit: v17.0.0; ml-testing-toolkit-ui: v15.4.2;" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -11,58 +11,60 @@ sources: maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: account-lookup-service - version: ">= 14.2.0" + version: ">= 14.11.0" repository: "file://../account-lookup-service" condition: account-lookup-service.enabled - name: quoting-service - version: ">= 15.0.0" + version: ">= 15.8.0" repository: "file://../quoting-service" condition: quoting-service.enabled - name: ml-api-adapter - version: ">= 13.0.1" + version: ">= 13.6.0" repository: "file://../ml-api-adapter" condition: ml-api-adapter.enabled - name: centralledger - version: ">= 14.3.0" + version: ">= 14.16.0" repository: "file://../centralledger" condition: centralledger.enabled - name: centralsettlement - version: ">= 14.1.1" + version: ">= 14.7.0" repository: "file://../centralsettlement" condition: centralsettlement.enabled - name: simulator - version: ">= 13.0.0" + version: ">= 13.3.0" repository: "file://../simulator" condition: simulator.enabled + - name: als-msisdn-oracle + version: ">= 0.0.1" + repository: "file://../als-msisdn-oracle" + condition: als-msisdn-oracle.enabled - name: mojaloop-simulator - version: ">= 15.0.0" + version: ">= 15.2.1" repository: "file://../mojaloop-simulator" condition: mojaloop-simulator.enabled - name: mojaloop-bulk - version: ">= 16.0.0" + version: ">= 16.7.0" repository: "file://../mojaloop-bulk" condition: mojaloop-bulk.enabled - name: transaction-requests-service - version: ">= 13.0.1" + version: ">= 13.3.0" repository: "file://../transaction-requests-service" condition: transaction-requests-service.enabled - name: thirdparty - version: ">= 3.0.2" + version: ">= 3.6.1" repository: "file://../thirdparty" condition: thirdparty.enabled - name: mojaloop-ttk-simulators - version: ">= 2.0.0" + version: ">= 2.3.0" repository: "file://../mojaloop-ttk-simulators" condition: mojaloop-ttk-simulators.enabled - name: common repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + version: ">= 3.1.3" tags: - moja-common - name: ml-testing-toolkit @@ -71,66 +73,81 @@ dependencies: condition: ml-testing-toolkit.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-test-setup - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-test-setup.tests.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-test-val-gp - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-test-val-gp.tests.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-test-val-bulk - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-test-val-bulk.tests.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-test-setup-tp - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-test-setup-tp.tests.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-test-val-tp - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-test-val-tp.tests.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-posthook-setup - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-posthook-setup.postInstallHook.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-posthook-tests - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-posthook-tests.postInstallHook.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-cronjob-tests - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-cronjob-tests.scheduling.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-cronjob-cleanup - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-cronjob-cleanup.scheduling.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-test-setup-sdk-bulk - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-test-setup-sdk-bulk.tests.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-test-val-sdk-bulk - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-test-val-sdk-bulk.tests.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-test-val-sdk-r2p - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-test-val-sdk-r2p.tests.enabled + - name: ml-testing-toolkit-cli + alias: ml-ttk-test-setup-interscheme + version: ">= 15.6.0" + repository: "file://../ml-testing-toolkit-cli" + condition: ml-ttk-test-setup-interscheme.tests.enabled + - name: ml-testing-toolkit-cli + alias: ml-ttk-test-val-interscheme + version: ">= 15.6.0" + repository: "file://../ml-testing-toolkit-cli" + condition: ml-ttk-test-val-interscheme.tests.enabled - name: ml-testing-toolkit-cli alias: ml-ttk-test-cleanup - version: ">= 15.3.2" + version: ">= 15.6.0" repository: "file://../ml-testing-toolkit-cli" condition: ml-ttk-test-cleanup.tests.enabled + - name: inter-scheme-proxy-adapter + alias: inter-scheme-proxy-adapter + version: ">= 1.0.0" + repository: "file://../inter-scheme-proxy-adapter" + condition: inter-scheme-proxy-adapter.enabled diff --git a/mojaloop/templates/NOTES.txt b/mojaloop/templates/NOTES.txt index 725e11008..5bb404e41 100644 --- a/mojaloop/templates/NOTES.txt +++ b/mojaloop/templates/NOTES.txt @@ -82,6 +82,14 @@ View Test logs with the following commands: $ kubectl -n {{ .Release.Namespace }} logs pod/{{ .Release.Name }}-ml-ttk-test-val-sdk-r2p {{- end}} +{{- if (index .Values "ml-ttk-test-setup-interscheme" "tests" "enabled") }} + $ kubectl -n {{ .Release.Namespace }} logs pod/{{ .Release.Name }}-ml-ttk-test-setup-interscheme +{{- end}} + +{{- if (index .Values "ml-ttk-test-val-interscheme" "tests" "enabled") }} + $ kubectl -n {{ .Release.Namespace }} logs pod/{{ .Release.Name }}-ml-ttk-test-val-interscheme +{{- end}} + {{- if (index .Values "ml-ttk-test-cleanup" "tests" "enabled") }} $ kubectl -n {{ .Release.Namespace }} logs pod/{{ .Release.Name }}-ml-ttk-test-cleanup {{- end}} diff --git a/mojaloop/templates/pdb.yaml b/mojaloop/templates/pdb.yaml new file mode 100644 index 000000000..2140b6efa --- /dev/null +++ b/mojaloop/templates/pdb.yaml @@ -0,0 +1,3 @@ +{{- if .Values.pdb.enabled }} + {{- include "common.pdb.resource" . }} +{{- end -}} diff --git a/mojaloop/values.yaml b/mojaloop/values.yaml index 403cf862c..1a321bd37 100644 --- a/mojaloop/values.yaml +++ b/mojaloop/values.yaml @@ -1,5 +1,10 @@ # Common YAML TEMPLATE Anchors CONFIG: + ## HUB CONFIGURATION + hub_participant: &HUB_PARTICIPANT + id: &HUB_ID 1 + name: &HUB_NAME Hub + ## ACCOUNT-LOOKUP BACKEND als_db_name: &ALS_DB_NAME "account_lookup" als_db_password: &ALS_DB_PASSWORD '' @@ -10,6 +15,16 @@ CONFIG: als_db_port: &ALS_DB_PORT 3306 als_db_user: &ALS_DB_USER "account_lookup" + ## ALS MSISDN Oracle + als_msisdn_oracle_db_name: &ALS_ORACLE_DB_NAME "oracle_msisdn" + als_msisdn_oracle_db_password: &ALS_ORACLE_DB_PASSWORD '' + als_msisdn_oracle_db_secret: &ALS_ORACLE_DB_SECRET + name: &ALS_ORACLE_DB_SECRET_NAME mysqldb + key: &ALS_ORACLE_DB_SECRET_KEY mysql-password + als_msisdn_oracle_db_host: &ALS_ORACLE_DB_HOST 'mysqldb' + als_msisdn_oracle_db_port: &ALS_ORACLE_DB_PORT 3306 + als_msisdn_oracle_db_user: &ALS_ORACLE_DB_USER "oracle_msisdn" + ## CENTRAL-LEDGER BACKEND cl_db_name: &CL_DB_NAME "central_ledger" cl_db_password: &CL_DB_PASSWORD '' @@ -19,6 +34,7 @@ CONFIG: cl_db_host: &CL_DB_HOST 'mysqldb' cl_db_port: &CL_DB_PORT 3306 cl_db_user: &CL_DB_USER "central_ledger" + cl_payee_participant_currency_validation_enabled: &PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED false ## KAFKA BACKEND kafka_host: &KAFKA_HOST 'kafka' @@ -43,6 +59,10 @@ CONFIG: name: &TTK_MONGO_SECRET_NAME ttk-mongodb key: &TTK_MONGO_SECRET_KEY mongodb-passwords ttk_mongo_database: &TTK_MONGO_DATABASE "ttk" + ttk_mongo_connection_string: &TTK_MONGO_CONNECTION_STRING null + ttk_mongo_connection_string_secret: &TTK_MONGO_CONNECTION_STRING_SECRET + name: &TTK_MONGO_CONNECTION_STRING_SECRET_NAME null + key: &TTK_MONGO_CONNECTION_STRING_SECRET_KEY null ## MOJALOOP-TTK-SIMULATORS BACKEND moja_ttk_sim_kafka_host: &MOJA_TTK_SIM_KAFKA_HOST kafka @@ -74,13 +94,47 @@ CONFIG: tp_als_consent_svc_db_user: &TP_ALS_CONSENT_SVC_DB_USER "consent_oracle" ## BATCH_PROCESSING: To enable batch processing set following to true - batch_processing_enabled: &CL_BATCH_PROCESSING_ENABLED false - + batch_processing_enabled: &CL_BATCH_PROCESSING_ENABLED true + + ## INTERSCHEME: To enable interscheme components and tests set following to true + interscheme_enabled: &INTERSCHEME_ENABLED true + + ## PROXY CACHE + proxy_cache: &PROXY_CACHE + enabled: *INTERSCHEME_ENABLED + type: redis-cluster # redis-cluster is the preferred and the only tested cache type + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + + ## ISO20022 + api_type: &API_TYPE "fspiop" + ttk_transformer_name: &TTK_TRANSFORMER_NAME "none" + SDK_ILP_VERSION: &SDK_ILP_VERSION "1" + # api_type: &API_TYPE "iso20022" + # ttk_transformer_name: &TTK_TRANSFORMER_NAME "fspiopToISO20022" + # SDK_ILP_VERSION: &SDK_ILP_VERSION "4" + ## kafka | redis + original_payload_storage: &ORIGINAL_PAYLOAD_STORAGE "kafka" + payload_cache: &PAYLOAD_CACHE + enabled: false + type: redis-cluster + connectionConfig: + cluster: + - host: proxy-cache-redis + port: 6379 # Default values for central. # This is a YAML-formatted file. # Declare global configurations global: {} +pdb: + enabled: true + maxUnavailable: 1 +# minAvailable: 20% +## Only one key should be set + # Declare variables to be passed into your templates. account-lookup-service: @@ -95,7 +149,7 @@ account-lookup-service: image: registry: docker.io repository: mojaloop/account-lookup-service - tag: v15.0.0 + tag: v17.0.3 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -117,7 +171,7 @@ account-lookup-service: fullnameOverride: "" sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -156,28 +210,33 @@ account-lookup-service: serviceName: account-lookup-service config: + hub_participant: *HUB_PARTICIPANT ## Central-Ledger config central_services_host: '$release_name-centralledger-service' central_services_port: 80 # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -236,20 +295,23 @@ account-lookup-service: endpointSecurity: jwsSign: true - fspiopSourceSigningName: switch + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null # jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- # The following is an example key and shouldn't be used in production jwsSigningKey: |- -----BEGIN PRIVATE KEY----- @@ -284,6 +346,12 @@ account-lookup-service: # Thirdparty API Config featureEnableExtendedPartyIdType: false + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + + ## ISO20022 configuration + api_type: *API_TYPE + # @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) # ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ # e.g: @@ -296,7 +364,7 @@ account-lookup-service: # initContainers: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -346,17 +414,17 @@ account-lookup-service: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: + http: null + https: null ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -390,7 +458,7 @@ account-lookup-service: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: account-lookup-service.local @@ -403,7 +471,7 @@ account-lookup-service: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -424,10 +492,10 @@ account-lookup-service: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" ## # - secretName: chart-example-tls @@ -462,7 +530,7 @@ account-lookup-service: image: registry: docker.io repository: mojaloop/account-lookup-service - tag: v15.0.0 + tag: v17.0.3 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -484,7 +552,7 @@ account-lookup-service: fullnameOverride: "" sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -523,28 +591,33 @@ account-lookup-service: serviceName: account-lookup-service-admin config: + hub_participant: *HUB_PARTICIPANT ## Central-Ledger config central_services_host: '$release_name-centralledger-service' central_services_port: 80 # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -597,39 +670,39 @@ account-lookup-service: endpointSecurity: jwsSign: false - fspiopSourceSigningName: switch + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null # jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- # The following is an example key and shouldn't be used in production - jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- - - + jwsSigningKey: null + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- display_routes: true run_migrations: false - # Log config log_level: info log_transport: file @@ -637,6 +710,8 @@ account-lookup-service: # Thirdparty API Config featureEnableExtendedPartyIdType: false + proxy_cache: *PROXY_CACHE + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -649,7 +724,7 @@ account-lookup-service: # initContainers: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -721,17 +796,17 @@ account-lookup-service: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -765,7 +840,7 @@ account-lookup-service: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: account-lookup-service-admin.local @@ -778,7 +853,7 @@ account-lookup-service: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -790,37 +865,35 @@ account-lookup-service: ## @param ingress.certManager Add the corresponding annotations for cert-manager integration ## certManager: false - ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm - ## + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## selfSigned: false - ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record - ## e.g: - ## extraHosts: - ## - name: transfer-api-svc.local - ## path: / - ## - extraHosts: - extraPaths: - extraTls: - secrets: + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" ## # - secretName: chart-example-tls # hosts: # - chart-example.local - resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi requests: {} # cpu: 100m # memory: 128Mi @@ -831,14 +904,397 @@ account-lookup-service: affinity: {} + account-lookup-service-handler-timeout: + enabled: *INTERSCHEME_ENABLED + # Default values for account-lookup-service-handler-timeout. + image: + registry: docker.io + repository: mojaloop/account-lookup-service + tag: v17.0.3 + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + + replicaCount: 1 # timeout handler is designed to run as a single instance + command: '["node", "src/handlers/index.js", "handlers", "--timeout"]' + + nameOverride: "" + fullnameOverride: "" + + sidecar: + enabled: false + image: + repository: mojaloop/event-sidecar + tag: v14.0.0 + pullPolicy: IfNotPresent + command: '["npm", "run", "start"]' + service: + internalPort: 4001 + readinessProbe: + enabled: true + httpGet: + path: /health + initialDelaySeconds: 120 + periodSeconds: 15 + livenessProbe: + enabled: true + httpGet: + path: /health + initialDelaySeconds: 90 + periodSeconds: 15 + config: + event_log_grpc_host: localhost + event_log_grpc_port: 50051 + event_log_filter: 'audit:*, log:info, log:warn, log:error' + event_log_metadata_only: true + log_level: info + log_filter: 'error, warn, info' + + ## metric configuration for prometheus instrumentation + metrics: + ## flag to enable/disable the metrics end-points + enabled: true + config: + timeout: 5000 + prefix: moja_ + defaultLabels: + serviceName: account-lookup-service-handler-timeout + + config: + hub_participant: *HUB_PARTICIPANT + ## Central-Ledger config + central_services_host: '$release_name-centralledger-service' + central_services_port: 80 + + # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), + # and for generating requests/callbacks from the Switch itself (DEFAULT value) + protocol_versions: + { + "CONTENT": { + "DEFAULT": "2.0", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + }, + "ACCEPT": { + "DEFAULT": "2", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + } + } + + # Log config + log_level: info + log_transport: file + + central_shared_end_point_cache: + expiresIn: 180000 + generateTimeout: 30000 + getDecoratedValue: true + central_shared_participant_cache: + expiresIn: 61000 + generateTimeout: 30000 + getDecoratedValue: true + general_cache: + enabled: true + maxByteSize: 10000000 + expiresIn: 61000 + + error_handling: + include_cause_extension: false + truncate_extensions: true + + # ## DB Configuration + # # db_type can either be 'postgres' or 'mysql'. Ensure the correct DB is enabled and configured below: postgresql.enabled or mysql.enabled + # db_type: 'mysql' + # # db_driver can either be 'pg' or 'mysql'. Ensure the correct corresponding db_type above has been set. + # db_driver: 'mysql' + # db_host: *ALS_DB_HOST + # db_port: *ALS_DB_PORT + # db_user: *ALS_DB_USER + # ## Secret-Management + # ### Set this if you are using a clear password configured in the config section + # # db_password: *ALS_DB_PASSWORD + # ### Configure this if you want to use a secret. Note, this will override the db_password, + # ### Use the next line if you do wish to use the db_password value instead. + # # db_secret: + # ### Example config for an existing secret + # db_secret: + # name: *ALS_DB_SECRET_NAME + # key: *ALS_DB_SECRET_KEY + # db_database: *ALS_DB_NAME + # db_connection_pool_min: 10 + # db_connection_pool_max: 30 + # db_acquire_timeout_millis: 30000 + # db_create_timeout_millis: 30000 + # db_destroy_timeout_millis: 5000 + # db_idle_timeout_millis: 30000 + # db_reap_interval_millis: 1000 + # db_create_retry_interval_millis: 200 + # db_debug: false + display_routes: true + # run_migrations: false + + endpointSecurity: + jwsSign: true + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + # jwsSigningKey: + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- + # The following is an example key and shouldn't be used in production + jwsSigningKey: |- + -----BEGIN PRIVATE KEY----- + MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQDuB5HuHRH5BqI/ + VAC/ixm6lz8kJmigIB5jMxLrhB9cgqM+pb0O+is88VRHdxtw8eKG3nvrZYy/4nsJ + z32qo4sOIMqHWTlZgbURVK4FAUEZ/qn63UnXJ1YVqT4UGg31BBj2c1JdlxG2t4JV + DvzGrI2/ia/t4gYZCWrQz6a8OClBIaXu2t6EGFnysyS+1YDWtNIHO+z0lvAY9oad + 5MZPHN51o04eIoLO0tPfkz0+NDs4ECwUWuFAg8yo1hxnvSoERiCAwEbFgq2wDe1+ + oBhOpusd4VastD/TEqO8RhrwTodddOMKzapJPrQJuvTkrpkmkPOGE8DgIVHsULLR + UYEMKvTVAgMBAAECgf94Meq77xrcFg8sSqe5eNHYP39tvaWyqE7mY/slvpNDH5Pl + D/p21akS156E32BEJuYPk/TLiI2kMWjnvbHvNgr9tq8x3ToyTjtrg5clq8Hr1Ozo + FnFiqkVHMFPFPQZEVU64CQPA33DixuWjMWS3YINfCAinErBry0PiNZGmuFi1K/wy + e1z2F9WfG3IEBEe3NaeXwN55ZPJve0LtneJy3YqNwMg2FpPKBRHFV4lKTaU/hqhC + NK6HQoEXN4Y9AQHn53Fl8n0iNO3qx0Tb7EuGNFmZ2xTlpDKAp8M+BA5Qm5YDkbd6 + OoxbGj2YxZncbG+RsvICtVMLqIytubvYREY9WGkCgYEA+K64xhJzWV3cGc8/90ko + TryGMBj1ly5TNa1YyOQxl5z4Glc0aI8a+1vJGEAA+c/OEhMR8MRn3+QfV2LJOI5X + V8Zo2Ger6Ln99LBddTh2HXL3M60cMgs8MYGuJ75g5R/UHnJBLo7NFyVddCOMT3hc + AYSDN3XCw9ycqTw2/mJHB9kCgYEA9QiaCfTtnXdjMqLeYbp2uQEyyO6IZs956ym7 + sEQMwx/3wnlE9eiJ6iQxZfddkfOCyV/4MMAlYfpTBQFg7Cwb32Xrv3Ezy0HfZrnt + 5Nj4SVQWuOXJhdfC9dmTF+cvBeP+vC6PyDbikxdCo9+05chxS7I3MLxCue4qxy0C + QfQIE10CgYA+kHacHng2u45sT9/f7t/dL0DzSNRAvL7iekIkCIURh8RDnDzrMVWw + d18YYsHcF5PYqEOTN1aK1XGtIoVNXUJMKvaluy9c1a42qUhZ/WJ59jqLHbpCPOFf + 8yhFh3gJLQDIyCXt+K9Qa24fkfHy7Gz5VMVOZqohbJddXHDZfxAvwQKBgAdU947+ + tjF1BhHYz8Cq3KySfZuHj6tL4AEKYaRXlO4twbMe/9I/4AiShqvfZ/xbBfnSllGX + Hkc9P0iyDt1iQH9BxHkZAQy+7tlbDORBHcTL8FYeAhawKxRCK2WWtFB/zvqAhire + gY8XLhZLNlV91u4F6iLaL0DzAHKvRRcGH0u9AoGATNigZgbRRHJC21JucHeE0tP7 + HjGALvb4qn1o0oDHsxNY8i6vVNw9YeQpZaJhceuRHJTGcsq2dJSXpYwIhIVs/8RK + bKbkEndra96L6FRZN8LYBl8zbRUPx39ojGeSbFliQv1eaoA/1DDhCiC2NlcSmbJl + ecaG/Oyo/S+eM8nR7mc= + -----END PRIVATE KEY----- + + # Thirdparty API Config + featureEnableExtendedPartyIdType: false + + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + + ## Handlers configuration + handlers: + DISABLED: false + MONITORING_PORT: 4003 + TIMEOUT: + DISABLED: false + TIMEXP: "*/30 * * * * *" + TIMEZONE: "UTC" + BATCH_SIZE: 100 + + # @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) + # ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ + # e.g: + # initContainers: + # - name: your-image-name + # image: your-image + # imagePullPolicy: Always + # command: ['sh', '-c', 'echo "hello world"'] + # + initContainers: [] + # initContainers: | + # - name: wait-for-mysql + # image: mysql:9.0.1 + # imagePullPolicy: IfNotPresent + # command: + # - sh + # - -c + # - | + # until result=$(mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -ss -N -e 'select is_locked from migration_lock;') && eval 'echo is_locked=$result' && if [ -z $result ]; then false; fi && if [ $result -ne 0 ]; then false; fi; + # do + # echo --------------------; + # echo Waiting for MySQL...; + # sleep 2; + # done; + # echo ====================; + # echo MySQL ok!; + # env: + # - name: DB_HOST + # value: '{{ .Values.config.db_host }}' + # - name: DB_PORT + # value: '{{ .Values.config.db_port }}' + # - name: DB_USER + # value: '{{ .Values.config.db_user }}' + # - name: DB_PASSWORD + # {{- if .Values.config.db_secret }} + # valueFrom: + # secretKeyRef: + # name: '{{ .Values.config.db_secret.name }}' + # key: '{{ .Values.config.db_secret.key }}' + # {{- else }} + # value: {{ .Values.config.db_password }} + # {{- end }} + # - name: DB_DATABASE + # value: '{{ .Values.config.db_database }}' + + service: + internalPort: 4003 + ## @param service.type %%MAIN_CONTAINER_NAME%% service type + ## + type: ClusterIP + ## @param service.port %%MAIN_CONTAINER_NAME%% service HTTP port + ## + port: 80 + ## @param service.httpsPort %%MAIN_CONTAINER_NAME%% service HTTPS port + ## + httpsPort: 443 + ## Node ports to expose + ## @param service.nodePorts.http Node port for HTTP + ## @param service.nodePorts.https Node port for HTTPS + ## NOTE: choose port between <30000-32767> + ## + nodePorts: + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: null + ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer + ## + loadBalancerIP: null + ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources + ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param service.annotations Additional custom annotations for %%MAIN_CONTAINER_NAME%% service + ## + annotations: {} + ## @param master.service.sessionAffinity Session Affinity for Kubernetes service, can be "None" or "ClientIP" + ## If "ClientIP", consecutive client requests will be directed to the same Pod + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + ## + sessionAffinity: None + ## @param master.service.sessionAffinityConfig Additional settings for the sessionAffinity + ## sessionAffinityConfig: + ## clientIP: + ## timeoutSeconds: 300 + ## + sessionAffinityConfig: {} + + ingress: + enabled: true + ## @param ingress.pathType Ingress path type + ## + pathType: ImplementationSpecific + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: null + ## @param ingress.hostname Default host for the ingress record + ## + hostname: account-lookup-service-handler.local + ## @param servicePort : port for the service + ## + servicePort: 80 + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + path: / + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: null + ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter + ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` + ## You can: + ## - Use the `ingress.secrets` parameter to create this TLS secret + ## - Relay on cert-manager to create it by setting `ingress.certManager=true` + ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` + ## + tls: false + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## + certManager: false + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## + selfSigned: false + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + extraHosts: null + extraPaths: null + extraTls: null + secrets: null + className: "nginx" + ## + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + resources: {} + + nodeSelector: {} + + tolerations: [] + + affinity: {} + als-oracle-pathfinder: enabled: false # Declare variables to be passed into your templates. # Declare variables to be passed into your templates. - image: repository: mojaloop/als-oracle-pathfinder - tag: v12.0.0 + tag: v12.1.0 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -1054,7 +1510,7 @@ account-lookup-service: # initContainers: [] initContainers: | - name: wait-for-mysql-central-ledger - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -1118,7 +1574,7 @@ account-lookup-service: - name: SERVICE_NAME value: '{{ include "als-oracle-pathfinder.name" . }}' - name: wait-for-mysql-account-lookup - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -1209,7 +1665,7 @@ account-lookup-service: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: als-oracle-pathfinder.local @@ -1222,7 +1678,7 @@ account-lookup-service: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -1243,30 +1699,86 @@ account-lookup-service: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: quoting-service: quoting-service: enabled: true + image: + registry: docker.io + repository: mojaloop/quoting-service + tag: v17.1.1 config: + hub_participant: *HUB_PARTICIPANT + ## DB Configuration + # db_type can either be 'postgres' or 'mysql'. Ensure the correct DB is enabled and configured below: postgresql.enabled or mysql.enabled + db_type: 'mysql' + # db_driver can either be 'pg' or 'mysql'. Ensure the correct corresponding db_type above has been set. + db_driver: 'mysql' + db_host: *CL_DB_HOST + db_port: *CL_DB_PORT + db_user: *CL_DB_USER + ## Secret-Management + ### Set this if you are using a clear password configured in the config section + # db_password: *CL_DB_PASSWORD + ### Configure this if you want to use a secret. Note, this will override the db_password, + ### Use the next line if you do wish to use the db_password value instead. + # db_secret: + ### Example config for an existing secret + db_secret: + name: *CL_DB_SECRET_NAME + key: *CL_DB_SECRET_KEY + db_database: *CL_DB_NAME + db_connection_pool_min: 10 + db_connection_pool_max: 30 + db_acquire_timeout_millis: 30000 + db_create_timeout_millis: 30000 + db_destroy_timeout_millis: 5000 + db_idle_timeout_millis: 30000 + db_reap_interval_millis: 1000 + db_create_retry_interval_millis: 200 + db_debug: false + simple_routing_mode_enabled: true log_level: info log_transport: file + protocol_versions: + { + "CONTENT": { + "DEFAULT": "2.0", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + }, + "ACCEPT": { + "DEFAULT": "2", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + } + } # A comma-separated list of events that should return immediately instead of waiting for the event promises to resolve # Any combination of: `log,audit,trace` event_async_override: 'log,trace' @@ -1278,12 +1790,46 @@ quoting-service: kafka_producer_quote_post_topic: 'topic-quotes-post' + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + + ## ISO20022 configuration + api_type: *API_TYPE + original_payload_storage: *ORIGINAL_PAYLOAD_STORAGE + payload_cache: *PAYLOAD_CACHE + error_handling: include_cause_extension: false truncate_extensions: true - sidecar: + endpointSecurity: + jwsSign: false + jwsSigningKey: null + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- + + ## metric configuration for prometheus instrumentation + metrics: + ## flag to enable/disable the metrics end-points enabled: true + config: + timeout: 5000 + prefix: moja_ + defaultLabels: + serviceName: quoting-service + + sidecar: + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -1298,23 +1844,18 @@ quoting-service: periodSeconds: 15 config: event_log_grpc_host: localhost - event_log_grpc_port: 50051 - log_level: info - - ## metric configuration for prometheus instrumentation - metrics: - ## flag to enable/disable the metrics end-points - enabled: true - config: - timeout: 5000 - prefix: moja_ - defaultLabels: - serviceName: quoting-service + event_log_grpc_port: 50051 + log_level: info quoting-service-handler: enabled: true + image: + registry: docker.io + repository: mojaloop/quoting-service + tag: v17.1.1 config: + hub_participant: *HUB_PARTICIPANT ## DB Configuration # db_type can either be 'postgres' or 'mysql'. Ensure the correct DB is enabled and configured below: postgresql.enabled or mysql.enabled db_type: 'mysql' @@ -1345,17 +1886,31 @@ quoting-service: db_debug: false simple_routing_mode_enabled: true log_level: info + log_transport: file - ## metric configuration for prometheus instrumentation - metrics: - ## flag to enable/disable the metrics end-points - enabled: true - config: - timeout: 5000 - prefix: moja_ - defaultLabels: - serviceName: quoting-service - + protocol_versions: + { + "CONTENT": { + "DEFAULT": "2.0", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + }, + "ACCEPT": { + "DEFAULT": "2", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + } + } # A comma-separated list of events that should return immediately instead of waiting for the event promises to resolve # Any combination of: `log,audit,trace` event_async_override: 'log,trace' @@ -1365,24 +1920,34 @@ quoting-service: kafka_host: *KAFKA_HOST kafka_port: *KAFKA_PORT + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + + ## ISO20022 configuration + original_payload_storage: *ORIGINAL_PAYLOAD_STORAGE + payload_cache: *PAYLOAD_CACHE + error_handling: include_cause_extension: false truncate_extensions: true endpointSecurity: jwsSign: true - fspiopSourceSigningName: 'switch' - # jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + # jwsSigningKey: + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 # -----END RSA PRIVATE KEY----- # The following is an example key and shouldn't be used in production @@ -1416,8 +1981,19 @@ quoting-service: ecaG/Oyo/S+eM8nR7mc= -----END PRIVATE KEY----- - sidecar: + ## metric configuration for prometheus instrumentation + metrics: + ## flag to enable/disable the metrics end-points enabled: true + config: + timeout: 5000 + prefix: moja_ + defaultLabels: + serviceName: quoting-service + + # sidecar configuration + sidecar: + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -1435,19 +2011,8 @@ quoting-service: event_log_grpc_port: 50051 log_level: info - ## metric configuration for prometheus instrumentation - metrics: - ## flag to enable/disable the metrics end-points - enabled: true - config: - timeout: 5000 - prefix: moja_ - defaultLabels: - serviceName: quoting-service-handler - ml-api-adapter: enabled: true - ml-api-adapter-service: enabled: true # Default values for ml-api-adapter. @@ -1456,7 +2021,7 @@ ml-api-adapter: image: registry: docker.io repository: mojaloop/ml-api-adapter - tag: v14.0.5 + tag: v16.0.2 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -1484,11 +2049,11 @@ ml-api-adapter: ## command: - node - - src/api/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/api/index.js ## @param diagnosticMode.debug config to override all debug information ## @@ -1509,7 +2074,7 @@ ml-api-adapter: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -1539,7 +2104,7 @@ ml-api-adapter: - name: wait-for-kafka image: solsson/kafka:2.8.1 imagePullPolicy: IfNotPresent - command: + command: - sh - -c - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; @@ -1562,6 +2127,7 @@ ml-api-adapter: enabled: true config: + hub_participant: *HUB_PARTICIPANT # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: *KAFKA_HOST kafka_port: *KAFKA_PORT @@ -1575,22 +2141,26 @@ ml-api-adapter: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -1608,6 +2178,14 @@ ml-api-adapter: # Any combination of: `log,audit,trace` event_async_override: 'log,trace' + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + + ## ISO20022 configuration + api_type: *API_TYPE + original_payload_storage: *ORIGINAL_PAYLOAD_STORAGE + payload_cache: *PAYLOAD_CACHE + ## Error handling Configuration error_handling: include_cause_extension: false @@ -1630,17 +2208,17 @@ ml-api-adapter: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -1674,7 +2252,7 @@ ml-api-adapter: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: ml-api-adapter.local @@ -1687,7 +2265,7 @@ ml-api-adapter: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -1708,12 +2286,11 @@ ml-api-adapter: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -1735,7 +2312,7 @@ ml-api-adapter: image: registry: docker.io repository: mojaloop/ml-api-adapter - tag: v14.0.5 + tag: v16.0.2 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -1763,13 +2340,13 @@ ml-api-adapter: ## command: - node - - src/handlers/index.js - - handler - - '--notification' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--notification' ## @param diagnosticMode.debug config to override all debug information ## @@ -1790,7 +2367,7 @@ ml-api-adapter: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -1820,7 +2397,7 @@ ml-api-adapter: - name: wait-for-kafka image: solsson/kafka:2.8.1 imagePullPolicy: IfNotPresent - command: + command: - sh - -c - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; @@ -1843,6 +2420,7 @@ ml-api-adapter: enabled: true config: + hub_participant: *HUB_PARTICIPANT # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: *KAFKA_HOST kafka_port: *KAFKA_PORT @@ -1856,22 +2434,26 @@ ml-api-adapter: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -1899,20 +2481,23 @@ ml-api-adapter: # Parameters for JWS signing requests generated by ml-api-adapter endpointSecurity: jwsSign: true - fspiopSourceSigningName: 'switch' + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null # jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- # The following is an example key and shouldn't be used in production jwsSigningKey: |- -----BEGIN PRIVATE KEY----- @@ -1944,6 +2529,14 @@ ml-api-adapter: ecaG/Oyo/S+eM8nR7mc= -----END PRIVATE KEY----- + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + + ## ISO20022 configuration + api_type: *API_TYPE + original_payload_storage: *ORIGINAL_PAYLOAD_STORAGE + payload_cache: *PAYLOAD_CACHE + ## Error handling Configuration error_handling: include_cause_extension: false @@ -1966,17 +2559,17 @@ ml-api-adapter: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -2010,7 +2603,7 @@ ml-api-adapter: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: ml-api-adapter-notification.local @@ -2023,7 +2616,7 @@ ml-api-adapter: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -2044,12 +2637,11 @@ ml-api-adapter: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -2078,7 +2670,7 @@ centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -2106,11 +2698,11 @@ centralledger: ## command: - node - - src/api/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/api/index.js ## @param diagnosticMode.debug config to override all debug information ## @@ -2167,6 +2759,8 @@ centralledger: enabled: true config: + hub_participant: *HUB_PARTICIPANT + payee_participant_currency_validation_enabled: *PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -2224,6 +2818,9 @@ centralledger: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -2236,7 +2833,7 @@ centralledger: # initContainers: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -2268,28 +2865,6 @@ centralledger: {{- end }} - name: DB_DATABASE value: '{{ .Values.config.db_database }}' - - name: run-migration - image: '{{ .Values.image.repository }}:{{ .Values.image.tag }}' - imagePullPolicy: IfNotPresent - command: - - sh - - -c - - npm run migrate - env: - - name: CLEDG_MIGRATIONS__RUN_DATA_MIGRATIONS - value: 'true' - - name: CLEDG_DATABASE__PASSWORD - {{- if .Values.config.db_secret }} - valueFrom: - secretKeyRef: - name: '{{ .Values.config.db_secret.name }}' - key: '{{ .Values.config.db_secret.key }}' - {{- else }} - value: {{ .Values.config.db_password }} - {{- end }} - volumeMounts: - - name: '{{ template "account-lookup-service-admin.fullname" . }}-config-volume' - mountPath: /opt/app/config service: internalPort: 3001 @@ -2308,17 +2883,17 @@ centralledger: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -2352,7 +2927,7 @@ centralledger: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger.local @@ -2365,7 +2940,7 @@ centralledger: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -2386,12 +2961,11 @@ centralledger: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -2414,7 +2988,7 @@ centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -2442,13 +3016,13 @@ centralledger: ## command: - node - - src/handlers/index.js - - handler - - '--prepare' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--prepare' ## @param diagnosticMode.debug config to override all debug information ## @@ -2483,7 +3057,7 @@ centralledger: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -2505,6 +3079,8 @@ centralledger: enabled: true config: + hub_participant: *HUB_PARTICIPANT + payee_participant_currency_validation_enabled: *PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -2562,6 +3138,9 @@ centralledger: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + ## Enable On-Us transfers enable_on_us_transfers: false @@ -2599,7 +3178,7 @@ centralledger: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -2649,17 +3228,17 @@ centralledger: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -2693,7 +3272,7 @@ centralledger: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger-transfer-prepare.local @@ -2706,7 +3285,7 @@ centralledger: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -2727,12 +3306,11 @@ centralledger: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -2755,7 +3333,7 @@ centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -2783,13 +3361,13 @@ centralledger: ## command: - node - - src/handlers/index.js - - handler - - '--position' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--position' ## @param diagnosticMode.debug config to override all debug information ## @@ -2824,7 +3402,7 @@ centralledger: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -2846,6 +3424,8 @@ centralledger: enabled: true config: + hub_participant: *HUB_PARTICIPANT + payee_participant_currency_validation_enabled: *PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -2903,6 +3483,9 @@ centralledger: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -2934,7 +3517,7 @@ centralledger: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -2984,17 +3567,17 @@ centralledger: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -3028,7 +3611,7 @@ centralledger: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger-transfer-position.local @@ -3041,7 +3624,7 @@ centralledger: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -3062,12 +3645,11 @@ centralledger: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -3091,7 +3673,7 @@ centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -3119,13 +3701,13 @@ centralledger: ## command: - node - - src/handlers/index.js - - handler - - '--positionbatch' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--positionbatch' ## @param diagnosticMode.debug config to override all debug information ## @@ -3160,10 +3742,10 @@ centralledger: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar - tag: v13.0.0 + tag: v14.0.0 pullPolicy: IfNotPresent readinessProbe: enabled: true @@ -3182,6 +3764,8 @@ centralledger: enabled: true config: + hub_participant: *HUB_PARTICIPANT + payee_participant_currency_validation_enabled: *PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -3233,13 +3817,15 @@ centralledger: # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: *KAFKA_HOST kafka_port: *KAFKA_PORT - kafka_partition_assignment_strategy: 'cooperative-sticky' ## Cache configuration cache_enabled: false cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + ## BATCH_PROCESSING: Custom configuration for batch processing # The batch size to be requested by the Kafka consumer. batch_size: 100 @@ -3277,7 +3863,7 @@ centralledger: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -3327,17 +3913,17 @@ centralledger: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -3371,7 +3957,7 @@ centralledger: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger-transfer-position.local @@ -3384,7 +3970,7 @@ centralledger: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -3405,12 +3991,11 @@ centralledger: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -3433,7 +4018,7 @@ centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -3461,13 +4046,13 @@ centralledger: ## command: - node - - src/handlers/index.js - - handler - - '--get' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--get' ## @param diagnosticMode.debug config to override all debug information ## @@ -3524,6 +4109,8 @@ centralledger: enabled: false config: + hub_participant: *HUB_PARTICIPANT + payee_participant_currency_validation_enabled: *PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -3581,6 +4168,9 @@ centralledger: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -3612,7 +4202,7 @@ centralledger: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -3662,17 +4252,17 @@ centralledger: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -3706,7 +4296,7 @@ centralledger: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger-transfer-get.local @@ -3719,7 +4309,7 @@ centralledger: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -3740,12 +4330,11 @@ centralledger: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -3768,7 +4357,7 @@ centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -3796,13 +4385,13 @@ centralledger: ## command: - node - - src/handlers/index.js - - handler - - '--fulfil' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--fulfil' ## @param diagnosticMode.debug config to override all debug information ## @@ -3837,7 +4426,7 @@ centralledger: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -3859,6 +4448,8 @@ centralledger: enabled: true config: + hub_participant: *HUB_PARTICIPANT + payee_participant_currency_validation_enabled: *PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -3916,6 +4507,9 @@ centralledger: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + ## BATCH_PROCESSING: Set following to true for enabling batch processing batch_processing_enabled: *CL_BATCH_PROCESSING_ENABLED @@ -3950,7 +4544,7 @@ centralledger: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -4000,17 +4594,17 @@ centralledger: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -4044,7 +4638,7 @@ centralledger: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger-transfer-fulfil.local @@ -4057,7 +4651,7 @@ centralledger: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -4078,12 +4672,11 @@ centralledger: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -4106,7 +4699,7 @@ centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -4134,13 +4727,13 @@ centralledger: ## command: - node - - src/handlers/index.js - - handler - - '--timeout' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--timeout' ## @param diagnosticMode.debug config to override all debug information ## @@ -4175,7 +4768,7 @@ centralledger: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -4197,6 +4790,8 @@ centralledger: enabled: false config: + hub_participant: *HUB_PARTICIPANT + payee_participant_currency_validation_enabled: *PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -4259,6 +4854,12 @@ centralledger: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + + ## BATCH_PROCESSING: Set following to true for enabling batch processing + batch_processing_enabled: *CL_BATCH_PROCESSING_ENABLED + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -4290,7 +4891,7 @@ centralledger: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -4340,17 +4941,17 @@ centralledger: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -4384,7 +4985,7 @@ centralledger: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger-timeout.local @@ -4397,7 +4998,7 @@ centralledger: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -4418,12 +5019,11 @@ centralledger: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -4446,7 +5046,7 @@ centralledger: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -4474,13 +5074,13 @@ centralledger: ## command: - node - - src/handlers/index.js - - handler - - '--admin' ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - handler + - '--admin' ## @param diagnosticMode.debug config to override all debug information ## @@ -4537,6 +5137,8 @@ centralledger: enabled: false config: + hub_participant: *HUB_PARTICIPANT + payee_participant_currency_validation_enabled: *PAYEE_PARTICIPANT_CURRENCY_VALIDATION_ENABLED ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -4594,6 +5196,9 @@ centralledger: cache_max_byte_size: 10000000 cache_expires_in_ms: 1000 + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -4625,7 +5230,7 @@ centralledger: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -4675,17 +5280,17 @@ centralledger: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -4719,7 +5324,7 @@ centralledger: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger-admin-transfer.local @@ -4732,7 +5337,7 @@ centralledger: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -4753,12 +5358,11 @@ centralledger: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -4780,7 +5384,7 @@ centralsettlement: image: registry: docker.io repository: mojaloop/central-settlement - tag: v16.0.0 + tag: v17.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -4808,11 +5412,11 @@ centralsettlement: ## command: - node - - src/api/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/api/index.js ## @param diagnosticMode.debug config to override all debug information ## @@ -4847,7 +5451,7 @@ centralsettlement: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -4886,6 +5490,7 @@ centralsettlement: serviceName: central-settlement-service config: + hub_participant: *HUB_PARTICIPANT ## Kafka Configuration # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: *KAFKA_HOST @@ -5004,9 +5609,6 @@ centralsettlement: window_aggregation: retry_count: 3 retry_interval: 3000 - hub_participant: - id: 1 - name: Hub ## Log config log_level: info @@ -5059,7 +5661,7 @@ centralsettlement: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -5109,17 +5711,17 @@ centralsettlement: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -5153,7 +5755,7 @@ centralsettlement: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-settlement-service.local @@ -5166,7 +5768,7 @@ centralsettlement: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -5187,12 +5789,11 @@ centralsettlement: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -5211,7 +5812,7 @@ centralsettlement: image: registry: docker.io repository: mojaloop/central-settlement - tag: v16.0.0 + tag: v17.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -5239,13 +5840,13 @@ centralsettlement: ## command: - node - - src/handlers/index.js - - h - - "--deferredSettlement" ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + - src/handlers/index.js + - h + - "--deferredSettlement" ## @param diagnosticMode.debug config to override all debug information ## @@ -5280,7 +5881,7 @@ centralsettlement: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -5319,6 +5920,7 @@ centralsettlement: serviceName: central-settlement-handler-deferredsettlement config: + hub_participant: *HUB_PARTICIPANT ## Kafka Configuration # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: *KAFKA_HOST @@ -5437,9 +6039,6 @@ centralsettlement: window_aggregation: retry_count: 3 retry_interval: 3000 - hub_participant: - id: 1 - name: Hub ## Log config log_level: info @@ -5492,7 +6091,7 @@ centralsettlement: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -5542,17 +6141,17 @@ centralsettlement: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -5586,7 +6185,7 @@ centralsettlement: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-settlement-deferredsettlement.local @@ -5599,7 +6198,7 @@ centralsettlement: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -5620,12 +6219,11 @@ centralsettlement: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -5646,7 +6244,7 @@ centralsettlement: image: registry: docker.io repository: mojaloop/central-settlement - tag: v16.0.0 + tag: v17.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -5715,7 +6313,7 @@ centralsettlement: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -5754,6 +6352,7 @@ centralsettlement: serviceName: central-settlement-handler-grosssettlement config: + hub_participant: *HUB_PARTICIPANT ## Kafka Configuration # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: *KAFKA_HOST @@ -5872,9 +6471,6 @@ centralsettlement: window_aggregation: retry_count: 3 retry_interval: 3000 - hub_participant: - id: 1 - name: Hub ## Log config log_level: info @@ -5927,7 +6523,7 @@ centralsettlement: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -5977,17 +6573,17 @@ centralsettlement: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -6021,7 +6617,7 @@ centralsettlement: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-settlement-rules.local @@ -6034,7 +6630,7 @@ centralsettlement: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -6055,12 +6651,11 @@ centralsettlement: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -6081,7 +6676,7 @@ centralsettlement: image: registry: docker.io repository: mojaloop/central-settlement - tag: v16.0.0 + tag: v17.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -6150,7 +6745,7 @@ centralsettlement: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -6189,6 +6784,7 @@ centralsettlement: serviceName: central-settlement-handler-rules config: + hub_participant: *HUB_PARTICIPANT ## Kafka Configuration # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: *KAFKA_HOST @@ -6307,9 +6903,6 @@ centralsettlement: window_aggregation: retry_count: 3 retry_interval: 3000 - hub_participant: - id: 1 - name: Hub ## Log config log_level: info @@ -6349,13 +6942,13 @@ centralsettlement: # // End: 2100-12-31T23:59:59.999Z # // Description: This is empty rules script # // ******************************************************** - ## Globals: + ## Globals: # // payload: The contents of the message from the Kafka topic. # // transfer: The transfer object. # // # Functions: - ## Data retrieval functions: + ## Data retrieval functions: # // getTransfer(transferId): Retrieves a mojaloop transfer from the central-ledger API. - ## Helper functions: + ## Helper functions: # // getExtensionValue(list, key): Gets a value from an extension list # // log(message): allows the script to log to standard out for debugging purposes # // Math functions: @@ -6452,7 +7045,7 @@ centralsettlement: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -6502,17 +7095,17 @@ centralsettlement: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -6546,7 +7139,7 @@ centralsettlement: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-settlement-grosssettlement.local @@ -6559,7 +7152,7 @@ centralsettlement: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -6580,12 +7173,11 @@ centralsettlement: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -6605,7 +7197,7 @@ transaction-requests-service: image: registry: docker.io repository: mojaloop/transaction-requests-service - tag: v14.1.2 + tag: v14.3.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -6673,7 +7265,7 @@ transaction-requests-service: tolerations: [] sidecar: - enabled: true + enabled: false image: repository: mojaloop/event-sidecar tag: v14.0.0 @@ -6713,6 +7305,7 @@ transaction-requests-service: serviceName: transaction-requests config: + hub_participant: *HUB_PARTICIPANT central_services_host: '$release_name-centralledger-service' central_services_port: 80 @@ -6774,17 +7367,17 @@ transaction-requests-service: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -6818,7 +7411,7 @@ transaction-requests-service: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: transaction-request-service.local @@ -6831,7 +7424,7 @@ transaction-requests-service: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -6852,12 +7445,11 @@ transaction-requests-service: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -6878,7 +7470,7 @@ thirdparty: image: registry: docker.io repository: mojaloop/auth-service - tag: v15.0.0 + tag: v16.0.0-snapshot.0 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -6955,6 +7547,7 @@ thirdparty: ## Svc configs config: + hub_participant: *HUB_PARTICIPANT ## DB Configuration db_host: *TP_AUTH_SVC_DB_HOST db_port: *TP_AUTH_SVC_DB_PORT @@ -7087,7 +7680,7 @@ thirdparty: - name: REDIS_PORT value: {{ .Values.config.redis_port | quote }} - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -7160,17 +7753,17 @@ thirdparty: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -7206,7 +7799,7 @@ thirdparty: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: auth-service.local @@ -7285,7 +7878,7 @@ thirdparty: image: registry: docker.io repository: mojaloop/als-consent-oracle - tag: v0.2.2 + tag: v0.2.3 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -7350,13 +7943,11 @@ thirdparty: ## Set toleration for scheduler ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ tolerations: [] - # Add exta environment variables here env: [] - # e.g. - # - name: LOG_LEVEL - # value: debug - + # e.g. + # - name: LOG_LEVEL + # value: debug ## Svc configs config: ## DB Configuration @@ -7421,17 +8012,17 @@ thirdparty: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -7467,7 +8058,7 @@ thirdparty: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: consent-oracle.local @@ -7546,7 +8137,7 @@ thirdparty: image: registry: docker.io repository: mojaloop/thirdparty-api-svc - tag: v14.0.0 + tag: v15.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -7612,60 +8203,63 @@ thirdparty: ## Set toleration for scheduler ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ tolerations: [] - # Add exta environment variables here env: [] - # e.g. to change the Log Level: - # - name: LOG_LEVEL - # value: debug - - ## Svc configs - config: {} - - ## Svc config files - config_files: - default.json: | - { - "PORT": {{ .Values.service.internalPort }}, - "HOST": "0.0.0.0", - "INSPECT": { - "DEPTH": 4, - "SHOW_HIDDEN": false, - "COLOR": true - }, - "ENDPOINT_CACHE_CONFIG": { - "expiresIn": 180000, - "generateTimeout": 30000 - }, - "ENDPOINT_SERVICE_URL": "http://{{ .Release.Name }}-centralledger-service", - "PARTICIPANT_LIST_LOCAL": [ - "dfspa", - "dfspb" - ], - "ERROR_HANDLING": { - "includeCauseExtension": true, - "truncateExtensions": true - }, - "INSTRUMENTATION": { - "METRICS": { - "DISABLED": false, - "labels": { - "eventId": "*" - }, - "config": { - "timeout": 5000, - "prefix": "moja_3p_api", - "defaultLabels": { - "serviceName": "thirdparty-api-svc" - } + # e.g. to change the Log Level: + # - name: LOG_LEVEL + # value: debug + ## Svc configs + config: + hub_participant: *HUB_PARTICIPANT + + ## Svc config files + config_files: + default.json: | + { + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": "{{ .Values.config.hub_participant.name }}" + }, + "PORT": {{ .Values.service.internalPort }}, + "HOST": "0.0.0.0", + "INSPECT": { + "DEPTH": 4, + "SHOW_HIDDEN": false, + "COLOR": true + }, + "ENDPOINT_CACHE_CONFIG": { + "expiresIn": 180000, + "generateTimeout": 30000 + }, + "ENDPOINT_SERVICE_URL": "http://{{ .Release.Name }}-centralledger-service", + "PARTICIPANT_LIST_LOCAL": [ + "dfspa", + "dfspb" + ], + "ERROR_HANDLING": { + "includeCauseExtension": true, + "truncateExtensions": true + }, + "INSTRUMENTATION": { + "METRICS": { + "DISABLED": false, + "labels": { + "eventId": "*" + }, + "config": { + "timeout": 5000, + "prefix": "moja_3p_api", + "defaultLabels": { + "serviceName": "thirdparty-api-svc" } } - }, - "MOCK_CALLBACK": { - "transactionRequestId": "abc-12345", - "pispId": "pisp" } + }, + "MOCK_CALLBACK": { + "transactionRequestId": "abc-12345", + "pispId": "pisp" } + } ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ @@ -7698,17 +8292,17 @@ thirdparty: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -7744,7 +8338,7 @@ thirdparty: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: tp-api-svc.local @@ -7857,7 +8451,6 @@ thirdparty: # * support arbitrary init containers + config (that might just be config that goes into defaults # or something?). Supply all config and volumes to the init containers. # * create some test containers - # * parametrise imagePullSecretName (global? like https://github.com/bitnami/charts/tree/master/bitnami/redis#parameters) # * generate JWS private/public keys, so the user does not need to supply keys at all. # * generate public key from private, so the user only needs to supply private keys for each sim? # (_might_ be possible with a job or init container or similar). @@ -7932,99 +8525,14 @@ thirdparty: config: thirdpartysdk: enabled: true - config: { - production.json: { - "control": { - "mgmtAPIWsUrl": "127.0.0.1", - "mgmtAPIWsPort": 4010 - }, - "inbound": { - "port": 4005, - "host": "0.0.0.0", - "pispTransactionMode": true, - "tls": { - "mutualTLS": { - "enabled": false - }, - "creds": { - "ca": "/secrets/dfsp_or_3ppi_client_cacert.pem", - "cert": "/secrets/dfsp_or_3ppi_server_cert.pem", - "key": "/secrets/dfsp_or_3ppi_server_key.key" - } - } - }, - "outbound": { - "port": 4006, - "host": "0.0.0.0", - "tls": { - "mutualTLS": { - "enabled": false - }, - "creds": { - "ca": "/secrets/hub_server_cacert.pem", - "cert": "/secrets/dfsp_or_3ppi_client_cert.cer", - "key": "/secrets/dfsp_or_3ppi_client_key.key" - } - } - }, - "requestProcessingTimeoutSeconds": 30, - "wso2": { - "auth": { - "staticToken": "test-static-token", - "tokenEndpoint": "", - "clientKey": "test-client-key", - "clientSecret": "test-client-secret", - "refreshSeconds": 3600 - } - }, - "redis": { - "port": 6379, - "timeout": 100 - }, - "inspect": { - "depth": 4, - "showHidden": false, - "color": true - }, - "shared": { - "authServiceParticipantId": "centralauth", - "thirdpartyRequestsEndpoint": "$release_name-tp-api-svc", - "servicesEndpoint": "$release_name-tp-api-svc", - "alsEndpoint": "$release_name-account-lookup-service", - "quotesEndpoint": "$release_name-quoting-service", - "transfersEndpoint": "$release_name-ml-api-adapter-service", - "dfspId": "$name", - "dfspBackendUri": "$full_name-backend:3000", - "dfspBackendHttpScheme": "http", - "dfspBackendVerifyAuthorizationPath": "verify-authorization", - "dfspBackendVerifyConsentPath": "verify-consent", - "sdkRequestToPayTransferUri": "0.0.0.0:3000/requestToPayTransfer", - "sdkOutgoingUri": "$full_name-scheme-adapter:4001", - "sdkOutgoingHttpScheme": "http", - "sdkOutgoingPartiesInformationPath": "parties/{Type}/{ID}/{SubId}", - "sdkNotifyAboutTransferUri": "ml-testing-toolkit:4040/thirdpartyRequests/transactions/{ID}", - "tempOverrideQuotesPartyIdType": "MSISDN", - "testShouldOverrideConsentId": true, - "testConsentRequestToConsentMap": { - "76059a0a-684f-4002-a880-b01159afe119": "76059a0a-684f-4002-a880-b01159afe119", - "6bf07f98-cfce-45ba-b048-7a86bac45d79": "be433b9e-9473-4b7d-bdd5-ac5b42463afb", - "c51ec534-ee48-4575-b6a9-ead2955b8069": "46876aac-5db8-4353-bb3c-a6a905843ce7", - "d51ec534-ee48-4575-b6a9-ead2955b8069": "23b07761-6b41-442a-b3d5-d876a6ea9ecc", - "b5d6206c-4f06-497d-af15-ed866ea6958f": "2acf1dfa-ce45-486e-b19e-ae4ad9804a63" - }, - "testOverrideTransactionChallenge": "OWZhYjAxZTcwYjU4YzRhMzRmOWQwNzBmZjllZDFiNjc2NWVhMzA1NGI1MWZjZThjZGFjNDEyZDBmNmM2MWFhMQ" - }, - "pm4mlEnabled": false, - "validateInboundJws": false, - "jwsSign": false, - "jwsSigningKey": "/jwsSigningKey.key", - "jwsVerificationKeysDirectory": null - } - } - + config: {production.json: {"control": {"mgmtAPIWsUrl": "127.0.0.1", "mgmtAPIWsPort": 4010}, "inbound": {"port": 4005, "host": "0.0.0.0", "pispTransactionMode": true, "tls": {"mutualTLS": {"enabled": false}, "creds": {"ca": "/secrets/dfsp_or_3ppi_client_cacert.pem", "cert": "/secrets/dfsp_or_3ppi_server_cert.pem", "key": "/secrets/dfsp_or_3ppi_server_key.key"}}}, "outbound": {"port": 4006, "host": "0.0.0.0", "tls": {"mutualTLS": {"enabled": false}, "creds": {"ca": "/secrets/hub_server_cacert.pem", "cert": "/secrets/dfsp_or_3ppi_client_cert.cer", "key": "/secrets/dfsp_or_3ppi_client_key.key"}}}, "requestProcessingTimeoutSeconds": 30, "wso2": {"auth": {"staticToken": "test-static-token", "tokenEndpoint": "", "clientKey": "test-client-key", "clientSecret": "test-client-secret", "refreshSeconds": 3600}}, "redis": {"port": 6379, "timeout": 100}, "inspect": {"depth": 4, "showHidden": false, "color": true}, "shared": {"authServiceParticipantId": "centralauth", "thirdpartyRequestsEndpoint": "$release_name-tp-api-svc", "servicesEndpoint": "$release_name-tp-api-svc", "alsEndpoint": "$release_name-account-lookup-service", "quotesEndpoint": "$release_name-quoting-service", "transfersEndpoint": "$release_name-ml-api-adapter-service", "dfspId": "$name", "dfspBackendUri": "$full_name-backend:3000", "dfspBackendHttpScheme": "http", "dfspBackendVerifyAuthorizationPath": "verify-authorization", "dfspBackendVerifyConsentPath": "verify-consent", "sdkRequestToPayTransferUri": "0.0.0.0:3000/requestToPayTransfer", "sdkOutgoingUri": "$full_name-scheme-adapter:4001", "sdkOutgoingHttpScheme": "http", "sdkOutgoingPartiesInformationPath": "parties/{Type}/{ID}/{SubId}", "sdkNotifyAboutTransferUri": "ml-testing-toolkit:4040/thirdpartyRequests/transactions/{ID}", "tempOverrideQuotesPartyIdType": "MSISDN", "testShouldOverrideConsentId": true, "testConsentRequestToConsentMap": {"76059a0a-684f-4002-a880-b01159afe119": "76059a0a-684f-4002-a880-b01159afe119", "6bf07f98-cfce-45ba-b048-7a86bac45d79": "be433b9e-9473-4b7d-bdd5-ac5b42463afb", "c51ec534-ee48-4575-b6a9-ead2955b8069": "46876aac-5db8-4353-bb3c-a6a905843ce7", "d51ec534-ee48-4575-b6a9-ead2955b8069": "23b07761-6b41-442a-b3d5-d876a6ea9ecc", "b5d6206c-4f06-497d-af15-ed866ea6958f": "2acf1dfa-ce45-486e-b19e-ae4ad9804a63"}, "testOverrideTransactionChallenge": "OWZhYjAxZTcwYjU4YzRhMzRmOWQwNzBmZjllZDFiNjc2NWVhMzA1NGI1MWZjZThjZGFjNDEyZDBmNmM2MWFhMQ"}, "pm4mlEnabled": false, "validateInboundJws": false, "jwsSign": false, "jwsSigningKey": "/jwsSigningKey.key", "jwsVerificationKeysDirectory": null}} schemeAdapter: secrets: jws: + # `privateKeySecret` is used to specify the secret that contains the JWS signing key. + # If `privateKeySecret` is not null, then the `privateKey` value will be ignored. + # Expected properties of `privateKeySecret` are `name` and `key`. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -8160,7 +8668,7 @@ thirdparty: { "accountNickname": "dfspa.user.nickname2", "address": "dfspa.username.5678", - "currency": "USD" + "currency": "XXX" } ] } @@ -8458,12 +8966,12 @@ thirdparty: { "accountNickname": "Chequing Account", "id": "dfspa.username.1234", - "currency": "TZS" + "currency": "XTS" }, { "accountNickname": "Everyday Spending", "id": "dfspa.username.5678", - "currency": "TZS" + "currency": "XTS" } ] } @@ -8584,6 +9092,10 @@ thirdparty: schemeAdapter: secrets: jws: + # `privateKeySecret` is used to specify the secret that contains the JWS signing key. + # If `privateKeySecret` is not null, then the `privateKey` value will be ignored. + # Expected properties of `privateKeySecret` are `name` and `key`. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -8634,6 +9146,10 @@ thirdparty: schemeAdapter: secrets: jws: + # `privateKeySecret` is used to specify the secret that contains the JWS signing key. + # If `privateKeySecret` is not null, then the `privateKey` value will be ignored. + # Expected properties of `privateKeySecret` are `name` and `key`. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -8728,12 +9244,11 @@ thirdparty: # your switch is using `FSPIOP-Source: peter` you will need a property `peter` in the following # object. Do not add the public keys of your simulators to this object. Instead, put them in # `mojaloop-simulator.simulators.$yourSimName.config.schemeAdapter.secrets.jws.publicKey`. - sharedJWSPubKeys: - # switch: |- - # -----BEGIN PUBLIC KEY----- - # blah blah blah - # -----END PUBLIC KEY----- - + sharedJWSPubKeys: null + # switch: |- + # -----BEGIN PUBLIC KEY----- + # blah blah blah + # -----END PUBLIC KEY----- defaults: # Changes to this object in the parent chart, for example 'mojaloop-simulator.defaults' will be # applied to all simulators deployed by this child chart. @@ -8742,11 +9257,15 @@ thirdparty: initContainers: waitForCache: enabled: true - - imagePullSecretName: dock-casa-secret - + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## imagePullSecrets: + ## - myRegistryKeySecretName + ## + imagePullSecrets: [] cache: - # These will be supplied directly to the init containers array in the deployment for the # scheme adapter. They should look exactly as you'd declare them inside the deployment. # Example: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#init-containers-in-use @@ -8774,20 +9293,18 @@ thirdparty: schemeAdapter: secrets: jws: - # Use the privKeySecretName field if you would like to supply a JWS private key external + # Use the privateKeySecret field if you would like to supply a JWS private key external # to this chart. - # For example, if you create a private key called `sim-payerfsp-jws-signing-key` external - # to this chart, you would supply `privKeySecretName: sim-payerfsp-jws-signing-key` here. + # For example, if you create a private key called `sim-payerfsp-jws-signing-key` with data property `private.key` + # external to this chart, you would supply + # `privateKeySecret: + # name: sim-payerfsp-jws-signing-key` + # key: private.key + # here. # These fields will take precedence over `privateKey` and `publicKey` below. # This field is best supplied per-simulator, however it's here for documentation # purposes. - privKeySecretName: {} - # TODO: update `privKeySecretName` above to contain both a name and a key in the secret. - # Add documentation on usage. - # privKeySecret: {} - # name: - # key: - # + privateKeySecret: {} # The `publicKeyConfigMapName` field allows you to supply a ConfigMap containing JWS public # keys external to this release, and have this release reference that ConfigMap to # populate JWS public keys. The format of this ConfigMap must be as described for @@ -8799,7 +9316,7 @@ thirdparty: publicKey: '' image: repository: mojaloop/sdk-scheme-adapter - tag: v23.1.1 + tag: v24.0.8 pullPolicy: IfNotPresent command: '[ "yarn", "start:api-svc" ]' <<: *defaultProbes @@ -8944,14 +9461,14 @@ thirdparty: ALLOW_TRANSFER_WITHOUT_QUOTE: false ALLOW_DIFFERENT_TRANSFER_TRANSACTION_ID: true RESERVE_NOTIFICATION: false - RESOURCE_VERSIONS: transfers=1.1,quotes=1.1,participants=1.1,parties=1.1,transactionRequests=1.1 + RESOURCE_VERSIONS: transfers=2.0,quotes=2.0,participants=1.1,parties=2.0,transactionRequests=1.1 ENABLE_FSPIOP_EVENT_HANDLER: false ENABLE_BACKEND_EVENT_HANDLER: false backend: image: repository: mojaloop/mojaloop-simulator - tag: v15.0.0 + tag: v15.1.5 pullPolicy: IfNotPresent <<: *defaultProbes @@ -9071,20 +9588,18 @@ thirdparty: # DO NOT REMOVE COMMENT outbound: *inbound jws: - # Use the privKeySecretName field if you would like to supply a JWS private key external + # Use the privateKeySecret field if you would like to supply a JWS private key external # to this chart. - # For example, if you create a private key called `sim-payerfsp-jws-signing-key` external - # to this chart, you would supply `privKeySecretName: sim-payerfsp-jws-signing-key` here. + # For example, if you create a private key called `sim-payerfsp-jws-signing-key` with data property `private.key` + # external to this chart, you would supply + # `privateKeySecret: + # name: sim-payerfsp-jws-signing-key` + # key: private.key + # here. # These fields will take precedence over `privateKey` and `publicKey` below. # This field is best supplied per-simulator, however it's here for documentation # purposes. - privKeySecretName: {} - # TODO: update `privKeySecretName` above to contain both a name and a key in the secret. - # Add documentation on usage. - # privKeySecret: {} - # name: - # key: - # + privateKeySecret: {} # The `publicKeyConfigMapName` field allows you to supply a ConfigMap containing JWS public # keys external to this release, and have this release reference that ConfigMap to # populate JWS public keys. The format of this ConfigMap must be as described for @@ -9123,86 +9638,7 @@ thirdparty: target: type: Utilization averageUtilization: 80 - config: { - production.json: { - "control": { - "mgmtAPIWsUrl": "127.0.0.1", - "mgmtAPIWsPort": 4010 - }, - "inbound": { - "port": 4005, - "host": "0.0.0.0", - "pispTransactionMode": true, - "tls": { - "mutualTLS": { - "enabled": false - }, - "creds": { - "ca": "/secrets/dfsp_or_3ppi_client_cacert.pem", - "cert": "/secrets/dfsp_or_3ppi_server_cert.pem", - "key": "/secrets/dfsp_or_3ppi_server_key.key" - } - } - }, - "outbound": { - "port": 4006, - "host": "0.0.0.0", - "tls": { - "mutualTLS": { - "enabled": false - }, - "creds": { - "ca": "/secrets/hub_server_cacert.pem", - "cert": "/secrets/dfsp_or_3ppi_client_cert.cer", - "key": "/secrets/dfsp_or_3ppi_client_key.key" - } - } - }, - "requestProcessingTimeoutSeconds": 30, - "wso2": { - "auth": { - "staticToken": "test-static-token", - "tokenEndpoint": "", - "clientKey": "test-client-key", - "clientSecret": "test-client-secret", - "refreshSeconds": 3600 - } - }, - "redis": { - "port": 6379, - "timeout": 100 - }, - "inspect": { - "depth": 4, - "showHidden": false, - "color": true - }, - "shared": { - "authServiceParticipantId": "centralauth", - "thirdpartyRequestsEndpoint": "$release_name-tp-api-svc", - "servicesEndpoint": "$release_name-tp-api-svc", - "alsEndpoint": "$release_name-account-lookup-service", - "quotesEndpoint": "$release_name-quoting-service", - "transfersEndpoint": "$release_name-ml-api-adapter-service", - "dfspId": "$name", - "dfspBackendUri": "$full_name-backend:3000", - "dfspBackendHttpScheme": "http", - "dfspBackendVerifyAuthorizationPath": "verify-authorization", - "dfspBackendVerifyConsentPath": "verify-consent", - "sdkRequestToPayTransferUri": "0.0.0.0:3000/requestToPayTransfer", - "sdkOutgoingUri": "$full_name-scheme-adapter:4001", - "sdkOutgoingHttpScheme": "http", - "sdkOutgoingPartiesInformationPath": "parties/{Type}/{ID}/{SubId}", - "sdkNotifyAboutTransferUri": "ml-testing-toolkit:4040/thirdpartyRequests/transactions/{ID}" - }, - "pm4mlEnabled": false, - "validateInboundJws": false, - "jwsSign": false, - "jwsSigningKey": "/jwsSigningKey.key", - "jwsVerificationKeysDirectory": null - } - } - + config: {production.json: {"control": {"mgmtAPIWsUrl": "127.0.0.1", "mgmtAPIWsPort": 4010}, "inbound": {"port": 4005, "host": "0.0.0.0", "pispTransactionMode": true, "tls": {"mutualTLS": {"enabled": false}, "creds": {"ca": "/secrets/dfsp_or_3ppi_client_cacert.pem", "cert": "/secrets/dfsp_or_3ppi_server_cert.pem", "key": "/secrets/dfsp_or_3ppi_server_key.key"}}}, "outbound": {"port": 4006, "host": "0.0.0.0", "tls": {"mutualTLS": {"enabled": false}, "creds": {"ca": "/secrets/hub_server_cacert.pem", "cert": "/secrets/dfsp_or_3ppi_client_cert.cer", "key": "/secrets/dfsp_or_3ppi_client_key.key"}}}, "requestProcessingTimeoutSeconds": 30, "wso2": {"auth": {"staticToken": "test-static-token", "tokenEndpoint": "", "clientKey": "test-client-key", "clientSecret": "test-client-secret", "refreshSeconds": 3600}}, "redis": {"port": 6379, "timeout": 100}, "inspect": {"depth": 4, "showHidden": false, "color": true}, "shared": {"authServiceParticipantId": "centralauth", "thirdpartyRequestsEndpoint": "$release_name-tp-api-svc", "servicesEndpoint": "$release_name-tp-api-svc", "alsEndpoint": "$release_name-account-lookup-service", "quotesEndpoint": "$release_name-quoting-service", "transfersEndpoint": "$release_name-ml-api-adapter-service", "dfspId": "$name", "dfspBackendUri": "$full_name-backend:3000", "dfspBackendHttpScheme": "http", "dfspBackendVerifyAuthorizationPath": "verify-authorization", "dfspBackendVerifyConsentPath": "verify-consent", "sdkRequestToPayTransferUri": "0.0.0.0:3000/requestToPayTransfer", "sdkOutgoingUri": "$full_name-scheme-adapter:4001", "sdkOutgoingHttpScheme": "http", "sdkOutgoingPartiesInformationPath": "parties/{Type}/{ID}/{SubId}", "sdkNotifyAboutTransferUri": "ml-testing-toolkit:4040/thirdpartyRequests/transactions/{ID}"}, "pm4mlEnabled": false, "validateInboundJws": false, "jwsSign": false, "jwsSigningKey": "/jwsSigningKey.key", "jwsVerificationKeysDirectory": null}} env: NODE_ENV: production INBOUND_LISTEN_PORT: 4005 @@ -9220,19 +9656,17 @@ thirdparty: # - secretName: chart-example-tls # hosts: # - chart-example.local - resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi ## Pod scheduling preferences. ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity affinity: {} @@ -9254,7 +9688,7 @@ simulator: image: registry: docker.io repository: mojaloop/simulator - tag: v12.0.0 + tag: v12.2.4 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -9311,18 +9745,15 @@ simulator: scheme: HTTP initialDelaySeconds: 5 periodSeconds: 15 - ## Pod scheduling preferences. - ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## Pod scheduling preferences. + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity affinity: {} - - ## Node labels for pod assignment - ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector + ## Node labels for pod assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector nodeSelector: {} - - ## Set toleration for scheduler - ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + ## Set toleration for scheduler + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ tolerations: [] - metrics: enabled: true prefix: moja_ @@ -9335,6 +9766,7 @@ simulator: LOG_LEVEL: 'info' ## Add '$release' into any of the *_SERVICE_ENDPOINT values to include the release name as part of the deployment + HUB_NAME: *HUB_NAME PARTIES_SERVICE_ENDPOINT: 'http://$release_name-account-lookup-service' QUOTES_SERVICE_ENDPOINT: 'http://$release_name-quoting-service' TRANSFERS_SERVICE_ENDPOINT: 'http://$release_name-ml-api-adapter-service' @@ -9365,17 +9797,17 @@ simulator: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -9409,7 +9841,7 @@ simulator: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: moja-simulator.local @@ -9422,7 +9854,7 @@ simulator: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -9443,12 +9875,11 @@ simulator: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -9500,7 +9931,6 @@ mojaloop-simulator: # * support arbitrary init containers + config (that might just be config that goes into defaults # or something?). Supply all config and volumes to the init containers. # * create some test containers - # * parametrise imagePullSecretName (global? like https://github.com/bitnami/charts/tree/master/bitnami/redis#parameters) # * generate JWS private/public keys, so the user does not need to supply keys at all. # * generate public key from private, so the user only needs to supply private keys for each sim? # (_might_ be possible with a job or init container or similar). @@ -9572,11 +10002,15 @@ mojaloop-simulator: ingress: enabled: true hosts: - - sim-payerfsp.local + - sim-payerfsp.local config: schemeAdapter: secrets: jws: + # `privateKeySecret` is used to specify the secret that contains the JWS signing key. + # If `privateKeySecret` is not null, then the `privateKey` value will be ignored. + # Expected properties of `privateKeySecret` are `name` and `key`. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -9621,11 +10055,15 @@ mojaloop-simulator: ingress: enabled: true hosts: - - sim-payeefsp.local + - sim-payeefsp.local config: schemeAdapter: secrets: jws: + # `privateKeySecret` is used to specify the secret that contains the JWS signing key. + # If `privateKeySecret` is not null, then the `privateKey` value will be ignored. + # Expected properties of `privateKeySecret` are `name` and `key`. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -9670,11 +10108,15 @@ mojaloop-simulator: ingress: enabled: true hosts: - - sim-testfsp1.local + - sim-testfsp1.local config: schemeAdapter: secrets: jws: + # `privateKeySecret` is used to specify the secret that contains the JWS signing key. + # If `privateKeySecret` is not null, then the `privateKey` value will be ignored. + # Expected properties of `privateKeySecret` are `name` and `key`. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -9719,11 +10161,15 @@ mojaloop-simulator: ingress: enabled: true hosts: - - sim-testfsp2.local + - sim-testfsp2.local config: schemeAdapter: secrets: jws: + # `privateKeySecret` is used to specify the secret that contains the JWS signing key. + # If `privateKeySecret` is not null, then the `privateKey` value will be ignored. + # Expected properties of `privateKeySecret` are `name` and `key`. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -9768,11 +10214,15 @@ mojaloop-simulator: ingress: enabled: true hosts: - - sim-testfsp3.local + - sim-testfsp3.local config: schemeAdapter: secrets: jws: + # `privateKeySecret` is used to specify the secret that contains the JWS signing key. + # If `privateKeySecret` is not null, then the `privateKey` value will be ignored. + # Expected properties of `privateKeySecret` are `name` and `key`. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -9817,11 +10267,15 @@ mojaloop-simulator: ingress: enabled: true hosts: - - sim-testfsp4.local + - sim-testfsp4.local config: schemeAdapter: secrets: jws: + # `privateKeySecret` is used to specify the secret that contains the JWS signing key. + # If `privateKeySecret` is not null, then the `privateKey` value will be ignored. + # Expected properties of `privateKeySecret` are `name` and `key`. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -9914,12 +10368,11 @@ mojaloop-simulator: # your switch is using `FSPIOP-Source: peter` you will need a property `peter` in the following # object. Do not add the public keys of your simulators to this object. Instead, put them in # `mojaloop-simulator.simulators.$yourSimName.config.schemeAdapter.secrets.jws.publicKey`. - sharedJWSPubKeys: - # switch: |- - # -----BEGIN PUBLIC KEY----- - # blah blah blah - # -----END PUBLIC KEY----- - + sharedJWSPubKeys: null + # switch: |- + # -----BEGIN PUBLIC KEY----- + # blah blah blah + # -----END PUBLIC KEY----- defaults: # Changes to this object in the parent chart, for example 'mojaloop-simulator.defaults' will be # applied to all simulators deployed by this child chart. @@ -9928,11 +10381,15 @@ mojaloop-simulator: initContainers: waitForCache: enabled: true - - imagePullSecretName: dock-casa-secret - + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## imagePullSecrets: + ## - myRegistryKeySecretName + ## + imagePullSecrets: [] cache: - # These will be supplied directly to the init containers array in the deployment for the # scheme adapter. They should look exactly as you'd declare them inside the deployment. # Example: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#init-containers-in-use @@ -9943,8 +10400,8 @@ mojaloop-simulator: # SIM_SCHEME_ADAPTER_SERVICE_NAME: "sim-$SIM_NAME-scheme-adapter" # SIM_BACKEND_SERVICE_NAME: "sim-$SIM_NAME-backend" # SIM_CACHE_SERVICE_NAME: "sim-$SIM_NAME-cache" - initContainers: [] enabled: true + initContainers: [] image: repository: redis tag: 5.0.4-alpine @@ -9960,20 +10417,18 @@ mojaloop-simulator: schemeAdapter: secrets: jws: - # Use the privKeySecretName field if you would like to supply a JWS private key external + # Use the privateKeySecret field if you would like to supply a JWS private key external # to this chart. - # For example, if you create a private key called `sim-payerfsp-jws-signing-key` external - # to this chart, you would supply `privKeySecretName: sim-payerfsp-jws-signing-key` here. + # For example, if you create a private key called `sim-payerfsp-jws-signing-key` with data property `private.key` + # external to this chart, you would supply + # `privateKeySecret: + # name: sim-payerfsp-jws-signing-key` + # key: private.key + # here. # These fields will take precedence over `privateKey` and `publicKey` below. # This field is best supplied per-simulator, however it's here for documentation # purposes. - privKeySecretName: {} - # TODO: update `privKeySecretName` above to contain both a name and a key in the secret. - # Add documentation on usage. - # privKeySecret: {} - # name: - # key: - # + privateKeySecret: {} # The `publicKeyConfigMapName` field allows you to supply a ConfigMap containing JWS public # keys external to this release, and have this release reference that ConfigMap to # populate JWS public keys. The format of this ConfigMap must be as described for @@ -9985,7 +10440,7 @@ mojaloop-simulator: publicKey: '' image: repository: mojaloop/sdk-scheme-adapter - tag: v23.1.1 + tag: v24.0.8 pullPolicy: IfNotPresent command: '[ "yarn", "start:api-svc" ]' <<: *defaultProbes @@ -10005,14 +10460,16 @@ mojaloop-simulator: minReplicas: 1 maxReplicas: 10 metrics: - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: 80 - + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 80 env: + + API_TYPE: *API_TYPE + ILP_VERSION: *SDK_ILP_VERSION # Ports the scheme adapter listens on. Shouldn't really matter for a user of this chart. # You probably shouldn't bother configuring them- it likely won't do you much good. But it # won't do any harm, either. @@ -10129,7 +10586,7 @@ mojaloop-simulator: # The fulfilment will be generated from the provided ILP packet, and must hash to the provided condition. ALLOW_TRANSFER_WITHOUT_QUOTE: true RESERVE_NOTIFICATION: false - RESOURCE_VERSIONS: transfers=1.1,quotes=1.1,participants=1.1,parties=1.1,transactionRequests=1.1 + RESOURCE_VERSIONS: transfers=2.0,quotes=2.0,participants=1.1,parties=2.0,transactionRequests=1.1 ENABLE_FSPIOP_EVENT_HANDLER: false ENABLE_BACKEND_EVENT_HANDLER: false @@ -10137,7 +10594,7 @@ mojaloop-simulator: backend: image: repository: mojaloop/mojaloop-simulator - tag: v15.0.0 + tag: v15.1.5 pullPolicy: IfNotPresent <<: *defaultProbes @@ -10253,23 +10710,21 @@ mojaloop-simulator: # cert: | # .. # outbound: *inbound - inbound: - outbound: + inbound: null + outbound: null jws: - # Use the privKeySecretName field if you would like to supply a JWS private key external + # Use the privateKeySecret field if you would like to supply a JWS private key external # to this chart. - # For example, if you create a private key called `sim-payerfsp-jws-signing-key` external - # to this chart, you would supply `privKeySecretName: sim-payerfsp-jws-signing-key` here. + # For example, if you create a private key called `sim-payerfsp-jws-signing-key` with data property `private.key` + # external to this chart, you would supply + # `privateKeySecret: + # name: sim-payerfsp-jws-signing-key` + # key: private.key + # here. # These fields will take precedence over `privateKey` and `publicKey` below. # This field is best supplied per-simulator, however it's here for documentation # purposes. - privKeySecretName: {} - # TODO: update `privKeySecretName` above to contain both a name and a key in the secret. - # Add documentation on usage. - # privKeySecret: {} - # name: - # key: - # + privateKeySecret: {} # The `publicKeyConfigMapName` field allows you to supply a ConfigMap containing JWS public # keys external to this release, and have this release reference that ConfigMap to # populate JWS public keys. The format of this ConfigMap must be as described for @@ -10302,13 +10757,12 @@ mojaloop-simulator: minReplicas: 1 maxReplicas: 10 metrics: - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: 80 - + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 80 env: NODE_ENV: production INBOUND_LISTEN_PORT: 4005 @@ -10321,24 +10775,22 @@ mojaloop-simulator: enabled: false path: / hosts: - - mojaloop-simulators.local + - mojaloop-simulators.local tls: [] # - secretName: chart-example-tls # hosts: # - chart-example.local - resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi ## Pod scheduling preferences. ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity affinity: {} @@ -10376,7 +10828,7 @@ mojaloop-ttk-simulators: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: ttksim1-sdk-scheme-adapter.local @@ -10503,10 +10955,8 @@ mojaloop-ttk-simulators: redis: host: *MOJA_TTK_SIM_REDIS_HOST port: *MOJA_TTK_SIM_REDIS_PORT - ml-testing-toolkit: ml-testing-toolkit-backend: - ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -10577,48 +11027,18 @@ mojaloop-ttk-simulators: name: *TTK_MONGO_SECRET_NAME key: *TTK_MONGO_SECRET_KEY database: *TTK_MONGO_DATABASE - + connectionString: *TTK_MONGO_CONNECTION_STRING + connectionStringSecret: + name: *TTK_MONGO_CONNECTION_STRING_SECRET_NAME + key: *TTK_MONGO_CONNECTION_STRING_SECRET_KEY config_files: - rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim1/spec_files/rules_response/default.json' - api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' - api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' - + rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim1/spec_files/rules_response/default.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' extraEnvironments: - hub-k8s-default-environment.json: &ttksim1InputValues - { - "inputValues": { - "TTKSIM1_FSPID": "ttksim1", - "TTKSIM1_MSISDN_1": "16135551212", - "TTKSIM1_MSISDN_1_FIRST_NAME": "ReceiverFirst", - "TTKSIM1_MSISDN_1_LAST_NAME": "ReceiverLast", - "TTKSIM1_CURRENCY": "TZS", - "TTKSIM2_FSPID": "ttksim2", - "TTKSIM2_MSISDN_1": "4561000001", - "TTKSIM2_MSISDN_1_FIRST_NAME": "ReceiverFirst", - "TTKSIM2_MSISDN_1_LAST_NAME": "ReceiverLast", - "TTKSIM2_MSISDN_2": "4561000002", - "TTKSIM2_MSISDN_2_FIRST_NAME": "ReceiverFirst", - "TTKSIM2_MSISDN_2_LAST_NAME": "ReceiverLast", - "TTKSIM2_PARTY_NOT_FOUND": "partynotfound", - "TTKSIM2_PARTY_TIMES_OUT": "partytimesout", - "TTKSIM2_CURRENCY": "TZS", - "TTKSIM3_FSPID": "ttksim3", - "TTKSIM3_MSISDN_1": "5671000001", - "TTKSIM3_MSISDN_1_FIRST_NAME": "ReceiverFirst", - "TTKSIM3_MSISDN_1_LAST_NAME": "ReceiverLast", - "TTKSIM3_MSISDN_2": "5671000002", - "TTKSIM3_MSISDN_2_FIRST_NAME": "ReceiverFirst", - "TTKSIM3_MSISDN_2_LAST_NAME": "ReceiverLast", - "TTKSIM3_CURRENCY": "TZS", - "TTKSIM2_MSISDN_PREFIX": "4561", - "TTKSIM3_MSISDN_PREFIX": "5671", - "HOST_CENTRAL_LEDGER": "http://$release_name-centralledger-service", - "HOST_CENTRAL_SETTLEMENT": "http://$release_name-centralsettlement-service/v2" - } - } - + hub-k8s-default-environment.json: &ttksim1InputValues {"inputValues": {"HUB_NAME": *HUB_NAME, "TTKSIM1_FSPID": "ttksim1", "TTKSIM1_MSISDN_1": "16135551212", "TTKSIM1_MSISDN_1_FIRST_NAME": "ReceiverFirst", "TTKSIM1_MSISDN_1_LAST_NAME": "ReceiverLast", "TTKSIM1_CURRENCY": "XTS", "TTKSIM2_FSPID": "ttksim2", "TTKSIM2_MSISDN_1": "4561000001", "TTKSIM2_MSISDN_1_FIRST_NAME": "ReceiverFirst", "TTKSIM2_MSISDN_1_LAST_NAME": "ReceiverLast", "TTKSIM2_MSISDN_2": "4561000002", "TTKSIM2_MSISDN_2_FIRST_NAME": "ReceiverFirst", "TTKSIM2_MSISDN_2_LAST_NAME": "ReceiverLast", "TTKSIM2_PARTY_NOT_FOUND": "partynotfound", "TTKSIM2_PARTY_TIMES_OUT": "partytimesout", "TTKSIM2_CURRENCY": "XTS", "TTKSIM3_FSPID": "ttksim3", "TTKSIM3_MSISDN_1": "5671000001", "TTKSIM3_MSISDN_1_FIRST_NAME": "ReceiverFirst", "TTKSIM3_MSISDN_1_LAST_NAME": "ReceiverLast", "TTKSIM3_MSISDN_2": "5671000002", "TTKSIM3_MSISDN_2_FIRST_NAME": "ReceiverFirst", "TTKSIM3_MSISDN_2_LAST_NAME": "ReceiverLast", "TTKSIM3_CURRENCY": "XTS", "TTKSIM2_MSISDN_PREFIX": "4561", "TTKSIM3_MSISDN_PREFIX": "5671", "HOST_CENTRAL_LEDGER": "http://$release_name-centralledger-service", "HOST_CENTRAL_SETTLEMENT": "http://$release_name-centralsettlement-service/v2"}} ml-testing-toolkit-frontend: ingress: enabled: true @@ -10650,7 +11070,7 @@ mojaloop-ttk-simulators: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: ttksim2-sdk-scheme-adapter.local @@ -10789,11 +11209,11 @@ mojaloop-ttk-simulators: host: 'ttksim2.local' config_files: - rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim2/spec_files/rules_response/default.json' - api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' - api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' + rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim2/spec_files/rules_response/default.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' ml-testing-toolkit-frontend: ingress: @@ -10827,7 +11247,7 @@ mojaloop-ttk-simulators: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: ttksim3-sdk-scheme-adapter.local @@ -10966,11 +11386,11 @@ mojaloop-ttk-simulators: host: 'ttksim3.local' config_files: - rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim3/spec_files/rules_response/default.json' - api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' - api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' - api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v23.1.1/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' + rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim3/spec_files/rules_response/default.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_simulator_sim_1.4__response_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v24.0.8/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' ml-testing-toolkit-frontend: ingress: @@ -10996,7 +11416,7 @@ mojaloop-bulk: image: registry: docker.io repository: mojaloop/bulk-api-adapter - tag: v17.0.0 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -11073,6 +11493,8 @@ mojaloop-bulk: serviceName: bulk-service config: + hub_participant: *HUB_PARTICIPANT + # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: *KAFKA_HOST kafka_port: *KAFKA_PORT @@ -11106,19 +11528,23 @@ mojaloop-bulk: protocol_versions: | { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -11194,7 +11620,7 @@ mojaloop-bulk: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: bulk-api-adapter.local @@ -11207,7 +11633,7 @@ mojaloop-bulk: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -11228,12 +11654,11 @@ mojaloop-bulk: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -11255,7 +11680,7 @@ mojaloop-bulk: image: registry: docker.io repository: mojaloop/bulk-api-adapter - tag: v17.0.0 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -11322,6 +11747,8 @@ mojaloop-bulk: serviceName: bulk-handler-notification config: + hub_participant: *HUB_PARTICIPANT + # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. kafka_host: *KAFKA_HOST kafka_port: *KAFKA_PORT @@ -11355,23 +11782,49 @@ mojaloop-bulk: protocol_versions: | { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } + # Parameters for JWS signing requests + endpointSecurity: + jwsSign: false + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null + jwsSigningKey: null + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- + + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: @@ -11453,17 +11906,17 @@ mojaloop-bulk: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -11497,7 +11950,7 @@ mojaloop-bulk: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: bulk-api-adapter-notification.local @@ -11510,7 +11963,7 @@ mojaloop-bulk: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -11531,12 +11984,11 @@ mojaloop-bulk: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -11561,7 +12013,7 @@ mojaloop-bulk: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -11640,6 +12092,11 @@ mojaloop-bulk: serviceName: central-handler-bulkprepare config: + hub_participant: *HUB_PARTICIPANT + + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -11738,7 +12195,7 @@ mojaloop-bulk: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -11821,17 +12278,17 @@ mojaloop-bulk: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -11865,7 +12322,7 @@ mojaloop-bulk: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger-transfer-bulkprepare.local @@ -11878,7 +12335,7 @@ mojaloop-bulk: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -11899,12 +12356,11 @@ mojaloop-bulk: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -11926,7 +12382,7 @@ mojaloop-bulk: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -12005,6 +12461,11 @@ mojaloop-bulk: serviceName: central-handler-bulkfulfil config: + hub_participant: *HUB_PARTICIPANT + + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -12100,7 +12561,7 @@ mojaloop-bulk: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -12183,17 +12644,17 @@ mojaloop-bulk: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: - ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + http: null + https: null + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -12227,7 +12688,7 @@ mojaloop-bulk: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger-transfer-bulkfulfil.local @@ -12240,7 +12701,7 @@ mojaloop-bulk: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -12261,12 +12722,11 @@ mojaloop-bulk: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -12288,7 +12748,7 @@ mojaloop-bulk: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -12367,6 +12827,11 @@ mojaloop-bulk: serviceName: central-handler-bulkprocessing config: + hub_participant: *HUB_PARTICIPANT + + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -12462,7 +12927,7 @@ mojaloop-bulk: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -12545,17 +13010,17 @@ mojaloop-bulk: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: + http: null + https: null ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -12589,7 +13054,7 @@ mojaloop-bulk: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger-transfer-bulkprocessing.local @@ -12602,7 +13067,7 @@ mojaloop-bulk: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -12623,12 +13088,11 @@ mojaloop-bulk: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -12650,7 +13114,7 @@ mojaloop-bulk: image: registry: docker.io repository: mojaloop/central-ledger - tag: v17.6.0 + tag: v19.0.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -12729,6 +13193,11 @@ mojaloop-bulk: serviceName: central-handler-bulkget config: + hub_participant: *HUB_PARTICIPANT + + ## Proxy cache configuration + proxy_cache: *PROXY_CACHE + ## Forensic Logging sidecar # this is for Forensic Logging Sidecar forensicloggingsidecar_disabled: true @@ -12824,7 +13293,7 @@ mojaloop-bulk: - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -12907,17 +13376,17 @@ mojaloop-bulk: ## NOTE: choose port between <30000-32767> ## nodePorts: - http: - https: + http: null + https: null ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -12951,7 +13420,7 @@ mojaloop-bulk: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: + apiVersion: null ## @param ingress.hostname Default host for the ingress record ## hostname: central-ledger-transfer-bulkget.local @@ -12964,7 +13433,7 @@ mojaloop-bulk: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` ## You can: @@ -12985,12 +13454,11 @@ mojaloop-bulk: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -13003,12 +13471,37 @@ mojaloop-bulk: # memory: 128Mi resources: {} -ml-testing-toolkit: +als-msisdn-oracle: enabled: true + config: + db_host: *ALS_ORACLE_DB_HOST + db_port: *ALS_ORACLE_DB_PORT + db_user: *ALS_ORACLE_DB_USER + db_secret: + name: *ALS_ORACLE_DB_SECRET_NAME + key: *ALS_ORACLE_DB_SECRET_KEY + db_database: *ALS_ORACLE_DB_NAME + # db_password: '' + +inter-scheme-proxy-adapter: + enabled: *INTERSCHEME_ENABLED + image: + registry: docker.io + repository: mojaloop/inter-scheme-proxy-adapter + tag: v1.3.3 + config: {} + env: {} + metrics: + enabled: true + config: + timeout: 5000 + prefix: moja_ + defaultLabels: + serviceName: inter-schememojaloop/inter-scheme-proxy-adapter - ml-testing-toolkit-backend: - - ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) +ml-testing-toolkit: + enabled: true + ml-testing-toolkit-backend: ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ ## e.g: ## initContainers: @@ -13070,6 +13563,10 @@ ml-testing-toolkit: name: *TTK_MONGO_SECRET_NAME key: *TTK_MONGO_SECRET_KEY database: *TTK_MONGO_DATABASE + connectionString: *TTK_MONGO_CONNECTION_STRING + connectionStringSecret: + name: *TTK_MONGO_CONNECTION_STRING_SECRET_NAME + key: *TTK_MONGO_CONNECTION_STRING_SECRET_KEY ingress: enabled: true @@ -13078,10 +13575,12 @@ ml-testing-toolkit: host: testing-toolkit-specapi.local adminApi: host: testing-toolkit.local - config_files: user_config.json: { - "DEFAULT_ENVIRONMENT_FILE_NAME": "hub-k8s-default-environment.json" + "DEFAULT_ENVIRONMENT_FILE_NAME": "hub-k8s-default-environment.json", + "TRANSFERS_VALIDATION_CONDITION": false, + "TRANSFERS_VALIDATION_ILP_PACKET": false, + "TRANSFERS_VALIDATION_WITH_PREVIOUS_QUOTES": false } # system_config.json: { # ## Uncomment for Socket IO configs for UI to Backend interactions. This may help if long running Test-Collections time-out. @@ -13098,10 +13597,9 @@ ml-testing-toolkit: ## We can pass the JSON content as the value for the parameters ## Or we can pass a http/https URL for the JSON file as the value for the parameters. Then the file will be downloaded and replaced in the corresponding location. ## Ex: rules_callback__default.json: "https://raw.githubusercontent.com/mojaloop/ml-testing-toolkit/master/spec_files/rules_callback/default.json" - rules_callback__default.json: "https://github.com/mojaloop/testing-toolkit-test-cases/raw/v15.3.0-snapshot/rules/mojaloop/ml-testing-toolkit/spec_files/rules_callback/default.json" - rules_response__default.json: "https://github.com/mojaloop/testing-toolkit-test-cases/raw/v15.3.0-snapshot/rules/mojaloop/ml-testing-toolkit/spec_files/rules_response/default.json" - rules_validation__default.json: "https://github.com/mojaloop/testing-toolkit-test-cases/raw/v15.3.0-snapshot/rules/mojaloop/ml-testing-toolkit/spec_files/rules_validation/default.json" - + rules_callback__default.json: "https://github.com/mojaloop/testing-toolkit-test-cases/raw/v17.0.0/rules/hub/rules_callback/default.json" + rules_response__default.json: "https://github.com/mojaloop/testing-toolkit-test-cases/raw/v17.0.0/rules/hub/rules_response/default.json" + rules_validation__default.json: "https://github.com/mojaloop/testing-toolkit-test-cases/raw/v17.0.0/rules/hub/rules_validation/default.json" # We can change the names of the simulators to configure the environment files for the testing toolkit. # If you change these values, you need to change the simulator names in the mojaloop-simulats->simulators section parameters: &simNames @@ -13115,10 +13613,25 @@ ml-testing-toolkit: simNameTTKSim1: 'ttksim1' simNameTTKSim2: 'ttksim2' simNameTTKSim3: 'ttksim3' + validIlpPacketV1: 'AYIDBQAAAAAAACcQJGcucGF5ZWVmc3AubXNpc2RuLnt7cmVjZWl2ZXJtc2lzZG59fYIC1GV5SjBjbUZ1YzJGamRHbHZia2xrSWpvaVptVXhNREU0Wm1NdE1EaGxZeTAwWWpJM0xUbGpZalF0TnpjMk9URTFNR00zT1dKaklpd2ljWFZ2ZEdWSlpDSTZJbVpsTVRBeE9HWmpMVEE0WldNdE5HSXlOeTA1WTJJMExUYzNOamt4TlRCak56bGlZeUlzSW5CaGVXVmxJanA3SW5CaGNuUjVTV1JKYm1adklqcDdJbkJoY25SNVNXUlVlWEJsSWpvaVRWTkpVMFJPSWl3aWNHRnlkSGxKWkdWdWRHbG1hV1Z5SWpvaWUzdHlaV05sYVhabGNrMVRTVk5FVG4xOUlpd2labk53U1dRaU9pSndZWGxsWldaemNDSjlmU3dpY0dGNVpYSWlPbnNpY0dGeWRIbEpaRWx1Wm04aU9uc2ljR0Z5ZEhsSlpGUjVjR1VpT2lKTlUwbFRSRTRpTENKd1lYSjBlVWxrWlc1MGFXWnBaWElpT2lJeU56Y3hNemd3TXprd05TSXNJbVp6Y0Vsa0lqb2ljR0Y1WlhKbWMzQWlmU3dpY0dWeWMyOXVZV3hKYm1adklqcDdJbU52YlhCc1pYaE9ZVzFsSWpwN0ltWnBjbk4wVG1GdFpTSTZJazFoZEhNaUxDSnNZWE4wVG1GdFpTSTZJa2hoWjIxaGJpSjlMQ0prWVhSbFQyWkNhWEowYUNJNklqRTVPRE10TVRBdE1qVWlmWDBzSW1GdGIzVnVkQ0k2ZXlKaGJXOTFiblFpT2lJeE1EQWlMQ0pqZFhKeVpXNWplU0k2SWxWVFJDSjlMQ0owY21GdWMyRmpkR2x2YmxSNWNHVWlPbnNpYzJObGJtRnlhVzhpT2lKVVVrRk9VMFpGVWlJc0ltbHVhWFJwWVhSdmNpSTZJbEJCV1VWU0lpd2lhVzVwZEdsaGRHOXlWSGx3WlNJNklrTlBUbE5WVFVWU0luMTkA' + validConditionV1: 'GRzLaTP7DJ9t4P-a_BA0WA9wzzlsugf00-Tn6kESAfM' + validFulfillmentV1: 'UNlJ98hZTY_dsw0cAqw4i_UN3v4utt7CZFB4yfLbVFA' + validIlpPacket2V1: 'AYIC9AAAAAAAABdwHWcucGF5ZWVmc3AubXNpc2RuLjIyNTU2OTk5MTI1ggLKZXlKMGNtRnVjMkZqZEdsdmJrbGtJam9pWmpRMFltUmtOV010WXpreE1DMDBZVGt3TFRoa05qa3RaR0ppWVRaaVl6aGxZVFpqSWl3aWNYVnZkR1ZKWkNJNklqVTBaRFZtTURsaUxXRTBOMlF0TkRCa05pMWhZVEEzTFdFNVkyWXpZbUl5TkRsaFpDSXNJbkJoZVdWbElqcDdJbkJoY25SNVNXUkpibVp2SWpwN0luQmhjblI1U1dSVWVYQmxJam9pVFZOSlUwUk9JaXdpY0dGeWRIbEpaR1Z1ZEdsbWFXVnlJam9pTWpJMU5UWTVPVGt4TWpVaUxDSm1jM0JKWkNJNkluQmhlV1ZsWm5Od0luMTlMQ0p3WVhsbGNpSTZleUp3WVhKMGVVbGtTVzVtYnlJNmV5SndZWEowZVVsa1ZIbHdaU0k2SWsxVFNWTkVUaUlzSW5CaGNuUjVTV1JsYm5ScFptbGxjaUk2SWpJeU5UQTNNREE0TVRneElpd2labk53U1dRaU9pSndZWGxsY21aemNDSjlMQ0p3WlhKemIyNWhiRWx1Wm04aU9uc2lZMjl0Y0d4bGVFNWhiV1VpT25zaVptbHljM1JPWVcxbElqb2lUV0YwY3lJc0lteGhjM1JPWVcxbElqb2lTR0ZuYldGdUluMHNJbVJoZEdWUFprSnBjblJvSWpvaU1UazRNeTB4TUMweU5TSjlmU3dpWVcxdmRXNTBJanA3SW1GdGIzVnVkQ0k2SWpZd0lpd2lZM1Z5Y21WdVkza2lPaUpWVTBRaWZTd2lkSEpoYm5OaFkzUnBiMjVVZVhCbElqcDdJbk5qWlc1aGNtbHZJam9pVkZKQlRsTkdSVklpTENKcGJtbDBhV0YwYjNJaU9pSlFRVmxGVWlJc0ltbHVhWFJwWVhSdmNsUjVjR1VpT2lKRFQwNVRWVTFGVWlKOWZRAA' + validCondition2V1: 'kPLCKM62VY2jbekuw3apCTBg5zk_mVs9DD8-XpljQms' + validIlpPacketV4: 'DIICYwAAAAAAAABkMjAyNDEwMjkxMTE0MTQzNTIv1lSZPk0mP5Io_nXbsO9zUmQXinvjJbhGwsqc53pARgpnLm1vamFsb29wggIcZXlKMGNtRnVjMkZqZEdsdmJrbGtJam9pTURGS1FqbEVRVk5PTURGRVdUUlhTME5hV1RoWVVrVTBXa01pTENKeGRXOTBaVWxrSWpvaU1ERktRamxFUVZOWk5EZFNUVVEwUzFOS1MwZElVMW8wTUVvaUxDSndZWGxsWlNJNmV5SndZWEowZVVsa1NXNW1ieUk2ZXlKd1lYSjBlVWxrVkhsd1pTSTZJalUwTXpJeE1EQXhJaXdpY0dGeWRIbEpaR1Z1ZEdsbWFXVnlJam9pVFZOSlUwUk9JaXdpWm5Od1NXUWlPaUowZEd0d1lYbGxaV1p6Y0NKOWZTd2ljR0Y1WlhJaU9uc2ljR0Z5ZEhsSlpFbHVabThpT25zaWNHRnlkSGxKWkZSNWNHVWlPaUkwTkRFeU16UTFOamM0T1NJc0luQmhjblI1U1dSbGJuUnBabWxsY2lJNklrMVRTVk5FVGlJc0ltWnpjRWxrSWpvaWRIUnJabmh3WVhsbGNpSjlmU3dpWVcxdmRXNTBJanA3SW1OMWNuSmxibU41SWpvaVdGUlRJaXdpWVcxdmRXNTBJam9pTVRBd0luMHNJblJ5WVc1ellXTjBhVzl1Vkhsd1pTSTZiblZzYkN3aVpYaHdhWEpoZEdsdmJpSTZJakl3TWpRdE1UQXRNamxVTVRFNk1UUTZNVFF1TXpVeVdpSXNJbTV2ZEdVaU9tNTFiR3g5' + validConditionV4: 'L9ZUmT5NJj-SKP5127Dvc1JkF4p74yW4RsLKnOd6QEY' + validFulfillmentV4: 'VFhBCqP17O5VolemGmeVeVn_ZByepYwtqBDe2F675kA' extraEnvironments: hub-k8s-default-environment.json: &ttkInputValues { + "options": { + "breakOnError": false, + "transformerName": *TTK_TRANSFORMER_NAME, + "generateIDType": "ulid" + }, "inputValues": { + "API_TYPE": *API_TYPE, + "HUB_NAME": *HUB_NAME, "BASE_CENTRAL_LEDGER_ADMIN": "", "CALLBACK_ENDPOINT_BASE_URL": "http://$release_name-ml-testing-toolkit-backend:4040", "ENABLE_JWS_SIGNING": true, @@ -13134,6 +13647,7 @@ ml-testing-toolkit: "HOST_LEGACY_SIMULATOR": "http://$release_name-simulator", "HOST_ML_API_ADAPTER": "http://$release_name-ml-api-adapter-service", "HOST_QUOTING_SERVICE": "http://$release_name-quoting-service", + "HOST_QUOTING_SERVICE_HANDLER": "http://$release_name-quoting-service-handler", "HOST_SIMULATOR": "http://$release_name-simulator", "HOST_TRANSACTION_REQUESTS_SERVICE": "http://$release_name-transaction-requests-service", "HUB_OPERATOR_BEARER_TOKEN": "NOT_APPLICABLE", @@ -13145,11 +13659,13 @@ ml-testing-toolkit: "PAYERFSP_CALLBACK_URL": "http://$release_name-sim-$param_simNamePayerfsp-scheme-adapter:4000", "PAYERFSP_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNamePayerfsp-scheme-adapter:4002", "PAYERFSP_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNamePayerfsp-scheme-adapter:4002", - "SIMPAYEE_CURRENCY": "USD", + "PROXY2_NAME": "proxyispa", + "PROXY2_CALLBACK_ENDPOINT_BASE_URL": "http://$release_name-inter-scheme-proxy-adapter:4000", + "SIMPAYEE_CURRENCY": "XXX", "SIMPAYEE_JWS_PUB_KEY": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzLtduponsAlAk+3+PQdE\nsgjxRs5qhkrPa0z25NbHvgQYan4bH5GY+nEUX65YN65nusHtCG9gBeU0C56EgZQw\nIpkHDTh166qQGPwdJf5oMlMJn79DSd1I2bghbsNx0a1P6ElH16AyEwvgYtdtMOBW\nNgf7z5/tYgv7bGgmsp3qGlf0nnaux/frJhJ0Hxpd6eUCafwdlrNwc9R6iCKMSxGj\nvVTHgx0D7zSZ/+4PXq6gObyIZoC0uOsKKzlY3USx9khAh+96qfFoNKyfGHltpEPJ\nLmOLh3BtzDuna2KwtNdVNGcjPdCle3b9mNIdhR5aZ/bP6Zm+t9JuRC6ZwU/6WEy3\nFwIDAQAB\n-----END PUBLIC KEY-----\n", "SIMPAYEE_MSISDN": "17039811902", "SIMPAYEE_NAME": "$param_simNamePayeefsp", - "SIMPAYER_CURRENCY": "USD", + "SIMPAYER_CURRENCY": "XXX", "SIMPAYER_MSISDN": "17039811901", "SIMPAYER_NAME": "$param_simNamePayerfsp", "TESTFSP1_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp1-backend:3003", @@ -13171,57 +13687,58 @@ ml-testing-toolkit: "TEST_NOTIFICATIONS": true, "TTKFSP_JWS_KEY": "-----BEGIN PRIVATE KEY-----\nMIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDPnscTEMZGXrO7\nH7nna4qgQPfODs2aV6A39ww4B2T2qeEncKk0xGTPUYAmjDO3TL4sG7Xl1Jiye9XL\nMaJxrMB4rh6Ndik8t+GiXIBOjeLVeg/uCBddTZfB/4yHpyfETbDM5QqQLsiWLyz9\nn6/O/bH8sgaygLMaTpYazaoI522bTTGBtgXf6nGNcjgypMPanbvFmE5lOls2Adjq\nQDbmC8FgnubSD5R//EULNSRnt+dxyExb7+vDcVqC0npxSxgBGHnkRIlbU6AszBpK\n2tMVGV84Qw8ibr1NSD/5n1fg/jfZfICVOcJRgw11v4+OAT3YqL7kKCUo2ChyYVWp\nH1aJ+luGs4N2KcgMsmEnA8eZmFMgXk2jJktt/kSXcJjzVg/0CAjK2c/oaPufVg+y\nKLRdBkS8FR3deCPH2xRl41f5NSB7/C2kCMcep8EZSlhJ6ZeS3A09HSJPNaA4//hN\n0o+DpqUQ2v9rwUH5OJ1YDk6xSFNDSmx/I2UEi/7JXZ5+zd0npfu5kZUQY00X7QrA\nhoxLc9zzJbYy3eSHaDsgJ4tRm68a2PpxbmwfvTF51iQwU2F30pE9Xuapbk6Hhwtk\naQwlWohv+ZnNaJp6hsDFe+ELixdXlwi7UMvowXoD4+7AcfBe2QXLllYsZYYLaMj1\nYrKpNfThQoOYNo7UByPJOKLL9Err8QIDAQABAoICAFX3AKeAwQ//Az0eCEvtR8NN\n0y0DDRd0Y7b4eBs02JWXRk4dxDnAfZsnvD95uqoRQQajXJ/ydF0mkCGnhgK6TCFL\nuwPIoo9s9aRT155u+jZ46WKeAAqWZ5kgVhAO4pTRtDxKM6L6c/xXQTIsbc9vVMRz\n8/jx9/aTBmzHrjkslcIBZte1xd3uRSETY3h4p018FPTeOMuKK50Di8yGVRTQVjvK\n33inkc2iZvYahV3alB6VGCTTBNPyOc9EFgWV2bUObN3akOL7D62svtAypcatMDNr\n9LbFkmUO3spdMzZKHFbVSao/9Zjpgee4rthV5EUyrYNrqeMtCSY+7ghuHNdZjY5M\nE9IntIqtZTHnTXJuHR5aZhQUuRBBO8ymhzSRYLPCWTrIb2FdRVj2u2h8YOhVgo13\n3/b55Q1vJxWbUdqgxn087PvvNoznIqTphsKGivyPZ45scnwVMhVd8Pgm6V0nuoCV\nYj32CSXFFTavZTP6c7CN3jzjSXyHlJrC4vhVD30tqV9iDeZtYE3AGuP3E3xGE7oU\nvqBzkUOk5gnYxbKpFA2kW8uY0XWmbrWR3sz+1Xw7IrQuyqMFvjnhRdpJaodkAlDa\nroefxFliyek4/SRyPcWiM0yaP6Mz6ssGg018b/fM+HemE/wtd3I6qDS9PZl3LBdv\n9aLz9XTh948/kIASRjLHAoIBAQDpqwuM1UlcQTuUmuoF0hADmBzi8eIR2JcnVVdE\nUHfu8jJ3LMzNNf5VAcjbBwTb3/gdVhD71dm9GdGGmX4bLBogGqRuEYZtDKOoHu0w\nRKUGSATob2qkLC6bI+Xg1q6XMTNxrBqqjTMCbHKuvwuwF8qTYTuP4GTaDEBpOdme\nVfWoLu9JAbQz/9NxUYqmj2FckA/v1LQ9apBu+Cnwk9/U/Yi/kGz8EuX8apfgou1b\n6fi0m/TkkbXuVEKP9CwUuWcX5TGQ5LFSqfK40eIT5AIKPhTWAwZV1iRhNh2J9kNH\ngC2yOqFswSRVJ6KsYMs7pMv2g2cwjBP8M1BudKRIxkFJbcmLAoIBAQDjdnDVq09b\nxHsv29evhx70GDl+oyNEkbhKjGqr4V7yL8wcchSdyfT8bZhSo/cBE/BRhfgBreLo\nTGUHBDWEySGfmWwMQQjorLawnAiJGerm7N497R67jmdZIgd7NwcA+XQ7N784Xbox\n9IngEvAt8hyUqJXQOSNnigLOWQoJSdyYzpsXBSjXcu/TsgozLu+FD9Gii8T+hyuo\nNhAgmj/9Vr8GhKVIkaWRPouTGA2pm2b6iJgaHWLICbUK8VFdc9XTkBuhTc7IyGHP\n1gd87cOM4AkgNp6+XMAmJqePRnBAvbDxNIdaNr/Bp2YxRw+uTa8qCpi3bAsG1qjJ\nWJHlNT/jz3fzAoIBAQDYu3jMGOyhcDQGIyYbXfrSip2Idlh8uwuARSzbRVPowqbC\nWUBgusr7J9uYJEuCcZveAf1gyLrcJf1sviP0qhRVYMDRAtpPfWCyyHSxx4nVaKl8\nuhMM0Zos9b/7qsRnohAYSEy3kp4UimhY4wTBQV/5ET/AtJ52jNSVhT3vGcXwSBBU\nBAuUC56gRcS3ttfUlh7iEcVYDeaHtxCXf2EmWj8jh58+s3y0gl360sQb88lmJB2i\nf/Biba8LfKwCUPFpfYFa5nP+u3lRqgLq9hpaS7jhxA51QVme/SWq2EsRH7fCz5T4\nnbDIdynwfxsiaDlynfDxW4wR6bqZqQDUK2dU50r/AoIBAQCvNsY2IS8RPmmx9QPR\nByG1348yWJJLOICglEd7PTC5GE5/PvVYkoAvjnB+gCU95FEDS1I+YObgEDDmVbyw\nG4rV+QW87r/hE2Hq61a73YYP+jg7tZMt4MUFaOwgYsP3YTDCiO+4iKJr5rXqMExo\n6A5SCQbWDZ2THUGKGBZeD1JpNwVKl0PdqoDJLmUjBi2k7wmJz2agthjQC00jAA74\npECj0bvMCb1jA63aUfX8R2Ps6xlXTHmSI8AcvMTzWs5EmMZf26LFEW4e/fxopHI0\n60K8WLaxZprxCGecOyMvC6/oLZFx0aimkL9siBOxLdAXb3AyInzf+Kyt5JcF253q\nax83AoIBAGSoxz91Oc+NPP3NNYlPuhXErqC+R/EEO6Z6ZalKsJtfgL1Ss6Fq30ot\niKhEfFYm1gmZDTrMbI6dceGkNg4l8okXz9U6lfUQH0muk8ZRl8LaSm7cQwzcAI1S\nm7XPnrwLtX81SihtxZnrvLTre8aM9ykKWCXiLY19LXDuJZQdwbzSgX1ie2Q2ZRcz\nRbxm20mgybQ0Jmmw1tY58d5GH5Y/A9NE+D0scobljMH5q/uHeg2bDx1piSw1lsx1\nzuoFe7sNa+zDFiYxXlyOhqDxenNRv4oDupGRefTaoJofGBDre5H2nDeWC2ZzYFEB\nDktFAP1w3ruycnE/t+/H8rDVJGPTHc8=\n-----END PRIVATE KEY-----\n", "WS_ASSERTION_TIMEOUT": 5000, - "accept": "application/vnd.interoperability.parties+json;version=1.1", - "acceptParties": "application/vnd.interoperability.parties+json;version=1.1", + "accept": "application/vnd.interoperability.parties+json;version=2.0", + "acceptParties": "application/vnd.interoperability.parties+json;version=2.0", "acceptPartiesOld": "application/vnd.interoperability.parties+json;version=1.0", - "acceptPartiesNotSupported": "application/vnd.interoperability.parties+json;version=2.0", + "acceptPartiesNotSupported": "application/vnd.interoperability.parties+json;version=9.0", "acceptParticipants": "application/vnd.interoperability.participants+json;version=1.1", "acceptParticipantsOld": "application/vnd.interoperability.participants+json;version=1.0", - "acceptParticipantsNotSupported": "application/vnd.interoperability.participants+json;version=2.0", - "acceptQuotes": "application/vnd.interoperability.quotes+json;version=1.1", + "acceptParticipantsNotSupported": "application/vnd.interoperability.participants+json;version=9.0", + "acceptQuotes": "application/vnd.interoperability.quotes+json;version=2.0", "acceptQuotesOld": "application/vnd.interoperability.quotes+json;version=1.0", - "acceptQuotesNotSupported": "application/vnd.interoperability.quotes+json;version=2.0", - "acceptTransfers": "application/vnd.interoperability.transfers+json;version=1.1", + "acceptQuotesNotSupported": "application/vnd.interoperability.quotes+json;version=9.0", + "acceptTransfers": "application/vnd.interoperability.transfers+json;version=2.0", "acceptTransfersOld": "application/vnd.interoperability.transfers+json;version=1.0", - "acceptTransfersNotSupported": "application/vnd.interoperability.transfers+json;version=2.0", + "acceptTransfersNotSupported": "application/vnd.interoperability.transfers+json;version=9.0", "acceptTransactionRequests": "application/vnd.interoperability.transactionRequests+json;version=1.1", "acceptTransactionRequestsOld": "application/vnd.interoperability.transactionRequests+json;version=1.0", - "acceptTransactionRequestsNotSupported": "application/vnd.interoperability.transactionRequests+json;version=2.0", + "acceptTransactionRequestsNotSupported": "application/vnd.interoperability.transactionRequests+json;version=9.0", "acceptAuthorizations": "application/vnd.interoperability.authorizations+json;version=1.1", "acceptAuthorizationsOld": "application/vnd.interoperability.authorizations+json;version=1.0", - "acceptAuthorizationsNotSupported": "application/vnd.interoperability.authorizations+json;version=2.0", + "acceptAuthorizationsNotSupported": "application/vnd.interoperability.authorizations+json;version=9.0", "acceptBulkTransfers": "application/vnd.interoperability.bulkTransfers+json;version=1.1", "acceptBulkTransfersOld": "application/vnd.interoperability.bulkTransfers+json;version=1.0", - "acceptBulkTransfersNotSupported": "application/vnd.interoperability.bulkTransfers+json;version=2.0", + "acceptBulkTransfersNotSupported": "application/vnd.interoperability.bulkTransfers+json;version=9.0", "accountId": "6", "amount": "100", "batchToIdValue1": "27713803066", "batchToIdValue2": "27713803067", "condition": "n2cwS3w4ekGlvNYoXg2uBAqssu3FCoXjADE2mziU5jU", - "contentType": "application/vnd.interoperability.parties+json;version=1.1", - "contentTypeTransfers": "application/vnd.interoperability.transfers+json;version=1.1", + "contentType": "application/vnd.interoperability.parties+json;version=2.0", + "contentTypeTransfers": "application/vnd.interoperability.transfers+json;version=2.0", "contentTypeTransfersOld": "application/vnd.interoperability.transfers+json;version=1.0", - "contentTypeTransfersNotSupported": "application/vnd.interoperability.transfers+json;version=2.0", - "contentTypeParties": "application/vnd.interoperability.parties+json;version=1.1", + "contentTypeTransfersNotSupported": "application/vnd.interoperability.transfers+json;version=9.0", + "contentTypeParties": "application/vnd.interoperability.parties+json;version=2.0", "contentTypePartiesOld": "application/vnd.interoperability.parties+json;version=1.0", - "contentTypePartiesNotSupported": "application/vnd.interoperability.parties+json;version=2.0", + "contentTypePartiesNotSupported": "application/vnd.interoperability.parties+json;version=9.0", "contentTypeParticipants": "application/vnd.interoperability.participants+json;version=1.1", "contentTypeParticipantsOld": "application/vnd.interoperability.participants+json;version=1.0", - "contentTypeParticipantsNotSupported": "application/vnd.interoperability.participants+json;version=2.0", - "contentTypeQuotes": "application/vnd.interoperability.quotes+json;version=1.1", + "contentTypeParticipantsNotSupported": "application/vnd.interoperability.participants+json;version=9.0", + "contentTypeQuotes": "application/vnd.interoperability.quotes+json;version=2.0", "contentTypeQuotesOld": "application/vnd.interoperability.quotes+json;version=1.0", - "contentTypeQuotesNotSupported": "application/vnd.interoperability.quotes+json;version=2.0", + "contentTypeQuotesNotSupported": "application/vnd.interoperability.quotes+json;version=9.0", "contentTypeTransactionRequests": "application/vnd.interoperability.transactionRequests+json;version=1.1", "contentTypeTransactionRequestsOld": "application/vnd.interoperability.transactionRequests+json;version=1.0", - "contentTypeTransactionRequestsNotSupported": "application/vnd.interoperability.transactionRequests+json;version=2.0", + "contentTypeTransactionRequestsNotSupported": "application/vnd.interoperability.transactionRequests+json;version=9.0", "contentTypeAuthorizations": "application/vnd.interoperability.authorizations+json;version=1.1", "contentTypeAuthorizationsOld": "application/vnd.interoperability.authorizations+json;version=1.0", - "contentTypeAuthorizationsNotSupported": "application/vnd.interoperability.authorizations+json;version=2.0", + "contentTypeAuthorizationsNotSupported": "application/vnd.interoperability.authorizations+json;version=9.0", "contentBulkTransfers": "application/vnd.interoperability.bulkTransfers+json;version=1.1", "contentBulkTransfersOld": "application/vnd.interoperability.bulkTransfers+json;version=1.0", - "contentBulkTransfersNotSupported": "application/vnd.interoperability.bulkTransfers+json;version=2.0", - "currency": "USD", - "currency2": "TZS", + "contentBulkTransfersNotSupported": "application/vnd.interoperability.bulkTransfers+json;version=9.0", + "currency": "XXX", + "currency2": "XTS", + "currency3": "XDR", "fromDOB": "1984-01-01", "fromFirstName": "Firstname-Test", "fromFspId": "testingtoolkitdfsp", @@ -13232,7 +13749,7 @@ ml-testing-toolkit: "homeTransactionId": "123ABC", "hubEmail": "some.email@gmail.com", "hub_operator": "NOT_APPLICABLE", - "ilpPacket": "AYIDBQAAAAAAACcQJGcucGF5ZWVmc3AubXNpc2RuLnt7cmVjZWl2ZXJtc2lzZG59fYIC1GV5SjBjbUZ1YzJGamRHbHZia2xrSWpvaVptVXhNREU0Wm1NdE1EaGxZeTAwWWpJM0xUbGpZalF0TnpjMk9URTFNR00zT1dKaklpd2ljWFZ2ZEdWSlpDSTZJbVpsTVRBeE9HWmpMVEE0WldNdE5HSXlOeTA1WTJJMExUYzNOamt4TlRCak56bGlZeUlzSW5CaGVXVmxJanA3SW5CaGNuUjVTV1JKYm1adklqcDdJbkJoY25SNVNXUlVlWEJsSWpvaVRWTkpVMFJPSWl3aWNHRnlkSGxKWkdWdWRHbG1hV1Z5SWpvaWUzdHlaV05sYVhabGNrMVRTVk5FVG4xOUlpd2labk53U1dRaU9pSndZWGxsWldaemNDSjlmU3dpY0dGNVpYSWlPbnNpY0dGeWRIbEpaRWx1Wm04aU9uc2ljR0Z5ZEhsSlpGUjVjR1VpT2lKTlUwbFRSRTRpTENKd1lYSjBlVWxrWlc1MGFXWnBaWElpT2lJeU56Y3hNemd3TXprd05TSXNJbVp6Y0Vsa0lqb2ljR0Y1WlhKbWMzQWlmU3dpY0dWeWMyOXVZV3hKYm1adklqcDdJbU52YlhCc1pYaE9ZVzFsSWpwN0ltWnBjbk4wVG1GdFpTSTZJazFoZEhNaUxDSnNZWE4wVG1GdFpTSTZJa2hoWjIxaGJpSjlMQ0prWVhSbFQyWkNhWEowYUNJNklqRTVPRE10TVRBdE1qVWlmWDBzSW1GdGIzVnVkQ0k2ZXlKaGJXOTFiblFpT2lJeE1EQWlMQ0pqZFhKeVpXNWplU0k2SWxWVFJDSjlMQ0owY21GdWMyRmpkR2x2YmxSNWNHVWlPbnNpYzJObGJtRnlhVzhpT2lKVVVrRk9VMFpGVWlJc0ltbHVhWFJwWVhSdmNpSTZJbEJCV1VWU0lpd2lhVzVwZEdsaGRHOXlWSGx3WlNJNklrTlBUbE5WVFVWU0luMTkA", + "ilpPacket": "$param_validIlpPacketV1", "invalidFulfillment": "_3cco-YN5OGpRKVWV3n6x6uNpBTH9tYUdOYmHA-----", "invalidToIdType": "ACCOUNT_ID", "invalidToIdValue": "27713803099", @@ -13273,10 +13790,10 @@ ml-testing-toolkit: "toBurmeseIdMiddleName": "အောင်", "toBurmeseIdLastName": "ဒေါ်သန္တာထွန်", "toBurmeseIdFspId": "$param_simNamePayeefsp", - "validCondition": "GRzLaTP7DJ9t4P-a_BA0WA9wzzlsugf00-Tn6kESAfM", - "validCondition2": "kPLCKM62VY2jbekuw3apCTBg5zk_mVs9DD8-XpljQms", - "validFulfillment": "UNlJ98hZTY_dsw0cAqw4i_UN3v4utt7CZFB4yfLbVFA", - "validIlpPacket2": "AYIC9AAAAAAAABdwHWcucGF5ZWVmc3AubXNpc2RuLjIyNTU2OTk5MTI1ggLKZXlKMGNtRnVjMkZqZEdsdmJrbGtJam9pWmpRMFltUmtOV010WXpreE1DMDBZVGt3TFRoa05qa3RaR0ppWVRaaVl6aGxZVFpqSWl3aWNYVnZkR1ZKWkNJNklqVTBaRFZtTURsaUxXRTBOMlF0TkRCa05pMWhZVEEzTFdFNVkyWXpZbUl5TkRsaFpDSXNJbkJoZVdWbElqcDdJbkJoY25SNVNXUkpibVp2SWpwN0luQmhjblI1U1dSVWVYQmxJam9pVFZOSlUwUk9JaXdpY0dGeWRIbEpaR1Z1ZEdsbWFXVnlJam9pTWpJMU5UWTVPVGt4TWpVaUxDSm1jM0JKWkNJNkluQmhlV1ZsWm5Od0luMTlMQ0p3WVhsbGNpSTZleUp3WVhKMGVVbGtTVzVtYnlJNmV5SndZWEowZVVsa1ZIbHdaU0k2SWsxVFNWTkVUaUlzSW5CaGNuUjVTV1JsYm5ScFptbGxjaUk2SWpJeU5UQTNNREE0TVRneElpd2labk53U1dRaU9pSndZWGxsY21aemNDSjlMQ0p3WlhKemIyNWhiRWx1Wm04aU9uc2lZMjl0Y0d4bGVFNWhiV1VpT25zaVptbHljM1JPWVcxbElqb2lUV0YwY3lJc0lteGhjM1JPWVcxbElqb2lTR0ZuYldGdUluMHNJbVJoZEdWUFprSnBjblJvSWpvaU1UazRNeTB4TUMweU5TSjlmU3dpWVcxdmRXNTBJanA3SW1GdGIzVnVkQ0k2SWpZd0lpd2lZM1Z5Y21WdVkza2lPaUpWVTBRaWZTd2lkSEpoYm5OaFkzUnBiMjVVZVhCbElqcDdJbk5qWlc1aGNtbHZJam9pVkZKQlRsTkdSVklpTENKcGJtbDBhV0YwYjNJaU9pSlFRVmxGVWlJc0ltbHVhWFJwWVhSdmNsUjVjR1VpT2lKRFQwNVRWVTFGVWlKOWZRAA", + "validCondition": "$param_validConditionV1", + "validCondition2": "$param_validCondition2V1", + "validFulfillment": "$param_validFulfillmentV1", + "validIlpPacket2": "$param_validIlpPacket2V1", "NORESPONSE_SIMPAYEE_NAME": "$param_simNameNoResponsePayeefsp", "SIM1_NAME": "$param_simNameTestfsp1", "SIM2_NAME": "$param_simNameTestfsp2", @@ -13301,10 +13818,10 @@ ml-testing-toolkit: "mobileSimPayerFsp": "pinkbankfsp", "mobileSimPayeeFsp": "greenbankfsp", "ON_US_TRANSFERS_ENABLED": false, - "expectedPartiesVersion": "1.1", + "expectedPartiesVersion": "2.0", "expectedParticipantsVersion": "1.1", - "expectedQuotesVersion": "1.1", - "expectedTransfersVersion": "1.1", + "expectedQuotesVersion": "2.0", + "expectedTransfersVersion": "2.0", "expectedAuthorizationsVersion": "1.1", "expectedTransactionRequestsVersion": "1.1", "toSubIdValue": "30", @@ -13317,6 +13834,7 @@ ml-testing-toolkit: "DELAY_CGS": 5000, "DELAY_FUNDS_IN": 5000, "DELAY_CL": 250, + "DELAY_QUOTES": 1000, "RETRY_MAX_ATTEMPTS": 100, "settlementpayeefspNoExtensionMSISDN": "27714923918", "NORESPONSE_NAME": "$param_simNameNoResponsePayeefsp", @@ -13365,10 +13883,102 @@ ml-testing-toolkit: "TTKSIM3_SDK_TESTAPI_URL": "http://$release_name-$param_simNameTTKSim3-sdk-api-svc:4002", "TTKSIM3_SDK_TESTAPI_WS_URL": "ws://$release_name-$param_simNameTTKSim3-sdk-api-svc:4002", "TTKSIM2_PARTY_NOT_FOUND": "partynotfound", - "TTKSIM2_PARTY_TIMES_OUT": "partytimesout" + "TTKSIM2_PARTY_TIMES_OUT": "partytimesout", + "FX_PAYER_DFSP_ID": "ttkfxpayer", + "FX_PAYEE_DFSP_ID": "ttkfxpayee", + "FX_MSISDN_1": "54321001", + "FX_MSISDN_2": "54321002", + "FX_TESTFXP1_ID": "ttkfxp1", + "FX_TESTFXP2_ID": "ttkfxp2", + "FX_SOURCE_CURRENCY": "XDR", + "FX_SOURCE_AMOUNT": "10", + "FX_SOURCE_AMOUNT_ERROR_GENERIC": "13", + "FX_TARGET_CURRENCY": "XTS", + "FX_TARGET_AMOUNT": "15", + "FX_EXPIRATION": "2024-08-22T12:33:23.819Z", + "acceptFxQuotes": "application/vnd.interoperability.fxQuotes+json;version=2.0", + "acceptFxTransfers": "application/vnd.interoperability.fxTransfers+json;version=2.0", + "contentTypeFxQuotes": "application/vnd.interoperability.fxQuotes+json;version=2.0", + "contentTypeFxTransfers": "application/vnd.interoperability.fxTransfers+json;version=2.0", + "fxpCurrency": "XXX", + "HOST_ORACLE": "http://$release_name-simulator/oracle", + "HOST_ORACLE_MSISDN": "http://$release_name-als-msisdn-oracle", + "dfspEmail": "test@mojaloop.com", + "fulfillment": "UNlJ98hZTY_dsw0cAqw4i_UN3v4utt7CZFB4yfLbVFA", + "expiration": "2024-07-26T11:12:15.158Z", + "ttkpayeefspIdentifier1": "5671234", + "ttkpayeefspIdentifier2": "5201", + "ttkpayeefspName": "ttkpayeefsp", + "PROXY1_NAME": "proxyttk", + "PROXY1_CALLBACK_URL": "http://$release_name-ml-testing-toolkit-backend:4040", + "PROXY_HEADER": "proxyttk", + "PROXY_PAYER_TEST_PAYERFSP_ID": "testingtoolkitdfsp", + "PROXY_PAYEE_TEST_PAYERFSP_ID": "nonexistentpayerfsp", + "PROXY_PAYERFSP_PARTY_ID_TYPE": "MSISDN", + "PROXY_PAYERFSP_PARTY_ID": "123456", + "PROXY_PAYERFSP_PARTY_FIRST_NAME": "Proxy_Payer_First", + "PROXY_PAYERFSP_PARTY_LAST_NAME": "Proxy_Payer_Last", + "PROXY_PAYERFSP_PARTY_DOB": "10-10-2000", + "PROXY_PAYER_TEST_PAYEEFSP_ID": "nonexistentpayeefsp", + "PROXY_PAYEE_TEST_PAYEEFSP_ID": "ttkpayeefsp", + "PROXY_PAYEEFSP_PARTY_ID_TYPE": "MSISDN", + "PROXY_PAYER_TEST_PAYEEFSP_PARTY_ID": "123456", + "PROXY_PAYEE_TEST_PAYEEFSP_PARTY_ID": "7891234", + "PROXY_PAYEEFSP_PARTY_FIRST_NAME": "Proxy_Payee_First", + "PROXY_PAYEEFSP_PARTY_LAST_NAME": "Proxy_Payee_Last", + "PROXY_PAYEEFSP_PARTY_DOB": "10-10-2000", + "PROXY_AMOUNT": "100", + "PROXY_AMOUNT_CURRENCY": "XXX", + "PROXY_PAYEEFSP_PARTY_ID_ERROR_PAYER_SCHEME_2XXX": "TBD", + "PROXY_PAYER_SCHEME_ERROR_CODE_2XXX": "TBD", + "PROXY_PAYER_SCHEME_ERROR_DESCRIPTION_2XXX": "TBD", + "PROXY_PAYEEFSP_PARTY_ID_ERROR_PAYER_SCHEME_3XXX": "TBD", + "PROXY_PAYER_SCHEME_ERROR_CODE_3XXX": "TBD", + "PROXY_PAYER_SCHEME_ERROR_DESCRIPTION_3XXX": "TBD", + "PROXY_PAYEEFSP_PARTY_ID_ERROR_PAYER_SCHEME_4XXX": "TBD", + "PROXY_PAYER_SCHEME_ERROR_CODE_4XXX": "TBD", + "PROXY_PAYER_SCHEME_ERROR_DESCRIPTION_4XXX": "TBD", + "PROXY_PAYEEFSP_PARTY_ID_ERROR_PAYER_SCHEME_5XXX": "TBD", + "PROXY_PAYER_SCHEME_ERROR_CODE_5XXX": "TBD", + "PROXY_PAYER_SCHEME_ERROR_DESCRIPTION_5XXX": "TBD", + "PROXY_PAYEEFSP_PARTY_ID_NOT_IN_PAYER_PROXY_CACHE": "TBD", + "PROXY_PAYEEFSP_PARTY_ID_NOT_IN_PAYER_PROXY_CACHE_ERROR_CODE": "3201", + "PROXY_PAYEEFSP_PARTY_ID_NOT_IN_PAYER_PROXY_CACHE_ERROR_DESCRIPTION": "TBD", + "PROXY_PAYEEFSP_PARTY_ID_ERROR_IN_PROXY": "3100", + "PROXY_PAYEEFSP_AMOUNT_ERROR_IN_PROXY": "3100", + "PROXY_PAYEEFSP_PARTY_ID_ERROR_IN_PROXY_ERROR_CODE": "3100", + "PROXY_PAYEEFSP_PARTY_ID_ERROR_IN_PROXY_ERROR_DESCRIPTION": "Generic Error in Proxy", + "PROXY_PAYEEFSP_PARTY_ID_ERROR_PAYEE_SCHEME_2XXX": "2001", + "PROXY_PAYEE_SCHEME_ERROR_CODE_2XXX": "2001", + "PROXY_PAYEE_SCHEME_ERROR_DESCRIPTION_2XXX": "Generic 200X error in Payeefsp Scheme", + "PROXY_PAYEEFSP_PARTY_ID_ERROR_PAYEE_SCHEME_3XXX": "3001", + "PROXY_PAYEE_SCHEME_ERROR_CODE_3XXX": "3001", + "PROXY_PAYEE_SCHEME_ERROR_DESCRIPTION_3XXX": "Generic 300X error in Payeefsp Scheme", + "PROXY_PAYEEFSP_PARTY_ID_ERROR_PAYEE_SCHEME_4XXX": "4001", + "PROXY_PAYEE_SCHEME_ERROR_CODE_4XXX": "4001", + "PROXY_PAYEE_SCHEME_ERROR_DESCRIPTION_4XXX": "Generic 400X error in Payeefsp Scheme", + "PROXY_PAYEEFSP_PARTY_ID_ERROR_PAYEE_SCHEME_5XXX": "5001", + "PROXY_PAYEE_SCHEME_ERROR_CODE_5XXX": "5001", + "PROXY_PAYEE_SCHEME_ERROR_DESCRIPTION_5XXX": "Generic 500X error in Payeefsp Scheme", + "PROXY_PAYER_TEST_PAYEEFSP_PARTY_ID_ERROR": "5101", + "PROXY_PAYEE_TEST_PAYEEFSP_PARTY_ID_ERROR": "5201", + "PROXY_PAYEE_DFSP_ERROR_AMOUNT_5XXX": "5201", + "PROXY_PAYER_TEST_PAYEE_DFSP_ERROR_CODE_5XXX": "5101", + "PROXY_PAYEE_TEST_PAYEE_DFSP_ERROR_CODE_5XXX": "5201", + "PROXY_PAYEE_DFSP_ERROR_DESCRIPTION_5XXX": "Generic error in Payee DFSP", + "PROXY_PAYEE_DFSP_ERROR_AMOUNT_PAYEE_SCHEME_TIMEOUT": "5202", + "PROXY_PAYEE_DFSP_ERROR_CODE_PAYEE_SCHEME_TIMEOUT": "3303", + "PROXY_PAYEE_DFSP_ERROR_DESCRIPTION_PAYEE_SCHEME_TIMEOUT": "Transfer expired", + "PROXY_PAYEEFSP_PARTY_ID_PAYER_SCHEME_CACHE_NOT_VALID_ERROR_CODE": "5107", + "PROXY_PAYEEFSP_PARTY_ID_PAYER_SCHEME_CACHE_NOT_VALID_ERROR_DESCRIPTION": "TBD", + "PROXY_PAYEEFSP_PARTY_ID_PAYER_SCHEME_ORACLE_ERROR": "TBD", + "PROXY_PAYEEFSP_PARTY_ID_PAYER_SCHEME_ORACLE_ERROR_ERROR_CODE": "TBD", + "PROXY_PAYEEFSP_PARTY_ID_PAYER_SCHEME_ORACLE_ERROR_ERROR_DESCRIPTION": "TBD", + "PROXY_PAYEEFSP_PARTY_ID_SAME_TYPE_AND_ID": "TBD", + "isProxy": true, + "fundsIn": 1000000, } } - ml-testing-toolkit-frontend: ingress: enabled: true @@ -13384,8 +13994,8 @@ ml-ttk-posthook-setup: weight: -5 config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases - testCasesZipUrl: &ttkGitUrl https://github.com/mojaloop/testing-toolkit-test-cases/archive/v15.3.0-snapshot.zip - testCasesPathInZip: &ttkGitPathSetup testing-toolkit-test-cases-15.3.0-snapshot/collections/hub/provisioning + testCasesZipUrl: &ttkGitUrl https://github.com/mojaloop/testing-toolkit-test-cases/archive/v17.0.0.zip + testCasesPathInZip: &ttkGitPathSetup testing-toolkit-test-cases-17.0.0/collections/hub/provisioning/for_golden_path ttkBackendURL: http://$release_name-ml-testing-toolkit-backend:5050 parameters: <<: *simNames @@ -13398,7 +14008,7 @@ ml-ttk-posthook-tests: config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: &ttkGitPathGP testing-toolkit-test-cases-15.3.0-snapshot/collections/hub/golden_path + testCasesPathInZip: &ttkGitPathGP testing-toolkit-test-cases-17.0.0/collections/hub/golden_path # awsS3BucketName: aws-s3-bucket-name # awsS3FilePath: ttk-tests/reports ttkBackendURL: http://$release_name-ml-testing-toolkit-backend:5050 @@ -13499,8 +14109,7 @@ ml-ttk-cronjob-cleanup: config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: &ttkGitPathCleanup testing-toolkit-test-cases-15.3.0-snapshot/collections/hub/cleanup - # testCasesPathInZip: *ttkGitPathGP + testCasesPathInZip: &ttkGitPathCleanup testing-toolkit-test-cases-17.0.0/collections/hub/cleanup # awsS3BucketName: aws-s3-bucket-name # awsS3FilePath: ttk-tests/reports ttkBackendURL: http://$release_name-ml-testing-toolkit-backend:5050 @@ -13547,6 +14156,7 @@ ml-ttk-test-setup: saveReport: true saveReportBaseUrl: "testing-toolkit.local" reportName: standard_provisioning_collection +# batchSize: "1" ## `allowFailures` configures this TTK CLI Test Runner to return failure exit-codes to the terminal, ## by default this is `false` - which means that any consecutive Helm tests will not be executed by Helm. ## If this is set to `true` - it will allow all Helm tests to be executed regardless of any failures. @@ -13573,10 +14183,15 @@ ml-ttk-test-val-gp: saveReport: true saveReportBaseUrl: "testing-toolkit.local" reportName: gp_tests + batchSize: "1" ## `allowFailures` configures this TTK CLI Test Runner to return failure exit-codes to the terminal, ## By default this is `false` - which means that any consecutive Helm tests will not be executed by Helm. ## If this is set to `true` - it will allow the next consecutive Helm test to be executed regardless of any failures. allowFailures: false +## we can define batchSize also using env variable, but config.batchSize will take precedence: +# env: +# TESTCASES_BATCH_SIZE: 10 + # configCreds: # AWS_ACCESS_KEY_ID: 'some_aws_access_key' @@ -13608,7 +14223,7 @@ ml-ttk-test-val-bulk: config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: testing-toolkit-test-cases-15.3.0-snapshot/collections/hub/other_tests/bulk_transfers + testCasesPathInZip: testing-toolkit-test-cases-17.0.0/collections/hub/other_tests/bulk_transfers ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. # awsS3BucketName: aws-s3-bucket-name # awsS3FilePath: ttk-tests/reports @@ -13653,7 +14268,7 @@ ml-ttk-test-setup-tp: config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: testing-toolkit-test-cases-15.3.0-snapshot/collections/hub/provisioning_thirdparty + testCasesPathInZip: testing-toolkit-test-cases-17.0.0/collections/hub/provisioning/for_thirdparty ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. # awsS3BucketName: aws-s3-bucket-name # awsS3FilePath: ttk-tests/reports @@ -13698,7 +14313,7 @@ ml-ttk-test-val-tp: config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: testing-toolkit-test-cases-15.3.0-snapshot/collections/hub/thirdparty + testCasesPathInZip: testing-toolkit-test-cases-17.0.0/collections/hub/provisioning/for_thirdparty # awsS3FilePath: ttk-tests/reports testSuiteName: Thirdparty Tests environmentName: Development @@ -13731,7 +14346,7 @@ ml-ttk-test-val-tp: # } parameters: <<: *simNames - testCaseEnvironmentFile: *ttkInputValues + testCaseEnvironmentFile: *ttkInputValues ml-ttk-test-setup-sdk-bulk: tests: @@ -13740,7 +14355,7 @@ ml-ttk-test-setup-sdk-bulk: config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: testing-toolkit-test-cases-15.3.0-snapshot/collections/hub/provisioning_sdkbulk + testCasesPathInZip: testing-toolkit-test-cases-17.0.0/collections/hub/provisioning/for_sdk_bulk ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. # awsS3BucketName: aws-s3-bucket-name # awsS3FilePath: ttk-tests/reports @@ -13785,7 +14400,7 @@ ml-ttk-test-val-sdk-bulk: config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: testing-toolkit-test-cases-15.3.0-snapshot/collections/hub/sdk_scheme_adapter/bulk/basic + testCasesPathInZip: testing-toolkit-test-cases-17.0.0/collections/hub/sdk_scheme_adapter/bulk/basic ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. # awsS3BucketName: aws-s3-bucket-name # awsS3FilePath: ttk-tests/reports @@ -13821,7 +14436,7 @@ ml-ttk-test-val-sdk-bulk: # } parameters: <<: *simNames - testCaseEnvironmentFile: *ttksim1InputValues + testCaseEnvironmentFile: *ttksim1InputValues ml-ttk-test-val-sdk-r2p: tests: @@ -13830,7 +14445,7 @@ ml-ttk-test-val-sdk-r2p: config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: testing-toolkit-test-cases-15.3.0-snapshot/collections/hub/sdk_scheme_adapter/request-to-pay/basic + testCasesPathInZip: testing-toolkit-test-cases-17.0.0/collections/hub/sdk_scheme_adapter/request-to-pay/basic ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. # awsS3BucketName: aws-s3-bucket-name # awsS3FilePath: ttk-tests/reports @@ -13866,12 +14481,62 @@ ml-ttk-test-val-sdk-r2p: # } parameters: <<: *simNames - testCaseEnvironmentFile: *ttksim1InputValues + testCaseEnvironmentFile: *ttksim1InputValues + +ml-ttk-test-setup-interscheme: + tests: + enabled: *INTERSCHEME_ENABLED + weight: -1 + config: + ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases + testCasesZipUrl: *ttkGitUrl + testCasesPathInZip: testing-toolkit-test-cases-17.0.0/collections/hub/provisioning/for_inter_scheme + ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. + # awsS3BucketName: aws-s3-bucket-name + # awsS3FilePath: ttk-tests/reports + ttkBackendURL: http://$release_name-ml-testing-toolkit-backend:5050 + testSuiteName: Interscheme Provisioning Collection + environmentName: Development + saveReport: true + saveReportBaseUrl: "testing-toolkit.local" + reportName: interscheme_provisioning_collection + ## `allowFailures` configures this TTK CLI Test Runner to return failure exit-codes to the terminal, + ## by default this is `false` - which means that any consecutive Helm tests will not be executed by Helm. + ## If this is set to `true` - it will allow all Helm tests to be executed regardless of any failures. + allowFailures: false + parameters: + <<: *simNames + testCaseEnvironmentFile: *ttkInputValues + +ml-ttk-test-val-interscheme: + tests: + enabled: *INTERSCHEME_ENABLED + weight: 0 + config: + ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases + testCasesZipUrl: *ttkGitUrl + testCasesPathInZip: testing-toolkit-test-cases-17.0.0/collections/hub/inter_scheme + ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. + # awsS3BucketName: aws-s3-bucket-name + # awsS3FilePath: ttk-tests/reports + ttkBackendURL: http://$release_name-ml-testing-toolkit-backend:5050 + testSuiteName: Interscheme GP Collection + environmentName: Development + saveReport: true + saveReportBaseUrl: "testing-toolkit.local" + reportName: interscheme_gp_collection + ## `allowFailures` configures this TTK CLI Test Runner to return failure exit-codes to the terminal, + ## by default this is `false` - which means that any consecutive Helm tests will not be executed by Helm. + ## If this is set to `true` - it will allow all Helm tests to be executed regardless of any failures. + allowFailures: false + parameters: + <<: *simNames + testCaseEnvironmentFile: *ttkInputValues ml-ttk-test-cleanup: tests: enabled: true - weight: -1 + weight: 2 config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl diff --git a/monitoring/dashboards/datastore/dashboard-mysql-exporter-quickstart.json b/monitoring/dashboards/datastore/dashboard-mysql-exporter-quickstart.json new file mode 100644 index 000000000..143a979ab --- /dev/null +++ b/monitoring/dashboards/datastore/dashboard-mysql-exporter-quickstart.json @@ -0,0 +1,4047 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.2.3" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph (old)", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "A quickstart to setup the Prometheus MySQL Exporter with preconfigured dashboards, alerting rules, and recording rules.", + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": 14057, + "graphTooltip": 1, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 382, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "**Uptime**\n\nThe amount of time since the last restart of the MySQL server process.", + "fieldConfig": { + "defaults": { + "decimals": 1, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(245, 54, 54, 0.9)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 300 + }, + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 3600 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 8, + "x": 0, + "y": 1 + }, + "id": 12, + "interval": "1m", + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "fieldOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "calculatedInterval": "10m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_global_status_uptime{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "metric": "", + "refId": "A", + "step": 300 + } + ], + "title": "Uptime", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "**Current QPS**\n\nBased on the queries reported by MySQL's ``SHOW STATUS`` command, it is the number of statements executed by the server within the last second. This variable includes statements executed within stored programs, unlike the Questions variable. It does not count \n``COM_PING`` or ``COM_STATISTICS`` commands.", + "fieldConfig": { + "defaults": { + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(245, 54, 54, 0.9)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 35 + }, + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 75 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 8, + "x": 8, + "y": 1 + }, + "id": 13, + "interval": "1m", + "links": [ + { + "targetBlank": true, + "title": "MySQL Server Status Variables", + "url": "https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html#statvar_Queries" + } + ], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "fieldOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "calculatedInterval": "10m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "rate(mysql_global_status_queries{job=~\"$job\", instance=~\"$instance\",cluster=\"$cluster\"}[$__interval])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "metric": "", + "refId": "A", + "step": 20 + } + ], + "title": "Current QPS", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "**InnoDB Buffer Pool Size**\n\nInnoDB maintains a storage area called the buffer pool for caching data and indexes in memory. Knowing how the InnoDB buffer pool works, and taking advantage of it to keep frequently accessed data in memory, is one of the most important aspects of MySQL tuning. The goal is to keep the working set in memory. In most cases, this should be between 60%-90% of available memory on a dedicated database host, but depends on many factors.", + "fieldConfig": { + "defaults": { + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 90 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 8, + "x": 16, + "y": 1 + }, + "id": 51, + "interval": "1m", + "links": [ + { + "targetBlank": true, + "title": "Tuning the InnoDB Buffer Pool Size", + "url": "https://www.percona.com/blog/2015/06/02/80-ram-tune-innodb_buffer_pool_size/" + } + ], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "fieldOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "calculatedInterval": "10m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_global_variables_innodb_buffer_pool_size{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "metric": "", + "refId": "A", + "step": 300 + } + ], + "title": "InnoDB Buffer Pool", + "type": "stat" + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 383, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Connections", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 0, + "description": "**Max Connections** \n\nMax Connections is the maximum permitted number of simultaneous client connections. By default, this is 151. Increasing this value increases the number of file descriptors that mysqld requires. If the required number of descriptors are not available, the server reduces the value of Max Connections.\n\nmysqld actually permits Max Connections + 1 clients to connect. The extra connection is reserved for use by accounts that have the SUPER privilege, such as root.\n\nMax Used Connections is the maximum number of connections that have been in use simultaneously since the server started.\n\nConnections is the number of connection attempts (successful or not) to the MySQL server.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 5 + }, + "height": "250px", + "hiddenSeries": false, + "id": 92, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ + { + "targetBlank": true, + "title": "MySQL Server System Variables", + "url": "https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_connections" + } + ], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "Max Connections", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(max_over_time(mysql_global_status_threads_connected{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Connections", + "metric": "", + "refId": "A", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(mysql_global_status_max_used_connections{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"})", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Max Used Connections", + "metric": "", + "refId": "C", + "step": 20, + "target": "" + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(mysql_global_variables_max_connections{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"})", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Max Connections", + "metric": "", + "refId": "B", + "step": 20, + "target": "" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Connections", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Active Threads**\n\nThreads Connected is the number of open connections, while Threads Running is the number of threads not sleeping.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 5 + }, + "hiddenSeries": false, + "id": 10, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "Peak Threads Running", + "color": "#E24D42", + "lines": false, + "pointradius": 1, + "points": true + }, + { + "alias": "Peak Threads Connected", + "color": "#1F78C1" + }, + { + "alias": "Avg Threads Running", + "color": "#EAB839" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(max_over_time(mysql_global_status_threads_connected{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "hide": false, + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Peak Threads Connected", + "metric": "", + "refId": "A", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(max_over_time(mysql_global_status_threads_running{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Peak Threads Running", + "metric": "", + "refId": "B", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(avg_over_time(mysql_global_status_threads_running{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Avg Threads Running", + "refId": "C", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Client Thread Activity", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [ + "total" + ] + }, + "yaxes": [ + { + "format": "short", + "label": "Threads", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "min": 0, + "show": false + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 384, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Table Locks", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Questions**\n\nThe number of statements executed by the server. This includes only statements sent to the server by clients and not statements executed within stored programs, unlike the Queries used in the QPS calculation. \n\nThis variable does not count the following commands:\n* ``COM_PING``\n* ``COM_STATISTICS``\n* ``COM_STMT_PREPARE``\n* ``COM_STMT_CLOSE``\n* ``COM_STMT_RESET``", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 13 + }, + "hiddenSeries": false, + "id": 53, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ + { + "targetBlank": true, + "title": "MySQL Queries and Questions", + "url": "https://www.percona.com/blog/2014/05/29/how-mysql-queries-and-questions-are-measured/" + } + ], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "rate(mysql_global_status_questions{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "metric": "", + "refId": "A", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Questions", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Thread Cache**\n\nThe thread_cache_size variable sets how many threads the server should cache to reuse. When a client disconnects, the client's threads are put in the cache if the cache is not full. It is autosized in MySQL 5.6.8 and above (capped to 100). Requests for threads are satisfied by reusing threads taken from the cache if possible, and only when the cache is empty is a new thread created.\n\n* *Threads_created*: The number of threads created to handle connections.\n* *Threads_cached*: The number of threads in the thread cache.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 13 + }, + "hiddenSeries": false, + "id": 11, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ + { + "title": "Tuning information", + "url": "https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_thread_cache_size" + } + ], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "Threads Created", + "fill": 0 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(mysql_global_variables_thread_cache_size{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"})", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Thread Cache Size", + "metric": "", + "refId": "B", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(mysql_global_status_threads_cached{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"})", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Threads Cached", + "metric": "", + "refId": "C", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_threads_created{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Threads Created", + "metric": "", + "refId": "A", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Thread Cache", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 385, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Temporary Objects", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 21 + }, + "hiddenSeries": false, + "id": 22, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_created_tmp_tables{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Created Tmp Tables", + "metric": "", + "refId": "A", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_created_tmp_disk_tables{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Created Tmp Disk Tables", + "metric": "", + "refId": "B", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_created_tmp_files{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Created Tmp Files", + "metric": "", + "refId": "C", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Temporary Objects", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Select Types**\n\nAs with most relational databases, selecting based on indexes is more efficient than scanning an entire table's data. Here we see the counters for selects not done with indexes.\n\n* ***Select Scan*** is how many queries caused full table scans, in which all the data in the table had to be read and either discarded or returned.\n* ***Select Range*** is how many queries used a range scan, which means MySQL scanned all rows in a given range.\n* ***Select Full Join*** is the number of joins that are not joined on an index, this is usually a huge performance hit.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 21 + }, + "height": "250px", + "hiddenSeries": false, + "id": 311, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_select_full_join{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Select Full Join", + "metric": "", + "refId": "A", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_select_full_range_join{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Select Full Range Join", + "metric": "", + "refId": "B", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_select_range{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Select Range", + "metric": "", + "refId": "C", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_select_range_check{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Select Range Check", + "metric": "", + "refId": "D", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_select_scan{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Select Scan", + "metric": "", + "refId": "E", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Select Types", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 28 + }, + "id": 386, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Sorts", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Sorts**\n\nDue to a query's structure, order, or other requirements, MySQL sorts the rows before returning them. For example, if a table is ordered 1 to 10 but you want the results reversed, MySQL then has to sort the rows to return 10 to 1.\n\nThis graph also shows when sorts had to scan a whole table or a given range of a table in order to return the results and which could not have been sorted via an index.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 29 + }, + "hiddenSeries": false, + "id": 30, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideZero": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_sort_rows{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Sort Rows", + "metric": "", + "refId": "A", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_sort_range{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Sort Range", + "metric": "", + "refId": "B", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_sort_merge_passes{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Sort Merge Passes", + "metric": "", + "refId": "C", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_sort_scan{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Sort Scan", + "metric": "", + "refId": "D", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Sorts", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Slow Queries**\n\nSlow queries are defined as queries being slower than the long_query_time setting. For example, if you have long_query_time set to 3, all queries that take longer than 3 seconds to complete will show on this graph.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 29 + }, + "hiddenSeries": false, + "id": 48, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_slow_queries{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Slow Queries", + "metric": "", + "refId": "A", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Slow Queries", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 36 + }, + "id": 387, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Aborted", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**Aborted Connections**\n\nWhen a given host connects to MySQL and the connection is interrupted in the middle (for example due to bad credentials), MySQL keeps that info in a system table (since 5.6 this table is exposed in performance_schema).\n\nIf the amount of failed requests without a successful connection reaches the value of max_connect_errors, mysqld assumes that something is wrong and blocks the host from further connection.\n\nTo allow connections from that host again, you need to issue the ``FLUSH HOSTS`` statement.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 37 + }, + "hiddenSeries": false, + "id": 47, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_aborted_connects{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Aborted Connects (attempts)", + "metric": "", + "refId": "A", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_aborted_clients{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Aborted Clients (timeout)", + "metric": "", + "refId": "B", + "step": 20, + "target": "" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Aborted Connections", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**Table Locks**\n\nMySQL takes a number of different locks for varying reasons. In this graph we see how many Table level locks MySQL has requested from the storage engine. In the case of InnoDB, many times the locks could actually be row locks as it only takes table level locks in a few specific cases.\n\nIt is most useful to compare Locks Immediate and Locks Waited. If Locks waited is rising, it means you have lock contention. Otherwise, Locks Immediate rising and falling is normal activity.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 37 + }, + "hiddenSeries": false, + "id": 32, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_table_locks_immediate{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Table Locks Immediate", + "metric": "", + "refId": "A", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_table_locks_waited{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Table Locks Waited", + "metric": "", + "refId": "B", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Table Locks", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 44 + }, + "id": 388, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Network", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Network Traffic**\n\nHere we can see how much network traffic is generated by MySQL. Outbound is network traffic sent from MySQL and Inbound is network traffic MySQL has received.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 6, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 45 + }, + "hiddenSeries": false, + "id": 9, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_bytes_received{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Inbound", + "metric": "", + "refId": "A", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "sum(rate(mysql_global_status_bytes_sent{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Outbound", + "metric": "", + "refId": "B", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Network Traffic", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "none", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 52 + }, + "id": 389, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Memory", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 0, + "description": "***System Memory***: Total Memory for the system.\\\n***InnoDB Buffer Pool Data***: InnoDB maintains a storage area called the buffer pool for caching data and indexes in memory.\\\n***TokuDB Cache Size***: Similar in function to the InnoDB Buffer Pool, TokuDB will allocate 50% of the installed RAM for its own cache.\\\n***Key Buffer Size***: Index blocks for MYISAM tables are buffered and are shared by all threads. key_buffer_size is the size of the buffer used for index blocks.\\\n***Adaptive Hash Index Size***: When InnoDB notices that some index values are being accessed very frequently, it builds a hash index for them in memory on top of B-Tree indexes.\\\n ***Query Cache Size***: The query cache stores the text of a SELECT statement together with the corresponding result that was sent to the client. The query cache has huge scalability problems in that only one thread can do an operation in the query cache at the same time.\\\n***InnoDB Dictionary Size***: The data dictionary is InnoDB ‘s internal catalog of tables. InnoDB stores the data dictionary on disk, and loads entries into memory while the server is running.\\\n***InnoDB Log Buffer Size***: The MySQL InnoDB log buffer allows transactions to run without having to write the log to disk before the transactions commit.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 6, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 53 + }, + "hiddenSeries": false, + "id": 50, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ + { + "title": "Detailed descriptions about metrics", + "url": "https://www.percona.com/doc/percona-monitoring-and-management/dashboard.mysql-overview.html#mysql-internal-memory-overview" + } + ], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "System Memory", + "fill": 0, + "stack": false + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(mysql_global_status_innodb_page_size{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"} * on (instance) mysql_global_status_buffer_pool_pages{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\", state=\"data\"})", + "format": "time_series", + "hide": false, + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "InnoDB Buffer Pool Data", + "refId": "A", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(mysql_global_variables_innodb_log_buffer_size{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"})", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "InnoDB Log Buffer Size", + "refId": "D", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(mysql_global_variables_innodb_additional_mem_pool_size{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"})", + "format": "time_series", + "interval": "1m", + "intervalFactor": 2, + "legendFormat": "InnoDB Additional Memory Pool Size", + "refId": "H", + "step": 40 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(mysql_global_status_innodb_mem_dictionary{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"})", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "InnoDB Dictionary Size", + "refId": "F", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(mysql_global_variables_key_buffer_size{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"})", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Key Buffer Size", + "refId": "B", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(mysql_global_variables_query_cache_size{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"})", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Query Cache Size", + "refId": "C", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(mysql_global_status_innodb_mem_adaptive_hash{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"})", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Adaptive Hash Index Size", + "refId": "E", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(mysql_global_variables_tokudb_cache_size{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"})", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "TokuDB Cache Size", + "refId": "I", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Internal Memory Overview", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": "", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 60 + }, + "id": 390, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Command, Handlers, Processes", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**Top Command Counters**\n\nThe Com_{{xxx}} statement counter variables indicate the number of times each xxx statement has been executed. There is one status variable for each type of statement. For example, Com_delete and Com_update count [``DELETE``](https://dev.mysql.com/doc/refman/5.7/en/delete.html) and [``UPDATE``](https://dev.mysql.com/doc/refman/5.7/en/update.html) statements, respectively. Com_delete_multi and Com_update_multi are similar but apply to [``DELETE``](https://dev.mysql.com/doc/refman/5.7/en/delete.html) and [``UPDATE``](https://dev.mysql.com/doc/refman/5.7/en/update.html) statements that use multiple-table syntax.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 61 + }, + "hiddenSeries": false, + "id": 14, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ + { + "title": "Server Status Variables (Com_xxx)", + "url": "https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html#statvar_Com_xxx" + } + ], + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "topk(5, rate(mysql_global_status_commands_total{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval])>0)", + "format": "time_series", + "hide": false, + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Com_{{ command }}", + "metric": "", + "refId": "B", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Top Command Counters", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Handlers**\n\nHandler statistics are internal statistics on how MySQL is selecting, updating, inserting, and modifying rows, tables, and indexes.\n\nThis is in fact the layer between the Storage Engine and MySQL.\n\n* `read_rnd_next` is incremented when the server performs a full table scan and this is a counter you don't really want to see with a high value.\n* `read_key` is incremented when a read is done with an index.\n* `read_next` is incremented when the storage engine is asked to 'read the next index entry'. A high value means a lot of index scans are being done.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 68 + }, + "hiddenSeries": false, + "id": 8, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideZero": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "rate(mysql_global_status_handlers_total{instance=~\"$host\", handler!~\"commit|rollback|savepoint.*|prepare\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_handlers_total{instance=~\"$host\", handler!~\"commit|rollback|savepoint.*|prepare\", cluster=\"$cluster\"}[5m])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "{{ handler }}", + "metric": "", + "refId": "J", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Handlers", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 75 + }, + "hiddenSeries": false, + "id": 28, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideZero": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "rate(mysql_global_status_handlers_total{instance=~\"$host\", handler=~\"commit|rollback|savepoint.*|prepare\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_handlers_total{instance=~\"$host\", handler=~\"commit|rollback|savepoint.*|prepare\", cluster=\"$cluster\"}[5m])", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "{{ handler }}", + "metric": "", + "refId": "A", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Transaction Handlers", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 82 + }, + "hiddenSeries": false, + "id": 40, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideZero": true, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_info_schema_threads{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "{{ state }}", + "metric": "", + "refId": "A", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Process States", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 6, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 89 + }, + "hiddenSeries": false, + "id": 49, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideZero": true, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "topk(5, avg_over_time(mysql_info_schema_threads{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[1h]))", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "{{ state }}", + "metric": "", + "refId": "A", + "step": 3600 + } + ], + "thresholds": [], + "timeFrom": "24h", + "timeRegions": [], + "title": "Top Process States Hourly", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 96 + }, + "id": 391, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Query Cache", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Query Cache Memory**\n\nThe query cache has huge scalability problems in that only one thread can do an operation in the query cache at the same time. This serialization is true not only for SELECTs, but also for INSERT/UPDATE/DELETE.\n\nThis also means that the larger the `query_cache_size` is set to, the slower those operations become. In concurrent environments, the MySQL Query Cache quickly becomes a contention point, decreasing performance. MariaDB and AWS Aurora have done work to try and eliminate the query cache contention in their flavors of MySQL, while MySQL 8.0 has eliminated the query cache feature.\n\nThe recommended settings for most environments is to set:\n ``query_cache_type=0``\n ``query_cache_size=0``\n\nNote that while you can dynamically change these values, to completely remove the contention point you have to restart the database.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 97 + }, + "hiddenSeries": false, + "id": 46, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_global_status_qcache_free_memory{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Free Memory", + "metric": "", + "refId": "F", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_global_variables_query_cache_size{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Query Cache Size", + "metric": "", + "refId": "E", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Query Cache Memory", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Query Cache Activity**\n\nThe query cache has huge scalability problems in that only one thread can do an operation in the query cache at the same time. This serialization is true not only for SELECTs, but also for INSERT/UPDATE/DELETE.\n\nThis also means that the larger the `query_cache_size` is set to, the slower those operations become. In concurrent environments, the MySQL Query Cache quickly becomes a contention point, decreasing performance. MariaDB and AWS Aurora have done work to try and eliminate the query cache contention in their flavors of MySQL, while MySQL 8.0 has eliminated the query cache feature.\n\nThe recommended settings for most environments is to set:\n``query_cache_type=0``\n``query_cache_size=0``\n\nNote that while you can dynamically change these values, to completely remove the contention point you have to restart the database.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 97 + }, + "height": "", + "hiddenSeries": false, + "id": 45, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "rate(mysql_global_status_qcache_hits{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_qcache_hits{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Hits", + "metric": "", + "refId": "B", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "rate(mysql_global_status_qcache_inserts{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_qcache_inserts{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Inserts", + "metric": "", + "refId": "C", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "rate(mysql_global_status_qcache_not_cached{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_qcache_not_cached{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Not Cached", + "metric": "", + "refId": "D", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "rate(mysql_global_status_qcache_lowmem_prunes{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_qcache_lowmem_prunes{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Prunes", + "metric": "", + "refId": "F", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_global_status_qcache_queries_in_cache{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Queries in Cache", + "metric": "", + "refId": "E", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Query Cache Activity", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 104 + }, + "id": 392, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Files and Tables", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 105 + }, + "hiddenSeries": false, + "id": 43, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "rate(mysql_global_status_opened_files{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_opened_files{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Openings", + "metric": "", + "refId": "A", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL File Openings", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 105 + }, + "hiddenSeries": false, + "id": 41, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_global_status_open_files{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Open Files", + "metric": "", + "refId": "A", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_global_variables_open_files_limit{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Open Files Limit", + "metric": "", + "refId": "D", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "mysql_global_status_innodb_num_open_files{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "InnoDB Open Files", + "refId": "B", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Open Files", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 112 + }, + "id": 393, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Table Openings", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Table Open Cache Status**\n\nThe recommendation is to set the `table_open_cache_instances` to a loose correlation to virtual CPUs, keeping in mind that more instances means the cache is split more times. If you have a cache set to 500 but it has 10 instances, each cache will only have 50 cached.\n\nThe `table_definition_cache` and `table_open_cache` can be left as default as they are auto-sized MySQL 5.6 and above (ie: do not set them to any value).", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 113 + }, + "hiddenSeries": false, + "id": 44, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ + { + "title": "Server Status Variables (table_open_cache)", + "url": "http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_table_open_cache" + } + ], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "Table Open Cache Hit Ratio", + "yaxis": 2 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "rate(mysql_global_status_opened_tables{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_opened_tables{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Openings", + "metric": "", + "refId": "A", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "rate(mysql_global_status_table_open_cache_hits{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_table_open_cache_hits{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Hits", + "refId": "B", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "rate(mysql_global_status_table_open_cache_misses{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_table_open_cache_misses{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Misses", + "refId": "C", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "rate(mysql_global_status_table_open_cache_overflows{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_table_open_cache_overflows{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Misses due to Overflows", + "refId": "D", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "(rate(mysql_global_status_table_open_cache_hits{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_table_open_cache_hits{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m]))/((rate(mysql_global_status_table_open_cache_hits{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_table_open_cache_hits{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m]))+(rate(mysql_global_status_table_open_cache_misses{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_table_open_cache_misses{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])))", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Table Open Cache Hit Ratio", + "refId": "E", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Table Open Cache Status", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "percentunit", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Open Tables**\n\nThe recommendation is to set the `table_open_cache_instances` to a loose correlation to virtual CPUs, keeping in mind that more instances means the cache is split more times. If you have a cache set to 500 but it has 10 instances, each cache will only have 50 cached.\n\nThe `table_definition_cache` and `table_open_cache` can be left as default as they are auto-sized MySQL 5.6 and above (ie: do not set them to any value).", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 113 + }, + "hiddenSeries": false, + "id": 42, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ + { + "title": "Server Status Variables (table_open_cache)", + "url": "http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_table_open_cache" + } + ], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_global_status_open_tables{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Open Tables", + "metric": "", + "refId": "B", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_global_variables_table_open_cache{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Table Open Cache", + "metric": "", + "refId": "C", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Open Tables", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 120 + }, + "id": 394, + "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "MySQL Table Definition Cache", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "**MySQL Table Definition Cache**\n\nThe recommendation is to set the `table_open_cache_instances` to a loose correlation to virtual CPUs, keeping in mind that more instances means the cache is split more times. If you have a cache set to 500 but it has 10 instances, each cache will only have 50 cached.\n\nThe `table_definition_cache` and `table_open_cache` can be left as default as they are auto-sized MySQL 5.6 and above (ie: do not set them to any value).", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 2, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 121 + }, + "hiddenSeries": false, + "id": 54, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sort": "avg", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ + { + "title": "Server Status Variables (table_open_cache)", + "url": "http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_table_open_cache" + } + ], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "Opened Table Definitions", + "yaxis": 2 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_global_status_open_table_definitions{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Open Table Definitions", + "metric": "", + "refId": "B", + "step": 20 + }, + { + "calculatedInterval": "2m", + "datasource": { + "uid": "$datasource" + }, + "datasourceErrors": {}, + "errors": {}, + "expr": "mysql_global_variables_table_definition_cache{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Table Definitions Cache Size", + "metric": "", + "refId": "C", + "step": 20 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "rate(mysql_global_status_opened_table_definitions{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[$__interval]) or irate(mysql_global_status_opened_table_definitions{job=~\"$job\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])", + "format": "time_series", + "interval": "1m", + "intervalFactor": 1, + "legendFormat": "Opened Table Definitions", + "refId": "A", + "step": 20 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "MySQL Table Definition Cache", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "min": 0, + "show": true + } + ], + "yaxis": { + "align": false + } + } + ], + "refresh": "10s", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(node_uname_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(node_uname_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "Prometheus", + "value": "d876eea7-4966-4d75-84fc-eeadd6e97488" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "current": {}, + "datasource": { + "uid": "$datasource" + }, + "definition": "label_values(mysql_up{cluster=\"$cluster\"},job)", + "hide": 0, + "includeAll": true, + "multi": true, + "name": "job", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(mysql_up{cluster=\"$cluster\"},job)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": {}, + "datasource": { + "uid": "$datasource" + }, + "definition": "label_values(mysql_up{job=~\"$job\"},instance)", + "hide": 0, + "includeAll": true, + "multi": true, + "name": "instance", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(mysql_up{job=~\"$job\"},instance)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "collapse": false, + "enable": true, + "hidden": false, + "notice": false, + "now": true, + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "status": "Stable", + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ], + "type": "timepicker" + }, + "timezone": "", + "title": "MySQL Exporter Quickstart and Dashboard", + "uid": "549c2bf8936f7767ea6ac47c47b00f2a-v002", + "version": 1, + "weekStart": "" +} diff --git a/monitoring/dashboards/datastore/dashboard-redis-exporter-quickstart.json b/monitoring/dashboards/datastore/dashboard-redis-exporter-quickstart.json new file mode 100644 index 000000000..97a3f7b15 --- /dev/null +++ b/monitoring/dashboards/datastore/dashboard-redis-exporter-quickstart.json @@ -0,0 +1,1420 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.2.3" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph (old)", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "A quickstart to setup the Prometheus Redis Exporter with preconfigured dashboards, alerting rules, and recording rules.", + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": 14091, + "graphTooltip": 1, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "57175393-0d42-4204-ae14-87edf79b3b1a" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 24, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "57175393-0d42-4204-ae14-87edf79b3b1a" + }, + "refId": "A" + } + ], + "title": "Performance", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "description": "Average taken across instances", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 1 + }, + "hiddenSeries": false, + "id": 18, + "legend": { + "avg": false, + "current": false, + "hideEmpty": false, + "hideZero": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "avg(irate(redis_commands_total{instance=~\"$instance\",cluster=\"$cluster\"} [1m])) by (cmd)", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{cmd}}", + "metric": "redis_command_calls_total", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Commands per second", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "description": "Average taken across instances", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 1 + }, + "hiddenSeries": false, + "id": 20, + "legend": { + "avg": false, + "current": false, + "hideEmpty": false, + "hideZero": true, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "avg(irate(redis_commands_duration_seconds_total{instance=~\"$instance\",cluster=\"$cluster\"}[1m])) by (cmd)\n /\navg(irate(redis_commands_total{instance=~\"$instance\",cluster=\"$cluster\"}[1m])) by (cmd)\n", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{ cmd }}", + "metric": "redis_command_calls_total", + "refId": "A", + "step": 240 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Command latency per second", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": { + "Hit ratio": "blue" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "decimals": 2, + "description": "Hit rate shows the percentage of key space lookups that hit a key.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 1 + }, + "hiddenSeries": false, + "id": 1, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": true, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/Target/", + "color": "#56A64B", + "dashes": true, + "fill": 0, + "hideTooltip": true, + "linewidth": 1 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "avg(irate(redis_keyspace_hits_total{instance=~\"$instance\",cluster=\"$cluster\"}[1m]) / (irate(redis_keyspace_misses_total{instance=~\"$instance\",cluster=\"$cluster\"}[1m]) + irate(redis_keyspace_hits_total{instance=~\"$instance\",cluster=\"$cluster\"}[1m]))) by (instance)", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "metric": "", + "refId": "A", + "step": 240, + "target": "" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "1", + "interval": "", + "legendFormat": "Target hit ratio for cache", + "refId": "B" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Hit ratio per instance", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percentunit", + "label": "", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "57175393-0d42-4204-ae14-87edf79b3b1a" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 22, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "57175393-0d42-4204-ae14-87edf79b3b1a" + }, + "refId": "A" + } + ], + "title": "Memory", + "type": "row" + }, + { + "aliasColors": { + "max": "#BF1B00" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "description": "Total taken across instances", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 9 + }, + "hiddenSeries": false, + "id": 7, + "legend": { + "avg": false, + "current": false, + "hideEmpty": false, + "hideZero": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/max/", + "color": "#E02F44", + "dashes": true, + "fill": 0, + "linewidth": 1 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(redis_memory_used_bytes{instance=~\"$instance\",cluster=\"$cluster\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Used Memory", + "metric": "", + "refId": "A", + "step": 240, + "target": "" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(redis_memory_max_bytes{instance=~\"$instance\",cluster=\"$cluster\"})", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Configured max memory", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(redis_memory_used_rss_bytes{instance=~\"$instance\",cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Used RSS memory", + "refId": "C" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Total Memory Usage", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "logBase": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": { + "Recommend restart redis": "red" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 9 + }, + "hiddenSeries": false, + "id": 10, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "/restart/", + "color": "#E02F44", + "dashes": true, + "fill": 0, + "linewidth": 1 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "redis_memory_fragmentation_ratio{instance=~\"$instance\",cluster=\"$cluster\"}", + "hide": false, + "interval": "", + "legendFormat": "{{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Memory fragmentation ratio per instance", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": { + "Evictions": "red", + "evicts": "#890F02", + "memcached_items_evicted_total{instance=\"172.17.0.1:9150\",job=\"prometheus\"}": "#890F02", + "reclaims": "#3F6833", + "{container=\"redis-exporter\", instance=\"redis-86cb5d76d7-fcdln:redis-exporter:redis-metrics\", job=\"default/redis\", namespace=\"default\", pod=\"redis-86cb5d76d7-fcdln\"}": "red", + "{instance=\"redis-86cb5d76d7-fcdln:redis-exporter:redis-metrics\"}": "red" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 9 + }, + "hiddenSeries": false, + "id": 8, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "reclaims", + "yaxis": 2 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "irate(redis_evicted_keys_total{instance=~\"$instance\",cluster=\"$cluster\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Key evictions per second per instance", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "57175393-0d42-4204-ae14-87edf79b3b1a" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 26, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "57175393-0d42-4204-ae14-87edf79b3b1a" + }, + "refId": "A" + } + ], + "title": "Basic activity", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "description": "Sum taken across instances", + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 17 + }, + "hiddenSeries": false, + "id": 16, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(redis_connected_clients{instance=~\"$instance\",cluster=\"$cluster\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Connected", + "refId": "A" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(redis_blocked_clients{instance=~\"$instance\",cluster=\"$cluster\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Blocked", + "refId": "B" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Connected/Blocked Clients", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": { + "db1": "yellow" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "description": "Sum taken across instances", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 17 + }, + "hiddenSeries": false, + "id": 5, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": false, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum (redis_db_keys{instance=~\"$instance\",cluster=\"$cluster\"}) by (db)", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ db }}", + "refId": "A", + "step": 240, + "target": "" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Total Items per DB", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 1, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "none", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "description": "Sum taken across instances", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 17 + }, + "hiddenSeries": false, + "id": 13, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum (redis_db_keys{instance=~\"$instance\",cluster=\"$cluster\"}) - sum (redis_db_keys_expiring{instance=~\"$instance\",cluster=\"$cluster\"})", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Not expiring", + "refId": "A", + "step": 240, + "target": "" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(redis_db_keys_expiring{instance=~\"$instance\",cluster=\"$cluster\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "Expiring", + "metric": "", + "refId": "B", + "step": 240 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Expiring vs Not-Expiring Keys", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "description": "This metric will only be non-zero if the instance is a master", + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 24 + }, + "hiddenSeries": false, + "id": 28, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(redis_connected_slaves{instance=~\"$instance\",cluster=\"$cluster\"}) by (instance)", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Connected slaves by instance", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$datasource" + }, + "description": "This metric is only exported if the instance is a slave.", + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 24 + }, + "hiddenSeries": false, + "id": 30, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.2.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "redis_master_last_io_seconds_ago{instance=~\"$instance\",cluster=\"$cluster\"}", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Time since last master connection", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [ + "prometheus", + "redis" + ], + "templating": { + "list": [ + { + "current": {}, + "definition": "label_values(node_uname_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(node_uname_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(redis_up{cluster=\"$cluster\"},instance)", + "hide": 0, + "includeAll": false, + "multi": true, + "name": "instance", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(redis_up{cluster=\"$cluster\"},instance)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": { + "selected": true, + "text": "Prometheus", + "value": "57175393-0d42-4204-ae14-87edf79b3b1a" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "datasource", + "options": [], + "query": "prometheus", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + } + ] + }, + "time": { + "from": "now-12h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "browser", + "title": "Redis Exporter Quickstart and Dashboard", + "uid": "bRd48yKMdd-v002", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/monitoring/dashboards/infrastructure/mojaloop-prometheus-stats.json b/monitoring/dashboards/infrastructure/mojaloop-prometheus-stats.json new file mode 100644 index 000000000..6a4238013 --- /dev/null +++ b/monitoring/dashboards/infrastructure/mojaloop-prometheus-stats.json @@ -0,0 +1,284 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.2.3" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Show no. of time series being ingested by prometheus for each job", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Value" + } + ] + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sort_desc( \n count({__name__=~\".+\"}) by (job)\n )", + "format": "table", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A" + } + ], + "title": "Series count by job", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows no. of time series of each metric for the selected job variable. ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 3, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Value" + } + ] + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sort_desc( \n count({job=\"${job}\"}) by (__name__)\n )", + "format": "table", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A" + } + ], + "title": "Series count by name for selected job", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": {} + } + } + ], + "type": "table" + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(job)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "job", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(job)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Mojaloop - Prometheus stats", + "uid": "ffa54072-c83a-4be0-a47c-01d2a004b57-v001", + "version": 1, + "weekStart": "" + } + diff --git a/monitoring/dashboards/infrastructure/prometheus-remote-write.json b/monitoring/dashboards/infrastructure/prometheus-remote-write.json new file mode 100644 index 000000000..41137d5e4 --- /dev/null +++ b/monitoring/dashboards/infrastructure/prometheus-remote-write.json @@ -0,0 +1,1662 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.2.3" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "text", + "name": "Text", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": null, + "links": [ + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": false, + "title": "Monitoring remote write blog", + "tooltip": "", + "type": "link", + "url": "https://grafana.com/blog/2021/04/12/how-to-troubleshoot-remote-write-issues-in-prometheus/" + } + ], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 4, + "panels": [], + "title": "Headline", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 1, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "# Goal\n1. indicate problems with prometheus remote write\n2. performance metrics (request rate, latencies) related to remote write \n\n# Links\n- https://grafana.com/blog/2021/04/12/how-to-troubleshoot-remote-write-issues-in-prometheus/\n\n# Goal 1\nGoal 1 requires us to ensure \n1. remote write is not falling behind i.e. samples are not lost\n2. remote write should not have too many retries to the server\n3. remote write should not be operating at max capacity \n4. if remote write lost data, how much was it and when did it happen!\n\n\n# Goal 2\nshows general performance metrics\n1. request rate to remote server\n2. latency percentiles to remote server ", + "mode": "markdown" + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "", + "instant": false, + "range": true, + "refId": "A" + } + ], + "title": "Instructions", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 5, + "panels": [], + "title": "Goal 1.1: Remote write should not fall behind", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows the amount of time after which samples are pushed to remote server after reading from WAL. \n- Expected range should be 3-10 seconds\n- increasing delay time means remote write is falling behind and will lead to data loss", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "dashed+area" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 10 + }, + "id": 2, + "options": { + "legend": { + "calcs": [ + "last", + "mean" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "(\n prometheus_remote_storage_highest_timestamp_in_seconds{cluster=~\"$cluster\", instance=~\"$instance\"} \n- \n ignoring(remote_name, url) group_right(instance) (prometheus_remote_storage_queue_highest_sent_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\"} != 0)\n)", + "instant": false, + "legendFormat": "{{pod}}", + "range": true, + "refId": "A" + } + ], + "title": "Remote write sending delay", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows the amount of time after which samples are being read by TSDB WAL watcher. The delay may increase in case of prometheus restarts (WAL replay). Considerable increase (20sec +) suggests an outage and possible data loss. \n\n- Expected delay should be less than 20 seconds\n- increasing delay time means remote write is falling behind and will lead to data loss", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "dashed+area" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 10 + }, + "id": 3, + "options": { + "legend": { + "calcs": [ + "last", + "mean" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "-(prometheus_wal_watcher_current_segment{cluster=~\"$cluster\", instance=~\"$instance\"}\n - ignoring(consumer) group_left\nprometheus_tsdb_wal_segment_current{cluster=~\"$cluster\", instance=~\"$instance\"})\n", + "instant": false, + "legendFormat": "{{consumer}}", + "range": true, + "refId": "A" + } + ], + "title": "WAL watcher delay", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 6, + "panels": [], + "title": "Goal 1.2: Remote write data rates", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "No. of samples/metadata sent per second. \nShould show steady activity. Reduced activity should be coupled with increase in error rate or less timeseries data being scrapped. ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "samples/sec" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 19 + }, + "id": 7, + "options": { + "legend": { + "calcs": [ + "last", + "mean" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(prometheus_remote_storage_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])", + "hide": false, + "instant": false, + "legendFormat": "{{remote_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Request rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "No. of samples/metadata retried per second. \n\nIdeally zero. It indicates problems with the network or remote storage endpoint if there is a steady high rate for this metric. That may mean we need to reduce throughput of remote write to reduce load on the other end.\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "dashed+area" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "samples/sec" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 19 + }, + "id": 8, + "options": { + "legend": { + "calcs": [ + "last", + "mean" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(prometheus_remote_storage_samples_retried_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])", + "hide": false, + "instant": false, + "legendFormat": "{{remote_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Retry rate", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 13, + "panels": [], + "title": "Goal 1.3: Remote write should not operate at max capacity", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "No. of shards currently being used to send data to remote write endpoinds. This number should be less than max shards. A number near max shards mean that we may be throttled in case of any data increase", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 28 + }, + "id": 14, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "prometheus_remote_storage_shards{cluster=~\"$cluster\", instance=~\"$instance\"}", + "instant": false, + "legendFormat": "{{remote_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Remote write current shards", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "No. of shards estimated by algorithm to push data to remote endpoints ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 28 + }, + "id": 16, + "options": { + "legend": { + "calcs": [ + "last", + "mean" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "prometheus_remote_storage_shards_desired{cluster=~\"$cluster\", instance=~\"$instance\"}", + "instant": false, + "legendFormat": "{{remote_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Remote write desired shards", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Prometheus remote write min and max shards as per configuration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 28 + }, + "id": 15, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "prometheus_remote_storage_shards_min{cluster=~\"$cluster\", instance=~\"$instance\"}", + "instant": false, + "legendFormat": "{{remote_name}} - min shards", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "prometheus_remote_storage_shards_max{cluster=~\"$cluster\", instance=~\"$instance\"}", + "hide": false, + "instant": false, + "legendFormat": "{{remote_name}} - max shards", + "range": true, + "refId": "B" + } + ], + "title": "Min - Max Shards", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 36 + }, + "id": 17, + "panels": [], + "title": "Goal 1.4: Remote write data loss quantization", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "samples/sec" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 37 + }, + "id": 18, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(prometheus_remote_storage_samples_dropped_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])", + "instant": false, + "legendFormat": "{{remote_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Dropped samples rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "samples/sec" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 6, + "y": 37 + }, + "id": 19, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(prometheus_remote_storage_samples_failed_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])", + "instant": false, + "legendFormat": "{{remote_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Failed samples rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "samples/sec" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 12, + "y": 37 + }, + "id": 20, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(prometheus_remote_storage_samples_retried_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])", + "instant": false, + "legendFormat": "{{remote_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Retried samples rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Rate of enqueue operation failure because a shard’s queue was full", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "attempt/sec" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 18, + "y": 37 + }, + "id": 21, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(prometheus_remote_storage_enqueue_retries_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])", + "instant": false, + "legendFormat": "{{remote_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Enqueue attempt rate", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 42 + }, + "id": 9, + "panels": [], + "title": "Remote write latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "dashed+area" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 0, + "y": 43 + }, + "id": 10, + "options": { + "legend": { + "calcs": [ + "last", + "mean" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum(rate(prometheus_remote_storage_sent_batch_duration_seconds_bucket{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])) by (le,remote_name))", + "instant": false, + "legendFormat": "{{remote_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Remote write request latency - p99", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "dashed+area" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 8, + "y": 43 + }, + "id": 11, + "options": { + "legend": { + "calcs": [ + "last", + "mean" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.90, sum(rate(prometheus_remote_storage_sent_batch_duration_seconds_bucket{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])) by (le,remote_name))", + "instant": false, + "legendFormat": "{{remote_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Remote write request latency - p90", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "dashed+area" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 16, + "y": 43 + }, + "id": 12, + "options": { + "legend": { + "calcs": [ + "last", + "mean" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.5, sum(rate(prometheus_remote_storage_sent_batch_duration_seconds_bucket{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])) by (le,remote_name))", + "instant": false, + "legendFormat": "{{remote_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Remote write request latency - p50", + "type": "timeseries" + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(prometheus_build_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(prometheus_build_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(prometheus_build_info{cluster=\"$cluster\"},instance)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "instance", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(prometheus_build_info{cluster=\"$cluster\"},instance)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Mojaloop - Prometheus Remote write", + "uid": "d2a65853-b3b1-47bf-b728-cc727b209e5b", + "version": 1, + "weekStart": "" + } + \ No newline at end of file diff --git a/monitoring/dashboards/kubernetes/kubernetes-monitoring-dashboard.json b/monitoring/dashboards/kubernetes/kubernetes-monitoring-dashboard.json index 9e50e2ea8..b7a139ddc 100644 --- a/monitoring/dashboards/kubernetes/kubernetes-monitoring-dashboard.json +++ b/monitoring/dashboards/kubernetes/kubernetes-monitoring-dashboard.json @@ -23,12 +23,6 @@ "name": "Grafana", "version": "10.2.3" }, - { - "type": "panel", - "id": "graph", - "name": "Graph (old)", - "version": "" - }, { "type": "datasource", "id": "prometheus", @@ -74,254 +68,6 @@ "links": [], "liveNow": false, "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "dashed" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 46, - "options": { - "legend": { - "calcs": [ - "last", - "min", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Last", - "sortDesc": true - }, - "tooltip": { - "mode": "single", - "sort": "asc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "editorMode": "code", - "exemplar": false, - "expr": "sum(kubelet_volume_stats_used_bytes{kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}) by (persistentvolumeclaim) \n/ \nsum(kubelet_volume_stats_capacity_bytes{kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}) by (persistentvolumeclaim) \n* 100", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "PVC utilization", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 10 - }, - "id": 33, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "refId": "A" - } - ], - "title": "Network I/O pressure", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "decimals": 2, - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "grid": {}, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 11 - }, - "height": "200px", - "hiddenSeries": false, - "id": 32, - "legend": { - "alignAsTable": false, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": false, - "sideWidth": 200, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.2.3", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum (rate (container_network_receive_bytes_total{kubernetes_io_hostname=~\"^$Node$\"}[1m]))", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "Received", - "metric": "network", - "refId": "A", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "- sum (rate (container_network_transmit_bytes_total{kubernetes_io_hostname=~\"^$Node$\"}[1m]))", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "Sent", - "metric": "network", - "refId": "B", - "step": 10 - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Network I/O pressure", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "logBase": 1, - "show": true - }, - { - "format": "Bps", - "logBase": 1, - "show": false - } - ], - "yaxis": { - "align": false - } - }, { "collapsed": false, "datasource": { @@ -332,7 +78,7 @@ "h": 1, "w": 24, "x": 0, - "y": 17 + "y": 0 }, "id": 34, "panels": [], @@ -393,10 +139,10 @@ "overrides": [] }, "gridPos": { - "h": 5, + "h": 7, "w": 8, "x": 0, - "y": 18 + "y": 1 }, "id": 4, "links": [], @@ -479,10 +225,10 @@ "overrides": [] }, "gridPos": { - "h": 5, + "h": 7, "w": 8, "x": 8, - "y": 18 + "y": 1 }, "id": 6, "links": [], @@ -565,10 +311,10 @@ "overrides": [] }, "gridPos": { - "h": 5, + "h": 7, "w": 8, "x": 16, - "y": 18 + "y": 1 }, "id": 7, "links": [], @@ -650,7 +396,7 @@ "h": 3, "w": 4, "x": 0, - "y": 23 + "y": 8 }, "id": 9, "links": [], @@ -730,7 +476,7 @@ "h": 3, "w": 4, "x": 4, - "y": 23 + "y": 8 }, "id": 10, "links": [], @@ -810,7 +556,7 @@ "h": 3, "w": 4, "x": 8, - "y": 23 + "y": 8 }, "id": 11, "links": [], @@ -890,7 +636,7 @@ "h": 3, "w": 4, "x": 12, - "y": 23 + "y": 8 }, "id": 12, "links": [], @@ -970,7 +716,7 @@ "h": 3, "w": 4, "x": 16, - "y": 23 + "y": 8 }, "id": 13, "links": [], @@ -1050,7 +796,7 @@ "h": 3, "w": 4, "x": 20, - "y": 23 + "y": 8 }, "id": 14, "links": [], @@ -1088,735 +834,267 @@ "type": "stat" }, { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, + "collapsed": true, "gridPos": { "h": 1, "w": 24, "x": 0, - "y": 26 + "y": 11 }, - "id": 35, - "panels": [], - "targets": [ + "id": 47, + "panels": [ { "datasource": { "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" + "uid": "${DS_PROMETHEUS}" }, - "refId": "A" + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "dashed" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 46, + "options": { + "legend": { + "calcs": [ + "last", + "min", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Last", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "asc" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(kubelet_volume_stats_used_bytes{kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}) by (persistentvolumeclaim) \n/ \nsum(kubelet_volume_stats_capacity_bytes{kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}) by (persistentvolumeclaim) \n* 100", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "PVC utilisation", + "type": "timeseries" } ], - "title": "Pods CPU usage", + "title": "PVC utilisation", "type": "row" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, + "collapsed": true, "datasource": { "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "decimals": 3, - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] + "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" }, - "fill": 0, - "fillGradient": 0, - "grid": {}, "gridPos": { - "h": 7, + "h": 1, "w": 24, "x": 0, - "y": 27 - }, - "height": "", - "hiddenSeries": false, - "id": 17, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true + "y": 12 }, - "percentage": false, - "pluginVersion": "10.2.3", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ + "id": 33, + "panels": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "editorMode": "code", - "expr": "sum (rate (container_cpu_usage_seconds_total{image!=\"\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (pod)", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "{{ pod }}", - "metric": "container_cpu", - "range": true, - "refId": "A", - "step": 10 + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 32, + "links": [], + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate(container_network_receive_bytes_total{node=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m]))", + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "Received", + "metric": "network", + "range": true, + "refId": "A", + "step": 10 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "- sum (rate (container_network_transmit_bytes_total{node=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m]))", + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "Sent", + "metric": "network", + "range": true, + "refId": "B", + "step": 10 + } + ], + "title": "Network I/O pressure", + "type": "timeseries" } ], - "thresholds": [], - "timeRegions": [], - "title": "Pods CPU usage (1m avg)", - "tooltip": { - "msResolution": true, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:112", - "format": "none", - "label": "cores", - "logBase": 1, - "show": true - }, + "targets": [ { - "$$hashKey": "object:113", - "format": "short", - "logBase": 1, - "show": false + "datasource": { + "type": "prometheus", + "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" + }, + "refId": "A" } ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 34 - }, - "id": 39, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "refId": "A" - } - ], - "title": "Pods memory usage", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "decimals": 2, - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "grid": {}, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 35 - }, - "hiddenSeries": false, - "id": 25, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sideWidth": 200, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.2.3", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "editorMode": "code", - "expr": "sum (container_memory_working_set_bytes{image!=\"\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}) by (pod)", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "{{ pod }}", - "metric": "container_memory_usage:sort_desc", - "range": true, - "refId": "A", - "step": 10 - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Pods memory usage", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:181", - "format": "bytes", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:182", - "format": "short", - "logBase": 1, - "show": false - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 42 - }, - "id": 43, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "refId": "A" - } - ], - "title": "Pods network I/O", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "decimals": 2, - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "grid": {}, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 43 - }, - "hiddenSeries": false, - "id": 16, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sideWidth": 200, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.2.3", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "editorMode": "code", - "expr": "sum (rate (container_network_receive_bytes_total{image!=\"\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (pod)", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "-> {{ pod }}", - "metric": "network", - "range": true, - "refId": "A", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "- sum (rate (container_network_transmit_bytes_total{image!=\"\",name=~\"^k8s_.*\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (pod)", - "hide": true, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "<- {{ pod }}", - "metric": "network", - "refId": "B", - "step": 10 - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Pods network I/O (1m avg)", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": false - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": true, - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 50 - }, - "id": 37, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "decimals": 3, - "editable": true, - "error": false, - "fill": 0, - "fillGradient": 0, - "grid": {}, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 49 - }, - "height": "", - "hiddenSeries": false, - "id": 24, - "isNew": true, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum (rate (container_cpu_usage_seconds_total{image!=\"\",name=~\"^k8s_.*\",container!=\"POD\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (container, pod)", - "hide": false, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "pod: {{ pod }} | {{ container }}", - "metric": "container_cpu", - "refId": "A", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum (rate (container_cpu_usage_seconds_total{image!=\"\",name!~\"^k8s_.*\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (kubernetes_io_hostname, name, image)", - "hide": false, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "docker: {{ kubernetes_io_hostname }} | {{ image }} ({{ name }})", - "metric": "container_cpu", - "refId": "B", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum (rate (container_cpu_usage_seconds_total{rkt_container_name!=\"\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (kubernetes_io_hostname, rkt_container_name)", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "rkt: {{ kubernetes_io_hostname }} | {{ rkt_container_name }}", - "metric": "container_cpu", - "refId": "C", - "step": 10 - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Containers CPU usage (1m avg)", - "tooltip": { - "msResolution": true, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:337", - "format": "none", - "label": "cores", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:338", - "format": "short", - "logBase": 1, - "show": false - } - ], - "yaxis": { - "align": false - } - } - ], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "refId": "A" - } - ], - "title": "Containers CPU usage", - "type": "row" - }, - { - "collapsed": true, - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 51 - }, - "id": 41, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "decimals": 2, - "editable": true, - "error": false, - "fill": 0, - "fillGradient": 0, - "grid": {}, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 57 - }, - "hiddenSeries": false, - "id": 27, - "isNew": true, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sideWidth": 200, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum (container_memory_working_set_bytes{image!=\"\",name=~\"^k8s_.*\",container!=\"POD\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}) by (container, pod)", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "pod: {{ pod }} | {{ container }}", - "metric": "container_memory_usage:sort_desc", - "refId": "A", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum (container_memory_working_set_bytes{image!=\"\",name!~\"^k8s_.*\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}) by (kubernetes_io_hostname, name, image)", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "docker: {{ kubernetes_io_hostname }} | {{ image }} ({{ name }})", - "metric": "container_memory_usage:sort_desc", - "refId": "B", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum (container_memory_working_set_bytes{rkt_container_name!=\"\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}) by (kubernetes_io_hostname, rkt_container_name)", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "rkt: {{ kubernetes_io_hostname }} | {{ rkt_container_name }}", - "metric": "container_memory_usage:sort_desc", - "refId": "C", - "step": 10 - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Containers memory usage", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:406", - "format": "bytes", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:407", - "format": "short", - "logBase": 1, - "show": false - } - ], - "yaxis": { - "align": false - } - } - ], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "refId": "A" - } - ], - "title": "Containers memory usage", - "type": "row" + "title": "Network I/O pressure", + "type": "row" }, { "collapsed": true, @@ -1828,179 +1106,114 @@ "h": 1, "w": 24, "x": 0, - "y": 52 + "y": 13 }, - "id": 44, + "id": 35, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "decimals": 2, - "editable": true, - "error": false, - "fill": 1, - "fillGradient": 0, - "grid": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "cores", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 65 + "y": 14 }, - "hiddenSeries": false, - "id": 30, - "isNew": true, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sideWidth": 200, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, + "id": 17, "links": [], - "nullPointMode": "connected", "options": { - "dataLinks": [] + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (rate (container_network_receive_bytes_total{image!=\"\",name=~\"^k8s_.*\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (container, pod)", - "hide": false, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "-> pod: {{ pod }} | {{ container }}", - "metric": "network", - "refId": "B", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "- sum (rate (container_network_transmit_bytes_total{image!=\"\",name=~\"^k8s_.*\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (container, pod)", - "hide": false, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "<- pod: {{ pod }} | {{ container }}", - "metric": "network", - "refId": "D", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum (rate (container_network_receive_bytes_total{image!=\"\",name!~\"^k8s_.*\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (kubernetes_io_hostname, name, image)", - "hide": false, + "editorMode": "code", + "expr": "sum (rate (container_cpu_usage_seconds_total{image!=\"\",node=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (pod)", "interval": "10s", "intervalFactor": 1, - "legendFormat": "-> docker: {{ kubernetes_io_hostname }} | {{ image }} ({{ name }})", - "metric": "network", + "legendFormat": "{{ pod }}", + "metric": "container_cpu", + "range": true, "refId": "A", "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "- sum (rate (container_network_transmit_bytes_total{image!=\"\",name!~\"^k8s_.*\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (kubernetes_io_hostname, name, image)", - "hide": false, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "<- docker: {{ kubernetes_io_hostname }} | {{ image }} ({{ name }})", - "metric": "network", - "refId": "C", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum (rate (container_network_transmit_bytes_total{rkt_container_name!=\"\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (kubernetes_io_hostname, rkt_container_name)", - "hide": false, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "-> rkt: {{ kubernetes_io_hostname }} | {{ rkt_container_name }}", - "metric": "network", - "refId": "E", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "- sum (rate (container_network_transmit_bytes_total{rkt_container_name!=\"\",kubernetes_io_hostname=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (kubernetes_io_hostname, rkt_container_name)", - "hide": false, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "<- rkt: {{ kubernetes_io_hostname }} | {{ rkt_container_name }}", - "metric": "network", - "refId": "F", - "step": 10 - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Containers network I/O (1m avg)", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": false } ], - "yaxis": { - "align": false - } + "title": "Pods CPU usage (1m avg)", + "type": "timeseries" } ], "targets": [ @@ -2012,7 +1225,7 @@ "refId": "A" } ], - "title": "Containers network I/O", + "title": "Pods CPU usage", "type": "row" }, { @@ -2025,110 +1238,115 @@ "h": 1, "w": 24, "x": 0, - "y": 53 + "y": 14 }, - "id": 36, + "id": 39, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "decimals": 3, - "editable": true, - "error": false, - "fill": 0, - "fillGradient": 0, - "grid": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 26 - }, - "height": "", - "hiddenSeries": false, - "id": 23, - "isNew": true, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true + "y": 15 }, - "lines": true, - "linewidth": 2, + "id": 25, "links": [], - "nullPointMode": "connected", "options": { - "dataLinks": [] + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (rate (container_cpu_usage_seconds_total{systemd_service_name!=\"\",kubernetes_io_hostname=~\"^$Node$\"}[1m])) by (systemd_service_name)", - "hide": false, + "editorMode": "code", + "expr": "sum (container_memory_working_set_bytes{image!=\"\",node=~\"^$Node$\",namespace=~\"^$namespace$\"}) by (pod)", "interval": "10s", "intervalFactor": 1, - "legendFormat": "{{ systemd_service_name }}", - "metric": "container_cpu", + "legendFormat": "{{ pod }}", + "metric": "container_memory_usage:sort_desc", + "range": true, "refId": "A", "step": 10 } ], - "thresholds": [], - "timeRegions": [], - "title": "System services CPU usage (1m avg)", - "tooltip": { - "msResolution": true, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": "cores", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": false - } - ], - "yaxis": { - "align": false - } + "title": "Pods memory usage", + "type": "timeseries" } ], "targets": [ @@ -2140,7 +1358,7 @@ "refId": "A" } ], - "title": "System services CPU usage", + "title": "Pods memory usage", "type": "row" }, { @@ -2153,237 +1371,131 @@ "h": 1, "w": 24, "x": 0, - "y": 54 + "y": 15 }, - "id": 40, + "id": 43, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "decimals": 2, - "editable": true, - "error": false, - "fill": 0, - "fillGradient": 0, - "grid": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 37 - }, - "hiddenSeries": false, - "id": 26, - "isNew": true, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sideWidth": 200, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true + "y": 16 }, - "lines": true, - "linewidth": 2, + "id": 16, "links": [], - "nullPointMode": "connected", "options": { - "dataLinks": [] + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (container_memory_working_set_bytes{systemd_service_name!=\"\",kubernetes_io_hostname=~\"^$Node$\"}) by (systemd_service_name)", + "editorMode": "code", + "expr": "sum (rate (container_network_receive_bytes_total{image!=\"\",node=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (pod)", "interval": "10s", "intervalFactor": 1, - "legendFormat": "{{ systemd_service_name }}", - "metric": "container_memory_usage:sort_desc", + "legendFormat": "sent - {{ pod }}", + "metric": "network", + "range": true, "refId": "A", "step": 10 - } - ], - "thresholds": [], - "timeRegions": [], - "title": "System services memory usage", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "logBase": 1, - "show": true }, - { - "format": "short", - "logBase": 1, - "show": false - } - ], - "yaxis": { - "align": false - } - } - ], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "refId": "A" - } - ], - "title": "System services memory usage", - "type": "row" - }, - { - "collapsed": true, - "datasource": { - "type": "prometheus", - "uid": "e8b0578a-b992-495d-b51d-ea527c0c118b" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 55 - }, - "id": 38, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "decimals": 3, - "editable": true, - "error": false, - "fill": 0, - "fillGradient": 0, - "grid": {}, - "gridPos": { - "h": 14, - "w": 24, - "x": 0, - "y": 54 - }, - "hiddenSeries": false, - "id": 20, - "isNew": true, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (rate (container_cpu_usage_seconds_total{id!=\"/\",kubernetes_io_hostname=~\"^$Node$\"}[1m])) by (id)", + "editorMode": "code", + "expr": "- sum (rate (container_network_transmit_bytes_total{image!=\"\",node=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (pod)", "hide": false, "interval": "10s", "intervalFactor": 1, - "legendFormat": "{{ id }}", - "metric": "container_cpu", - "refId": "A", + "legendFormat": "received - {{ pod }}", + "metric": "network", + "range": true, + "refId": "B", "step": 10 } ], - "thresholds": [], - "timeRegions": [], - "title": "All processes CPU usage (1m avg)", - "tooltip": { - "msResolution": true, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:254", - "format": "none", - "label": "cores", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:255", - "format": "short", - "logBase": 1, - "show": false - } - ], - "yaxis": { - "align": false - } + "title": "Pods network I/O (1m avg)", + "type": "timeseries" } ], "targets": [ @@ -2395,7 +1507,7 @@ "refId": "A" } ], - "title": "All processes CPU usage", + "title": "Pods network I/O", "type": "row" }, { @@ -2408,108 +1520,112 @@ "h": 1, "w": 24, "x": 0, - "y": 56 + "y": 16 }, - "id": 42, + "id": 37, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "decimals": 2, - "editable": true, - "error": false, - "fill": 0, - "fillGradient": 0, - "grid": {}, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "cores", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, "gridPos": { - "h": 14, + "h": 7, "w": 24, "x": 0, - "y": 55 + "y": 17 }, - "hiddenSeries": false, - "id": 28, - "isNew": true, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "sideWidth": 200, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, + "id": 24, "links": [], - "nullPointMode": "connected", "options": { - "dataLinks": [] + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (container_memory_working_set_bytes{id!=\"/\",kubernetes_io_hostname=~\"^$Node$\"}) by (id)", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "{{ id }}", - "metric": "container_memory_usage:sort_desc", - "refId": "A", - "step": 10 - } - ], - "thresholds": [], - "timeRegions": [], - "title": "All processes memory usage", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": false + "editorMode": "code", + "expr": "sum (rate (container_cpu_usage_seconds_total{image!=\"\",container!=\"\", node=~\"^$Node$\",namespace=~\"^$namespace$\"}[1m])) by (pod, container)\n", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" } ], - "yaxis": { - "align": false - } + "title": "Containers CPU usage (1m avg)", + "type": "timeseries" } ], "targets": [ @@ -2521,7 +1637,7 @@ "refId": "A" } ], - "title": "All processes memory usage", + "title": "Containers CPU usage", "type": "row" }, { @@ -2534,127 +1650,112 @@ "h": 1, "w": 24, "x": 0, - "y": 57 + "y": 17 }, - "id": 45, + "id": 41, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "decimals": 2, - "editable": true, - "error": false, "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { - "h": 14, + "h": 7, "w": 24, "x": 0, - "y": 58 + "y": 25 }, - "hiddenSeries": false, - "id": 29, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "sideWidth": 200, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, + "id": 27, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, - "percentage": false, "pluginVersion": "10.2.3", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (rate (container_network_receive_bytes_total{id!=\"/\",kubernetes_io_hostname=~\"^$Node$\"}[1m])) by (id)", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "-> {{ id }}", - "metric": "network", - "refId": "A", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "- sum (rate (container_network_transmit_bytes_total{id!=\"/\",kubernetes_io_hostname=~\"^$Node$\"}[1m])) by (id)", - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "<- {{ id }}", - "metric": "network", - "refId": "B", - "step": 10 - } - ], - "thresholds": [], - "timeRegions": [], - "title": "All processes network I/O (1m avg)", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": false + "editorMode": "code", + "expr": "sum (container_memory_working_set_bytes{image!=\"\", container!=\"\",node=~\"^$Node$\",namespace=~\"^$namespace$\"}) by (pod, container)", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" } ], - "yaxis": { - "align": false - } + "title": "Containers memory usage", + "type": "timeseries" } ], "targets": [ @@ -2666,11 +1767,11 @@ "refId": "A" } ], - "title": "All processes network I/O", + "title": "Containers memory usage", "type": "row" } ], - "refresh": "10s", + "refresh": "", "schemaVersion": 39, "tags": [ "kubernetes" @@ -2726,7 +1827,7 @@ ] }, "time": { - "from": "now-1h", + "from": "now-5m", "to": "now" }, "timepicker": { @@ -2756,7 +1857,7 @@ }, "timezone": "browser", "title": "Kubernetes Monitoring Dashboard", - "uid": "msqzbWjWkr", - "version": 1, + "uid": "msqzbWjWkr-09", + "version": 2, "weekStart": "" } diff --git a/monitoring/dashboards/messaging/dashboard-Kafka - Topic Overview.json b/monitoring/dashboards/messaging/dashboard-Kafka - Topic Overview.json deleted file mode 100644 index 31e425b89..000000000 --- a/monitoring/dashboards/messaging/dashboard-Kafka - Topic Overview.json +++ /dev/null @@ -1,632 +0,0 @@ -{ - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "6.4.2" - }, - { - "type": "panel", - "id": "graph", - "name": "Graph", - "version": "" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "1.0.0" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "description": "Kafka resource usage and throughput", - "editable": true, - "gnetId": 7589, - "graphTooltip": 0, - "id": null, - "iteration": 1588250324268, - "links": [], - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 10, - "x": 0, - "y": 0 - }, - "id": 14, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": false, - "rightSide": false, - "show": true, - "sideWidth": 480, - "sort": "max", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(rate(kafka_topic_partition_current_offset{instance=\"$instance\", topic=~\"$topic\"}[1m])) by (topic)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{topic}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Message in per second", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 10, - "x": 10, - "y": 0 - }, - "id": 12, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": false, - "rightSide": false, - "show": true, - "sideWidth": 480, - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(kafka_consumergroup_lag{instance=\"$instance\",topic=~\"$topic\"}) by (consumergroup, topic) ", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{consumergroup}} (topic: {{topic}})", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Lag by Consumer Group", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 10, - "x": 0, - "y": 10 - }, - "id": 16, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": false, - "rightSide": false, - "show": true, - "sideWidth": 480, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(delta(kafka_topic_partition_current_offset{instance=~'$instance', topic=~\"$topic\"}[5m])/5) by (topic)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{topic}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Message in per minute", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 10, - "x": 10, - "y": 10 - }, - "id": 18, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": false, - "rightSide": false, - "show": true, - "sideWidth": 480, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(delta(kafka_consumergroup_current_offset{instance=~'$instance',topic=~\"$topic\"}[1m])/5) by (consumergroup, topic)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{consumergroup}} (topic: {{topic}})", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Message consume per minute", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 20, - "x": 0, - "y": 20 - }, - "id": 8, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sideWidth": 420, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum by(topic) (kafka_topic_partitions{instance=\"$instance\",topic=~\"$topic\"})", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{topic}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Partitions per Topic", - "tooltip": { - "shared": false, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "series", - "name": null, - "show": false, - "values": [ - "current" - ] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": "5s", - "schemaVersion": 20, - "style": "dark", - "tags": [ - "Kafka" - ], - "templating": { - "list": [ - { - "allValue": null, - "current": {}, - "datasource": "${DS_PROMETHEUS}", - "definition": "", - "hide": 0, - "includeAll": false, - "label": "Job", - "multi": false, - "name": "job", - "options": [], - "query": "label_values(kafka_consumergroup_current_offset, job)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "${DS_PROMETHEUS}", - "definition": "", - "hide": 0, - "includeAll": false, - "label": "Instance", - "multi": false, - "name": "instance", - "options": [], - "query": "label_values(kafka_consumergroup_current_offset{job=~\"$job\"}, instance)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "${DS_PROMETHEUS}", - "definition": "", - "hide": 0, - "includeAll": true, - "label": "Topic", - "multi": true, - "name": "topic", - "options": [], - "query": "label_values(kafka_topic_partition_current_offset{instance='$instance',topic!='__consumer_offsets',topic!='--kafka'}, topic)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "topic", - "type": "query", - "useTags": false - } - ] - }, - "time": { - "from": "now-24h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "browser", - "title": "Kafka - Topic Overview", - "uid": "jwPKIsniow", - "version": 2 -} diff --git a/monitoring/dashboards/messaging/dashboard-Kafka - Cluster Overview.json b/monitoring/dashboards/messaging/dashboard-kafka-cluster-overview.json similarity index 100% rename from monitoring/dashboards/messaging/dashboard-Kafka - Cluster Overview.json rename to monitoring/dashboards/messaging/dashboard-kafka-cluster-overview.json diff --git a/monitoring/dashboards/messaging/dashboard-kafka-topic-overview.json b/monitoring/dashboards/messaging/dashboard-kafka-topic-overview.json new file mode 100644 index 000000000..eb5c7597c --- /dev/null +++ b/monitoring/dashboards/messaging/dashboard-kafka-topic-overview.json @@ -0,0 +1,765 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "panel", + "id": "barchart", + "name": "Bar chart", + "version": "" + }, + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.2.3" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Kafka resource usage and throughput", + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": 7589, + "graphTooltip": 0, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 22, + "title": "Lag", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 12, + "links": [], + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "width": 480 + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(kafka_consumergroup_lag{instance=\"$instance\",topic=~\"$topic\",cluster=~\"$cluster\"}) by (consumergroup, topic) ", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "__auto", + "refId": "A" + } + ], + "title": "Lag by Consumer Group", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 6 + }, + "id": 23, + "panels": [], + "title": "Message rate ", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "mpm" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 7 + }, + "id": 16, + "links": [], + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 480 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(delta(kafka_topic_partition_current_offset{instance=~'$instance', topic=~\"$topic\",cluster=~\"$cluster\"}[5m])/5) by (topic)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{topic}}", + "range": true, + "refId": "A" + } + ], + "title": "Message in per minute", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "mpm" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 7 + }, + "id": 18, + "links": [], + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 480 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(delta(kafka_consumergroup_current_offset{instance=~'$instance',topic=~\"$topic\",cluster=~\"$cluster\"}[5m])/5) by (consumergroup, topic)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{topic}}/{{consumergroup}}", + "range": true, + "refId": "A" + } + ], + "title": "Message consume per minute", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 21, + "panels": [], + "title": "Storage", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Gives an idea about the storage requirements for each topic", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 19, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "none", + "tooltip": { + "mode": "single", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 0 + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(kafka_log_log_size{topic=~\"$topic\",cluster=~\"$cluster\"}) by (topic)", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A" + } + ], + "title": "Log size by topic", + "type": "barchart" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 24, + "panels": [], + "title": "Partitions", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 8, + "links": [], + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "none", + "tooltip": { + "mode": "single", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 0 + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by(topic) (kafka_topic_partitions{instance=\"$instance\",topic=~\"$topic\",cluster=~\"$cluster\"})", + "format": "time_series", + "instant": true, + "intervalFactor": 1, + "legendFormat": "{{topic}}", + "range": false, + "refId": "A" + } + ], + "title": "Partitions per Topic", + "type": "barchart" + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [ + "Kafka" + ], + "templating": { + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(node_uname_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(node_uname_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "", + "hide": 0, + "includeAll": false, + "label": "Job", + "multi": false, + "name": "job", + "options": [], + "query": "label_values(kafka_consumergroup_current_offset, job)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "", + "hide": 0, + "includeAll": false, + "label": "Instance", + "multi": false, + "name": "instance", + "options": [], + "query": "label_values(kafka_consumergroup_current_offset{job=~\"$job\"}, instance)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Topic", + "multi": true, + "name": "topic", + "options": [], + "query": "label_values(kafka_topic_partition_current_offset{instance='$instance',topic!='__consumer_offsets',topic!='--kafka'}, topic)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "browser", + "title": "Kafka - Topic Overview", + "uid": "jwPKIsniow-v006", + "version": 1, + "weekStart": "" +} diff --git a/monitoring/dashboards/mojaloop/dashboard-NodeJSApplication.json b/monitoring/dashboards/mojaloop/dashboard-NodeJSApplication.json index 3216fcce8..5a9d36441 100644 --- a/monitoring/dashboards/mojaloop/dashboard-NodeJSApplication.json +++ b/monitoring/dashboards/mojaloop/dashboard-NodeJSApplication.json @@ -15,7 +15,7 @@ "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "10.0.2" + "version": "10.2.3" }, { "type": "datasource", @@ -85,6 +85,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -98,6 +99,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -168,7 +170,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(${prefix}_process_resident_memory_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}) by (instance, kubernetes_pod_name, serviceName) ", + "expr": "sum(${prefix}_process_resident_memory_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}) by (instance, kubernetes_pod_name, serviceName) ", "format": "time_series", "intervalFactor": 1, "legendFormat": "Process Memory - {{instance}} {{serviceName}} {{kubernetes_pod_name}}", @@ -181,7 +183,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(${prefix}_nodejs_heap_size_total_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}) by (instance, kubernetes_pod_name, serviceName) ", + "expr": "sum(${prefix}_nodejs_heap_size_total_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}) by (instance, kubernetes_pod_name, serviceName) ", "format": "time_series", "intervalFactor": 1, "legendFormat": "Heap Total - {{instance}} {{serviceName}} {{kubernetes_pod_name}}", @@ -194,7 +196,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(${prefix}_nodejs_heap_size_used_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}) by (instance, kubernetes_pod_name, serviceName) ", + "expr": "sum(${prefix}_nodejs_heap_size_used_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}) by (instance, kubernetes_pod_name, serviceName) ", "format": "time_series", "intervalFactor": 1, "legendFormat": "Heap Used - {{instance}} {{serviceName}} {{kubernetes_pod_name}}", @@ -207,7 +209,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(${prefix}_nodejs_external_memory_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}) by (instance, kubernetes_pod_name, serviceName) ", + "expr": "sum(${prefix}_nodejs_external_memory_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}) by (instance, kubernetes_pod_name, serviceName) ", "format": "time_series", "intervalFactor": 1, "legendFormat": "External Memory - {{instance}} {{serviceName}} {{kubernetes_pod_name}}", @@ -229,6 +231,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -242,6 +245,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -312,7 +316,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(${prefix}_process_cpu_user_seconds_total{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}[$__rate_interval]) * 100) by (instance, kubernetes_pod_name, serviceName) ", + "expr": "avg(rate(${prefix}_process_cpu_user_seconds_total{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}[$__rate_interval]) * 100) by (instance, kubernetes_pod_name, serviceName) ", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -370,8 +374,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -418,7 +421,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(${prefix}_nodejs_active_handles_total{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}) by (instance, serviceName, kubernetes_pod_name)", + "expr": "sum(${prefix}_nodejs_active_handles_total{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}) by (instance, serviceName, kubernetes_pod_name)", "format": "time_series", "intervalFactor": 1, "legendFormat": "Active Handler - {{instance}} {{serviceName}} {{kubernetes_pod_name}}", @@ -431,7 +434,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(${prefix}_nodejs_active_requests_total{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}) by (instance, serviceName, kubernetes_pod_name)", + "expr": "sum(${prefix}_nodejs_active_requests_total{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}) by (instance, serviceName, kubernetes_pod_name)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -536,7 +539,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(${prefix}_nodejs_eventloop_lag_seconds{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}) by (instance, serviceName, kubernetes_pod_name)", + "expr": "avg(${prefix}_nodejs_eventloop_lag_seconds{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}) by (instance, serviceName, kubernetes_pod_name)", "format": "time_series", "intervalFactor": 1, "legendFormat": "{{instance}} {{serviceName}} {{kubernetes_pod_name}}", @@ -641,7 +644,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(${prefix}_nodejs_heap_space_size_used_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}) by (instance, serviceName, kubernetes_pod_name, space)", + "expr": "sum(${prefix}_nodejs_heap_space_size_used_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}) by (instance, serviceName, kubernetes_pod_name, space)", "format": "time_series", "intervalFactor": 1, "legendFormat": "Heap Used - {{instance}} {{serviceName}} {{kubernetes_pod_name}} - {{space}}", @@ -745,7 +748,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(${prefix}_nodejs_heap_space_size_total_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}) by (instance, serviceName, kubernetes_pod_name, space)", + "expr": "sum(${prefix}_nodejs_heap_space_size_total_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}) by (instance, serviceName, kubernetes_pod_name, space)", "format": "time_series", "intervalFactor": 1, "legendFormat": "Heap Total - {{instance}} {{serviceName}} {{kubernetes_pod_name}} - {{space}}", @@ -850,7 +853,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(${prefix}_nodejs_heap_space_size_available_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}) by (instance, serviceName, kubernetes_pod_name, space)", + "expr": "avg(${prefix}_nodejs_heap_space_size_available_bytes{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}) by (instance, serviceName, kubernetes_pod_name, space)", "format": "time_series", "intervalFactor": 1, "legendFormat": "Heap Used - {{instance}} {{serviceName}} {{kubernetes_pod_name}} - {{space}}", @@ -930,7 +933,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(${prefix}_nodejs_version_info{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}) by (instance, kubernetes_pod_name, serviceName, version)", + "expr": "sum(${prefix}_nodejs_version_info{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}) by (instance, kubernetes_pod_name, serviceName, version)", "format": "time_series", "instant": false, "interval": "", @@ -1011,7 +1014,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(changes(${prefix}_process_start_time_seconds{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\"}[$__rate_interval])) by (instance, serviceName, kubernetes_pod_name)", + "expr": "sum(changes(${prefix}_process_start_time_seconds{instance=~\"$instance\",kubernetes_pod_name=~\"$podName\", serviceName=~\"$serviceName\", cluster=\"$cluster\"}[$__rate_interval])) by (instance, serviceName, kubernetes_pod_name)", "format": "time_series", "intervalFactor": 1, "legendFormat": "{{instance}}", @@ -1024,18 +1027,36 @@ } ], "refresh": "10s", - "schemaVersion": 38, - "style": "dark", + "schemaVersion": 39, "tags": [ "nodejs" ], "templating": { "list": [ + { + "current": {}, + "definition": "label_values(node_uname_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(node_uname_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, { "current": { - "selected": true, - "text": "cbs", - "value": "cbs" + "selected": false, + "text": "moja_cl", + "value": "moja_cl" }, "hide": 0, "includeAll": false, @@ -1044,7 +1065,7 @@ "name": "prefix", "options": [ { - "selected": false, + "selected": true, "text": "moja_cl", "value": "moja_cl" }, @@ -1059,7 +1080,7 @@ "value": "moja_als" }, { - "selected": true, + "selected": false, "text": "cbs", "value": "cbs" } @@ -1075,7 +1096,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "definition": "label_values(${prefix}_nodejs_version_info,instance)", + "definition": "label_values(${prefix}_nodejs_version_info{cluster=\"$cluster\"},instance)", "hide": 0, "includeAll": true, "label": "instance", @@ -1083,7 +1104,8 @@ "name": "instance", "options": [], "query": { - "query": "label_values(${prefix}_nodejs_version_info,instance)", + "qryType": 1, + "query": "label_values(${prefix}_nodejs_version_info{cluster=\"$cluster\"},instance)", "refId": "PrometheusVariableQueryEditor-VariableQuery" }, "refresh": 1, @@ -1101,7 +1123,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "definition": "label_values(${prefix}_nodejs_version_info,serviceName)", + "definition": "label_values(${prefix}_nodejs_version_info{cluster=\"$cluster\"},serviceName)", "hide": 0, "includeAll": true, "label": "serviceName", @@ -1109,7 +1131,8 @@ "name": "serviceName", "options": [], "query": { - "query": "label_values(${prefix}_nodejs_version_info,serviceName)", + "qryType": 1, + "query": "label_values(${prefix}_nodejs_version_info{cluster=\"$cluster\"},serviceName)", "refId": "PrometheusVariableQueryEditor-VariableQuery" }, "refresh": 1, @@ -1127,7 +1150,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "definition": "label_values(${prefix}_nodejs_version_info,kubernetes_pod_name)", + "definition": "label_values(${prefix}_nodejs_version_info{cluster=\"$cluster\"},kubernetes_pod_name)", "hide": 0, "includeAll": true, "label": "podName", @@ -1135,7 +1158,8 @@ "name": "podName", "options": [], "query": { - "query": "label_values(${prefix}_nodejs_version_info,kubernetes_pod_name)", + "qryType": 1, + "query": "label_values(${prefix}_nodejs_version_info{cluster=\"$cluster\"},kubernetes_pod_name)", "refId": "PrometheusVariableQueryEditor-VariableQuery" }, "refresh": 1, @@ -1180,7 +1204,7 @@ }, "timezone": "", "title": "NodeJS Application Dashboard", - "uid": "PTSqcpJWk", + "uid": "PTSqcpJWk-v001", "version": 1, "weekStart": "" -} +} \ No newline at end of file diff --git a/monitoring/dashboards/mojaloop/dashboard-account-lookup-service.json b/monitoring/dashboards/mojaloop/dashboard-account-lookup-service.json index 112fb39f7..742bb8c7b 100644 --- a/monitoring/dashboards/mojaloop/dashboard-account-lookup-service.json +++ b/monitoring/dashboards/mojaloop/dashboard-account-lookup-service.json @@ -21,7 +21,7 @@ "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "10.0.2" + "version": "10.2.3" }, { "type": "panel", @@ -154,9 +154,10 @@ "values": false }, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -165,7 +166,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_ing_getPartiesByTypeAndID_count)", + "expr": "sum(moja_als_ing_getPartiesByTypeAndID_count{cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -180,7 +181,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(moja_als_ing_getPartiesByTypeIDAndSubID_count)", + "expr": "sum(moja_als_ing_getPartiesByTypeIDAndSubID_count{cluster=\"$cluster\"})", "hide": false, "instant": false, "range": true, @@ -264,9 +265,10 @@ "values": false }, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -275,7 +277,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_ing_putPartiesByTypeAndID_count)", + "expr": "sum(moja_als_ing_putPartiesByTypeAndID_count{cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -290,7 +292,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(moja_als_ing_putPartiesByTypeIDAndSubID_count)", + "expr": "sum(moja_als_ing_putPartiesByTypeIDAndSubID_count{cluster=\"$cluster\"})", "hide": false, "instant": false, "range": true, @@ -374,9 +376,10 @@ "values": false }, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -384,7 +387,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(moja_als_ing_putPartiesErrorByTypeAndID_count)", + "expr": "sum(moja_als_ing_putPartiesErrorByTypeAndID_count{cluster=\"$cluster\"})", "hide": false, "instant": false, "range": true, @@ -396,7 +399,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(moja_als_ing_putPartiesErrorByTypeIDAndSubID_count)", + "expr": "sum(moja_als_ing_putPartiesErrorByTypeIDAndSubID_count{cluster=\"$cluster\"})", "hide": false, "instant": false, "range": true, @@ -487,9 +490,10 @@ "values": false }, "text": {}, - "textMode": "value" + "textMode": "value", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -498,7 +502,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_getPartiesByTypeAndID_count{success=\"true\"})", + "expr": "sum(moja_als_getPartiesByTypeAndID_count{success=\"true\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -514,7 +518,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_getPartiesByTypeAndID_count{success=\"false\"})", + "expr": "sum(moja_als_getPartiesByTypeAndID_count{success=\"false\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -592,9 +596,10 @@ "values": false }, "text": {}, - "textMode": "value" + "textMode": "value", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -603,7 +608,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_putPartiesByTypeAndID_count{success=\"true\"})", + "expr": "sum(moja_als_putPartiesByTypeAndID_count{success=\"true\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -619,7 +624,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_putPartiesByTypeAndID_count{success=\"false\"})", + "expr": "sum(moja_als_putPartiesByTypeAndID_count{success=\"false\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -697,9 +702,10 @@ "values": false }, "text": {}, - "textMode": "value" + "textMode": "value", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -708,7 +714,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_puttPartiesErrorByTypeAndID_count{success=\"true\"})", + "expr": "sum(moja_als_puttPartiesErrorByTypeAndID_count{success=\"true\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -724,7 +730,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_puttPartiesErrorByTypeAndID_count{success=\"false\"})", + "expr": "sum(moja_als_puttPartiesErrorByTypeAndID_count{success=\"false\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -762,6 +768,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -775,6 +782,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -840,7 +848,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_getPartiesByTypeAndID_sum[$__rate_interval]) / rate(moja_als_ing_getPartiesByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_getPartiesByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_getPartiesByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "instant": false, "legendFormat": "getPartiesByTypeAndID success:{{success}}", "range": true, @@ -852,7 +860,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_putPartiesByTypeAndID_sum[$__rate_interval]) / rate(moja_als_ing_putPartiesByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_putPartiesByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_putPartiesByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "putPartiesByTypeAndID success:{{success}}", @@ -865,7 +873,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_getPartiesByTypeIDAndSubID_sum[$__rate_interval]) / rate(moja_als_ing_getPartiesByTypeIDAndSubID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_getPartiesByTypeIDAndSubID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_getPartiesByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "getPartiesByTypeIDAndSubID success:{{success}}", @@ -878,7 +886,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_putPartiesByTypeIDAndSubID_sum[$__rate_interval]) / rate(moja_als_ing_putPartiesByTypeIDAndSubID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_putPartiesByTypeIDAndSubID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_putPartiesByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "putPartiesByTypeIDAndSubID success:{{success}}", @@ -891,7 +899,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_putPartiesErrorByTypeAndID_sum[$__rate_interval]) / rate(moja_als_ing_putPartiesErrorByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_putPartiesErrorByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_putPartiesErrorByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "putPartiesErrorByTypeAndID success:{{success}}", @@ -904,7 +912,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_putPartiesErrorByTypeIDAndSubID_sum[$__rate_interval]) / rate(moja_als_ing_putPartiesErrorByTypeIDAndSubID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_putPartiesErrorByTypeIDAndSubID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_putPartiesErrorByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "putPartiesErrorByTypeIDAndSubID success:{{success}}", @@ -926,6 +934,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -939,6 +948,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1004,7 +1014,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_getPartiesByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_getPartiesByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "instant": false, "interval": "", "legendFormat": "getPartiesByTypeAndID success:{{success}}", @@ -1017,7 +1027,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_putPartiesByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_putPartiesByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "putPartiesByTypeAndID success:{{success}}", @@ -1030,7 +1040,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_getPartiesByTypeIDAndSubID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_getPartiesByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "getPartiesByTypeIDAndSubID success:{{success}}", @@ -1043,7 +1053,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_putPartiesByTypeIDAndSubID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_putPartiesByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "putPartiesByTypeIDAndSubID success:{{success}}", @@ -1056,7 +1066,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_putPartiesErrorByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_putPartiesErrorByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": " putPartiesErrorByTypeAndID success:{{success}}", @@ -1069,7 +1079,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_putPartiesErrorByTypeIDAndSubID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_putPartiesErrorByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "putPartiesErrorByTypeIDAndSubID success:{{success}}", @@ -1091,6 +1101,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1104,6 +1115,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1170,7 +1182,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "avg(rate(moja_als_getPartiesByTypeAndID_sum[$__rate_interval]) / rate(moja_als_getPartiesByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_getPartiesByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_getPartiesByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "getPartiesByTypeAndID success:{{success}}", @@ -1183,7 +1195,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_putPartiesByTypeAndID_sum[$__rate_interval]) / rate(moja_als_putPartiesByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_putPartiesByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_putPartiesByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "putPartiesByTypeAndID success:{{success}}", @@ -1196,7 +1208,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_puttPartiesErrorByTypeAndID_sum[$__rate_interval]) / rate(moja_als_puttPartiesErrorByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_puttPartiesErrorByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_puttPartiesErrorByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "puttPartiesErrorByTypeAndID success:{{success}}", @@ -1218,6 +1230,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1231,6 +1244,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1296,7 +1310,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_getPartiesByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_getPartiesByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "instant": false, "interval": "", "legendFormat": "getPartiesByTypeAndID success:{{success}}", @@ -1309,7 +1323,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_putPartiesByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_putPartiesByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "putPartiesByTypeAndID success:{{success}}", @@ -1322,7 +1336,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_puttPartiesErrorByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_puttPartiesErrorByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "puttPartiesErrorByTypeAndID success:{{success}}", @@ -1373,7 +1387,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] }, @@ -1402,9 +1417,10 @@ "values": false }, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1413,7 +1429,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_ing_getParticipantsByTypeAndID_count)", + "expr": "sum(moja_als_ing_getParticipantsByTypeAndID_count{cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -1428,7 +1444,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(moja_als_ing_getParticipantsByTypeIdAndSubID_count)", + "expr": "sum(moja_als_ing_getParticipantsByTypeIdAndSubID_count{cluster=\"$cluster\"})", "hide": false, "instant": false, "range": true, @@ -1482,7 +1498,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] }, @@ -1511,9 +1528,10 @@ "values": false }, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1522,7 +1540,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_ing_postParticipantsbyTypeAndID_count)", + "expr": "sum(moja_als_ing_postParticipantsbyTypeAndID_count{cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -1537,7 +1555,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(moja_als_ing_postParticipantsByTypeIDAndSubID_count)", + "expr": "sum(moja_als_ing_postParticipantsByTypeIDAndSubID_count{cluster=\"$cluster\"})", "hide": false, "instant": false, "range": true, @@ -1591,7 +1609,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] }, @@ -1620,9 +1639,10 @@ "values": false }, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1631,7 +1651,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_ing_postParticipantsBatch_count)", + "expr": "sum(moja_als_ing_postParticipantsBatch_count{cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -1672,7 +1692,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] }, @@ -1701,9 +1722,10 @@ "values": false }, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1712,7 +1734,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_ing_deleteParticipantsByTypeAndID_count)", + "expr": "sum(moja_als_ing_deleteParticipantsByTypeAndID_count{cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -1727,7 +1749,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(moja_als_ing_deleteParticipantsByTypeIDAndSubID_count)", + "expr": "sum(moja_als_ing_deleteParticipantsByTypeIDAndSubID_count{cluster=\"$cluster\"})", "hide": false, "instant": false, "range": true, @@ -1781,7 +1803,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] }, @@ -1810,9 +1833,10 @@ "values": false }, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1821,7 +1845,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_ing_putParticipantsByTypeAndID_count)", + "expr": "sum(moja_als_ing_putParticipantsByTypeAndID_count{cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -1836,7 +1860,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(moja_als_ing_putParticipantsByTypeIDAndSubID_count)", + "expr": "sum(moja_als_ing_putParticipantsByTypeIDAndSubID_count{cluster=\"$cluster\"})", "hide": false, "instant": false, "range": true, @@ -1890,7 +1914,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] }, @@ -1919,9 +1944,10 @@ "values": false }, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1930,7 +1956,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_ing_putParticipantsErrorByTypeAndID_count)", + "expr": "sum(moja_als_ing_putParticipantsErrorByTypeAndID_count{cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -1945,7 +1971,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(moja_als_ing_putParticipantsErrorByTypeIDAndSubID_count)", + "expr": "sum(moja_als_ing_putParticipantsErrorByTypeIDAndSubID_count{cluster=\"$cluster\"})", "hide": false, "instant": false, "range": true, @@ -1988,7 +2014,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] } @@ -2035,9 +2062,10 @@ "values": false }, "text": {}, - "textMode": "value" + "textMode": "value", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -2046,7 +2074,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_getParticipantsByTypeAndID_count{success=\"true\"})", + "expr": "sum(moja_als_getParticipantsByTypeAndID_count{success=\"true\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2062,7 +2090,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_getParticipantsByTypeAndID_count{success=\"false\"})", + "expr": "sum(moja_als_getParticipantsByTypeAndID_count{success=\"false\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2092,7 +2120,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] } @@ -2139,9 +2168,10 @@ "values": false }, "text": {}, - "textMode": "value" + "textMode": "value", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -2150,7 +2180,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_postParticipants_count{success=\"true\"})", + "expr": "sum(moja_als_postParticipants_count{success=\"true\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2166,7 +2196,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_postParticipants_count{success=\"false\"})", + "expr": "sum(moja_als_postParticipants_count{success=\"false\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2196,7 +2226,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] } @@ -2243,9 +2274,10 @@ "values": false }, "text": {}, - "textMode": "value" + "textMode": "value", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -2254,7 +2286,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_postParticipantsBatch_count{success=\"true\"})", + "expr": "sum(moja_als_postParticipantsBatch_count{success=\"true\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2270,7 +2302,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_postParticipantsBatch_count{success=\"false\"})", + "expr": "sum(moja_als_postParticipantsBatch_count{success=\"false\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2300,7 +2332,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] } @@ -2347,9 +2380,10 @@ "values": false }, "text": {}, - "textMode": "value" + "textMode": "value", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -2358,7 +2392,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_deleteParticipants_count{success=\"true\"})", + "expr": "sum(moja_als_deleteParticipants_count{success=\"true\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2374,7 +2408,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_deleteParticipants_count{success=\"false\"})", + "expr": "sum(moja_als_deleteParticipants_count{success=\"false\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2404,7 +2438,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] } @@ -2451,9 +2486,10 @@ "values": false }, "text": {}, - "textMode": "value" + "textMode": "value", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -2462,7 +2498,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_putParticipantsByTypeAndID_count{success=\"true\"})", + "expr": "sum(moja_als_putParticipantsByTypeAndID_count{success=\"true\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2478,7 +2514,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_putParticipantsByTypeAndID_count{success=\"false\"})", + "expr": "sum(moja_als_putParticipantsByTypeAndID_count{success=\"false\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2508,7 +2544,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] } @@ -2555,9 +2592,10 @@ "values": false }, "text": {}, - "textMode": "value" + "textMode": "value", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -2566,7 +2604,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_putParticipantsErrorByTypeAndID_count{success=\"true\"})", + "expr": "sum(moja_als_putParticipantsErrorByTypeAndID_count{success=\"true\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2582,7 +2620,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "sum(moja_als_putParticipantsErrorByTypeAndID_count{success=\"false\"})", + "expr": "sum(moja_als_putParticipantsErrorByTypeAndID_count{success=\"false\",cluster=\"$cluster\"})", "format": "time_series", "hide": false, "instant": false, @@ -2620,6 +2658,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2633,6 +2672,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2654,7 +2694,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2697,7 +2738,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_getParticipantsByTypeAndID_sum[$__rate_interval]) / rate(moja_als_ing_getParticipantsByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_getParticipantsByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_getParticipantsByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "instant": false, "legendFormat": "getParticipantsByTypeAndID success:{{success}}", "range": true, @@ -2709,7 +2750,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_putParticipantsByTypeAndID_sum[$__rate_interval]) / rate(moja_als_ing_putParticipantsByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_putParticipantsByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_putParticipantsByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsByTypeAndID success:{{success}}", @@ -2722,7 +2763,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_postParticipantsbyTypeAndID_sum[$__rate_interval]) / rate(moja_als_ing_postParticipantsbyTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_postParticipantsbyTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_postParticipantsbyTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "postParticipantsbyTypeAndID success:{{success}}", @@ -2735,7 +2776,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_deleteParticipantsByTypeAndID_sum[$__rate_interval]) / rate(moja_als_ing_deleteParticipantsByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_deleteParticipantsByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_deleteParticipantsByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "deleteParticipantsByTypeAndID success:{{success}}", @@ -2748,7 +2789,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_getParticipantsByTypeIdAndSubID_sum[$__rate_interval]) / rate(moja_als_ing_getParticipantsByTypeIdAndSubID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_getParticipantsByTypeIdAndSubID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_getParticipantsByTypeIdAndSubID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "getParticipantsByTypeIdAndSubID success:{{success}}", @@ -2761,7 +2802,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_putParticipantsByTypeIDAndSubID_sum[$__rate_interval]) / rate(moja_als_ing_putParticipantsByTypeIDAndSubID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_putParticipantsByTypeIDAndSubID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_putParticipantsByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsByTypeIDAndSubID success:{{success}}", @@ -2774,7 +2815,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_postParticipantsByTypeIDAndSubID_sum[$__rate_interval]) / rate(moja_als_ing_postParticipantsByTypeIDAndSubID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_postParticipantsByTypeIDAndSubID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_postParticipantsByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "postParticipantsByTypeIDAndSubID success:{{success}}", @@ -2787,7 +2828,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_deleteParticipantsByTypeIDAndSubID_sum[$__rate_interval]) / rate(moja_als_ing_deleteParticipantsByTypeIDAndSubID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_deleteParticipantsByTypeIDAndSubID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_deleteParticipantsByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "deleteParticipantsByTypeIDAndSubID success:{{success}}", @@ -2800,7 +2841,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_putParticipantsErrorByTypeAndID_sum[$__rate_interval]) / rate(moja_als_ing_putParticipantsErrorByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_putParticipantsErrorByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_putParticipantsErrorByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsErrorByTypeAndID success:{{success}}", @@ -2813,7 +2854,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_ing_putParticipantsErrorByTypeIDAndSubID_sum[$__rate_interval]) / rate(moja_als_ing_putParticipantsErrorByTypeIDAndSubID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_ing_putParticipantsErrorByTypeIDAndSubID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_ing_putParticipantsErrorByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsErrorByTypeIDAndSubID success:{{success}}", @@ -2835,6 +2876,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2848,6 +2890,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2869,7 +2912,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2912,7 +2956,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_getParticipantsByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_getParticipantsByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "instant": false, "interval": "", "legendFormat": "getParticipantsByTypeAndID success:{{success}}", @@ -2925,7 +2969,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_putParticipantsByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_putParticipantsByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsByTypeAndID success:{{success}}", @@ -2938,7 +2982,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_postParticipantsbyTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_postParticipantsbyTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "postParticipantsbyTypeAndID success:{{success}}", @@ -2951,7 +2995,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_deleteParticipantsByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_deleteParticipantsByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "deleteParticipantsByTypeAndID success:{{success}}", @@ -2964,7 +3008,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_getParticipantsByTypeIdAndSubID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_getParticipantsByTypeIdAndSubID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "getParticipantsByTypeIdAndSubID success:{{success}}", @@ -2977,7 +3021,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_putParticipantsByTypeIDAndSubID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_putParticipantsByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsByTypeIDAndSubID success:{{success}}", @@ -2990,7 +3034,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_postParticipantsByTypeIDAndSubID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_postParticipantsByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "postParticipantsByTypeIDAndSubID success:{{success}}", @@ -3003,7 +3047,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_deleteParticipantsByTypeIDAndSubID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_deleteParticipantsByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "deleteParticipantsByTypeIDAndSubID success:{{success}}", @@ -3016,7 +3060,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_putParticipantsErrorByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_putParticipantsErrorByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsErrorByTypeAndID success:{{success}}", @@ -3029,7 +3073,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_ing_putParticipantsErrorByTypeIDAndSubID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_ing_putParticipantsErrorByTypeIDAndSubID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsErrorByTypeIDAndSubID success:{{success}}", @@ -3051,6 +3095,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3064,6 +3109,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -3095,7 +3141,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3138,7 +3185,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_getParticipantsByTypeAndID_sum[$__rate_interval]) / rate(moja_als_getParticipantsByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_getParticipantsByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_getParticipantsByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "instant": false, "legendFormat": "getParticipantsByTypeAndID success:{{success}}", "range": true, @@ -3150,7 +3197,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_putParticipantsByTypeAndID_sum[$__rate_interval]) / rate(moja_als_putParticipantsByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_putParticipantsByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_putParticipantsByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsByTypeAndID success:{{success}}", @@ -3163,7 +3210,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_putParticipantsErrorByTypeAndID_sum[$__rate_interval]) / rate(moja_als_putParticipantsErrorByTypeAndID_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_putParticipantsErrorByTypeAndID_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_putParticipantsErrorByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsErrorByTypeAndID success:{{success}}", @@ -3176,7 +3223,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_postParticipants_sum[$__rate_interval]) / rate(moja_als_postParticipants_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_postParticipants_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_postParticipants_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "postParticipants success:{{success}}", @@ -3189,7 +3236,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_postParticipantsBatch_sum[$__rate_interval]) / rate(moja_als_postParticipantsBatch_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_postParticipantsBatch_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_postParticipantsBatch_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "postParticipantsBatch success:{{success}}", @@ -3202,7 +3249,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_deleteParticipants_sum[$__rate_interval]) / rate(moja_als_deleteParticipants_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_deleteParticipants_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_deleteParticipants_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "deleteParticipants success:{{success}}", @@ -3224,6 +3271,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3237,6 +3285,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -3258,7 +3307,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3301,7 +3351,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_getParticipantsByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_getParticipantsByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "instant": false, "interval": "", "legendFormat": "getParticipantsByTypeAndID success:{{success}}", @@ -3314,7 +3364,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_putParticipantsByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_putParticipantsByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsByTypeAndID success:{{success}}", @@ -3327,7 +3377,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_putParticipantsErrorByTypeAndID_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_putParticipantsErrorByTypeAndID_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "putParticipantsErrorByTypeAndID success:{{success}}", @@ -3340,7 +3390,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_postParticipants_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_postParticipants_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "postParticipants success:{{success}}", @@ -3353,7 +3403,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_postParticipantsBatch_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_postParticipantsBatch_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "postParticipantsBatch success:{{success}}", @@ -3366,7 +3416,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_postParticipantsBatch_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_postParticipantsBatch_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "deleteParticipants success:{{success}}", @@ -3388,6 +3438,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3401,6 +3452,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -3422,7 +3474,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3468,7 +3521,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "avg(rate(moja_als_egress_getParticipantEndpoint_sum[$__rate_interval]) / rate(moja_als_egress_getParticipantEndpoint_count[$__rate_interval]) >=0) by (endpointType,success)", + "expr": "avg(rate(moja_als_egress_getParticipantEndpoint_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_egress_getParticipantEndpoint_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (endpointType,success)", "instant": false, "legendFormat": "getParticipantEndpoint {{endpointType}} success:{{success}}", "range": true, @@ -3481,7 +3534,7 @@ }, "editorMode": "code", "exemplar": false, - "expr": "avg(rate(moja_als_egress_sendRequestToParticipant_sum[$__rate_interval]) / rate(moja_als_egress_sendRequestToParticipant_count[$__rate_interval]) >=0) by (endpointType,success)", + "expr": "avg(rate(moja_als_egress_sendRequestToParticipant_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_egress_sendRequestToParticipant_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (endpointType,success)", "hide": false, "instant": false, "legendFormat": "sendRequestToParticipant {{endpointType}} success:{{success}}", @@ -3494,7 +3547,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_als_egress_validateParticipant_sum[$__rate_interval]) / rate(moja_als_egress_validateParticipant_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_als_egress_validateParticipant_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_als_egress_validateParticipant_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": false, "instant": false, "legendFormat": "validateParticipant success:{{success}}", @@ -3516,6 +3569,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3529,6 +3583,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -3550,7 +3605,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3595,7 +3651,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_egress_getParticipantEndpoint_count[$__rate_interval])) by (success, endpointType)", + "expr": "sum(rate(moja_als_egress_getParticipantEndpoint_count{cluster=\"$cluster\"}[$__rate_interval])) by (success, endpointType)", "instant": false, "interval": "", "legendFormat": "getParticipantEndpoint {{endpointType}} success:{{success}}", @@ -3608,7 +3664,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_egress_sendRequestToParticipant_count[$__rate_interval])) by (success, endpointType)", + "expr": "sum(rate(moja_als_egress_sendRequestToParticipant_count{cluster=\"$cluster\"}[$__rate_interval])) by (success, endpointType)", "hide": false, "instant": false, "legendFormat": "sendRequestToParticipant {{endpointType}} success:{{success}}", @@ -3621,7 +3677,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_als_egress_validateParticipant_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_als_egress_validateParticipant_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "instant": false, "legendFormat": "validateParticipant {{endpointType}} success:{{success}}", @@ -3673,7 +3729,8 @@ "mode": "absolute", "steps": [ { - "color": "#299c46" + "color": "#299c46", + "value": null }, { "color": "rgba(237, 129, 40, 0.89)", @@ -3690,7 +3747,7 @@ "overrides": [] }, "gridPos": { - "h": 3, + "h": 6, "w": 4, "x": 0, "y": 67 @@ -3699,6 +3756,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -3708,9 +3767,10 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -3718,22 +3778,12 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*account-lookup.*'}[2m])) * 100", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod=~'.*account-lookup.*',cluster=\"$cluster\"}[2m])) * 100", "format": "time_series", - "hide": true, + "hide": false, "instant": true, "intervalFactor": 1, "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "editorMode": "code", - "expr": "sum(irate (container_cpu_usage_seconds_total{pod_name=~'.*account-lookup.*'}[2m]))", - "range": true, - "refId": "B" } ], "title": "ALS Total CPU Usage", @@ -3745,7 +3795,7 @@ "h": 1, "w": 24, "x": 0, - "y": 70 + "y": 73 }, "id": 21, "panels": [], @@ -3763,6 +3813,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3776,6 +3827,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -3798,7 +3850,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3814,7 +3867,7 @@ "h": 8, "w": 24, "x": 0, - "y": 71 + "y": 74 }, "id": 22, "options": { @@ -3842,7 +3895,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "moja_als_nodejs_heap_size_total_bytes{serviceName=~\"account-lookup.*\"}", + "expr": "moja_als_nodejs_heap_size_total_bytes{serviceName=~\"account-lookup.*\",cluster=\"$cluster\"}", "legendFormat": "heap_total-{{instance}} {{kubernetes_pod_name}}", "range": true, "refId": "A" @@ -3853,7 +3906,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "moja_als_nodejs_heap_size_used_bytes{serviceName=~\"account-lookup.*\"}", + "expr": "moja_als_nodejs_heap_size_used_bytes{serviceName=~\"account-lookup.*\",cluster=\"$cluster\"}", "legendFormat": "heap_used-{{instance}} {{kubernetes_pod_name}}", "range": true, "refId": "B" @@ -3864,7 +3917,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "moja_als_nodejs_external_memory_bytes{serviceName=~\"account-lookup.*\"}", + "expr": "moja_als_nodejs_external_memory_bytes{serviceName=~\"account-lookup.*\",cluster=\"$cluster\"}", "legendFormat": "ext_memory-{{instance}} {{kubernetes_pod_name}}", "range": true, "refId": "C" @@ -3885,6 +3938,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3898,6 +3952,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -3936,7 +3991,7 @@ "h": 7, "w": 24, "x": 0, - "y": 79 + "y": 82 }, "id": 23, "links": [], @@ -3964,7 +4019,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum (rate (moja_als_process_cpu_seconds_total{serviceName=~\"account-lookup.*\"}[2m])) by (kubernetes_pod_name)", + "expr": "sum (rate (moja_als_process_cpu_seconds_total{serviceName=~\"account-lookup.*\",cluster=\"$cluster\"}[2m])) by (kubernetes_pod_name)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -3978,7 +4033,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(\n rate(container_cpu_usage_seconds_total{pod_name=~'.*account-lookup.*'}[2m]))\nby (pod_name)", + "expr": "sum(\n rate(container_cpu_usage_seconds_total{pod_name=~'.*account-lookup.*',cluster=\"$cluster\"}[2m]))\nby (pod_name)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -3992,7 +4047,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(container_cpu_usage_seconds_total{pod_name=~'.*account-lookup.*'}[2m]))", + "expr": "sum(rate(container_cpu_usage_seconds_total{pod_name=~'.*account-lookup.*',cluster=\"$cluster\"}[2m]))", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -4006,7 +4061,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "rate(moja_als_process_cpu_seconds_total{serviceName=~\"account-lookup.*\"}[30s]) * 100", + "expr": "rate(moja_als_process_cpu_seconds_total{serviceName=~\"account-lookup.*\",cluster=\"$cluster\"}[30s]) * 100", "legendFormat": "{{kubernetes_pod_name}}", "range": true, "refId": "B" @@ -4021,7 +4076,7 @@ "h": 1, "w": 24, "x": 0, - "y": 86 + "y": 89 }, "id": 18, "panels": [], @@ -4050,7 +4105,7 @@ "h": 4, "w": 24, "x": 0, - "y": 87 + "y": 90 }, "hiddenSeries": false, "id": 19, @@ -4075,7 +4130,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "pointradius": 5, "points": false, "renderer": "flot", @@ -4090,7 +4145,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "kube_deployment_spec_replicas{deployment=~\".*account-lookup.*\"}", + "expr": "kube_deployment_spec_replicas{deployment=~\".*account-lookup.*\",cluster=\"$cluster\"}", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -4141,6 +4196,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -4154,6 +4210,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -4192,7 +4249,7 @@ "h": 7, "w": 24, "x": 0, - "y": 91 + "y": 94 }, "id": 20, "links": [], @@ -4216,7 +4273,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(moja_als_nodejs_eventloop_lag_seconds{serviceName=~\"account-lookup.*\"}) by (app)", + "expr": "avg(moja_als_nodejs_eventloop_lag_seconds{serviceName=~\"account-lookup.*\",cluster=\"$cluster\"}) by (app)", "format": "time_series", "intervalFactor": 1, "legendFormat": "{{app}}", @@ -4228,12 +4285,35 @@ "type": "timeseries" } ], - "refresh": "5s", - "schemaVersion": 38, - "style": "dark", + "refresh": "", + "schemaVersion": 39, "tags": [], "templating": { - "list": [] + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(node_uname_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(node_uname_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] }, "time": { "from": "now-5m", @@ -4242,7 +4322,7 @@ "timepicker": {}, "timezone": "", "title": "Mojaloop - ALS", - "uid": "a0bc6ab1-e6f8-4cd3-a173-89b9ae692807", + "uid": "a7a0aacb-a090-44a6-bee7-97ce431acf95-v04", "version": 1, "weekStart": "" -} +} \ No newline at end of file diff --git a/monitoring/dashboards/mojaloop/dashboard-central-services-characterization.json b/monitoring/dashboards/mojaloop/dashboard-central-services-characterization.json index b6913515e..c8a363cd6 100644 --- a/monitoring/dashboards/mojaloop/dashboard-central-services-characterization.json +++ b/monitoring/dashboards/mojaloop/dashboard-central-services-characterization.json @@ -27,7 +27,7 @@ "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "10.0.2" + "version": "10.2.3" }, { "type": "datasource", @@ -95,6 +95,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -108,6 +109,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -216,9 +218,11 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum_over_time(sum(moja_cl_model_participant_count{queryName=\"model_getParticipantsCached\"}[$__interval]))", + "editorMode": "code", + "expr": "sum_over_time(sum(moja_cl_model_participant_count{queryName=\"model_getParticipantsCached\",cluster=\"$cluster\"}[$__interval]))", "hide": true, "legendFormat": "{{queryName}}-hit:{{hit}}", + "range": true, "refId": "A" }, { @@ -226,9 +230,11 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum by (queryName, hit) (sum_over_time( moja_cl_model_participant_count{queryName=\"model_getParticipantsCached\"}[$__interval]))", + "editorMode": "code", + "expr": "sum by (queryName, hit) (sum_over_time( moja_cl_model_participant_count{queryName=\"model_getParticipantsCached\",cluster=\"$cluster\"}[$__interval]))", "hide": true, "legendFormat": "{{queryName}}-{{hit}}", + "range": true, "refId": "B" }, { @@ -236,9 +242,11 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum by (queryName, hit) (sum_over_time( moja_cl_model_participant_count{queryName=~\"model_.*Cached\"}[$__interval]))", + "editorMode": "code", + "expr": "sum by (queryName, hit) (sum_over_time( moja_cl_model_participant_count{queryName=~\"model_.*Cached\",cluster=\"$cluster\"}[$__interval]))", "hide": true, "legendFormat": "{{queryName}}-{{hit}}", + "range": true, "refId": "C" }, { @@ -246,9 +254,11 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate( moja_cl_model_participant_count{queryName=~\"model_.*Cached\"}[$__rate_interval])) by (queryName, hit) ", + "editorMode": "code", + "expr": "sum(rate( moja_cl_model_participant_count{queryName=~\"model_.*Cached\",cluster=\"$cluster\"}[$__rate_interval])) by (queryName, hit) ", "hide": false, "legendFormat": "{{queryName}}-{{hit}}", + "range": true, "refId": "D" } ], @@ -266,6 +276,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -279,6 +290,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -369,8 +381,10 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_cl_model_transfer_count[$__rate_interval])) by (queryName)", + "editorMode": "code", + "expr": "sum(rate(moja_cl_model_transfer_count{cluster=\"$cluster\"}[$__rate_interval])) by (queryName)", "legendFormat": "{{queryName}}", + "range": true, "refId": "A" }, { @@ -378,8 +392,10 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_cl_model_participant_count[$__rate_interval])) by (queryName)", + "editorMode": "code", + "expr": "sum(rate(moja_cl_model_participant_count{cluster=\"$cluster\"}[$__rate_interval])) by (queryName)", "legendFormat": "{{queryName}}", + "range": true, "refId": "B" }, { @@ -387,8 +403,10 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_cl_model_position_count[$__rate_interval])) by (queryName)", + "editorMode": "code", + "expr": "sum(rate(moja_cl_model_position_count{cluster=\"$cluster\"}[$__rate_interval])) by (queryName)", "legendFormat": "{{queryName}}", + "range": true, "refId": "C" } ], @@ -406,6 +424,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -419,6 +438,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -510,7 +530,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_transfer_prepare_sum{serviceName=\"central-handler-prepare\"}[$__rate_interval]) / rate(moja_cl_transfer_prepare_count{serviceName=\"central-handler-prepare\"}[$__rate_interval]) >=0 )", + "expr": "avg(rate(moja_cl_transfer_prepare_sum{serviceName=\"central-handler-prepare\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_transfer_prepare_count{serviceName=\"central-handler-prepare\",cluster=\"$cluster\"}[$__rate_interval]) >=0 )", "hide": true, "legendFormat": "IGNORE - ?", "range": true, @@ -522,7 +542,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_model_transfer_sum{queryName=\"facade_savePayeeTransferResponse\"}[$__rate_interval]) / rate(moja_cl_model_transfer_count{queryName=\"facade_savePayeeTransferResponse\"}[$__rate_interval]) >=0 )", + "expr": "avg(rate(moja_cl_model_transfer_sum{queryName=\"facade_savePayeeTransferResponse\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_model_transfer_count{queryName=\"facade_savePayeeTransferResponse\",cluster=\"$cluster\"}[$__rate_interval]) >=0 )", "hide": true, "legendFormat": "IGNORE - {{queryName}}", "range": true, @@ -534,7 +554,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_model_position_sum{queryName=\"facade_prepareChangeParticipantPositionTransaction_transaction\"}[$__rate_interval]) / rate(moja_cl_model_position_count{queryName=\"facade_prepareChangeParticipantPositionTransaction_transaction\"}[$__rate_interval]) >=0 )", + "expr": "avg(rate(moja_cl_model_position_sum{queryName=\"facade_prepareChangeParticipantPositionTransaction_transaction\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_model_position_count{queryName=\"facade_prepareChangeParticipantPositionTransaction_transaction\",cluster=\"$cluster\"}[$__rate_interval]) >=0 )", "hide": true, "legendFormat": "IGNORE - {{queryName}}", "range": true, @@ -546,7 +566,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_model_position_sum{queryName=~\"facade_prepareChangeParticipantPositionTransaction_transaction_*\"}[$__rate_interval]) / rate(moja_cl_model_position_count{queryName=~\"facade_prepareChangeParticipantPositionTransaction_transaction_*\"}[$__rate_interval]) >=0 )", + "expr": "avg(rate(moja_cl_model_position_sum{queryName=~\"facade_prepareChangeParticipantPositionTransaction_transaction_*\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_model_position_count{queryName=~\"facade_prepareChangeParticipantPositionTransaction_transaction_*\",cluster=\"$cluster\"}[$__rate_interval]) >=0 )", "hide": true, "legendFormat": "IGNORE - {{queryNIGNORE - ame}}", "range": true, @@ -558,7 +578,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_model_transfer_sum[$__rate_interval]) / rate(moja_cl_model_transfer_count[$__rate_interval]) >=0 ) by (queryName, kubernetes_pod_name)", + "expr": "avg(rate(moja_cl_model_transfer_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_model_transfer_count{cluster=\"$cluster\"}[$__rate_interval]) >=0 ) by (queryName, kubernetes_pod_name)", "hide": false, "legendFormat": "{{queryName}} - {{kubernetes_pod_name}}", "range": true, @@ -570,7 +590,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_model_participant_sum[$__rate_interval]) / rate(moja_cl_model_participant_count[$__rate_interval]) >=0 ) by (queryName, kubernetes_pod_name)", + "expr": "avg(rate(moja_cl_model_participant_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_model_participant_count{cluster=\"$cluster\"}[$__rate_interval]) >=0 ) by (queryName, kubernetes_pod_name)", "hide": false, "legendFormat": "{{queryName}} - {{kubernetes_pod_name}}", "range": true, @@ -582,7 +602,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_model_position_sum[$__rate_interval]) / rate(moja_cl_model_position_count[$__rate_interval]) >=0 ) by (queryName, kubernetes_pod_name)", + "expr": "avg(rate(moja_cl_model_position_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_model_position_count{cluster=\"$cluster\"}[$__rate_interval]) >=0 ) by (queryName, kubernetes_pod_name)", "hide": false, "legendFormat": "{{queryName}} - {{kubernetes_pod_name}}", "range": true, @@ -603,6 +623,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -616,6 +637,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -639,7 +661,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -703,8 +726,10 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_cl_handler_transfers_count[$__rate_interval])) by (funcName)", + "editorMode": "code", + "expr": "sum(rate(moja_cl_handler_transfers_count{cluster=\"$cluster\"}[$__rate_interval])) by (funcName)", "legendFormat": "{{funcName}}", + "range": true, "refId": "A" }, { @@ -712,8 +737,10 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_cl_handlers_transfer_validator_count[$__rate_interval])) by (funcName)", + "editorMode": "code", + "expr": "sum(rate(moja_cl_handlers_transfer_validator_count{cluster=\"$cluster\"}[$__rate_interval])) by (funcName)", "legendFormat": "{{funcName}}", + "range": true, "refId": "B" }, { @@ -721,9 +748,11 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_cl_domain_transfer_count[$__rate_interval])) by (funcName)", + "editorMode": "code", + "expr": "sum(rate(moja_cl_domain_transfer_count{cluster=\"$cluster\"}[$__rate_interval])) by (funcName)", "hide": false, "legendFormat": "{{funcName}}", + "range": true, "refId": "C" }, { @@ -731,9 +760,11 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_cl_domain_position_count[$__rate_interval])) by (funcName)", + "editorMode": "code", + "expr": "sum(rate(moja_cl_domain_position_count{cluster=\"$cluster\"}[$__rate_interval])) by (funcName)", "hide": false, "legendFormat": "{{funcName}}", + "range": true, "refId": "D" } ], @@ -751,6 +782,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -764,6 +796,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -787,7 +820,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -854,7 +888,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_handler_transfers_sum[$__rate_interval]) / rate(moja_cl_handler_transfers_count[$__rate_interval]) >=0) by (funcName, kubernetes_pod_name)", + "expr": "avg(rate(moja_cl_handler_transfers_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_handler_transfers_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (funcName, kubernetes_pod_name)", "legendFormat": "{{funcName}} - {{kubernetes_pod_name}} - {{mode}}", "range": true, "refId": "A" @@ -865,7 +899,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_handlers_transfer_validator_sum[$__rate_interval]) / rate(moja_cl_handlers_transfer_validator_count[$__rate_interval]) >=0) by (funcName, kubernetes_pod_name)", + "expr": "avg(rate(moja_cl_handlers_transfer_validator_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_handlers_transfer_validator_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (funcName, kubernetes_pod_name)", "legendFormat": "{{funcName}} - {{kubernetes_pod_name}}", "range": true, "refId": "B" @@ -876,7 +910,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_domain_transfer_sum[$__rate_interval]) / rate(moja_cl_domain_transfer_count[$__rate_interval]) >=0) by (funcName, kubernetes_pod_name)", + "expr": "avg(rate(moja_cl_domain_transfer_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_domain_transfer_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (funcName, kubernetes_pod_name)", "legendFormat": "{{funcName}} - {{kubernetes_pod_name}}", "range": true, "refId": "C" @@ -887,7 +921,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_domain_position_sum[$__rate_interval]) / rate(moja_cl_domain_position_count[$__rate_interval]) >=0) by (funcName, kubernetes_pod_name)", + "expr": "avg(rate(moja_cl_domain_position_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_domain_position_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (funcName, kubernetes_pod_name)", "legendFormat": "{{funcName}} - {{kubernetes_pod_name}}", "range": true, "refId": "D" @@ -898,7 +932,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_transfer_position_sum[$__rate_interval]) / rate(moja_cl_transfer_position_count[$__rate_interval]) >=0) by (funcName, kubernetes_pod_name)", + "expr": "avg(rate(moja_cl_transfer_position_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_transfer_position_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (funcName, kubernetes_pod_name)", "legendFormat": "Position handler - {{kubernetes_pod_name}}", "range": true, "refId": "E" @@ -945,6 +979,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -958,6 +993,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -980,7 +1016,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1023,7 +1060,8 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(kafka_consumergroup_lag{topic=~\"topic-.*\", consumergroup=~\"cl-group-.*\"}) by (consumergroup, topic)", + "editorMode": "code", + "expr": "sum(kafka_consumergroup_lag{topic=~\"topic-.*\", consumergroup=~\"cl-group-.*\",cluster=\"$cluster\"}) by (consumergroup, topic)", "format": "time_series", "hide": false, "instant": false, @@ -1073,6 +1111,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1086,6 +1125,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1109,7 +1149,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1195,7 +1236,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval])) by (app_kubernetes_io_name)", + "expr": "sum(rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\",cluster=\"$cluster\"}[$__rate_interval])) by (app_kubernetes_io_name)", "format": "time_series", "hide": false, "interval": "", @@ -1210,7 +1251,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\", }[$__rate_interval])) by (app_kubernetes_io_name, action)", + "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\",cluster=\"$cluster\" }[$__rate_interval])) by (app_kubernetes_io_name, action)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1224,7 +1265,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\", }[$__rate_interval])) by (app_kubernetes_io_name)", + "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\", cluster=\"$cluster\"}[$__rate_interval])) by (app_kubernetes_io_name)", "hide": false, "legendFormat": "{{app_kubernetes_io_name}}-position", "range": true, @@ -1236,7 +1277,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval])) by (app_kubernetes_io_name)", + "expr": "sum(rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\",cluster=\"$cluster\"}[$__rate_interval])) by (app_kubernetes_io_name)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1250,7 +1291,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval]))", + "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-prepare|central-service\",cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1264,7 +1305,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval])) by (kubernetes_pod_name)", + "expr": "sum(rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\",cluster=\"$cluster\"}[$__rate_interval])) by (kubernetes_pod_name)", "hide": false, "legendFormat": "{{kubernetes_pod_name}}", "range": true, @@ -1276,7 +1317,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval])) by (kubernetes_pod_name)", + "expr": "sum(rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\",cluster=\"$cluster\"}[$__rate_interval])) by (kubernetes_pod_name)", "hide": false, "legendFormat": "{{kubernetes_pod_name}}", "range": true, @@ -1288,7 +1329,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval])) by (kubernetes_pod_name)", + "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\",cluster=\"$cluster\"}[$__rate_interval])) by (kubernetes_pod_name)", "hide": false, "legendFormat": "{{kubernetes_pod_name}}", "range": true, @@ -1299,9 +1340,11 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_cl_handler_transfers_count[$__rate_interval])) by (kubernetes_pod_name, funcName)", + "editorMode": "code", + "expr": "sum(rate(moja_cl_handler_transfers_count{cluster=\"$cluster\"}[$__rate_interval])) by (kubernetes_pod_name, funcName)", "hide": true, "legendFormat": "handler-transfers-{{funcName}}-{{kubernetes_pod_name}}", + "range": true, "refId": "H" }, { @@ -1309,9 +1352,11 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_cl_handlers_transfer_validator_count[$__rate_interval])) by (kubernetes_pod_name, funcName)", + "editorMode": "code", + "expr": "sum(rate(moja_cl_handlers_transfer_validator_count{cluster=\"$cluster\"}[$__rate_interval])) by (kubernetes_pod_name, funcName)", "hide": true, "legendFormat": "handler-transfers-validator-{{funcName}}-{{kubernetes_pod_name}}", + "range": true, "refId": "J" } ], @@ -1344,7 +1389,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1377,9 +1423,10 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1387,7 +1434,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval]))", + "expr": "sum(rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\",cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, "intervalFactor": 1, @@ -1424,7 +1471,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1457,9 +1505,10 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1467,7 +1516,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval]))", + "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-prepare|central-service\",cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, "intervalFactor": 1, @@ -1503,7 +1552,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1536,9 +1586,10 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1546,7 +1597,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval]))", + "expr": "sum(rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\",cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, "interval": "", @@ -1568,6 +1619,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1581,6 +1633,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1604,7 +1657,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1691,7 +1745,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "rate(moja_cl_transfer_prepare_sum{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval]) / rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval]) >=0", + "expr": "rate(moja_cl_transfer_prepare_sum{serviceName=~\"central-handler-prepare|central-service\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\",cluster=\"$cluster\"}[$__rate_interval]) >=0", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1705,7 +1759,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "rate(moja_cl_transfer_position_sum{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval]) / rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval]) >=0", + "expr": "rate(moja_cl_transfer_position_sum{serviceName=~\"central-handler-position|central-service\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\",cluster=\"$cluster\"}[$__rate_interval]) >=0", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1719,7 +1773,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "rate(moja_cl_transfer_fulfil_sum{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval]) / rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval]) >=0 ", + "expr": "rate(moja_cl_transfer_fulfil_sum{serviceName=~\"central-handler-fulfil|central-service\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\",cluster=\"$cluster\"}[$__rate_interval]) >=0 ", "legendFormat": "Transfer Fulfil - {{kubernetes_pod_name}}", "range": true, "refId": "F" @@ -1730,7 +1784,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_transfer_prepare_sum{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval]) / rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval]) >=0) ", + "expr": "avg(rate(moja_cl_transfer_prepare_sum{serviceName=~\"central-handler-prepare|central-service\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\",cluster=\"$cluster\"}[$__rate_interval]) >=0) ", "format": "time_series", "hide": false, "instant": false, @@ -1744,7 +1798,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_transfer_position_sum{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval]) / rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval]) >=0) ", + "expr": "avg(rate(moja_cl_transfer_position_sum{serviceName=~\"central-handler-position|central-service\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\",cluster=\"$cluster\"}[$__rate_interval]) >=0) ", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1758,7 +1812,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_transfer_fulfil_sum{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval]) / rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval]) >=0) ", + "expr": "avg(rate(moja_cl_transfer_fulfil_sum{serviceName=~\"central-handler-fulfil|central-service\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\",cluster=\"$cluster\"}[$__rate_interval]) >=0) ", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1795,7 +1849,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1817,8 +1872,10 @@ "links": [], "options": { "displayMode": "gradient", + "maxVizHeight": 300, "minVizHeight": 10, "minVizWidth": 0, + "namePlacement": "auto", "orientation": "vertical", "reduceOptions": { "calcs": [ @@ -1828,16 +1885,17 @@ "values": false }, "showUnfilled": true, + "sizing": "auto", "valueMode": "color" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(sum_over_time( moja_cl_model_transfer_count{queryName=\"facade_saveTransferPrepared_transaction\", success=\"true\"}[$__interval]))", + "expr": "sum(sum_over_time( moja_cl_model_transfer_count{queryName=\"facade_saveTransferPrepared_transaction\", success=\"true\",cluster=\"$cluster\"}[$__interval]))", "legendFormat": "Transfer Prepares (success)", "refId": "A" }, @@ -1846,7 +1904,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(sum_over_time( moja_cl_model_transfer_count{queryName=\"facade_saveTransferPrepared_transaction\", success=\"false\"}[$__interval]))", + "expr": "sum(sum_over_time( moja_cl_model_transfer_count{queryName=\"facade_saveTransferPrepared_transaction\", success=\"false\",cluster=\"$cluster\"}[$__interval]))", "hide": true, "legendFormat": "Transfer Prepares (failed)", "refId": "B" @@ -1856,7 +1914,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(sum_over_time( moja_cl_model_transfer_count{queryName=\"facade_saveTransferPrepared_transaction\"}[$__interval]))", + "expr": "sum(sum_over_time( moja_cl_model_transfer_count{queryName=\"facade_saveTransferPrepared_transaction\",cluster=\"$cluster\"}[$__interval]))", "hide": true, "refId": "C" } @@ -1919,7 +1977,8 @@ "mode": "absolute", "steps": [ { - "color": "#299c46" + "color": "#299c46", + "value": null }, { "color": "rgba(237, 129, 40, 0.89)", @@ -1936,7 +1995,7 @@ "overrides": [] }, "gridPos": { - "h": 3, + "h": 7, "w": 5, "x": 0, "y": 90 @@ -1945,6 +2004,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -1954,29 +2015,19 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger.*'}[2m])) / sum (machine_cpu_cores{}) * 100", - "format": "time_series", - "hide": true, - "instant": true, - "intervalFactor": 1, - "legendFormat": "Central Services Total CPU Usage", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger.*'}[2m]))", + "editorMode": "code", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod=~'.*centralledger.*',cluster=\"$cluster\"}[2m])) * 100", + "range": true, "refId": "B" } ], @@ -2012,7 +2063,8 @@ "mode": "absolute", "steps": [ { - "color": "#299c46" + "color": "#299c46", + "value": null }, { "color": "rgba(237, 129, 40, 0.89)", @@ -2029,7 +2081,7 @@ "overrides": [] }, "gridPos": { - "h": 3, + "h": 7, "w": 5, "x": 5, "y": 90 @@ -2038,6 +2090,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -2047,30 +2101,24 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-prepare.*'}[2m])) / sum (machine_cpu_cores{}) * 100", + "editorMode": "code", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod=~'.*centralledger-handler-transfer-prepare.*',cluster=\"$cluster\"}[2m])) * 100", "format": "time_series", - "hide": true, + "hide": false, "instant": true, "intervalFactor": 1, "legendFormat": "Transfer Prepare Handler CPU Usage", "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-prepare.*'}[2m]))", - "refId": "B" } ], "title": "Transfer Prepare Handler CPU Usage", @@ -2105,7 +2153,8 @@ "mode": "absolute", "steps": [ { - "color": "#299c46" + "color": "#299c46", + "value": null }, { "color": "rgba(237, 129, 40, 0.89)", @@ -2122,7 +2171,7 @@ "overrides": [] }, "gridPos": { - "h": 3, + "h": 7, "w": 5, "x": 10, "y": 90 @@ -2131,6 +2180,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -2140,16 +2191,18 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-position.*'}[2m])) / sum (machine_cpu_cores{}) * 100", + "editorMode": "code", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod=~'.*centralledger-handler-transfer-position.*',cluster=\"$cluster\"}[2m])) / sum (machine_cpu_cores{cluster=\"$cluster\"}) * 100", "format": "time_series", "hide": true, "instant": true, @@ -2162,7 +2215,9 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-position.*'}[2m]))", + "editorMode": "code", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod=~'.*centralledger-handler-transfer-position.*',cluster=\"$cluster\"}[2m])) * 100", + "range": true, "refId": "B" } ], @@ -2198,7 +2253,8 @@ "mode": "absolute", "steps": [ { - "color": "#299c46" + "color": "#299c46", + "value": null }, { "color": "rgba(237, 129, 40, 0.89)", @@ -2215,7 +2271,7 @@ "overrides": [] }, "gridPos": { - "h": 3, + "h": 7, "w": 5, "x": 15, "y": 90 @@ -2224,6 +2280,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -2233,16 +2291,18 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-fulfil.*'}[2m])) / sum (machine_cpu_cores{}) * 100", + "editorMode": "code", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod=~'.*centralledger-handler-transfer-fulfil.*',cluster=\"$cluster\"}[2m])) / sum (machine_cpu_cores{cluster=\"$cluster\"}) * 100", "format": "time_series", "hide": true, "instant": true, @@ -2255,7 +2315,9 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-fulfil.*'}[2m]))", + "editorMode": "code", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod=~'.*centralledger-handler-transfer-fulfil.*',cluster=\"$cluster\"}[2m])) *100 ", + "range": true, "refId": "B" } ], @@ -2272,7 +2334,7 @@ "h": 1, "w": 24, "x": 0, - "y": 93 + "y": 97 }, "id": 48, "panels": [], @@ -2300,6 +2362,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2313,6 +2376,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2335,7 +2399,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2392,7 +2457,7 @@ "h": 9, "w": 24, "x": 0, - "y": 94 + "y": 98 }, "id": 2, "links": [], @@ -2419,11 +2484,13 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (moja_cl_process_cpu_seconds_total{serviceName=~\"central.*\"}[$__rate_interval])) by (app)", + "editorMode": "code", + "expr": "sum (irate (moja_cl_process_cpu_seconds_total{serviceName=~\"central.*\",cluster=\"$cluster\"}[$__rate_interval])) by (app)", "format": "time_series", "hide": true, "intervalFactor": 1, "legendFormat": "{{app}}", + "range": true, "refId": "A" }, { @@ -2431,7 +2498,8 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(\n irate(container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-.*|.*centralledger-service.*'}[$__rate_interval]))\nby (pod_name)", + "editorMode": "code", + "expr": "sum(\n irate(container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-.*|.*centralledger-service.*',cluster=\"$cluster\"}[$__rate_interval]))\nby (pod_name)", "format": "time_series", "hide": true, "instant": false, @@ -2444,7 +2512,8 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-.*|.*centralledger-service.*'}[$__rate_interval]))", + "editorMode": "code", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-.*|.*centralledger-service.*',cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "hide": true, "instant": false, @@ -2457,10 +2526,12 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (rate (container_cpu_usage_seconds_total{namespace='test', pod_name=~'test-centralledger-hand.*|test-centralledger-serv.*|test-centralledger-handler-transfer-fulfil.*'}[1m])) by (instance)", + "editorMode": "code", + "expr": "sum (rate (container_cpu_usage_seconds_total{namespace='test', pod_name=~'test-centralledger-hand.*|test-centralledger-serv.*|test-centralledger-handler-transfer-fulfil.*',cluster=\"$cluster\"}[1m])) by (instance)", "format": "time_series", "hide": true, "intervalFactor": 1, + "range": true, "refId": "D" }, { @@ -2468,10 +2539,12 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{}[1m])) by (instance)", + "editorMode": "code", + "expr": "sum (irate (container_cpu_usage_seconds_total{cluster=\"$cluster\"}[1m])) by (instance)", "format": "time_series", "hide": true, "intervalFactor": 1, + "range": true, "refId": "F" }, { @@ -2479,11 +2552,13 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "irate(node_cpu_seconds_total{}[5m]})", + "editorMode": "code", + "expr": "irate(node_cpu_seconds_total{cluster=\"$cluster\"}[5m])", "format": "time_series", "hide": true, "intervalFactor": 1, "legendFormat": "", + "range": true, "refId": "G" }, { @@ -2491,10 +2566,12 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "kube_node_status_capacity_cpu_cores", + "editorMode": "code", + "expr": "kube_node_status_capacity_cpu_cores{cluster=\"$cluster\"}", "format": "time_series", "hide": true, "intervalFactor": 1, + "range": true, "refId": "H" }, { @@ -2502,10 +2579,12 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "kube_node_status_allocatable_cpu_cores", + "editorMode": "code", + "expr": "kube_node_status_allocatable_cpu_cores{cluster=\"$cluster\"}", "format": "time_series", "hide": true, "intervalFactor": 1, + "range": true, "refId": "J" }, { @@ -2513,10 +2592,12 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(node_load1) by (instance)", + "editorMode": "code", + "expr": "sum(node_load1{cluster=\"$cluster\"}) by (instance)", "format": "time_series", "hide": true, "intervalFactor": 1, + "range": true, "refId": "K" }, { @@ -2524,10 +2605,12 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(node_load1)", + "editorMode": "code", + "expr": "sum(node_load1{cluster=\"$cluster\"})", "format": "time_series", "hide": true, "intervalFactor": 1, + "range": true, "refId": "L" }, { @@ -2535,10 +2618,12 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(\n irate(container_cpu_usage_seconds_total{beta_kubernetes_io_instance_type=\"m4.2xlarge\"}[$__rate_interval]))\nby (pod_name)", + "editorMode": "code", + "expr": "sum(\n irate(container_cpu_usage_seconds_total{beta_kubernetes_io_instance_type=\"m4.2xlarge\",cluster=\"$cluster\"}[$__rate_interval]))\nby (pod_name)", "format": "time_series", "hide": true, "intervalFactor": 1, + "range": true, "refId": "M" }, { @@ -2546,10 +2631,12 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(\n irate(container_cpu_usage_seconds_total{}[$__rate_interval]))", + "editorMode": "code", + "expr": "sum(\n irate(container_cpu_usage_seconds_total{cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "hide": true, "intervalFactor": 1, + "range": true, "refId": "N" }, { @@ -2557,9 +2644,11 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "rate(moja_cl_process_cpu_seconds_total{serviceName=~\"central.*\"}[2m]) * 100", + "editorMode": "code", + "expr": "rate(moja_cl_process_cpu_seconds_total{serviceName=~\"central.*\",cluster=\"$cluster\"}[2m]) * 100", "hide": false, "legendFormat": "{{kubernetes_pod_name}}", + "range": true, "refId": "E" } ], @@ -2576,7 +2665,7 @@ "h": 1, "w": 24, "x": 0, - "y": 103 + "y": 107 }, "id": 46, "panels": [], @@ -2603,6 +2692,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2616,6 +2706,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2638,7 +2729,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2654,7 +2746,7 @@ "h": 7, "w": 24, "x": 0, - "y": 104 + "y": 108 }, "id": 10, "links": [], @@ -2678,7 +2770,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(moja_cl_nodejs_eventloop_lag_seconds{serviceName=~\"central.*\"}) by (instance, serviceName)", + "expr": "avg(moja_cl_nodejs_eventloop_lag_seconds{serviceName=~\"central.*\",cluster=\"$cluster\"}) by (instance, serviceName)", "format": "time_series", "intervalFactor": 1, "legendFormat": "{{instance}} {{serviceName}}", @@ -2700,6 +2792,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2713,6 +2806,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2736,7 +2830,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2752,7 +2847,7 @@ "h": 8, "w": 24, "x": 0, - "y": 111 + "y": 115 }, "id": 18, "links": [], @@ -2777,11 +2872,13 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "kube_deployment_spec_replicas{deployment=~\".*-centralledger-.*\"}", + "editorMode": "code", + "expr": "kube_deployment_spec_replicas{deployment=~\".*-centralledger-.*\",cluster=\"$cluster\"}", "format": "time_series", "hide": false, "intervalFactor": 1, "legendFormat": "{{deployment}}", + "range": true, "refId": "A" } ], @@ -2789,12 +2886,35 @@ "type": "timeseries" } ], - "refresh": "5s", - "schemaVersion": 38, - "style": "dark", + "refresh": "", + "schemaVersion": 39, "tags": [], "templating": { - "list": [] + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(node_uname_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(node_uname_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] }, "time": { "from": "now-5m", @@ -2827,7 +2947,7 @@ }, "timezone": "", "title": "Mojaloop - Central-Ledger - Performance Characterization", - "uid": "5z9mkZ-prSDsDA", + "uid": "5z9mkZ-prSDsDA-v002", "version": 1, "weekStart": "" -} +} \ No newline at end of file diff --git a/monitoring/dashboards/mojaloop/dashboard-central-services.json b/monitoring/dashboards/mojaloop/dashboard-central-services.json index c11dcab23..7921ad5bc 100644 --- a/monitoring/dashboards/mojaloop/dashboard-central-services.json +++ b/monitoring/dashboards/mojaloop/dashboard-central-services.json @@ -21,7 +21,7 @@ "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "10.0.2" + "version": "10.2.3" }, { "type": "datasource", @@ -162,9 +162,10 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -172,7 +173,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval]))", + "expr": "sum(rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\", cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, "intervalFactor": 1, @@ -243,9 +244,10 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -253,7 +255,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval]))", + "expr": "sum(rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\", cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, "intervalFactor": 1, @@ -323,9 +325,10 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -333,7 +336,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval]))", + "expr": "sum(rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\", cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, "interval": "", @@ -382,6 +385,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -395,6 +399,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -464,7 +469,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(kafka_consumergroup_lag{topic=~\"topic-.*\", consumergroup=~\"cl-group-.*\"}) by (consumergroup, topic)", + "expr": "sum(kafka_consumergroup_lag{topic=~\"topic-.*\", consumergroup=~\"cl-group-.*\", cluster=\"$cluster\"}) by (consumergroup, topic)", "format": "time_series", "hide": false, "instant": false, @@ -514,6 +519,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -527,6 +533,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -598,7 +605,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(irate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval])) by (app_kubernetes_io_name, success, instance)", + "expr": "sum(irate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\", cluster=\"$cluster\"}[$__rate_interval])) by (app_kubernetes_io_name, success, instance)", "format": "time_series", "hide": false, "interval": "", @@ -613,7 +620,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(irate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval])) by (app_kubernetes_io_name, action, success, instance)", + "expr": "sum(irate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\", cluster=\"$cluster\"}[$__rate_interval])) by (app_kubernetes_io_name, action, success, instance)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -627,7 +634,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(irate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval])) by (app_kubernetes_io_name, success, instance)", + "expr": "sum(irate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\", cluster=\"$cluster\"}[$__rate_interval])) by (app_kubernetes_io_name, success, instance)", "hide": false, "legendFormat": "{{instance}} {{app_kubernetes_io_name}} Avg - success:{{success}}", "range": true, @@ -639,7 +646,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(irate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval])) by (app_kubernetes_io_name, success, instance)", + "expr": "sum(irate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\", cluster=\"$cluster\"}[$__rate_interval])) by (app_kubernetes_io_name, success, instance)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -653,7 +660,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(irate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval])) by (success, instance)", + "expr": "sum(irate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\", cluster=\"$cluster\"}[$__rate_interval])) by (success, instance)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -667,7 +674,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(irate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval])) by (kubernetes_pod_name, success, instance)", + "expr": "sum(irate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\", cluster=\"$cluster\"}[$__rate_interval])) by (kubernetes_pod_name, success, instance)", "hide": true, "legendFormat": "{{instance}} {{kubernetes_pod_name}} - success:{{success}}", "range": true, @@ -679,7 +686,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(irate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval])) by (kubernetes_pod_name, success, instance)", + "expr": "sum(irate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\", cluster=\"$cluster\"}[$__rate_interval])) by (kubernetes_pod_name, success, instance)", "hide": true, "legendFormat": "{{instance}} {{kubernetes_pod_name}} - success:{{success}}", "range": true, @@ -691,7 +698,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(irate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval])) by (kubernetes_pod_name, success, instance)", + "expr": "sum(irate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\", cluster=\"$cluster\"}[$__rate_interval])) by (kubernetes_pod_name, success, instance)", "hide": true, "legendFormat": "{{instance}} {{kubernetes_pod_name}} - success:{{success}}", "range": true, @@ -703,7 +710,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(irate(moja_cl_transfer_prepare_count{serviceName=\"ml-service\"}[$__rate_interval])) by (app, success, instance)", + "expr": "sum(irate(moja_cl_transfer_prepare_count{serviceName=\"ml-service\", cluster=\"$cluster\"}[$__rate_interval])) by (app, success, instance)", "hide": true, "legendFormat": "ML Transfers API Prepare - success:{{success}}", "range": true, @@ -724,6 +731,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -737,6 +745,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -760,8 +769,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -850,7 +858,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_transfer_prepare_sum{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval]) / rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\"}[$__rate_interval]) >=0) by (kubernetes_pod_name, success, instance)", + "expr": "avg(rate(moja_cl_transfer_prepare_sum{serviceName=~\"central-handler-prepare|central-service\", cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_transfer_prepare_count{serviceName=~\"central-handler-prepare|central-service\", cluster=\"$cluster\"}[$__rate_interval]) >=0) by (kubernetes_pod_name, success, instance)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -864,7 +872,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_transfer_position_sum{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval]) / rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\"}[$__rate_interval]) >=0) by (kubernetes_pod_name, success, instance)", + "expr": "avg(rate(moja_cl_transfer_position_sum{serviceName=~\"central-handler-position|central-service\", cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_transfer_position_count{serviceName=~\"central-handler-position|central-service\", cluster=\"$cluster\"}[$__rate_interval]) >=0) by (kubernetes_pod_name, success, instance)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -878,7 +886,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_cl_transfer_fulfil_sum{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval]) / rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\"}[$__rate_interval]) >=0) by (kubernetes_pod_name, success, instance)", + "expr": "avg(rate(moja_cl_transfer_fulfil_sum{serviceName=~\"central-handler-fulfil|central-service\", cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_cl_transfer_fulfil_count{serviceName=~\"central-handler-fulfil|central-service\", cluster=\"$cluster\"}[$__rate_interval]) >=0) by (kubernetes_pod_name, success, instance)", "hide": false, "legendFormat": "Transfer Fulfil - {{kubernetes_pod_name}} {{instance}} success:{{success}}", "range": true, @@ -943,8 +951,7 @@ "mode": "absolute", "steps": [ { - "color": "#299c46", - "value": null + "color": "#299c46" }, { "color": "rgba(237, 129, 40, 0.89)", @@ -970,6 +977,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -979,9 +988,10 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -989,7 +999,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger.*'}[2m])) / sum (machine_cpu_cores{}) * 100", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger.*', cluster=\"$cluster\"}[2m])) / sum (machine_cpu_cores{cluster=\"$cluster\"}) * 100", "format": "time_series", "hide": true, "instant": true, @@ -1002,7 +1012,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger.*'}[2m]))", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger.*', cluster=\"$cluster\"}[2m]))", "refId": "B" } ], @@ -1038,8 +1048,7 @@ "mode": "absolute", "steps": [ { - "color": "#299c46", - "value": null + "color": "#299c46" }, { "color": "rgba(237, 129, 40, 0.89)", @@ -1065,6 +1074,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -1074,16 +1085,17 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-prepare.*'}[2m])) / sum (machine_cpu_cores{}) * 100", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-prepare.*', cluster=\"$cluster\"}[2m])) / sum (machine_cpu_cores{cluster=\"$cluster\"}) * 100", "format": "time_series", "hide": true, "instant": true, @@ -1096,7 +1108,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-prepare.*'}[2m]))", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-prepare.*', cluster=\"$cluster\"}[2m]))", "refId": "B" } ], @@ -1132,8 +1144,7 @@ "mode": "absolute", "steps": [ { - "color": "#299c46", - "value": null + "color": "#299c46" }, { "color": "rgba(237, 129, 40, 0.89)", @@ -1159,6 +1170,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -1168,16 +1181,17 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-position.*'}[2m])) / sum (machine_cpu_cores{}) * 100", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-position.*', cluster=\"$cluster\"}[2m])) / sum (machine_cpu_cores{cluster=\"$cluster\"}) * 100", "format": "time_series", "hide": true, "instant": true, @@ -1190,7 +1204,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-position.*'}[2m]))", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-position.*', cluster=\"$cluster\"}[2m]))", "refId": "B" } ], @@ -1226,8 +1240,7 @@ "mode": "absolute", "steps": [ { - "color": "#299c46", - "value": null + "color": "#299c46" }, { "color": "rgba(237, 129, 40, 0.89)", @@ -1253,6 +1266,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -1262,16 +1277,17 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-fulfil.*'}[2m])) / sum (machine_cpu_cores{}) * 100", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-fulfil.*', cluster=\"$cluster\"}[2m])) / sum (machine_cpu_cores{ cluster=\"$cluster\"}) * 100", "format": "time_series", "hide": true, "instant": true, @@ -1284,7 +1300,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-fulfil.*'}[2m]))", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-fulfil.*', cluster=\"$cluster\"}[2m]))", "refId": "B" } ], @@ -1328,6 +1344,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1341,6 +1358,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1364,8 +1382,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1452,7 +1469,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "moja_cl_nodejs_heap_space_size_available_bytes{serviceName=~\"central-handler.*|central-service\"}", + "expr": "moja_cl_nodejs_heap_space_size_available_bytes{serviceName=~\"central-handler.*|central-service\", cluster=\"$cluster\"}", "hide": false, "legendFormat": "heap_space_free-{{kubernetes_pod_name}} {{serviceName}} {{space}}", "range": true, @@ -1464,7 +1481,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "moja_cl_nodejs_heap_space_size_used_bytes{serviceName=~\"central-handler.*|central-service\"}", + "expr": "moja_cl_nodejs_heap_space_size_used_bytes{serviceName=~\"central-handler.*|central-service\", cluster=\"$cluster\"}", "hide": false, "legendFormat": " heap_space_used-{{kubernetes_pod_name}} {{serviceName}} {{space}} ", "range": true, @@ -1476,7 +1493,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "moja_cl_nodejs_heap_size_total_bytes{serviceName=~\"central-handler.*|central-service\"}", + "expr": "moja_cl_nodejs_heap_size_total_bytes{serviceName=~\"central-handler.*|central-service\", cluster=\"$cluster\"}", "hide": false, "legendFormat": "heap_total-{{kubernetes_pod_name}} {{serviceName}}", "range": true, @@ -1488,7 +1505,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "moja_cl_nodejs_heap_size_used_bytes{serviceName=~\"central-handler.*|central-service\"}", + "expr": "moja_cl_nodejs_heap_size_used_bytes{serviceName=~\"central-handler.*|central-service\", cluster=\"$cluster\"}", "hide": false, "legendFormat": " heap_used-{{kubernetes_pod_name}} {{serviceName}}", "range": true, @@ -1500,7 +1517,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "moja_cl_nodejs_external_memory_bytes{serviceName=~\"central-handler.*|central-service\"}", + "expr": "moja_cl_nodejs_external_memory_bytes{serviceName=~\"central-handler.*|central-service\", cluster=\"$cluster\"}", "hide": false, "legendFormat": "ext_memory-{{kubernetes_pod_name}} {{serviceName}}", "range": true, @@ -1522,6 +1539,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1535,6 +1553,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1557,8 +1576,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1644,7 +1662,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (moja_cl_process_cpu_seconds_total{serviceName=~\"central.*\"}[$__rate_interval])) by (app)", + "expr": "sum (irate (moja_cl_process_cpu_seconds_total{serviceName=~\"central.*\", cluster=\"$cluster\"}[$__rate_interval])) by (app)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1656,7 +1674,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(\n irate(container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-.*|.*centralledger-service.*'}[$__rate_interval]))\nby (pod_name)", + "expr": "sum(\n irate(container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-.*|.*centralledger-service.*', cluster=\"$cluster\"}[$__rate_interval]))\nby (pod_name)", "format": "time_series", "hide": true, "instant": false, @@ -1669,7 +1687,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-.*|.*centralledger-service.*'}[$__rate_interval]))", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*centralledger-handler-transfer-.*|.*centralledger-service.*', cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "hide": true, "instant": false, @@ -1682,7 +1700,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (rate (container_cpu_usage_seconds_total{namespace='test', pod_name=~'test-centralledger-hand.*|test-centralledger-serv.*|test-centralledger-handler-transfer-fulfil.*'}[1m])) by (instance)", + "expr": "sum (rate (container_cpu_usage_seconds_total{namespace='test', pod_name=~'test-centralledger-hand.*|test-centralledger-serv.*|test-centralledger-handler-transfer-fulfil.*', cluster=\"$cluster\"}[1m])) by (instance)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1693,7 +1711,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{}[1m])) by (instance)", + "expr": "sum (irate (container_cpu_usage_seconds_total{ cluster=\"$cluster\"}[1m])) by (instance)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1704,7 +1722,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "irate(node_cpu_seconds_total{}[5m]})", + "expr": "irate(node_cpu_seconds_total{cluster=\"$cluster\"}[5m]})", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1716,7 +1734,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "kube_node_status_capacity_cpu_cores", + "expr": "kube_node_status_capacity_cpu_cores{cluster=\"$cluster\"}", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1727,7 +1745,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "kube_node_status_allocatable_cpu_cores", + "expr": "kube_node_status_allocatable_cpu_cores{ cluster=\"$cluster\"}", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1738,7 +1756,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(node_load1) by (instance)", + "expr": "sum(node_load1{ cluster=\"$cluster\"}) by (instance)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1749,7 +1767,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(node_load1)", + "expr": "sum(node_load1{ cluster=\"$cluster\"})", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1760,7 +1778,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(\n irate(container_cpu_usage_seconds_total{beta_kubernetes_io_instance_type=\"m4.2xlarge\"}[$__rate_interval]))\nby (pod_name)", + "expr": "sum(\n irate(container_cpu_usage_seconds_total{beta_kubernetes_io_instance_type=\"m4.2xlarge\", cluster=\"$cluster\"}[$__rate_interval]))\nby (pod_name)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1771,7 +1789,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(\n irate(container_cpu_usage_seconds_total{}[$__rate_interval]))", + "expr": "sum(\n irate(container_cpu_usage_seconds_total{ cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1782,7 +1800,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "rate(moja_cl_process_cpu_seconds_total{serviceName=~\"central.*\"}[$__rate_interval]) * 100", + "expr": "rate(moja_cl_process_cpu_seconds_total{serviceName=~\"central.*\", cluster=\"$cluster\"}[$__rate_interval]) * 100", "legendFormat": "{{kubernetes_pod_name}}", "refId": "E" } @@ -1827,6 +1845,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1840,6 +1859,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1862,8 +1882,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1908,7 +1927,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(moja_cl_nodejs_eventloop_lag_seconds{serviceName=~\"central.*\"}) by (serviceName, instance)", + "expr": "avg(moja_cl_nodejs_eventloop_lag_seconds{serviceName=~\"central.*\", cluster=\"$cluster\"}) by (serviceName, instance)", "format": "time_series", "intervalFactor": 1, "legendFormat": "{{serviceName}} {{instance}}", @@ -1930,6 +1949,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1943,6 +1963,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1966,8 +1987,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -2009,7 +2029,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "kube_deployment_spec_replicas{deployment=~\".*-centralledger-.*|central-service\"}", + "expr": "kube_deployment_spec_replicas{deployment=~\".*-centralledger-.*|central-service\", cluster=\"$cluster\"}", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -2023,11 +2043,30 @@ } ], "refresh": "5s", - "schemaVersion": 38, - "style": "dark", + "schemaVersion": 39, "tags": [], "templating": { - "list": [] + "list": [ + { + "current": {}, + "definition": "label_values(node_uname_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(node_uname_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] }, "time": { "from": "now-15m", @@ -2060,7 +2099,7 @@ }, "timezone": "", "title": "mojaloop-central-ledger", - "uid": "5z9mkZ-pr", + "uid": "5z9mkZ-pr-v001", "version": 1, "weekStart": "" -} +} \ No newline at end of file diff --git a/monitoring/dashboards/mojaloop/dashboard-ml-adapter.json b/monitoring/dashboards/mojaloop/dashboard-ml-adapter.json index e85530de1..ccfebdb7f 100644 --- a/monitoring/dashboards/mojaloop/dashboard-ml-adapter.json +++ b/monitoring/dashboards/mojaloop/dashboard-ml-adapter.json @@ -21,7 +21,7 @@ "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "10.0.2" + "version": "10.2.3" }, { "type": "datasource", @@ -115,6 +115,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -128,6 +129,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -193,7 +195,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\"}[${__range_s}s]))", + "expr": "sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\",cluster=\"$cluster\"}[${__range_s}s]))", "hide": false, "instant": true, "legendFormat": "Total", @@ -205,7 +207,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(increase(moja_ml_tx_transfer_bucket{le=\"1\"}[${__range_s}s]))", + "expr": "sum(increase(moja_ml_tx_transfer_bucket{le=\"1\",cluster=\"$cluster\"}[${__range_s}s]))", "hide": false, "legendFormat": "Less than 1 sec", "range": true, @@ -217,7 +219,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\"}[${__range_s}s])) - sum(increase(moja_ml_tx_transfer_prepare_bucket{le=\"1\"}[${__range_s}s]))", + "expr": "sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\",cluster=\"$cluster\"}[${__range_s}s])) - sum(increase(moja_ml_tx_transfer_prepare_bucket{le=\"1\",cluster=\"$cluster\"}[${__range_s}s]))", "hide": false, "instant": true, "legendFormat": "More than 1 sec", @@ -229,7 +231,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\"}[${__range_s}s])) - sum(increase(moja_ml_tx_transfer_prepare_bucket{le=\"2\"}[${__range_s}s]))", + "expr": "sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\",cluster=\"$cluster\"}[${__range_s}s])) - sum(increase(moja_ml_tx_transfer_prepare_bucket{le=\"2\",cluster=\"$cluster\"}[${__range_s}s]))", "hide": false, "legendFormat": "More than 2 sec", "range": true, @@ -241,7 +243,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\"}[${__range_s}s])) - sum(increase(moja_ml_tx_transfer_prepare_bucket{le=\"5\"}[${__range_s}s]))", + "expr": "sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\",cluster=\"$cluster\"}[${__range_s}s])) - sum(increase(moja_ml_tx_transfer_prepare_bucket{le=\"5\",cluster=\"$cluster\"}[${__range_s}s]))", "hide": false, "legendFormat": "More than 5 sec", "range": true, @@ -288,6 +290,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -301,6 +304,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -414,7 +418,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_ml_tx_transfer_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": true, "legendFormat": "moja_ml_tx_transfer - success:{{success}}", "refId": "I" @@ -424,7 +428,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_prepare_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_ml_tx_transfer_prepare_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": true, "legendFormat": "moja_ml_tx_transfer_prepare - success:{{success}}", "refId": "J" @@ -434,7 +438,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_fulfil_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_ml_tx_transfer_fulfil_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": true, "legendFormat": "moja_ml_tx_transfer_fulfil - success:{{success}}", "refId": "K" @@ -444,7 +448,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_count[$__rate_interval]))", + "expr": "sum(rate(moja_ml_tx_transfer_count{cluster=\"$cluster\"}[$__rate_interval]))", "hide": false, "legendFormat": "moja_ml_tx_transfer - avg", "refId": "L" @@ -454,7 +458,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_prepare_count[$__rate_interval]))", + "expr": "sum(rate(moja_ml_tx_transfer_prepare_count{cluster=\"$cluster\"}[$__rate_interval]))", "hide": false, "legendFormat": "moja_ml_tx_transfer_prepare - avg", "refId": "M" @@ -464,7 +468,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_fulfil_count[$__rate_interval]))", + "expr": "sum(rate(moja_ml_tx_transfer_fulfil_count{cluster=\"$cluster\"}[$__rate_interval]))", "hide": false, "legendFormat": "moja_ml_tx_transfer_fulfil - avg", "refId": "N" @@ -474,7 +478,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\"}[$__rate_interval])) by (app, success)", + "expr": "sum(rate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval])) by (app, success)", "hide": false, "legendFormat": "Transfers API Prepare - success:{{success}}", "refId": "A" @@ -484,7 +488,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_transfer_fulfil_count{serviceName=\"ml-service\"}[$__rate_interval])) by (app, success)", + "expr": "sum(rate(moja_ml_transfer_fulfil_count{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval])) by (app, success)", "hide": false, "legendFormat": "Transfers API Fulfill - success:{{success}}", "refId": "B" @@ -494,7 +498,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_notification_event_delivery_count{serviceName=\"ml-handler-notification\"}[$__rate_interval])) by (app, action, status, success)", + "expr": "sum(rate(moja_ml_notification_event_delivery_count{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval])) by (app, action, status, success)", "hide": false, "legendFormat": "Notification Delivery - {{action}} - {{status}} - success:{{success}}", "refId": "G" @@ -514,6 +518,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -527,6 +532,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -619,7 +625,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_transfer_prepare_sum{serviceName=\"ml-service\"}[$__rate_interval]) / rate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\"}[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_transfer_prepare_sum{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval]) >=0)", "format": "time_series", "hide": false, "interval": "", @@ -634,7 +640,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_transfer_fulfil_sum{serviceName=\"ml-service\"}[$__rate_interval]) / rate(moja_ml_transfer_fulfil_count{serviceName=\"ml-service\"}[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_transfer_fulfil_sum{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_transfer_fulfil_count{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval]) >=0)", "format": "time_series", "hide": false, "interval": "", @@ -649,7 +655,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_notification_event_delivery_sum{serviceName=\"ml-handler-notification\"}[$__rate_interval]) / rate(moja_ml_notification_event_delivery_count{serviceName=\"ml-handler-notification\"}[$__rate_interval]) >=0) by (action, status, success)", + "expr": "avg(rate(moja_ml_notification_event_delivery_sum{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_notification_event_delivery_count{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) >=0) by (action, status, success)", "hide": false, "interval": "", "legendFormat": "Notification Deliveries - {{action}} - {{status}} - success:{{success}}", @@ -662,7 +668,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_notification_event_delivery_sum{serviceName=\"ml-handler-notification\"}[$__rate_interval]) / rate(moja_ml_notification_event_delivery_count{serviceName=\"ml-handler-notification\"}[$__rate_interval]) >=0) by (kubernetes_pod_name, action, status, success)", + "expr": "avg(rate(moja_ml_notification_event_delivery_sum{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_notification_event_delivery_count{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) >=0) by (kubernetes_pod_name, action, status, success)", "hide": true, "instant": false, "interval": "", @@ -675,7 +681,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_sum[$__rate_interval]) / rate(moja_ml_tx_transfer_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_ml_tx_transfer_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_tx_transfer_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": true, "interval": "", "legendFormat": "moja_ml_tx_transfer - success:{{success}}", @@ -688,7 +694,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_prepare_sum[$__rate_interval]) / rate(moja_ml_tx_transfer_prepare_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_ml_tx_transfer_prepare_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_tx_transfer_prepare_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "hide": true, "interval": "", "legendFormat": "moja_ml_tx_transfer_prepare - success:{{success}}", @@ -701,7 +707,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_fulfil_sum[$__rate_interval]) / rate(moja_ml_tx_transfer_fulfil_count[$__rate_interval])>=0) by (success)", + "expr": "avg(rate(moja_ml_tx_transfer_fulfil_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_tx_transfer_fulfil_count{cluster=\"$cluster\"}[$__rate_interval])>=0) by (success)", "hide": true, "interval": "", "legendFormat": "moja_ml_tx_transfer_fulfil - success:{{success}}", @@ -714,7 +720,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_sum[$__rate_interval]) / irate(moja_ml_tx_transfer_count[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_tx_transfer_sum{cluster=\"$cluster\"}[$__rate_interval]) / irate(moja_ml_tx_transfer_count{cluster=\"$cluster\"}[$__rate_interval]) >=0)", "interval": "", "legendFormat": "moja_ml_tx_transfer - avg", "range": true, @@ -726,7 +732,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_prepare_sum[$__rate_interval]) / rate(moja_ml_tx_transfer_prepare_count[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_tx_transfer_prepare_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_tx_transfer_prepare_count{cluster=\"$cluster\"}[$__rate_interval]) >=0)", "interval": "", "legendFormat": "moja_ml_tx_transfer_prepare - avg", "range": true, @@ -738,7 +744,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_fulfil_sum[$__rate_interval]) / rate(moja_ml_tx_transfer_fulfil_count[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_tx_transfer_fulfil_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_tx_transfer_fulfil_count{cluster=\"$cluster\"}[$__rate_interval]) >=0)", "interval": "", "legendFormat": "moja_ml_tx_transfer_fulfil - avg", "range": true, @@ -800,7 +806,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -833,9 +840,10 @@ "fields": "/^Financial Transfers / sec$/", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -843,7 +851,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(irate(moja_ml_tx_transfer_count[$__rate_interval]))", + "expr": "sum(irate(moja_ml_tx_transfer_count{cluster=\"$cluster\"}[$__rate_interval]))", "instant": true, "legendFormat": "Financial Transfers / sec", "refId": "A" @@ -878,7 +886,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -911,16 +920,17 @@ "fields": "/^Transfers / Sec$/", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(irate(moja_ml_tx_transfer_prepare_count[$__rate_interval]))", + "expr": "sum(irate(moja_ml_tx_transfer_prepare_count{cluster=\"$cluster\"}[$__rate_interval]))", "instant": true, "legendFormat": "Transfers / Sec", "refId": "A" @@ -955,7 +965,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -988,16 +999,17 @@ "fields": "/^Financial Fulfils / sec$/", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(irate(moja_ml_tx_transfer_fulfil_count[$__rate_interval]))", + "expr": "sum(irate(moja_ml_tx_transfer_fulfil_count{cluster=\"$cluster\"}[$__rate_interval]))", "instant": true, "legendFormat": "Financial Fulfils / sec", "refId": "A" @@ -1032,7 +1044,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1065,16 +1078,17 @@ "fields": "/^Transfers Prepare / sec$/", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(irate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\"}[$__rate_interval]))", + "expr": "sum(irate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, "interval": "", @@ -1112,7 +1126,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1145,16 +1160,17 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(irate(moja_ml_transfer_fulfil_count{serviceName=\"ml-service\"}[$__rate_interval]))", + "expr": "sum(irate(moja_ml_transfer_fulfil_count{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, "intervalFactor": 1, @@ -1190,7 +1206,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1223,9 +1240,10 @@ "fields": "/^Notification Events / sec$/", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1233,7 +1251,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(irate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\"}[$__rate_interval]))", + "expr": "sum(irate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\",cluster=\"$cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, "intervalFactor": 1, @@ -1270,7 +1288,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1303,9 +1322,10 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1313,7 +1333,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "histogram_quantile(0.95, sum(rate(moja_ml_tx_transfer_bucket[${__range_s}s])) by (le))", + "expr": "histogram_quantile(0.95, sum(rate(moja_ml_tx_transfer_bucket{cluster=\"$cluster\"}[${__range_s}s])) by (le))", "format": "time_series", "range": true, "refId": "A" @@ -1348,7 +1368,8 @@ "mode": "absolute", "steps": [ { - "color": "#299c46" + "color": "#299c46", + "value": null }, { "color": "rgba(237, 129, 40, 0.89)", @@ -1385,9 +1406,10 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { @@ -1395,7 +1417,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "(sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\"}[${__range_s}s])) - sum(increase(moja_ml_tx_transfer_bucket{le=\"1\"}[${__range_s}s]))) / sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\"}[${__range_s}s]))", + "expr": "(sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\",cluster=\"$cluster\"}[${__range_s}s])) - sum(increase(moja_ml_tx_transfer_bucket{le=\"1\",cluster=\"$cluster\"}[${__range_s}s]))) / sum(increase(moja_ml_tx_transfer_bucket{le=\"+Inf\"}[${__range_s}s]))", "range": true, "refId": "A" } @@ -1441,6 +1463,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1454,6 +1477,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1477,7 +1501,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1563,7 +1588,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(kafka_consumergroup_lag{topic=~\"topic-.*\", consumergroup=~\"ml-group.*\"}) by (consumergroup, topic)", + "expr": "sum(kafka_consumergroup_lag{topic=~\"topic-.*\", consumergroup=~\"ml-group.*\",cluster=\"$cluster\"}) by (consumergroup, topic)", "format": "time_series", "instant": false, "interval": "", @@ -1576,7 +1601,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(kafka_consumergroup_lag{topic=~\"topic-event\"}) by (consumergroup, topic)", + "expr": "sum(kafka_consumergroup_lag{topic=~\"topic-event\",cluster=\"$cluster\"}) by (consumergroup, topic)", "hide": true, "legendFormat": "{{topic}}", "refId": "B" @@ -1586,7 +1611,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(kafka_consumergroup_lag{topic=~\"topic-.*\", consumergroup=~\"cl-group-.*\"}) by (consumergroup, topic)", + "expr": "sum(kafka_consumergroup_lag{topic=~\"topic-.*\", consumergroup=~\"cl-group-.*\",cluster=\"$cluster\"}) by (consumergroup, topic)", "hide": true, "legendFormat": "{{topic}}", "refId": "C" @@ -1632,6 +1657,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1645,6 +1671,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1668,7 +1695,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -1757,7 +1785,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_ml_tx_transfer_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "legendFormat": "moja_ml_tx_transfer - success:{{success}}", "refId": "I" @@ -1767,7 +1795,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_prepare_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_ml_tx_transfer_prepare_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "legendFormat": "moja_ml_tx_transfer_prepare - success:{{success}}", "refId": "J" @@ -1777,7 +1805,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_fulfil_count[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_ml_tx_transfer_fulfil_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "legendFormat": "moja_ml_tx_transfer_fulfil - success:{{success}}", "refId": "K" @@ -1788,7 +1816,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\"}[$__rate_interval])) by (app, success)", + "expr": "sum(rate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval])) by (app, success)", "format": "time_series", "hide": false, "interval": "", @@ -1802,7 +1830,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_transfer_fulfil_count{serviceName=\"ml-service\"}[$__rate_interval])) by (app, success)", + "expr": "sum(rate(moja_ml_transfer_fulfil_count{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval])) by (app, success)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1815,7 +1843,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\"}[$__rate_interval])) by (app, success)", + "expr": "sum(rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\",cluster=\"$cluster\"}[$__rate_interval])) by (app, success)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1829,7 +1857,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_ml_notification_event_process_msg_count{serviceName=~\"ml-handler-notification|ml-service\"}[$__rate_interval])) by (app, action, success)", + "expr": "sum(rate(moja_ml_notification_event_process_msg_count{serviceName=~\"ml-handler-notification|ml-service\",cluster=\"$cluster\"}[$__rate_interval])) by (app, action, success)", "hide": false, "legendFormat": "Notification Events - {{action}} - success:{{success}}", "range": true, @@ -1841,7 +1869,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_ml_notification_event_delivery_count{serviceName=\"~ml-handler-notification|ml-service\"}[$__rate_interval])) by (app, action, status, success)", + "expr": "sum(rate(moja_ml_notification_event_delivery_count{serviceName=\"~ml-handler-notification|ml-service\",cluster=\"$cluster\"}[$__rate_interval])) by (app, action, status, success)", "hide": false, "legendFormat": "Notification Delivery - {{action}} - {{status}} - success:{{success}}", "range": true, @@ -1853,7 +1881,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\"}[$__rate_interval])) by (instance, kubernetes_pod_name, success)", + "expr": "sum(rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\",cluster=\"$cluster\"}[$__rate_interval])) by (instance, kubernetes_pod_name, success)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -1867,7 +1895,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\"}[$__rate_interval])) by (app, kubernetes_pod_name, success)", + "expr": "sum(rate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval])) by (app, kubernetes_pod_name, success)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -1881,7 +1909,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_ml_notification_event_getEndpoint_count{serviceName=~\"ml-handler-notification|ml-service\"}[$__rate_interval])) by (success)", + "expr": "sum(rate(moja_ml_notification_event_getEndpoint_count{serviceName=~\"ml-handler-notification|ml-service\",cluster=\"$cluster\"}[$__rate_interval])) by (success)", "hide": false, "legendFormat": "Notification GetEndpoint - success:{{success}}", "range": true, @@ -1892,7 +1920,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_count[$__rate_interval]))", + "expr": "sum(rate(moja_ml_tx_transfer_count{cluster=\"$cluster\"}[$__rate_interval]))", "legendFormat": "moja_ml_tx_transfer - avg", "refId": "L" }, @@ -1901,7 +1929,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_prepare_count[$__rate_interval]))", + "expr": "sum(rate(moja_ml_tx_transfer_prepare_count{cluster=\"$cluster\"}[$__rate_interval]))", "legendFormat": "moja_ml_tx_transfer_prepare - avg", "refId": "M" }, @@ -1910,7 +1938,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_fulfil_count[$__rate_interval]))", + "expr": "sum(rate(moja_ml_tx_transfer_fulfil_count{cluster=\"$cluster\"}[$__rate_interval]))", "legendFormat": "moja_ml_tx_transfer_fulfil - avg", "refId": "N" } @@ -1929,6 +1957,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1942,6 +1971,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1965,7 +1995,8 @@ "mode": "absolute", "steps": [ { - "color": "transparent" + "color": "transparent", + "value": null }, { "color": "red", @@ -2033,7 +2064,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_transfer_prepare_sum{serviceName=\"ml-service\"}[$__rate_interval]) / rate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\"}[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_transfer_prepare_sum{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_transfer_prepare_count{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval]) >=0)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -2047,7 +2078,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_transfer_fulfil_sum{serviceName=\"ml-service\"}[$__rate_interval]) / rate(moja_ml_transfer_fulfil_count{serviceName=\"ml-service\"}[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_transfer_fulfil_sum{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_transfer_fulfil_count{serviceName=\"ml-service\",cluster=\"$cluster\"}[$__rate_interval]) >=0)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -2061,7 +2092,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_notification_event_sum{serviceName=\"ml-handler-notification\"}[$__rate_interval]) / rate(moja_ml_notification_event_count{serviceName=\"ml-handler-notification\"}[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_notification_event_sum{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_notification_event_count{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) >=0)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -2075,7 +2106,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_notification_event_delivery_sum{serviceName=\"ml-handler-notification\"}[$__rate_interval]) / rate(moja_ml_notification_event_delivery_count{serviceName=\"ml-handler-notification\"}[$__rate_interval]) >=0) by (action, status, success)", + "expr": "avg(rate(moja_ml_notification_event_delivery_sum{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_notification_event_delivery_count{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) >=0) by (action, status, success)", "hide": false, "legendFormat": "Notification Deliveries - {{action}} - {{status}} - success:{{success}}", "range": true, @@ -2087,7 +2118,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_notification_event_delivery_sum{serviceName=\"ml-handler-notification\"}[$__rate_interval]) / rate(moja_ml_notification_event_delivery_count{serviceName=\"ml-handler-notification\"}[$__rate_interval]) >=0) by (kubernetes_pod_name, action, status, success)", + "expr": "avg(rate(moja_ml_notification_event_delivery_sum{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_notification_event_delivery_count{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) >=0) by (kubernetes_pod_name, action, status, success)", "hide": true, "instant": false, "legendFormat": "Notification Deliveries - {{kubernetes_pod_name}} - {{action}} - {{status}} - success:{{success}}", @@ -2099,7 +2130,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "rate(moja_ml_notification_event_sum{serviceName=\"ml-handler-notification\"}[$__rate_interval]) / rate(moja_ml_notification_event_count{serviceName=\"ml-handler-notification\"}[$__rate_interval]) >=0", + "expr": "rate(moja_ml_notification_event_sum{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_notification_event_count{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) >=0", "hide": true, "legendFormat": "Notification Events - {{kubernetes_pod_name}}", "range": true, @@ -2111,7 +2142,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_notification_event_getEndpoint_sum{serviceName=\"ml-handler-notification\"}[$__rate_interval]) / rate(moja_ml_notification_event_getEndpoint_count{serviceName=\"ml-handler-notification\"}[$__rate_interval]) >=0) by (kubernetes_pod_name)", + "expr": "avg(rate(moja_ml_notification_event_getEndpoint_sum{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_notification_event_getEndpoint_count{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) >=0) by (kubernetes_pod_name)", "hide": true, "legendFormat": "Notification GetEndPoint - {{kubernetes_pod_name}}", "range": true, @@ -2123,7 +2154,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_notification_event_getEndpoint_sum{serviceName=\"ml-handler-notification\"}[$__rate_interval]) / rate(moja_ml_notification_event_getEndpoint_count{serviceName=\"ml-handler-notification\"}[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_notification_event_getEndpoint_sum{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_notification_event_getEndpoint_count{serviceName=\"ml-handler-notification\",cluster=\"$cluster\"}[$__rate_interval]) >=0)", "hide": true, "legendFormat": "Notification GetEndPoint ", "range": true, @@ -2135,7 +2166,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_sum[$__rate_interval]) / rate(moja_ml_tx_transfer_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_ml_tx_transfer_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_tx_transfer_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "legendFormat": "moja_ml_tx_transfer - success:{{success}}", "range": true, "refId": "I" @@ -2146,7 +2177,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_prepare_sum[$__rate_interval]) / rate(moja_ml_tx_transfer_prepare_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_ml_tx_transfer_prepare_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_tx_transfer_prepare_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "legendFormat": "moja_ml_tx_transfer_prepare - success:{{success}}", "range": true, "refId": "J" @@ -2157,7 +2188,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_fulfil_sum[$__rate_interval]) / rate(moja_ml_tx_transfer_fulfil_count[$__rate_interval]) >=0) by (success)", + "expr": "avg(rate(moja_ml_tx_transfer_fulfil_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_tx_transfer_fulfil_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", "legendFormat": "moja_ml_tx_transfer_fulfil - success:{{success}}", "range": true, "refId": "K" @@ -2168,7 +2199,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_sum[$__rate_interval]) / irate(moja_ml_tx_transfer_count[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_tx_transfer_sum{cluster=\"$cluster\"}[$__rate_interval]) / irate(moja_ml_tx_transfer_count{cluster=\"$cluster\"}[$__rate_interval]) >=0)", "legendFormat": "moja_ml_tx_transfer - avg", "range": true, "refId": "L" @@ -2179,7 +2210,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_prepare_sum[$__rate_interval]) / rate(moja_ml_tx_transfer_prepare_count[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_tx_transfer_prepare_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_tx_transfer_prepare_count{cluster=\"$cluster\"}[$__rate_interval]) >=0)", "legendFormat": "moja_ml_tx_transfer_prepare - avg", "range": true, "refId": "M" @@ -2190,7 +2221,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "avg(rate(moja_ml_tx_transfer_fulfil_sum[$__rate_interval]) / rate(moja_ml_tx_transfer_fulfil_count[$__rate_interval]) >=0)", + "expr": "avg(rate(moja_ml_tx_transfer_fulfil_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_tx_transfer_fulfil_count{cluster=\"$cluster\"}[$__rate_interval]) >=0)", "legendFormat": "moja_ml_tx_transfer_fulfil - avg", "range": true, "refId": "N" @@ -2236,6 +2267,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2249,6 +2281,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2272,7 +2305,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2360,7 +2394,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum_over_time(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\", success!='true'}[$__interval]) by (app, success, error)", + "expr": "sum_over_time(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\", success!='true',cluster=\"$cluster\"}[$__interval]) by (app, success, error)", "hide": true, "legendFormat": "{{error}}", "range": true, @@ -2372,7 +2406,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\", success!='true'}[$__rate_interval])) by (app, success, error)", + "expr": "sum(rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\", success!='true',cluster=\"$cluster\"}[$__rate_interval])) by (app, success, error)", "hide": false, "legendFormat": "{{error}}", "range": true, @@ -2384,7 +2418,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\", success!='true'}[$__rate_interval])) by (app, success, error, kubernetes_pod_name)", + "expr": "sum(rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\", success!='true',cluster=\"$cluster\"}[$__rate_interval])) by (app, success, error, kubernetes_pod_name)", "hide": false, "legendFormat": "{{kubernetes_pod_name}} - {{error}}", "range": true, @@ -2396,7 +2430,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "rate(moja_ml_notification_event_sum{serviceName=~\"ml-handler-notification|ml-service\", success!='true'}[$__rate_interval]) / rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\", success!='true'}[$__rate_interval]) >= 0", + "expr": "rate(moja_ml_notification_event_sum{serviceName=~\"ml-handler-notification|ml-service\", success!='true',cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\", success!='true'}[$__rate_interval]) >= 0", "hide": false, "range": true, "refId": "D" @@ -2407,7 +2441,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "rate(moja_ml_notification_event_sum{serviceName=~\"ml-handler-notification|ml-service\", success!='false'}[$__rate_interval]) / rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\", success!='false'}[$__rate_interval]) >= 0", + "expr": "rate(moja_ml_notification_event_sum{serviceName=~\"ml-handler-notification|ml-service\", success!='false',cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_ml_notification_event_count{serviceName=~\"ml-handler-notification|ml-service\", success!='false'}[$__rate_interval]) >= 0", "hide": false, "range": true, "refId": "E" @@ -2417,7 +2451,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(moja_ml_tx_transfer_bucket[$__rate_interval])) by (le)", + "expr": "sum(rate(moja_ml_tx_transfer_bucket{cluster=\"$cluster\"}[$__rate_interval])) by (le)", "hide": false, "refId": "F" } @@ -2437,6 +2471,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2450,6 +2485,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2473,7 +2509,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2556,7 +2593,7 @@ "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(increase(moja_ml_notification_event_bucket{le=\"+Inf\", serviceName=~\"ml-handler-notification|ml-service\", success!='true'}[${__range_s}s])) by (app, success, error)", + "expr": "sum(increase(moja_ml_notification_event_bucket{le=\"+Inf\", serviceName=~\"ml-handler-notification|ml-service\", success!='true',cluster=\"$cluster\"}[${__range_s}s])) by (app, success, error)", "format": "time_series", "instant": false, "legendFormat": "{{error}}", @@ -2620,7 +2657,8 @@ "mode": "absolute", "steps": [ { - "color": "#299c46" + "color": "#299c46", + "value": null }, { "color": "rgba(237, 129, 40, 0.89)", @@ -2637,7 +2675,7 @@ "overrides": [] }, "gridPos": { - "h": 3, + "h": 7, "w": 4, "x": 0, "y": 62 @@ -2646,6 +2684,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -2655,16 +2695,17 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api.*'}[2m])) * 100", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api.*',cluster=\"$cluster\"}[2m])) * 100", "format": "time_series", "hide": true, "instant": true, @@ -2676,7 +2717,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api.*'}[2m]))", + "expr": "sum(irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api.*',cluster=\"$cluster\"}[2m]))", "refId": "B" } ], @@ -2711,7 +2752,8 @@ "mode": "absolute", "steps": [ { - "color": "#299c46" + "color": "#299c46", + "value": null }, { "color": "rgba(237, 129, 40, 0.89)", @@ -2728,7 +2770,7 @@ "overrides": [] }, "gridPos": { - "h": 3, + "h": 7, "w": 4, "x": 4, "y": 62 @@ -2737,6 +2779,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -2746,16 +2790,17 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api-adapter-service.*'}[2m])) / sum (machine_cpu_cores{}) * 100", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api-adapter-service.*',cluster=\"$cluster\"}[2m])) / sum (machine_cpu_cores{cluster=\"$cluster\"}) * 100", "format": "time_series", "hide": true, "instant": true, @@ -2767,7 +2812,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api-adapter-service.*'}[2m]))", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api-adapter-service.*',cluster=\"$cluster\"}[2m]))", "refId": "B" } ], @@ -2802,7 +2847,8 @@ "mode": "absolute", "steps": [ { - "color": "#299c46" + "color": "#299c46", + "value": null }, { "color": "rgba(237, 129, 40, 0.89)", @@ -2819,7 +2865,7 @@ "overrides": [] }, "gridPos": { - "h": 3, + "h": 7, "w": 4, "x": 8, "y": 62 @@ -2828,6 +2874,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 200, + "minVizWidth": 200, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -2837,16 +2885,17 @@ "values": false }, "showThresholdLabels": false, - "showThresholdMarkers": true + "showThresholdMarkers": true, + "sizing": "auto" }, - "pluginVersion": "10.0.2", + "pluginVersion": "10.2.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api-adapter-handler-notification.*'}[2m])) / sum (machine_cpu_cores{}) * 100", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api-adapter-handler-notification.*',cluster=\"$cluster\"}[2m])) / sum (machine_cpu_cores{cluster=\"$cluster\"}) * 100", "format": "time_series", "hide": true, "instant": true, @@ -2858,7 +2907,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api-adapter-handler-notification.*'}[2m]))", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*ml-api-adapter-handler-notification.*',cluster=\"$cluster\"}[2m]))", "refId": "B" } ], @@ -2875,7 +2924,7 @@ "h": 1, "w": 24, "x": 0, - "y": 65 + "y": 69 }, "id": 28, "panels": [], @@ -2902,6 +2951,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2915,6 +2965,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2937,7 +2988,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2953,7 +3005,7 @@ "h": 8, "w": 24, "x": 0, - "y": 66 + "y": 70 }, "id": 46, "options": { @@ -2982,7 +3034,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "moja_ml_nodejs_heap_size_total_bytes{serviceName=~\"ml-s.*\"}", + "expr": "moja_ml_nodejs_heap_size_total_bytes{serviceName=~\"ml-s.*\",cluster=\"$cluster\"}", "legendFormat": "heap_total-{{kubernetes_pod_name}}", "refId": "A" }, @@ -2991,7 +3043,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "moja_ml_nodejs_heap_size_used_bytes{serviceName=~\"ml-s.*\"}", + "expr": "moja_ml_nodejs_heap_size_used_bytes{serviceName=~\"ml-s.*\",cluster=\"$cluster\"}", "legendFormat": "heap_used-{{kubernetes_pod_name}}", "refId": "B" }, @@ -3000,7 +3052,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "moja_ml_nodejs_external_memory_bytes{serviceName=~\"ml-s.*\"}", + "expr": "moja_ml_nodejs_external_memory_bytes{serviceName=~\"ml-s.*\",cluster=\"$cluster\"}", "legendFormat": "ext_memory-{{kubernetes_pod_name}}", "refId": "C" } @@ -3020,6 +3072,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3033,6 +3086,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -3055,7 +3109,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3071,7 +3126,7 @@ "h": 7, "w": 24, "x": 0, - "y": 74 + "y": 78 }, "id": 2, "links": [], @@ -3100,7 +3155,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum (rate (moja_ml_process_cpu_seconds_total{serviceName=~\"ml-.*\"}[2m])) by (kubernetes_pod_name)", + "expr": "sum (rate (moja_ml_process_cpu_seconds_total{serviceName=~\"ml-.*\",cluster=\"$cluster\"}[2m])) by (kubernetes_pod_name)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -3112,7 +3167,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(\n rate(container_cpu_usage_seconds_total{pod_name=~'.*ml.*'}[2m]))\nby (pod_name)", + "expr": "sum(\n rate(container_cpu_usage_seconds_total{pod_name=~'.*ml.*',cluster=\"$cluster\"}[2m]))\nby (pod_name)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -3124,7 +3179,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(container_cpu_usage_seconds_total{pod_name=~'.*ml.*'}[2m]))", + "expr": "sum(rate(container_cpu_usage_seconds_total{pod_name=~'.*ml.*',cluster=\"$cluster\"}[2m]))", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -3136,7 +3191,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "rate(moja_ml_process_cpu_seconds_total{serviceName=~\"ml-.*\"}[$__rate_interval]) * 100", + "expr": "rate(moja_ml_process_cpu_seconds_total{serviceName=~\"ml-.*\",cluster=\"$cluster\"}[$__rate_interval]) * 100", "legendFormat": "{{kubernetes_pod_name}}", "refId": "B" } @@ -3154,7 +3209,7 @@ "h": 1, "w": 24, "x": 0, - "y": 81 + "y": 85 }, "id": 34, "panels": [], @@ -3181,6 +3236,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3194,6 +3250,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -3217,7 +3274,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3233,7 +3291,7 @@ "h": 4, "w": 24, "x": 0, - "y": 82 + "y": 86 }, "id": 18, "links": [], @@ -3258,7 +3316,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "kube_deployment_spec_replicas{deployment=~\".*ml-api-.*\"}", + "expr": "kube_deployment_spec_replicas{deployment=~\".*ml-api-.*\",cluster=\"$cluster\"}", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -3270,7 +3328,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "kube_deployment_spec_replicas{deployment=~\".*simnotifhandler.*\"}", + "expr": "kube_deployment_spec_replicas{deployment=~\".*simnotifhandler.*\",cluster=\"$cluster\"}", "legendFormat": "{{deployment}}", "refId": "B" } @@ -3289,6 +3347,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3302,6 +3361,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -3324,7 +3384,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -3340,7 +3401,7 @@ "h": 7, "w": 24, "x": 0, - "y": 86 + "y": 90 }, "id": 10, "links": [], @@ -3363,7 +3424,7 @@ "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "avg(moja_ml_nodejs_eventloop_lag_seconds{serviceName=~\"ml.*\"}) by (app)", + "expr": "avg(moja_ml_nodejs_eventloop_lag_seconds{serviceName=~\"ml.*\",cluster=\"$cluster\"}) by (app)", "format": "time_series", "intervalFactor": 1, "legendFormat": "{{app}}", @@ -3375,11 +3436,30 @@ } ], "refresh": "5s", - "schemaVersion": 38, - "style": "dark", + "schemaVersion": 39, "tags": [], "templating": { - "list": [] + "list": [ + { + "current": {}, + "definition": "label_values(node_uname_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(node_uname_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] }, "time": { "from": "now-5m", @@ -3412,7 +3492,7 @@ }, "timezone": "", "title": "Mojaloop - ML-API", - "uid": "5z9mkZ-msa", + "uid": "5z9mkZ-msa-v001", "version": 1, "weekStart": "" -} +} \ No newline at end of file diff --git a/monitoring/dashboards/mojaloop/dashboard-performance-troubleshooting.json b/monitoring/dashboards/mojaloop/dashboard-performance-troubleshooting.json new file mode 100644 index 000000000..7d4730053 --- /dev/null +++ b/monitoring/dashboards/mojaloop/dashboard-performance-troubleshooting.json @@ -0,0 +1,3139 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "panel", + "id": "barchart", + "name": "Bar chart", + "version": "" + }, + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.2.3" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "builtIn": 1, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 12, + "title": "Node information", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 1 + }, + "id": 13, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate(node_cpu_seconds_total{mode!=\"idle\", cluster=\"$cluster\"}[1m])) by (instance) /\nsum(irate(node_cpu_seconds_total{cluster=\"$cluster\"}[1m])) by (instance)\n* on(instance) group_left (nodename) node_uname_info{nodename=~\".+\", cluster=\"$cluster\"}", + "instant": false, + "legendFormat": "{{nodename}}", + "range": true, + "refId": "A" + } + ], + "title": "CPU utilisation (%)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 6, + "y": 1 + }, + "id": 14, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "(\n 1- (node_memory_MemAvailable_bytes{cluster=\"$cluster\"}/node_memory_MemTotal_bytes{cluster=\"$cluster\"})\n) * on(instance) group_left (nodename) node_uname_info{nodename=~\".+\", cluster=\"$cluster\"}", + "instant": false, + "legendFormat": "{{nodename}}", + "range": true, + "refId": "A" + } + ], + "title": "RAM utilisation (%)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 12, + "y": 1 + }, + "id": 15, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "(\n 1-(node_filesystem_avail_bytes{device=\"/dev/mapper/ubuntu--vg-ubuntu--lv\", cluster=\"$cluster\"}/node_filesystem_size_bytes{device=\"/dev/mapper/ubuntu--vg-ubuntu--lv\", cluster=\"$cluster\"})\n) * on(instance) group_left (nodename) node_uname_info{nodename=~\".+\", cluster=\"$cluster\"}", + "instant": false, + "legendFormat": "{{nodename}}", + "range": true, + "refId": "A" + } + ], + "title": "Disk utilisation (%)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 18, + "y": 1 + }, + "id": 16, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "max(node_uname_info{job=\"node-exporter\", nodename=~\".+(moja|kafka|sts).+\", cluster=\"$cluster\"}) by (nodename)", + "format": "table", + "instant": true, + "legendFormat": "auto", + "range": false, + "refId": "A" + } + ], + "title": "Node list", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": {} + } + }, + { + "id": "sortBy", + "options": {} + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows processes which are consuming more than 70% of the node CPU.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 6 + }, + "id": 22, + "options": { + "legend": { + "calcs": [ + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "(\n sum(rate(namedprocess_namegroup_cpu_seconds_total{cluster=\"$cluster\"}[1m])) by (groupname,nodename)\n / on (nodename) group_left\n sum(rate(node_cpu_seconds_total{cluster=\"$cluster\"}[1m])) by (nodename)\n) > 0.7", + "hide": false, + "instant": false, + "legendFormat": "{{nodename}}:{{groupname}}", + "range": true, + "refId": "A" + } + ], + "title": "Offending processes - High node CPU utilisation ", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows processes which are consuming more than 70% of the node memory.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 6 + }, + "id": 23, + "options": { + "legend": { + "calcs": [ + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "(\n namedprocess_namegroup_memory_bytes{memtype=\"resident\", cluster=\"$cluster\"} \n / on (nodename) group_left\n node_memory_MemTotal_bytes{cluster=\"$cluster\"}\n) > 0.7\n", + "instant": false, + "legendFormat": "{{nodename}}:{{groupname}}", + "range": true, + "refId": "A" + } + ], + "title": "Offending processes - High node memory utilisation ", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows network interfaces on each node which are consuming more than 1 MiB/s bandwidth (download).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 11 + }, + "id": 30, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Last", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(node_network_receive_bytes_total{device!~\"cali.*|lo\",cluster=\"$cluster\"}[1m])) by (nodename,instance,device) > 1024 * 1024", + "instant": false, + "legendFormat": "{{nodename}}/{{device}}", + "range": true, + "refId": "A" + } + ], + "title": "Network I/O - Download", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows network interfaces on each node which are consuming more than 1 MiB/s bandwidth (upload)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 11 + }, + "id": 31, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Last", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(node_network_transmit_bytes_total{device!~\"cali.*|lo\",cluster=\"$cluster\"}[1m])) by (nodename,instance,device) > 1024 * 1024", + "instant": false, + "legendFormat": "{{nodename}}/{{device}}", + "range": true, + "refId": "A" + } + ], + "title": "Network I/O - Upload", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows disks on each node which are consuming more than 1 MiB/s disk read bandwidth ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 32, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Last", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(node_disk_read_bytes_total{cluster=\"$cluster\"}[1m])) by (instance,nodename,device) > 1024 * 1024", + "instant": false, + "legendFormat": "{{nodename}}/{{device}}", + "range": true, + "refId": "A" + } + ], + "title": "Disk I/O - Read", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows disks on each node which are consuming more than 1 MiB/s disk write bandwidth ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 33, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Last", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(node_disk_written_bytes_total{cluster=\"$cluster\"}[1m])) by (instance,nodename,device) > 1024 * 1024", + "instant": false, + "legendFormat": "{{nodename}}/{{device}}", + "range": true, + "refId": "A" + } + ], + "title": "Disk I/O - Write", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 11, + "panels": [], + "title": "Container Information", + "type": "row" + }, + { + "": { + "type": "prometheus", + "uid": "Prometheus" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 9, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (serviceName, container)({error=~\"Error: read ECONNRESET\", cluster=\"$cluster\"})", + "instant": false, + "legendFormat": "ECONNRESET - {{serviceName}} - {{container}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (serviceName, container)({error=~\"Error: socket hang up\", cluster=\"$cluster\"})", + "hide": false, + "instant": false, + "legendFormat": "Socker hang up - {{serviceName}} - {{container}}", + "range": true, + "refId": "B" + } + ], + "title": "ECONNRESET and Socket hang up ERRORs", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 26 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (container)(increase(kube_pod_container_status_restarts_total{namespace=~\"mojaloop\",container=~\"account-lookup-service|account-lookup-service-admin|centralledger-handler-admin-transfer|centralledger-handler-timeout|centralledger-handler-transfer-fulfil|centralledger-handler-transfer-get|centralledger-handler-transfer-position|centralledger-service|kafka\", cluster=\"$cluster\"}[5m]))", + "hide": false, + "instant": false, + "legendFormat": "{{container}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (container)(increase(kube_pod_container_status_restarts_total{namespace=~\"mojaloop\",container=~\"account-lookup-service-sidecar|account-lookup-service-admin-sidcar|centralledger-handler-admin-transfer-sidecar|centralledger-handler-timeout-sidecar|centralledger-handler-transfer-fulfil-sidecar|centralledger-handler-transfer-fulfil-sidecar|centralledger-handler-transfer-get-sidecar|centralledger-handler-transfer-position-sidecar|centralledger-service-sidecar\", cluster=\"$cluster\"}[5m]))", + "hide": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (container)(increase(kube_pod_container_status_restarts_total{container=\"mysql\",namespace=\"mojaloop-db\", cluster=\"$cluster\"}[5m]))", + "hide": true, + "instant": false, + "legendFormat": "{{instance}}", + "range": true, + "refId": "C" + } + ], + "title": "mojaloop container restarting in last 5m", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 6, + "y": 26 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (container)(increase(kube_pod_container_status_restarts_total{namespace=~\"mojaloop\",container=~\"account-lookup-service-sidecar|account-lookup-service-admin-sidcar|centralledger-handler-admin-transfer-sidecar|centralledger-handler-timeout-sidecar|centralledger-handler-transfer-fulfil-sidecar|centralledger-handler-transfer-fulfil-sidecar|centralledger-handler-transfer-get-sidecar|centralledger-handler-transfer-position-sidecar|centralledger-service-sidecar\", cluster=\"$cluster\"}[5m]))", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Mojaloop sidecar restarting last 5 minutes", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 12, + "y": 26 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (pod)(increase(kube_pod_container_status_restarts_total{container=\"mysql\",namespace=\"mojaloop-db\", cluster=\"$cluster\"}[5m]))", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Databases restarting last 5 minutes", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 18, + "y": 26 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (pod)(increase(kube_pod_container_status_restarts_total{container=\"kafka\",namespace=\"mojaloop\", cluster=\"$cluster\"}[5m]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Kafka restarting last 5 minutes", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 31 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "container_memory_usage_bytes{namespace=~\"mojaloop\",container=~\"account-lookup-service|account-lookup-service-admin|centralledger-handler-admin-transfer|centralledger-handler-timeout|centralledger-handler-transfer-fulfil|centralledger-handler-transfer-get|centralledger-handler-transfer-position|centralledger-service|handler-pos-batch|kafka\", cluster=\"$cluster\"}", + "instant": false, + "legendFormat": "{{container}}-{{id}}", + "range": true, + "refId": "A" + } + ], + "title": "Mojaloop containers memory usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 31 + }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(container_cpu_usage_seconds_total{namespace=~\"mojaloop\",container=~\"account-lookup-service|account-lookup-service-admin|centralledger-handler-admin-transfer|centralledger-handler-timeout|centralledger-handler-transfer-fulfil|centralledger-handler-transfer-get|centralledger-handler-transfer-position|centralledger-service|kafka|handler-pos-batch\", cluster=\"$cluster\"}[5m])", + "hide": false, + "instant": false, + "legendFormat": "{{container}} - {{id}}", + "range": true, + "refId": "A" + } + ], + "title": "Mojaloop container cpu usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows mojaloop pods which are consuming more than 1 MiB/s network download bandwidth ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 38 + }, + "id": 34, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(container_network_receive_bytes_total{namespace=~\"mojaloop\", pod=~\".*(account-lookup-service|account-lookup-service-admin|centralledger-handler-admin-transfer|centralledger-handler-timeout|centralledger-handler-transfer-fulfil|centralledger-handler-transfer-get|centralledger-handler-transfer-position|centralledger-service|handler-pos-batch|kafka).*\", cluster=\"$cluster\"}[5m]) > 1024 * 1024", + "instant": false, + "legendFormat": "{{pod}}", + "range": true, + "refId": "A" + } + ], + "title": "Mojaloop pods Network I/O - Download", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows mojaloop pods which are consuming more than 1 MiB/s network upload bandwidth ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 38 + }, + "id": 35, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(container_network_transmit_bytes_total{namespace=~\"mojaloop\", pod=~\".*(account-lookup-service|account-lookup-service-admin|centralledger-handler-admin-transfer|centralledger-handler-timeout|centralledger-handler-transfer-fulfil|centralledger-handler-transfer-get|centralledger-handler-transfer-position|centralledger-service|handler-pos-batch|kafka).*\", cluster=\"$cluster\"}[5m]) > 1024 * 1024 ", + "instant": false, + "legendFormat": "{{pod}}", + "range": true, + "refId": "A" + } + ], + "title": "Mojaloop pods Network I/O - Upload", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 45 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "container_memory_usage_bytes{namespace=~\"mojaloop\",container=~\"account-lookup-service-sidecar|account-lookup-service-admin-sidcar|centralledger-handler-admin-transfer-sidecar|centralledger-handler-timeout-sidecar|centralledger-handler-transfer-fulfil-sidecar|centralledger-handler-transfer-fulfil-sidecar|centralledger-handler-transfer-get-sidecar|centralledger-handler-transfer-position-sidecar|centralledger-service-sidecar\", cluster=\"$cluster\"}", + "hide": false, + "instant": false, + "legendFormat": "{{container}}-{{id}}", + "range": true, + "refId": "A" + } + ], + "title": "Mojaloop sidecar containers memory usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 45 + }, + "id": 7, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(container_cpu_usage_seconds_total{namespace=~\"mojaloop\",container=~\"account-lookup-service-sidecar|account-lookup-service-admin-sidcar|centralledger-handler-admin-transfer-sidecar|centralledger-handler-timeout-sidecar|centralledger-handler-transfer-fulfil-sidecar|centralledger-handler-transfer-fulfil-sidecar|centralledger-handler-transfer-get-sidecar|centralledger-handler-transfer-position-sidecar|centralledger-service-sidecar\", cluster=\"$cluster\"}[5m])", + "instant": false, + "legendFormat": "{{container}}-{{id}}", + "range": true, + "refId": "A" + } + ], + "title": "Mojaloop sidecar container cpu usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 52 + }, + "id": 20, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "container_memory_usage_bytes{namespace=~\"mojaloop-db\", container=\"mysql\", cluster=\"$cluster\"}", + "hide": false, + "instant": false, + "legendFormat": "{{pod}}", + "range": true, + "refId": "A" + } + ], + "title": "Database containers memory usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 52 + }, + "id": 21, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(container_cpu_usage_seconds_total{namespace=~\"mojaloop-db\", container=\"mysql\", cluster=\"$cluster\"}[5m])", + "instant": false, + "legendFormat": "{{pod}}", + "range": true, + "refId": "A" + } + ], + "title": "Database container cpu usage", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 59 + }, + "id": 25, + "panels": [], + "title": "Mojaloop", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 60 + }, + "id": 17, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": true + }, + "showHeader": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(kube_deployment_status_replicas_available{namespace=\"mojaloop\",deployment=~\".*(account-lookup-service|account-lookup-service-admin|centralledger-handler-admin-transfer|centralledger-handler-timeout|centralledger-handler-transfer-fulfil|centralledger-handler-transfer-get|centralledger-handler-transfer-position|centralledger-service).*\", cluster=\"$cluster\"}) by (deployment)", + "format": "table", + "instant": true, + "legendFormat": "{{deployment}}", + "range": false, + "refId": "A" + } + ], + "title": "Mojaloop replicaset count", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 60 + }, + "id": 18, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": true + }, + "showHeader": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(kube_statefulset_status_replicas_available{namespace=\"mojaloop-db\", statefulset=~\".*(mysql).*\", cluster=\"$cluster\"}) by (statefulset)", + "format": "table", + "instant": true, + "legendFormat": "{{statefulset}}", + "range": false, + "refId": "A" + } + ], + "title": "MySQL statefulset count", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 60 + }, + "id": 19, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": true + }, + "showHeader": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(kube_statefulset_status_replicas_available{namespace=\"mojaloop\", statefulset=~\".*(kafka).*\", cluster=\"$cluster\"}) by (statefulset)", + "format": "table", + "instant": true, + "legendFormat": "{{statefulset}}", + "range": false, + "refId": "A" + } + ], + "title": "Kafka statefulset count", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 66 + }, + "id": 24, + "panels": [], + "title": "My SQL", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 24, + "x": 0, + "y": 67 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (pod)(max_over_time(mysql_global_status_threads_connected{namespace=\"mojaloop-db\", cluster=\"$cluster\"}[5m]))", + "hide": true, + "instant": false, + "legendFormat": "Connections {{pod}} last 5m", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (pod)(mysql_global_status_max_used_connections{namespace=\"mojaloop-db\", cluster=\"$cluster\"})", + "hide": false, + "instant": false, + "legendFormat": "Max Use Connections {{pod}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum by (pod)(mysql_global_variables_max_connections{namespace=\"mojaloop-db\", cluster=\"$cluster\"})", + "hide": false, + "instant": false, + "legendFormat": "Max Connections {{pod}}", + "range": true, + "refId": "C" + } + ], + "title": "MySQL Connections", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 71 + }, + "id": 26, + "panels": [], + "title": "Kafka", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows the no. of partitions for each topic", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 72 + }, + "id": 27, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "none", + "tooltip": { + "mode": "single", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 0 + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(kafka_topic_partitions{cluster=\"$cluster\"}) by (topic)", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A" + } + ], + "title": "Partition count w-r-t topic", + "type": "barchart" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows the no. of consumers in each consumer group", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 72 + }, + "id": 29, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "none", + "tooltip": { + "mode": "single", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 0 + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(kafka_consumergroup_members{cluster=\"$cluster\"}) by (consumergroup)", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A" + } + ], + "title": "Consumers count w-r-t consumer group", + "type": "barchart" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Shows the maximum lag (in message count) faced by a consumer in given (consumergroup,topic). ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 72 + }, + "id": 28, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "none", + "tooltip": { + "mode": "single", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 0 + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "max(clamp_min(kafka_consumergroup_lag{cluster=\"$cluster\"},0)) by (consumergroup,topic)", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A" + } + ], + "title": "Max consumer group lag", + "type": "barchart" + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "datasource": { + "type": "prometheus", + "uid": "dd328bf5-4f0c-49cc-af57-e6081911fc48" + }, + "filters": [], + "hide": 0, + "name": "Filters", + "skipUrlSync": false, + "type": "adhoc" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(node_uname_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(node_uname_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Performance Troubleshooting", + "uid": "f1068daf-16a2-4e52-9a57-1a662092584-v005", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/monitoring/dashboards/mojaloop/dashboard-quoting-service.json b/monitoring/dashboards/mojaloop/dashboard-quoting-service.json new file mode 100644 index 000000000..6ac79f863 --- /dev/null +++ b/monitoring/dashboards/mojaloop/dashboard-quoting-service.json @@ -0,0 +1,1802 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "panel", + "id": "gauge", + "name": "Gauge", + "version": "" + }, + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.2.3" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [ + { + "asDropdown": false, + "icon": "external link", + "includeVars": true, + "keepTime": true, + "tags": [], + "targetBlank": true, + "title": "Image render", + "tooltip": "Image Render", + "type": "link", + "url": "/render/d/${__dashboard.uid}/${__dashboard}?height=4000&width=2000" + } + ], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 62, + "panels": [], + "title": "Database Cache Hits", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsNull", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 13, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 61, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(moja_qs_database_get_cache_value_count{cluster=\"$cluster\"}[$__rate_interval])) by (queryName, hit) ", + "hide": false, + "legendFormat": "{{queryName}}-{{hit}}", + "range": true, + "refId": "D" + } + ], + "title": "Models - Cache Hits (True vs False)", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 59, + "panels": [], + "title": "Quote Resource Metric Totals", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "text", + "mode": "palette-classic" + }, + "mappings": [ + { + "options": { + "match": "null+nan", + "result": { + "index": 0, + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "reqs" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 1, + "y": 15 + }, + "id": 17, + "interval": "1s", + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "max" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(moja_qs_quotes_id_get_count{cluster=\"$cluster\"})", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "", + "range": true, + "refId": "A" + } + ], + "title": "Ing GET /quotes/* requests", + "transformations": [ + { + "id": "calculateField", + "options": { + "binary": { + "left": "sum(moja_qs_ing_getQuotesByTypeAndID_count)", + "reducer": "sum", + "right": "sum(moja_qs_ing_getQuotesByTypeIDAndSubID_count)" + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + }, + "replaceFields": true + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "text", + "mode": "palette-classic" + }, + "mappings": [ + { + "options": { + "match": "null+nan", + "result": { + "index": 0, + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "reqs" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 15 + }, + "id": 26, + "interval": "1s", + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "max" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(moja_qs_quotes_id_put_count{cluster=\"$cluster\"})", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "", + "range": true, + "refId": "A" + } + ], + "title": "Ing PUT /quotes/* requests", + "transformations": [ + { + "id": "calculateField", + "options": { + "binary": { + "left": "sum(moja_qs_ing_getQuotesByTypeAndID_count)", + "reducer": "sum", + "right": "sum(moja_qs_ing_getQuotesByTypeIDAndSubID_count)" + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + }, + "replaceFields": true + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "text", + "mode": "palette-classic" + }, + "mappings": [ + { + "options": { + "match": "null+nan", + "result": { + "index": 0, + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "reqs" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 12, + "y": 15 + }, + "id": 31, + "interval": "1s", + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "max" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(moja_qs_quotes_id_put_error_count{cluster=\"$cluster\"})", + "hide": false, + "instant": false, + "range": true, + "refId": "A" + } + ], + "title": "Ing PUT /quotes/*/error requests", + "transformations": [ + { + "id": "calculateField", + "options": { + "binary": { + "left": "sum(moja_qs_ing_putQuotesErrorByTypeAndID_count)", + "reducer": "sum", + "right": "sum(moja_qs_ing_putQuotesErrorByTypeIDAndSubID_count)" + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + }, + "replaceFields": true + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "text", + "mode": "palette-classic" + }, + "mappings": [ + { + "options": { + "match": "null+nan", + "result": { + "index": 0, + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "reqs" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 17, + "y": 15 + }, + "id": 60, + "interval": "1s", + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "max" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(moja_qs_quotes_post_count{cluster=\"$cluster\"})", + "hide": false, + "instant": false, + "range": true, + "refId": "A" + } + ], + "title": "Ing POST /quotes requests", + "transformations": [ + { + "id": "calculateField", + "options": { + "binary": { + "left": "sum(moja_qs_ing_putQuotesErrorByTypeAndID_count)", + "reducer": "sum", + "right": "sum(moja_qs_ing_putQuotesErrorByTypeIDAndSubID_count)" + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + }, + "replaceFields": true + } + } + ], + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 9, + "panels": [], + "title": "Quote Resource Performance Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 19 + }, + "id": 1, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "avg(rate(moja_qs_quotes_post_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_qs_quotes_post_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", + "instant": false, + "legendFormat": "postQuotes success:{{success}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "avg(rate(moja_qs_quotes_id_put_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_qs_quotes_id_put_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", + "hide": false, + "instant": false, + "legendFormat": "putQuotesByID success:{{success}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "avg(rate(moja_qs_quotes_id_get_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_qs_quotes_id_get_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", + "hide": false, + "instant": false, + "legendFormat": "getQuotesByID success:{{success}}", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "avg(rate(moja_qs_quotes_id_put_error_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_qs_quotes_id_put_error_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success)", + "hide": false, + "instant": false, + "legendFormat": "putQuotesByIDError success:{{success}}", + "range": true, + "refId": "D" + } + ], + "title": "Quote Handlers Ingress - Processing Time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 19 + }, + "id": 2, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(moja_qs_quotes_id_put_error_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", + "instant": false, + "interval": "", + "legendFormat": "putQuotesIDError success:{{success}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(moja_qs_quotes_id_get_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", + "hide": false, + "instant": false, + "legendFormat": "getQuotesByID success:{{success}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(moja_qs_quotes_id_put_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", + "hide": false, + "instant": false, + "legendFormat": "putQuotesByID success:{{success}}", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(moja_qs_quotes_post_count{cluster=\"$cluster\"}[$__rate_interval])) by (success)", + "hide": false, + "instant": false, + "legendFormat": "postQuotes success:{{success}}", + "range": true, + "refId": "D" + } + ], + "title": "Quote Handler Ingress - Processing Per Second", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 5, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(rate(moja_qs_model_quote_sum{cluster=\"$cluster\"}[$__rate_interval]) / rate(moja_qs_model_quote_count{cluster=\"$cluster\"}[$__rate_interval]) >=0) by (success, queryName)", + "hide": false, + "instant": false, + "legendFormat": "{{queryName}} success:{{success}}", + "range": true, + "refId": "A" + } + ], + "title": "Quote Model - Processing Time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "always", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [] + }, + "gridPos": { + "h": 16, + "w": 24, + "x": 0, + "y": 40 + }, + "id": 6, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(moja_qs_model_quote_count{cluster=\"$cluster\"}[$__rate_interval])) by (success, queryName)", + "instant": false, + "interval": "", + "legendFormat": "{{queryName}} success:{{success}}", + "range": true, + "refId": "A" + } + ], + "title": "Quote Model - Processing Per Second", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 56 + }, + "id": 25, + "panels": [], + "title": "CPU Usage", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "QS Total CPU Usage", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 50 + }, + { + "color": "#d44a3a", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 5, + "x": 0, + "y": 57 + }, + "id": 24, + "links": [], + "maxDataPoints": 100, + "options": { + "minVizHeight": 200, + "minVizWidth": 200, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (irate (container_cpu_usage_seconds_total{pod_name=~'.*quoting-service.*', cluster=\"$cluster\"}[2m])) * 100", + "format": "time_series", + "hide": true, + "instant": true, + "intervalFactor": 1, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate (container_cpu_usage_seconds_total{pod_name=~'.*quoting-service.*', cluster=\"$cluster\"}[2m]))", + "range": true, + "refId": "B" + } + ], + "title": "QS Total CPU Usage", + "type": "gauge" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 64 + }, + "id": 21, + "panels": [], + "title": "Resource Usage by Pods", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 65 + }, + "id": 22, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "moja_qs_nodejs_heap_size_total_bytes{serviceName=~\"quoting-service.*\", cluster=\"$cluster\"}", + "legendFormat": "heap_total-{{instance}} {{kubernetes_pod_name}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "moja_qs_nodejs_heap_size_used_bytes{serviceName=~\"quoting-service.*\", cluster=\"$cluster\"}", + "legendFormat": "heap_used-{{instance}} {{kubernetes_pod_name}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "moja_qs_nodejs_external_memory_bytes{serviceName=~\"quoting-service.*\", cluster=\"$cluster\"}", + "legendFormat": "ext_memory-{{instance}} {{kubernetes_pod_name}}", + "range": true, + "refId": "C" + } + ], + "title": "QS - Memory Usage by Pod", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "QS - CPU Usage in Seconds by Pod", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 73 + }, + "id": 23, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate (moja_qs_process_cpu_seconds_total{serviceName=~\"account-lookup.*\", cluster=\"$cluster\"}[2m])) by (kubernetes_pod_name)", + "format": "time_series", + "hide": true, + "intervalFactor": 1, + "legendFormat": "{{kubernetes_pod_name}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(\n rate(container_cpu_usage_seconds_total{pod_name=~'.*account-lookup.*', cluster=\"$cluster\"}[2m]))\nby (pod_name)", + "format": "time_series", + "hide": true, + "intervalFactor": 1, + "legendFormat": "{{pod_name}}", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(rate(container_cpu_usage_seconds_total{pod_name=~'.*account-lookup.*', cluster=\"$cluster\"}[2m]))", + "format": "time_series", + "hide": true, + "intervalFactor": 1, + "legendFormat": "All Total", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(moja_qs_process_cpu_seconds_total{serviceName=~\"account-lookup.*\", cluster=\"$cluster\"}[30s]) * 100", + "legendFormat": "{{kubernetes_pod_name}}", + "range": true, + "refId": "B" + } + ], + "title": "QS - CPU Usage in Seconds by Pod", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 80 + }, + "id": 18, + "panels": [], + "title": "Misc", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 24, + "x": 0, + "y": 81 + }, + "id": 19, + "links": [], + "options": { + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "10.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "kube_deployment_spec_replicas{deployment=~\".*quoting-service.*\", cluster=\"$cluster\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{deployment}}", + "range": true, + "refId": "A" + } + ], + "title": "QS - # Nodes for each Components", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 85 + }, + "id": 20, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "avg(moja_qs_nodejs_eventloop_lag_seconds{serviceName=~\"quoting-service.*\", cluster=\"$cluster\"}) by (app)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{app}}", + "range": true, + "refId": "A" + } + ], + "title": "QS - Event Loop Lag in Seconds", + "type": "timeseries" + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(node_uname_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(node_uname_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Mojaloop - Quoting Service", + "uid": "a4373cfa-5295-430d-9e53-a59c008ffa6-v001", + "version": 2, + "weekStart": "" +} \ No newline at end of file diff --git a/monitoring/dashboards/mojaloop/dashboard-simulators.json b/monitoring/dashboards/mojaloop/dashboard-simulators.json index 91d7a0975..8a7a6169b 100644 --- a/monitoring/dashboards/mojaloop/dashboard-simulators.json +++ b/monitoring/dashboards/mojaloop/dashboard-simulators.json @@ -9,17 +9,18 @@ "pluginName": "Prometheus" } ], + "__elements": {}, "__requires": [ { "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "6.4.2" + "version": "10.2.3" }, { "type": "panel", "id": "graph", - "name": "Graph", + "name": "Graph (old)", "version": "" }, { @@ -30,8 +31,8 @@ }, { "type": "panel", - "id": "singlestat", - "name": "Singlestat", + "id": "stat", + "name": "Stat", "version": "" } ], @@ -39,7 +40,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -49,14 +53,18 @@ ] }, "editable": true, - "gnetId": null, + "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": null, "links": [], + "liveNow": false, "panels": [ { "collapsed": false, - "datasource": "${DS_PROMETHEUS}", + "datasource": { + "type": "prometheus", + "uid": "645fe2f7-ce19-433c-b746-afca1936af31" + }, "gridPos": { "h": 1, "w": 24, @@ -65,6 +73,15 @@ }, "id": 4, "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "645fe2f7-ce19-433c-b746-afca1936af31" + }, + "refId": "A" + } + ], "title": "Processing", "type": "row" }, @@ -73,8 +90,17 @@ "bars": false, "dashLength": 10, "dashes": false, - "datasource": "${DS_PROMETHEUS}", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "description": "Simulator - Processed per sec", + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -83,6 +109,7 @@ "x": 0, "y": 1 }, + "hiddenSeries": false, "id": 2, "legend": { "alignAsTable": true, @@ -102,9 +129,10 @@ "links": [], "nullPointMode": "null as zero", "options": { - "dataLinks": [] + "alertThreshold": true }, "percentage": false, + "pluginVersion": "10.2.3", "pointradius": 5, "points": false, "renderer": "flot", @@ -114,7 +142,11 @@ "steppedLine": false, "targets": [ { - "expr": "sum(rate(moja_sim_request_count[120s])) by (fsp, source, operation)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "sum(rate(moja_sim_request_count{cluster=\"$cluster\"}[120s])) by (fsp, source, operation)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -122,7 +154,11 @@ "refId": "A" }, { - "expr": "sum(rate(moja_sim_request_count[120s])) by (kubernetes_pod_name)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "sum(rate(moja_sim_request_count{cluster=\"$cluster\"}[120s])) by (kubernetes_pod_name)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -130,7 +166,11 @@ "refId": "E" }, { - "expr": "sum(rate(moja_sim_request_count[120s])) by (fsp, source, operation, kubernetes_pod_name)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "sum(rate(moja_sim_request_count{cluster=\"$cluster\"}[120s])) by (fsp, source, operation, kubernetes_pod_name)", "format": "time_series", "hide": true, "intervalFactor": 1, @@ -138,7 +178,11 @@ "refId": "B" }, { - "expr": "sum(irate(moja_sim_request_count[120s])) by (app)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "sum(irate(moja_sim_request_count{cluster=\"$cluster\"}[120s])) by (app)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -146,15 +190,17 @@ "refId": "C" }, { - "expr": "sum(rate(moja_sim_request_count[120s])) by (operation)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "sum(rate(moja_sim_request_count{cluster=\"$cluster\"}[120s])) by (operation)", "legendFormat": "{{operation}}", "refId": "D" } ], "thresholds": [], - "timeFrom": null, "timeRegions": [], - "timeShift": null, "title": "Simulator - Processed per sec", "tooltip": { "shared": true, @@ -163,53 +209,64 @@ }, "type": "graph", "xaxis": { - "buckets": null, "mode": "time", - "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", - "label": null, "logBase": 1, - "max": null, - "min": null, "show": true }, { "format": "short", - "label": null, "logBase": 1, - "max": null, - "min": null, "show": true } ], "yaxis": { - "align": false, - "alignLevel": null + "align": false } }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "${DS_PROMETHEUS}", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "description": "postTransfer / sec for Payee", - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] }, "gridPos": { "h": 3, @@ -218,81 +275,78 @@ "y": 1 }, "id": 6, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "options": {}, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": false + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.2.3", "targets": [ { - "expr": "sum(irate(moja_sim_request_count{operation='postTransfers'}[120s]))", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "sum(irate(moja_sim_request_count{operation='postTransfers',cluster=\"$cluster\"}[120s]))", "format": "time_series", "instant": true, "intervalFactor": 1, "refId": "A" } ], - "thresholds": "", "title": "postTransfer / sec for Payee", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "0", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "${DS_PROMETHEUS}", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "description": "putTransfersById / sec for Payee", - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] }, "gridPos": { "h": 3, @@ -301,44 +355,31 @@ "y": 4 }, "id": 12, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "options": {}, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": false + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.2.3", "targets": [ { - "expr": "sum(irate(moja_sim_request_count{fsp=\"payee\", operation=\"putTransfersById\"}[120s]))", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "sum(irate(moja_sim_request_count{fsp=\"payee\", operation=\"putTransfersById\",cluster=\"$cluster\"}[120s]))", "format": "time_series", "hide": true, "instant": true, @@ -347,42 +388,56 @@ "refId": "A" }, { - "expr": "sum(irate(moja_sim_request_count{operation=\"putTransfersById\"}[120s]))", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "sum(irate(moja_sim_request_count{operation=\"putTransfersById\",cluster=\"$cluster\"}[120s]))", "hide": false, "refId": "B" } ], - "thresholds": "", "title": "putTransfersById / sec for Payee", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "0", - "value": "null" - } - ], - "valueName": "avg" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "${DS_PROMETHEUS}", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "description": "messages / second", - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] }, "gridPos": { "h": 3, @@ -391,70 +446,56 @@ "y": 7 }, "id": 18, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "options": {}, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": false + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.2.3", "targets": [ { - "expr": "sum(irate(moja_sim_request_count[120s]))", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "sum(irate(moja_sim_request_count{cluster=\"$cluster\"}[120s]))", "format": "time_series", "instant": true, "intervalFactor": 1, "refId": "A" } ], - "thresholds": "", "title": "messages / second", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "0", - "value": "null" - } - ], - "valueName": "avg" + "type": "stat" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, - "datasource": "${DS_PROMETHEUS}", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "description": "Simulators - Processing Time", + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -463,6 +504,7 @@ "x": 0, "y": 10 }, + "hiddenSeries": false, "id": 8, "legend": { "alignAsTable": true, @@ -474,8 +516,6 @@ "min": true, "rightSide": true, "show": true, - "sort": null, - "sortDesc": null, "total": false, "values": true }, @@ -484,9 +524,10 @@ "links": [], "nullPointMode": "null as zero", "options": { - "dataLinks": [] + "alertThreshold": true }, "percentage": false, + "pluginVersion": "10.2.3", "pointradius": 5, "points": false, "renderer": "flot", @@ -496,7 +537,11 @@ "steppedLine": false, "targets": [ { - "expr": "avg(irate(moja_sim_request_sum[120s]) / irate(moja_sim_request_count[120s])) by (fsp, operation, kubernetes_pod_name)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "avg(irate(moja_sim_request_sum{cluster=\"$cluster\"}[120s]) / irate(moja_sim_request_count{cluster=\"$cluster\"}[120s])) by (fsp, operation, kubernetes_pod_name)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -504,7 +549,11 @@ "refId": "A" }, { - "expr": "avg(irate(moja_sim_request_sum[120s]) / irate(moja_sim_request_count[120s])) by (kubernetes_pod_name)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "avg(irate(moja_sim_request_sum{cluster=\"$cluster\"}[120s]) / irate(moja_sim_request_count{cluster=\"$cluster\"}[120s])) by (kubernetes_pod_name)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -512,7 +561,11 @@ "refId": "B" }, { - "expr": "avg(irate(moja_sim_request_sum[120s]) / irate(moja_sim_request_count[120s])) by (fsp, operation)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "avg(irate(moja_sim_request_sum{cluster=\"$cluster\"}[120s]) / irate(moja_sim_request_count{cluster=\"$cluster\"}[120s])) by (fsp, operation)", "format": "time_series", "hide": false, "intervalFactor": 1, @@ -520,14 +573,22 @@ "refId": "C" }, { - "expr": "avg(irate(moja_sim_request_sum[120s]) / irate(moja_sim_request_count[120s])) by (app)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "avg(irate(moja_sim_request_sum{cluster=\"$cluster\"}[120s]) / irate(moja_sim_request_count{cluster=\"$cluster\"}[120s])) by (app)", "format": "time_series", "intervalFactor": 1, "legendFormat": "{{app}}", "refId": "D" }, { - "expr": "irate(moja_sim_request_sum[120s]) / irate(moja_sim_request_count[120s])", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "irate(moja_sim_request_sum{cluster=\"$cluster\"}[120s]) / irate(moja_sim_request_count{cluster=\"$cluster\"}[120s])", "format": "time_series", "hide": true, "interval": "", @@ -537,9 +598,7 @@ } ], "thresholds": [], - "timeFrom": null, "timeRegions": [], - "timeShift": null, "title": "Simulators - Processing Time", "tooltip": { "shared": true, @@ -548,38 +607,32 @@ }, "type": "graph", "xaxis": { - "buckets": null, "mode": "time", - "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", - "label": null, "logBase": 1, - "max": null, - "min": null, "show": true }, { "format": "short", - "label": null, "logBase": 1, - "max": null, - "min": null, "show": true } ], "yaxis": { - "align": false, - "alignLevel": null + "align": false } }, { "collapsed": false, - "datasource": "${DS_PROMETHEUS}", + "datasource": { + "type": "prometheus", + "uid": "645fe2f7-ce19-433c-b746-afca1936af31" + }, "gridPos": { "h": 1, "w": 24, @@ -588,6 +641,15 @@ }, "id": 10, "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "645fe2f7-ce19-433c-b746-afca1936af31" + }, + "refId": "A" + } + ], "title": "Misc", "type": "row" }, @@ -596,8 +658,17 @@ "bars": false, "dashLength": 10, "dashes": false, - "datasource": "${DS_PROMETHEUS}", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "description": "Simulators - Event Loop Lag in Seconds", + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -606,6 +677,7 @@ "x": 0, "y": 20 }, + "hiddenSeries": false, "id": 16, "legend": { "avg": false, @@ -621,9 +693,10 @@ "links": [], "nullPointMode": "null", "options": { - "dataLinks": [] + "alertThreshold": true }, "percentage": false, + "pluginVersion": "10.2.3", "pointradius": 5, "points": false, "renderer": "flot", @@ -633,16 +706,18 @@ "steppedLine": false, "targets": [ { - "expr": "avg(moja_nodejs_eventloop_lag_seconds{serviceName=\"simulator\"})", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "avg(moja_nodejs_eventloop_lag_seconds{serviceName=\"simulator\",cluster=\"$cluster\"})", "format": "time_series", "intervalFactor": 1, "refId": "A" } ], "thresholds": [], - "timeFrom": null, "timeRegions": [], - "timeShift": null, "title": "Simulators - Event Loop Lag in Seconds", "tooltip": { "shared": true, @@ -651,33 +726,24 @@ }, "type": "graph", "xaxis": { - "buckets": null, "mode": "time", - "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", - "label": null, "logBase": 1, - "max": null, - "min": null, "show": true }, { "format": "short", - "label": null, "logBase": 1, - "max": null, - "min": null, "show": true } ], "yaxis": { - "align": false, - "alignLevel": null + "align": false } }, { @@ -685,8 +751,17 @@ "bars": false, "dashLength": 10, "dashes": false, - "datasource": "${DS_PROMETHEUS}", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "decimals": 0, + "fieldConfig": { + "defaults": { + "links": [] + }, + "overrides": [] + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -695,6 +770,7 @@ "x": 0, "y": 27 }, + "hiddenSeries": false, "id": 14, "legend": { "alignAsTable": true, @@ -714,9 +790,10 @@ "links": [], "nullPointMode": "null", "options": { - "dataLinks": [] + "alertThreshold": true }, "percentage": false, + "pluginVersion": "10.2.3", "pointradius": 5, "points": false, "renderer": "flot", @@ -726,7 +803,11 @@ "steppedLine": false, "targets": [ { - "expr": "kube_deployment_spec_replicas{deployment=~\".*simulator.*\"}", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "kube_deployment_spec_replicas{deployment=~\".*simulator.*\",cluster=\"$cluster\"}", "format": "time_series", "instant": false, "intervalFactor": 1, @@ -735,9 +816,7 @@ } ], "thresholds": [], - "timeFrom": null, "timeRegions": [], - "timeShift": null, "title": "Simulators - # Pods for each Components", "tooltip": { "shared": true, @@ -746,9 +825,7 @@ }, "type": "graph", "xaxis": { - "buckets": null, "mode": "time", - "name": null, "show": true, "values": [] }, @@ -756,36 +833,48 @@ { "decimals": 0, "format": "short", - "label": null, "logBase": 1, - "max": null, - "min": null, "show": true }, { "format": "short", - "label": null, "logBase": 1, - "max": null, - "min": null, "show": true } ], "yaxis": { - "align": false, - "alignLevel": null + "align": false } } ], - "refresh": false, - "schemaVersion": 20, - "style": "dark", + "refresh": "", + "schemaVersion": 39, "tags": [], "templating": { - "list": [] + "list": [ + { + "current": {}, + "definition": "label_values(node_uname_info,cluster)", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(node_uname_info,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] }, "time": { - "from": "now-30m", + "from": "now-2d", "to": "now" }, "timepicker": { @@ -815,6 +904,7 @@ }, "timezone": "", "title": "Mojaloop - Simulators", - "uid": "-Sr0y8fip", - "version": 14 -} + "uid": "Sr0y8fip-v001", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/monitoring/efk/Chart.yaml b/monitoring/efk/Chart.yaml index 9572f7465..09b667777 100644 --- a/monitoring/efk/Chart.yaml +++ b/monitoring/efk/Chart.yaml @@ -6,8 +6,6 @@ appVersion: "elasticsearch: 7.11.1; kibana: 7.11.1; apm-server: 7.11.1; fluentd- maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: fluentd-elasticsearch version: 11.8.0 diff --git a/monitoring/promfana/Chart.yaml b/monitoring/promfana/Chart.yaml index 4fcdd19f6..abddfa7cd 100644 --- a/monitoring/promfana/Chart.yaml +++ b/monitoring/promfana/Chart.yaml @@ -6,8 +6,6 @@ name: promfana maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: prometheus version: 11.12.0 diff --git a/monitoring/promfana/values.yaml b/monitoring/promfana/values.yaml index 70dc8d5ef..9cd567e31 100644 --- a/monitoring/promfana/values.yaml +++ b/monitoring/promfana/values.yaml @@ -1328,6 +1328,31 @@ prometheus: target_label: __metrics_path__ replacement: /api/v1/nodes/$1/proxy/metrics + - job_name: 'kubelet-probes' + # Default to scraping over https. If required, just disable this or change to + # `http`. + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + # If your node certificates are self-signed or use a different CA to the + # master CA, then disable certificate verification below. Note that + # certificate verification is an integral part of a secure infrastructure + # so this should only be disabled in a controlled environment. You can + # disable certificate verification by uncommenting the line below. + # + insecure_skip_verify: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - target_label: __address__ + replacement: kubernetes.default.svc:443 + - source_labels: [__meta_kubernetes_node_name] + regex: (.+) + target_label: __metrics_path__ + replacement: /api/v1/nodes/${1}/proxy/metrics/probes - job_name: 'kubernetes-nodes-cadvisor' diff --git a/package.sh b/package.sh index 24824ef6d..ff287f483 100755 --- a/package.sh +++ b/package.sh @@ -34,6 +34,7 @@ else monitoring/efk account-lookup-service als-oracle-pathfinder + als-msisdn-oracle # centralkms # Deprecated - No longer supported # forensicloggingsidecar # Deprecated - No longer supported centralledger @@ -58,6 +59,7 @@ else merchant-registry-svc kube-system/ntpd/ ml-operator + inter-scheme-proxy-adapter ) fi @@ -66,6 +68,15 @@ do if [ -z $BUILD_NUM ] || [ -z $GIT_SHA1 ]; then # we're most likely not running in CI # Probably running on someone's machine helm package -u -d ./repo "$chart" + elif [[ -z $GITHUB_TAG && $CIRCLE_BRANCH =~ ^(major|minor|patch)/(.*)$ ]]; then + set -u + # Build a pre-relase version from pre-relase branches major/name, minor/name, patch/name + # Can be used with helm upgrade --version '>=x.x.x-name.0 = 15.8.0" repository: "file://./chart-service" condition: quoting-service.enabled - name: quoting-service-handler - version: 15.0.0 + version: ">= 15.8.0" repository: "file://./chart-handler" condition: quoting-service-handler.enabled - name: common repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + version: 3.1.2 tags: - moja-common diff --git a/quoting-service/chart-handler/Chart.yaml b/quoting-service/chart-handler/Chart.yaml index ac1b53680..f85fbebcd 100644 --- a/quoting-service/chart-handler/Chart.yaml +++ b/quoting-service/chart-handler/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Quoting-Service Handler Helm chart for Kubernetes name: quoting-service-handler -version: 15.0.0 -appVersion: "v15.6.0-snapshot.5" +version: 15.9.0 +appVersion: v17.1.1 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -16,6 +16,6 @@ maintainers: dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.3 tags: - moja-common diff --git a/quoting-service/chart-handler/configs/default.json b/quoting-service/chart-handler/configs/default.json index f11805e44..8cccb98d4 100644 --- a/quoting-service/chart-handler/configs/default.json +++ b/quoting-service/chart-handler/configs/default.json @@ -1,8 +1,15 @@ {{- $dbDeployHost := (.Values.config.db_host | replace "$release_name" .Release.Name) }} { + "ORIGINAL_PAYLOAD_STORAGE": {{ .Values.config.original_payload_storage | quote }}, + "PAYLOAD_CACHE": {{ .Values.config.payload_cache | toPrettyJson | nindent 2}}, + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": {{ .Values.config.hub_participant.name | quote }} + }, "HOSTNAME": "http://quoting-service-handler.local", "LISTEN_ADDRESS": "0.0.0.0", - "PORT": "{{ .Values.service.internalPort }}", + "PORT": {{ .Values.service.internalPort }}, + "MONITORING_PORT": {{ .Values.service.internalPort }}, "PROTOCOL_VERSIONS": {{ .Values.config.protocol_versions | toPrettyJson }}, "SWITCH_ENDPOINT": "http://{{ .Release.Name }}-centralledger-service:80", "AMOUNT": { @@ -34,7 +41,6 @@ "ENDPOINT_SECURITY": { "JWS": { "JWS_SIGN": {{ .Values.config.endpointSecurity.jwsSign }}, - "FSPIOP_SOURCE_TO_SIGN": {{ .Values.config.endpointSecurity.fspiopSourceSigningName | quote }}, "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key" } }, @@ -60,6 +66,7 @@ "ENUM_DATA_EXPIRES_IN_MS": {{ .Values.config.cache.enum_data_expires_in_ms }}, "PARTICIPANT_DATA_EXPIRES_IN_MS": {{ .Values.config.cache.participant_data_expires_in_ms }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2}}, "KAFKA": { "CONSUMER":{ "QUOTE":{ @@ -215,6 +222,83 @@ } } } + }, + "FX_QUOTE":{ + "POST":{ + "topic":"topic-fx-quotes-post", + "config":{ + "options":{ + "mode":2, + "batchSize":1, + "pollFrequency":10, + "recursiveTimeout":100, + "messageCharset":"utf8", + "messageAsJSON":true, + "sync":true, + "consumeTimeout":1000 + }, + "rdkafkaConf":{ + "client.id":"fx-quotes-handler-post_c", + "group.id":"group-fx-quotes-handler-post", + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "socket.keepalive.enable":true, + "allow.auto.create.topics":true + }, + "topicConf":{ + "auto.offset.reset":"earliest" + } + } + }, + "PUT":{ + "topic":"topic-fx-quotes-put", + "config":{ + "options":{ + "mode":2, + "batchSize":1, + "pollFrequency":10, + "recursiveTimeout":100, + "messageCharset":"utf8", + "messageAsJSON":true, + "sync":true, + "consumeTimeout":1000 + }, + "rdkafkaConf":{ + "client.id":"fx-quotes-handler-put_c", + "group.id":"group-fx-quotes-handler-put", + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "socket.keepalive.enable":true, + "allow.auto.create.topics":true + }, + "topicConf":{ + "auto.offset.reset":"earliest" + } + } + }, + "GET":{ + "topic":"topic-fx-quotes-get", + "config":{ + "options":{ + "mode":2, + "batchSize":1, + "pollFrequency":10, + "recursiveTimeout":100, + "messageCharset":"utf8", + "messageAsJSON":true, + "sync":true, + "consumeTimeout":1000 + }, + "rdkafkaConf":{ + "client.id":"fx-quotes-handler-get_c", + "group.id":"group-fx-quotes-handler-get", + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "socket.keepalive.enable":true, + "allow.auto.create.topics":true + }, + "topicConf":{ + "auto.offset.reset":"earliest" + } + } + } } }, "PRODUCER":{ @@ -341,6 +425,68 @@ } } } + }, + "FX_QUOTE":{ + "POST":{ + "topic":"topic-fx-quotes-post", + "config":{ + "options":{ + "messageCharset":"utf8" + }, + "rdkafkaConf":{ + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "client.id":"fx-quotes-handler-post_p", + "event_cb":true, + "dr_cb":true, + "socket.keepalive.enable":true, + "queue.buffering.max.messages":10000000 + }, + "topicConf":{ + "request.required.acks":"all", + "partitioner": "{{ .Values.config.kafka_partitioner }}" + } + } + }, + "PUT":{ + "topic":"topic-fx-quotes-put", + "config":{ + "options":{ + "messageCharset":"utf8" + }, + "rdkafkaConf":{ + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "client.id":"fx-quotes-handler-put_p", + "event_cb":true, + "dr_cb":true, + "socket.keepalive.enable":true, + "queue.buffering.max.messages":10000000 + }, + "topicConf":{ + "request.required.acks":"all", + "partitioner": "{{ .Values.config.kafka_partitioner }}" + } + } + }, + "GET":{ + "topic":"topic-fx-quotes-get", + "config":{ + "options":{ + "messageCharset":"utf8" + }, + "rdkafkaConf":{ + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "client.id":"fx-quotes-handler-get_p", + "event_cb":true, + "dr_cb":true, + "socket.keepalive.enable":true, + "queue.buffering.max.messages":10000000 + }, + "topicConf":{ + "request.required.acks":"all", + "partitioner": "{{ .Values.config.kafka_partitioner }}" + } + } + } } } } diff --git a/quoting-service/chart-handler/templates/config-override.yaml b/quoting-service/chart-handler/templates/config-override.yaml new file mode 100644 index 000000000..a1db5cfb3 --- /dev/null +++ b/quoting-service/chart-handler/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "quotingservice-handler.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "quotingservice-handler.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/quoting-service/chart-handler/templates/deployment.yaml b/quoting-service/chart-handler/templates/deployment.yaml index 89078ed3c..f25c791ee 100644 --- a/quoting-service/chart-handler/templates/deployment.yaml +++ b/quoting-service/chart-handler/templates/deployment.yaml @@ -22,6 +22,9 @@ spec: matchLabels: app.kubernetes.io/name: {{ include "quotingservice-handler.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +{{- if (.Values.rollingUpdate).override }} + {{- include "common.rollingUpdateStrategy" . | nindent 2 }} +{{- end }} template: metadata: labels: @@ -34,8 +37,14 @@ spec: {{- if .Values.podLabels }} {{- include "common.tplvalues.render" ( dict "value" .Values.podLabels "context" $ ) | nindent 8 }} {{- end }} + {{- if .Values.usePdb }} + {{- include "common.pdb.matchLabels" . | nindent 8 }} + {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} checksum/secret-jws: {{ include (print $.Template.BasePath "/secret-jws.yaml") . | sha256sum }} # Custom Pod annotations @@ -43,6 +52,7 @@ spec: {{- include "common.tplvalues.render" ( dict "value" .Values.podAnnotations "context" $ ) | nindent 8 }} {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -103,6 +113,12 @@ spec: periodSeconds: {{ .Values.livenessProbe.periodSeconds }} {{- end }} env: + {{- if .Values.env }} + {{- range $key, $val := .Values.env }} + - name: {{ $key }} + value: {{ $val | quote }} + {{- end }} + {{- end }} - name: QUOTE_DATABASE__PASSWORD {{- if .Values.config.db_secret }} valueFrom: @@ -138,9 +154,20 @@ spec: value: {{ .Values.config.event_async_override | quote }} - name: EVENT_SDK_TRACEID_PER_VENDOR value: {{ .Values.config.event_traceid_per_vendor | quote }} + - name: UV_THREADPOOL_SIZE + value: {{ .Values.config.uv_threadpool_size | quote }} volumeMounts: - name: {{ template "quotingservice-handler.fullname" . }}-config-volume - mountPath: /opt/app/config + mountPath: /opt/app/config/default.json + subPath: default.json + - name: {{ template "quotingservice-handler.fullname" . }}-config-volume + mountPath: /opt/app/config/rules.json + subPath: rules.json +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.config.endpointSecurity.jwsSign }} - name: jws-signing-key mountPath: /opt/app/secrets @@ -180,10 +207,22 @@ spec: value: {{ .Values.sidecar.config.log_level }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "quotingservice-handler.fullname" . }}-config-override + {{- end }} {{- if .Values.config.endpointSecurity.jwsSign }} - name: jws-signing-key secret: + {{- if .Values.config.endpointSecurity.jwsSigningKeySecret }} + secretName: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.name }} + items: + - key: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.key }} + path: jwsSigningKey.key + {{ else }} secretName: {{ template "quotingservice-handler.fullname" . }}-jws-signing-key + {{- end }} {{- end }} - name: {{ template "quotingservice-handler.fullname" . }}-config-volume configMap: diff --git a/quoting-service/chart-handler/templates/secret-jws.yaml b/quoting-service/chart-handler/templates/secret-jws.yaml index 4cc6bc713..3e64e98f2 100644 --- a/quoting-service/chart-handler/templates/secret-jws.yaml +++ b/quoting-service/chart-handler/templates/secret-jws.yaml @@ -1,7 +1,7 @@ # todo: do we need secret-jws for consumer? -{{- if .Values.config.endpointSecurity.jwsSign }} +{{- if and .Values.config.endpointSecurity.jwsSign (not .Values.config.endpointSecurity.jwsSigningKeySecret) }} {{- if (not .Values.config.endpointSecurity.jwsSigningKey) }} - {{- fail "JWS signing enabled but no jwsSigningKey provided. You will need to supply a JWS signing key in string form .Values.endpointSecurity.jwsSigningKey." }} + {{- fail "JWS signing enabled but neither jwsSigningKey nor jwsSigningKeySecret was provided. You will need to supply a JWS signing key in string form via .Values.endpointSecurity.jwsSigningKey or a secret via .Values.endpointSecurity.jwsSigningKeySecret." }} {{- end }} apiVersion: v1 kind: Secret diff --git a/quoting-service/chart-handler/values.yaml b/quoting-service/chart-handler/values.yaml index aaeba2045..c8e0f19d8 100644 --- a/quoting-service/chart-handler/values.yaml +++ b/quoting-service/chart-handler/values.yaml @@ -7,7 +7,7 @@ global: {} image: registry: docker.io repository: mojaloop/quoting-service - tag: v15.6.0-snapshot.5 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -23,7 +23,12 @@ image: pullSecrets: [] replicaCount: 1 -command: '["node", "src/handlers/index.js", "handler", "--quotes --bulk_quotes"]' +command: '["node", "src/handlers/index.js", "handler", "--quotes", "--bulk_quotes", "--fx_quotes"]' + +rollingUpdate: + override: true + maxUnavailable: 20% + maxSurge: 20% ## Enable diagnostic mode in the deployment ## @@ -35,7 +40,7 @@ diagnosticMode: ## command: - node - - src/handlers/index.js h --quotes --bulk_quotes + - src/handlers/index.js h --quotes --bulk_quotes --fx_quotes ## @param diagnosticMode.args Args to override all containers in the deployment ## args: @@ -123,25 +128,40 @@ metrics: serviceName: quoting-service-handler config: - + ## kafka | redis | "" + original_payload_storage: "" + payload_cache: + enabled: false + type: redis-cluster + connectionConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + hub_participant: + id: 1 + name: Hub # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: |- + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -196,21 +216,19 @@ config: endpointSecurity: jwsSign: false - fspiopSourceSigningName: 'switch' - jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- - + jwsSigningKey: null +# To generate this key: +# Private: +# ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key +# Public: +# openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub +# Should look like: +# -----BEGIN RSA PRIVATE KEY----- +# MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R +# .. +# .. +# mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 +# -----END RSA PRIVATE KEY----- error_handling: include_cause_extension: false truncate_extensions: true @@ -222,6 +240,21 @@ config: # Not specifying or setting to 0 will default the cache to 60 seconds participant_data_expires_in_ms: 10 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + + uv_threadpool_size: 20 + +## To pass arbitrary environment variables to the deployment +# env: +# KEY: value + rules: [] ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) @@ -237,7 +270,7 @@ rules: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -301,7 +334,7 @@ podAnnotations: {} # think, if we need "service" for consumer? service: - internalPort: 3002 + internalPort: 3003 ## @param service.type %%MAIN_CONTAINER_NAME%% service type ## type: ClusterIP @@ -312,17 +345,15 @@ service: ## e.g.: ## clusterIP: None ## - clusterIP: - ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP - ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer - ## - loadBalancerIP: - ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources - ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service - ## e.g: - ## loadBalancerSourceRanges: - ## - 10.10.10.0/24 - ## + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP +## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer +## + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources +## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service +## e.g: +## loadBalancerSourceRanges: +## - 10.10.10.0/24 +## loadBalancerSourceRanges: [] ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip @@ -342,15 +373,16 @@ service: ## timeoutSeconds: 300 ## sessionAffinityConfig: {} - resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi +# We usually recommend not to specify default resources and to leave this as a conscious +# choice for the user. This also increases chances charts run on environments with little +# resources, such as Minikube. If you do want to specify resources, uncomment the following +# lines, adjust them as necessary, and remove the curly braces after 'resources:'. +# limits: +# cpu: 100m +# memory: 128Mi +# requests: +# cpu: 100m +# memory: 128Mi + +usePdb: false diff --git a/quoting-service/chart-service/Chart.yaml b/quoting-service/chart-service/Chart.yaml index 3cf59f8ec..768c38890 100644 --- a/quoting-service/chart-service/Chart.yaml +++ b/quoting-service/chart-service/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Quoting-Service API Helm chart for Kubernetes name: quoting-service -version: 15.0.0 -appVersion: "v15.6.0-snapshot.5" +version: 15.9.0 +appVersion: v17.1.1 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -16,6 +16,6 @@ maintainers: dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.1.1 tags: - moja-common diff --git a/quoting-service/chart-service/configs/default.json b/quoting-service/chart-service/configs/default.json index 17d13226d..468b785bd 100644 --- a/quoting-service/chart-service/configs/default.json +++ b/quoting-service/chart-service/configs/default.json @@ -1,8 +1,16 @@ {{- $dbDeployHost := (.Values.config.db_host | replace "$release_name" .Release.Name) }} { - "HOSTNAME": "http://quoting-service.local", + "API_TYPE": {{ .Values.config.api_type | quote }}, + "ORIGINAL_PAYLOAD_STORAGE": {{ .Values.config.original_payload_storage | quote }}, + "PAYLOAD_CACHE": {{ .Values.config.payload_cache | toPrettyJson | nindent 2}}, + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": {{ .Values.config.hub_participant.name | quote }} + }, + "HOSTNAME": "{{ .Values.ingress.hostname }}", "LISTEN_ADDRESS": "0.0.0.0", "PORT": {{ .Values.service.internalPort }}, + "MONITORING_PORT": {{ .Values.service.internalPort }}, "PROTOCOL_VERSIONS": {{ .Values.config.protocol_versions | toPrettyJson }}, "SWITCH_ENDPOINT": "http://{{ .Release.Name }}-centralledger-service:80", "AMOUNT": { @@ -34,7 +42,6 @@ "ENDPOINT_SECURITY": { "JWS": { "JWS_SIGN": {{ .Values.config.endpointSecurity.jwsSign }}, - "FSPIOP_SOURCE_TO_SIGN": {{ .Values.config.endpointSecurity.fspiopSourceSigningName | quote }}, "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key" } }, @@ -60,6 +67,7 @@ "ENUM_DATA_EXPIRES_IN_MS": {{ .Values.config.cache.enum_data_expires_in_ms }}, "PARTICIPANT_DATA_EXPIRES_IN_MS": {{ .Values.config.cache.participant_data_expires_in_ms }} }, + "PROXY_CACHE": {{ .Values.config.proxy_cache | toPrettyJson | nindent 2}}, "KAFKA": { "CONSUMER":{ "QUOTE":{ @@ -215,6 +223,83 @@ } } } + }, + "FX_QUOTE":{ + "POST":{ + "topic":"topic-fx-quotes-post", + "config":{ + "options":{ + "mode":2, + "batchSize":1, + "pollFrequency":10, + "recursiveTimeout":100, + "messageCharset":"utf8", + "messageAsJSON":true, + "sync":true, + "consumeTimeout":1000 + }, + "rdkafkaConf":{ + "client.id":"fx-quotes-handler-post_c", + "group.id":"group-fx-quotes-handler-post", + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "socket.keepalive.enable":true, + "allow.auto.create.topics":true + }, + "topicConf":{ + "auto.offset.reset":"earliest" + } + } + }, + "PUT":{ + "topic":"topic-fx-quotes-put", + "config":{ + "options":{ + "mode":2, + "batchSize":1, + "pollFrequency":10, + "recursiveTimeout":100, + "messageCharset":"utf8", + "messageAsJSON":true, + "sync":true, + "consumeTimeout":1000 + }, + "rdkafkaConf":{ + "client.id":"fx-quotes-handler-put_c", + "group.id":"group-fx-quotes-handler-put", + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "socket.keepalive.enable":true, + "allow.auto.create.topics":true + }, + "topicConf":{ + "auto.offset.reset":"earliest" + } + } + }, + "GET":{ + "topic":"topic-fx-quotes-get", + "config":{ + "options":{ + "mode":2, + "batchSize":1, + "pollFrequency":10, + "recursiveTimeout":100, + "messageCharset":"utf8", + "messageAsJSON":true, + "sync":true, + "consumeTimeout":1000 + }, + "rdkafkaConf":{ + "client.id":"fx-quotes-handler-get_c", + "group.id":"group-fx-quotes-handler-get", + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "socket.keepalive.enable":true, + "allow.auto.create.topics":true + }, + "topicConf":{ + "auto.offset.reset":"earliest" + } + } + } } }, "PRODUCER":{ @@ -341,6 +426,68 @@ } } } + }, + "FX_QUOTE":{ + "POST":{ + "topic":"topic-fx-quotes-post", + "config":{ + "options":{ + "messageCharset":"utf8" + }, + "rdkafkaConf":{ + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "client.id":"fx-quotes-handler-post_p", + "event_cb":true, + "dr_cb":true, + "socket.keepalive.enable":true, + "queue.buffering.max.messages":10000000 + }, + "topicConf":{ + "request.required.acks":"all", + "partitioner": "{{ .Values.config.kafka_partitioner }}" + } + } + }, + "PUT":{ + "topic":"topic-fx-quotes-put", + "config":{ + "options":{ + "messageCharset":"utf8" + }, + "rdkafkaConf":{ + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "client.id":"fx-quotes-handler-put_p", + "event_cb":true, + "dr_cb":true, + "socket.keepalive.enable":true, + "queue.buffering.max.messages":10000000 + }, + "topicConf":{ + "request.required.acks":"all", + "partitioner": "{{ .Values.config.kafka_partitioner }}" + } + } + }, + "GET":{ + "topic":"topic-fx-quotes-get", + "config":{ + "options":{ + "messageCharset":"utf8" + }, + "rdkafkaConf":{ + "metadata.broker.list": "{{ .Values.config.kafka_host }}:{{ .Values.config.kafka_port }}", + "client.id":"fx-quotes-handler-get_p", + "event_cb":true, + "dr_cb":true, + "socket.keepalive.enable":true, + "queue.buffering.max.messages":10000000 + }, + "topicConf":{ + "request.required.acks":"all", + "partitioner": "{{ .Values.config.kafka_partitioner }}" + } + } + } } } } diff --git a/quoting-service/chart-service/templates/config-override.yaml b/quoting-service/chart-service/templates/config-override.yaml new file mode 100644 index 000000000..b5e64f279 --- /dev/null +++ b/quoting-service/chart-service/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "quotingservice.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "quotingservice.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/quoting-service/chart-service/templates/deployment.yaml b/quoting-service/chart-service/templates/deployment.yaml index 53baa9173..5de981fd0 100644 --- a/quoting-service/chart-service/templates/deployment.yaml +++ b/quoting-service/chart-service/templates/deployment.yaml @@ -36,6 +36,9 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} checksum/secret-jws: {{ include (print $.Template.BasePath "/secret-jws.yaml") . | sha256sum }} # Custom Pod annotations @@ -43,6 +46,7 @@ spec: {{- include "common.tplvalues.render" ( dict "value" .Values.podAnnotations "context" $ ) | nindent 8 }} {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -103,6 +107,12 @@ spec: periodSeconds: {{ .Values.livenessProbe.periodSeconds }} {{- end }} env: + {{- if .Values.env }} + {{- range $key, $val := .Values.env }} + - name: {{ $key }} + value: {{ $val | quote }} + {{- end }} + {{- end }} - name: QUOTE_DATABASE__PASSWORD {{- if .Values.config.db_secret }} valueFrom: @@ -141,6 +151,11 @@ spec: volumeMounts: - name: {{ template "quotingservice.fullname" . }}-config-volume mountPath: /opt/app/config +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} {{- if .Values.config.endpointSecurity.jwsSign }} - name: jws-signing-key mountPath: /opt/app/secrets @@ -180,10 +195,22 @@ spec: value: {{ .Values.sidecar.config.log_level }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "quotingservice.fullname" . }}-config-override + {{- end }} {{- if .Values.config.endpointSecurity.jwsSign }} - name: jws-signing-key secret: + {{- if .Values.config.endpointSecurity.jwsSigningKeySecret }} + secretName: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.name }} + items: + - key: {{ .Values.config.endpointSecurity.jwsSigningKeySecret.key }} + path: jwsSigningKey.key + {{ else }} secretName: {{ template "quotingservice.fullname" . }}-jws-signing-key + {{- end }} {{- end }} - name: {{ template "quotingservice.fullname" . }}-config-volume configMap: diff --git a/quoting-service/chart-service/templates/secret-jws.yaml b/quoting-service/chart-service/templates/secret-jws.yaml index b708b298f..2535c0a09 100644 --- a/quoting-service/chart-service/templates/secret-jws.yaml +++ b/quoting-service/chart-service/templates/secret-jws.yaml @@ -1,6 +1,6 @@ -{{- if .Values.config.endpointSecurity.jwsSign }} +{{- if and .Values.config.endpointSecurity.jwsSign (not .Values.config.endpointSecurity.jwsSigningKeySecret) }} {{- if (not .Values.config.endpointSecurity.jwsSigningKey) }} - {{- fail "JWS signing enabled but no jwsSigningKey provided. You will need to supply a JWS signing key in string form .Values.endpointSecurity.jwsSigningKey." }} + {{- fail "JWS signing enabled but neither jwsSigningKey nor jwsSigningKeySecret was provided. You will need to supply a JWS signing key in string form via .Values.endpointSecurity.jwsSigningKey or a secret via .Values.endpointSecurity.jwsSigningKeySecret." }} {{- end }} apiVersion: v1 kind: Secret diff --git a/quoting-service/chart-service/values.yaml b/quoting-service/chart-service/values.yaml index 893d8c90c..6259558f5 100644 --- a/quoting-service/chart-service/values.yaml +++ b/quoting-service/chart-service/values.yaml @@ -4,10 +4,11 @@ # Declare global configurations global: {} + image: registry: docker.io repository: mojaloop/quoting-service - tag: v15.6.0-snapshot.5 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -122,25 +123,42 @@ metrics: serviceName: quoting-service-api config: - + ## fspiop | iso20022 + api_type: fspiop + ## kafka | redis | "" + original_payload_storage: "" + payload_cache: + enabled: false + type: redis-cluster + connectionConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + hub_participant: + id: 1 + name: Hub # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: |- + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -198,21 +216,19 @@ config: endpointSecurity: jwsSign: false - fspiopSourceSigningName: 'switch' - jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- - + jwsSigningKey: null +# To generate this key: +# Private: +# ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key +# Public: +# openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub +# Should look like: +# -----BEGIN RSA PRIVATE KEY----- +# MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R +# .. +# .. +# mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 +# -----END RSA PRIVATE KEY----- error_handling: include_cause_extension: false truncate_extensions: true @@ -224,6 +240,19 @@ config: # Not specifying or setting to 0 will default the cache to 60 seconds participant_data_expires_in_ms: 10 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + +## To pass arbitrary environment variables to the deployment +#env: +# KEY: value + rules: [] ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) @@ -279,17 +308,15 @@ service: ## e.g.: ## clusterIP: None ## - clusterIP: - ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP - ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer - ## - loadBalancerIP: - ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources - ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service - ## e.g: - ## loadBalancerSourceRanges: - ## - 10.10.10.0/24 - ## + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP +## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer +## + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources +## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service +## e.g: +## loadBalancerSourceRanges: +## - 10.10.10.0/24 +## loadBalancerSourceRanges: [] ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip @@ -309,62 +336,58 @@ service: ## timeoutSeconds: 300 ## sessionAffinityConfig: {} - ingress: enabled: true - ## @param ingress.pathType Ingress path type - ## + ## @param ingress.pathType Ingress path type + ## pathType: ImplementationSpecific - ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) - ## - apiVersion: - ## @param ingress.hostname Default host for the ingress record - ## + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: null ## @param ingress.hostname Default host for the ingress record +## hostname: quoting-service.local - ## @param servicePort : port for the service - ## + ## @param servicePort : port for the service + ## servicePort: 80 - ## @param ingress.path Default path for the ingress record - ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers path: / - ## @param ingress.annotations Additional custom annotations for the ingress record - ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added - ## - annotations: - ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter - ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` - ## You can: - ## - Use the `ingress.secrets` parameter to create this TLS secret - ## - Relay on cert-manager to create it by setting `ingress.certManager=true` - ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` - ## + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: null ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter +## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` +## You can: +## - Use the `ingress.secrets` parameter to create this TLS secret +## - Relay on cert-manager to create it by setting `ingress.certManager=true` +## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` +## tls: false - ## @param ingress.certManager Add the corresponding annotations for cert-manager integration - ## + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## certManager: false - ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm - ## + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## selfSigned: false - ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record - ## e.g: - ## extraHosts: - ## - name: transfer-api-svc.local - ## path: / - ## - extraHosts: - extraPaths: - extraTls: - secrets: + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi +# We usually recommend not to specify default resources and to leave this as a conscious +# choice for the user. This also increases chances charts run on environments with little +# resources, such as Minikube. If you do want to specify resources, uncomment the following +# lines, adjust them as necessary, and remove the curly braces after 'resources:'. +# limits: +# cpu: 100m +# memory: 128Mi +# requests: +# cpu: 100m +# memory: 128Mi diff --git a/quoting-service/values.yaml b/quoting-service/values.yaml index b4ce33e63..cdc26a64e 100644 --- a/quoting-service/values.yaml +++ b/quoting-service/values.yaml @@ -13,7 +13,7 @@ quoting-service: # API image: registry: docker.io repository: mojaloop/quoting-service - tag: v15.6.0-snapshot.5 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -31,6 +31,16 @@ quoting-service: # API replicaCount: 1 command: '["node", "src/index.js"]' + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -128,25 +138,42 @@ quoting-service: # API serviceName: quoting-service config: - + ## fspiop | iso20022 + api_type: fspiop + ## kafka | redis | "" + original_payload_storage: "" + payload_cache: + enabled: false + type: redis-cluster + connectionConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + hub_participant: + id: 1 + name: Hub # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: |- + protocol_versions: { "CONTENT": { - "DEFAULT": "1.1", + "DEFAULT": "2.0", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] }, "ACCEPT": { - "DEFAULT": "1", + "DEFAULT": "2", "VALIDATELIST": [ "1", "1.0", - "1.1" + "1.1", + "2", + "2.0" ] } } @@ -202,21 +229,19 @@ quoting-service: # API endpointSecurity: jwsSign: false - fspiopSourceSigningName: 'switch' - jwsSigningKey: - # To generate this key: - # Private: - # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key - # Public: - # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub - # Should look like: - # -----BEGIN RSA PRIVATE KEY----- - # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R - # .. - # .. - # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 - # -----END RSA PRIVATE KEY----- - + jwsSigningKey: null + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- error_handling: include_cause_extension: false truncate_extensions: true @@ -228,6 +253,15 @@ quoting-service: # API # Not specifying or setting to 0 will default the cache to 60 seconds participant_data_expires_in_ms: 10 + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + rules: [] # think, iof we need this initContainer for quoting-service API @@ -274,11 +308,11 @@ quoting-service: # API ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -304,66 +338,64 @@ quoting-service: # API ## timeoutSeconds: 300 ## sessionAffinityConfig: {} - ingress: enabled: true - ## @param ingress.pathType Ingress path type - ## + ## @param ingress.pathType Ingress path type + ## pathType: ImplementationSpecific - ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) - ## - apiVersion: - ## @param ingress.hostname Default host for the ingress record - ## + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: null + ## @param ingress.hostname Default host for the ingress record + ## hostname: quoting-service.local - ## @param servicePort : port for the service - ## + ## @param servicePort : port for the service + ## servicePort: 80 - ## @param ingress.path Default path for the ingress record - ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers path: / - ## @param ingress.annotations Additional custom annotations for the ingress record - ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added - ## - annotations: - ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter - ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` - ## You can: - ## - Use the `ingress.secrets` parameter to create this TLS secret - ## - Relay on cert-manager to create it by setting `ingress.certManager=true` - ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` - ## + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: null + ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter + ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` + ## You can: + ## - Use the `ingress.secrets` parameter to create this TLS secret + ## - Relay on cert-manager to create it by setting `ingress.certManager=true` + ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` + ## tls: false - ## @param ingress.certManager Add the corresponding annotations for cert-manager integration - ## + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## certManager: false - ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm - ## + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## selfSigned: false - ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record - ## e.g: - ## extraHosts: - ## - name: transfer-api-svc.local - ## path: / - ## - extraHosts: - extraPaths: - extraTls: - secrets: + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" ## resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi quoting-service-handler: enabled: true # Default values for ml-api-adapter. @@ -373,7 +405,7 @@ quoting-service-handler: image: registry: docker.io repository: mojaloop/quoting-service - tag: v15.6.0-snapshot.5 + tag: v17.1.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -389,7 +421,17 @@ quoting-service-handler: pullSecrets: [] replicaCount: 1 - command: '["node", "src/handlers/index.js", "handler", "--quotes", "--bulk_quotes"]' + command: '["node", "src/handlers/index.js", "handler", "--quotes", "--bulk_quotes", "--fx_quotes"]' + + # Mount configuration files in the app folder for overriding defaults + # configOverride: + # # event sdk settings override + # .EVENT_SDKrc: + # AUDIT: kafka + + # # logging settings override + # .CSLrc: + # LOG_FILTER: "" ## Enable diagnostic mode in the deployment ## @@ -401,7 +443,7 @@ quoting-service-handler: ## command: - node - - src/handlers/index.js h --quotes --bulk_quotes + - src/handlers/index.js h --quotes --bulk_quotes --fx_quotes ## @param diagnosticMode.args Args to override all containers in the deployment ## args: @@ -488,83 +530,102 @@ quoting-service-handler: serviceName: quoting-service-handler config: + payload_cache: + enabled: false + type: redis-cluster + connectionConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + hub_participant: + id: 1 + name: Hub + # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), + # and for generating requests/callbacks from the Switch itself (DEFAULT value) + protocol_versions: + { + "CONTENT": { + "DEFAULT": "2.0", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + }, + "ACCEPT": { + "DEFAULT": "2", + "VALIDATELIST": [ + "1", + "1.0", + "1.1", + "2", + "2.0" + ] + } + } + + ## DB Configuration + # db_type can either be 'postgres' or 'mysql'. Ensure the correct DB is enabled and configured below: postgresql.enabled or mysql.enabled + db_type: 'mysql' + # db_driver can either be 'pg' or 'mysql'. Ensure the correct corresponding db_type above has been set. + db_driver: 'mysql' + db_host: mysqldb + db_port: 3306 + db_user: central_ledger + ## Secret-Management + ### Set this if you are using a clear password configured in the config section + db_password: '' + ### Configure this if you want to use a secret. Note, this will override the db_password, + ### Use the next line if you do wish to use the db_password value instead. + # db_secret: + ### Example config for an existing secret + db_secret: + name: mysqldb + key: mysql-password + db_database: central_ledger + db_connection_pool_min: 10 + db_connection_pool_max: 30 + db_acquire_timeout_millis: 30000 + db_create_timeout_millis: 30000 + db_destroy_timeout_millis: 5000 + db_idle_timeout_millis: 30000 + db_reap_interval_millis: 1000 + db_create_retry_interval_millis: 200 + db_debug: false + simple_routing_mode_enabled: true + log_level: info + log_transport: file + + ## Kafka Configuration (used for sidecar) + # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. + kafka_host: kafka + kafka_port: 9092 -config: - - # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), - # and for generating requests/callbacks from the Switch itself (DEFAULT value) - protocol_versions: | - { - "CONTENT": { - "DEFAULT": "1.1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - }, - "ACCEPT": { - "DEFAULT": "1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - } - } - - ## DB Configuration - # db_type can either be 'postgres' or 'mysql'. Ensure the correct DB is enabled and configured below: postgresql.enabled or mysql.enabled - db_type: 'mysql' - # db_driver can either be 'pg' or 'mysql'. Ensure the correct corresponding db_type above has been set. - db_driver: 'mysql' - db_host: mysqldb - db_port: 3306 - db_user: central_ledger - ## Secret-Management - ### Set this if you are using a clear password configured in the config section - db_password: '' - ### Configure this if you want to use a secret. Note, this will override the db_password, - ### Use the next line if you do wish to use the db_password value instead. - # db_secret: - ### Example config for an existing secret - db_secret: - name: mysqldb - key: mysql-password - db_database: central_ledger - db_connection_pool_min: 10 - db_connection_pool_max: 30 - db_acquire_timeout_millis: 30000 - db_create_timeout_millis: 30000 - db_destroy_timeout_millis: 5000 - db_idle_timeout_millis: 30000 - db_reap_interval_millis: 1000 - db_create_retry_interval_millis: 200 - db_debug: false - simple_routing_mode_enabled: true - log_level: info - log_transport: file - - ## Kafka Configuration (used for sidecar) - # this can be set if the dependency chart for kafka is disabled. If 'kafka_host' is commented out, then the name of the dependency chart will be used. - kafka_host: kafka - kafka_port: 9092 - - ## Tracing Configuration - event_trace_vendor: mojaloop - event_log_filter: 'audit:*, log:warn, log:error' - # If set to true, only the metadata object from the event will be printed. - event_log_metadata_only: false - # A comma-separated list of events that should return immediately instead of waiting for the event promises to resolve - # Any combination of: `log,audit,trace` - event_async_override: 'log,trace' - event_trace_state_enabled: true - event_traceid_per_vendor: false - - endpointSecurity: - jwsSign: false - fspiopSourceSigningName: 'switch' - jwsSigningKey: + ## Proxy cache configuration + proxy_cache: + enabled: false + type: redis-cluster + proxyConfig: + cluster: + - host: proxy-cache-redis + port: 6379 + + ## Tracing Configuration + event_trace_vendor: mojaloop + event_log_filter: 'audit:*, log:warn, log:error' + # If set to true, only the metadata object from the event will be printed. + event_log_metadata_only: false + # A comma-separated list of events that should return immediately instead of waiting for the event promises to resolve + # Any combination of: `log,audit,trace` + event_async_override: 'log,trace' + event_trace_state_enabled: true + event_traceid_per_vendor: false + + endpointSecurity: + jwsSign: false + jwsSigningKey: null # To generate this key: # Private: # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key @@ -577,17 +638,16 @@ config: # .. # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 # -----END RSA PRIVATE KEY----- + error_handling: + include_cause_extension: false + truncate_extensions: true - error_handling: - include_cause_extension: false - truncate_extensions: true - - cache: - enum_data_expires_in_ms: 4170000 - # Setting this any higher will most likely cause GP tests to fail - # Best to only set this higher if you are not running GP tests - # Not specifying or setting to 0 will default the cache to 60 seconds - participant_data_expires_in_ms: 10 + cache: + enum_data_expires_in_ms: 4170000 + # Setting this any higher will most likely cause GP tests to fail + # Best to only set this higher if you are not running GP tests + # Not specifying or setting to 0 will default the cache to 60 seconds + participant_data_expires_in_ms: 10 rules: [] @@ -611,9 +671,9 @@ config: value: '{{ .Values.config.kafka_host }}' - name: KAFKA_PORT value: '{{ .Values.config.kafka_port }}' - + - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh @@ -644,7 +704,7 @@ config: value: {{ .Values.config.db_password }} {{- end }} - name: DB_DATABASE - value: '{{ .Values.config.db_database }}' + value: '{{ .Values.config.db_database }}' ## @param master.podLabels Extra labels for pod(s) ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ @@ -660,16 +720,15 @@ config: service: type: ClusterIP externalPort: 80 - internalPort: 3002 - + internalPort: 3003 resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m # memory: 128Mi diff --git a/sdk-scheme-adapter/Chart.yaml b/sdk-scheme-adapter/Chart.yaml index eac6dd006..0324b14cb 100644 --- a/sdk-scheme-adapter/Chart.yaml +++ b/sdk-scheme-adapter/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: sdk-scheme-adapter Helm chart for Kubernetes name: sdk-scheme-adapter -version: 1.2.0 -appVersion: "v23.1.1" +version: 1.9.0 +appVersion: v24.0.5 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -20,24 +20,24 @@ dependencies: repository: "file://./chart-service" tags: - sdk-scheme-adapter - version: ">= 1.2.0" + version: ">= 1.5.0" condition: sdk-scheme-adapter-api-svc.enabled - name: sdk-scheme-adapter-svc alias: sdk-scheme-adapter-dom-evt-handler repository: "file://./chart-service" tags: - sdk-scheme-adapter - version: ">= 1.2.0" + version: ">= 1.5.0" condition: sdk-scheme-adapter-dom-evt-handler.enabled - name: sdk-scheme-adapter-svc alias: sdk-scheme-adapter-cmd-evt-handler repository: "file://./chart-service" tags: - sdk-scheme-adapter - version: ">= 1.2.0" + version: ">= 1.5.0" condition: sdk-scheme-adapter-cmd-evt-handler.enabled - name: common repository: "https://mojaloop.github.io/charts/repo" tags: - moja-common - version: 2.0.0 + version: 3.0.0 diff --git a/sdk-scheme-adapter/chart-service/Chart.yaml b/sdk-scheme-adapter/chart-service/Chart.yaml index d841871f6..62ea703f7 100644 --- a/sdk-scheme-adapter/chart-service/Chart.yaml +++ b/sdk-scheme-adapter/chart-service/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 name: sdk-scheme-adapter-svc -version: 1.2.0 +version: 1.5.0 description: A Helm chart for Kubernetes -appVersion: "v23.1.1" +appVersion: v23.4.0 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -19,4 +19,4 @@ dependencies: repository: "https://mojaloop.github.io/charts/repo" tags: - moja-common - version: 2.0.0 + version: 3.0.0 diff --git a/sdk-scheme-adapter/chart-service/templates/deployment.yaml b/sdk-scheme-adapter/chart-service/templates/deployment.yaml index b8e8c70c5..444df5ca3 100644 --- a/sdk-scheme-adapter/chart-service/templates/deployment.yaml +++ b/sdk-scheme-adapter/chart-service/templates/deployment.yaml @@ -20,7 +20,8 @@ spec: app.kubernetes.io/component: {{ .Chart.Name }} template: metadata: - annotations: + annotations: + reloader.stakater.com/auto: 'true' checksum/config: {{ .Values.env | toString | sha256sum }} checksum/secret-jws-signing-key: {{ .Values.config.jwsSigningKey | sha256sum }} checksum/secret-jws-verification-keys: {{ .Values.config.jwsVerificationKeys | toString | sha256sum }} @@ -71,7 +72,14 @@ spec: {{- if .Values.env.JWS_SIGN }} - name: jws-private-key secret: + {{- if .Values.config.jwsSigningKeySecret }} + secretName: {{ .Values.config.jwsSigningKeySecret.name }} + items: + - key: {{ .Values.config.jwsSigningKeySecret.key }} + path: private.key + {{ else }} secretName: {{ template "common.names.fullname" . }}-jws-priv-key + {{- end }} {{- end }} {{- if .Values.env.VALIDATE_INBOUND_JWS }} - name: jws-public-keys @@ -157,7 +165,7 @@ spec: {{- else }} - name: {{ $k }} value: {{ include "common.tplvalues.render" (dict "value" $v "context" $) | quote }} - {{- end }} + {{- end }} {{- end }} volumeMounts: {{- if .Values.env.JWS_SIGN }} diff --git a/sdk-scheme-adapter/chart-service/templates/secret.yaml b/sdk-scheme-adapter/chart-service/templates/secret.yaml index af6e6cf6c..282222861 100644 --- a/sdk-scheme-adapter/chart-service/templates/secret.yaml +++ b/sdk-scheme-adapter/chart-service/templates/secret.yaml @@ -1,4 +1,9 @@ -{{- if .Values.env.JWS_SIGN }} +{{- if (and .Values.env.JWS_SIGN (not .Values.config.jwsSigningKeySecret)) }} +# Note that due to a bug with helm 2.9.1 the `required` function in combination with a missing +# key will not work in place of this if statement. +{{- if (not .Values.config.jwsSigningKey) }} + {{ fail (printf "JWS_SIGN enabled- JWS private key source required. You need to specify .Values.config.jwsSigningKey or .Values.config.jwsSigningKeySecret.") }} +{{- end }} apiVersion: v1 kind: Secret metadata: @@ -13,11 +18,6 @@ metadata: annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} {{- end }} data: - # Note that due to a bug with helm 2.9.1 the `required` function in combination with a missing - # key will not work in place of this if statement. - {{- if eq .Values.config.jwsSigningKey "" }} - {{ fail (printf "JWS_SIGN enabled- JWS private key required. You need to specify .Values.config.jwsSigningKey.") }} - {{- end }} "private.key": {{ .Values.config.jwsSigningKey | b64enc }} --- {{- end }} diff --git a/sdk-scheme-adapter/chart-service/values.yaml b/sdk-scheme-adapter/chart-service/values.yaml index 3f3084226..afde50664 100644 --- a/sdk-scheme-adapter/chart-service/values.yaml +++ b/sdk-scheme-adapter/chart-service/values.yaml @@ -41,10 +41,17 @@ redis: {} config: simName: testFsp ## JWS configuration + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null jwsSigningKey: "" jwsVerificationKeys: {} env: + API_TYPE: fspiop + ILP_VERSION: "1" + ## API-SVC general config # Port number that the inbound (Mojaloop API) HTTP server will listen on INBOUND_LISTEN_PORT: 4000 @@ -110,6 +117,8 @@ env: TRANSACTION_REQUESTS_ENDPOINT: "{{ .Release.Name }}-transaction-requests-service" TRANSFERS_ENDPOINT: "{{ .Release.Name }}-api-adapter-service" BULK_TRANSFERS_ENDPOINT: "{{ .Release.Name }}-bulk-api-adapter-service" + FX_QUOTES_ENDPOINT: "{{ .Release.Name }}-quoting-service" + FX_TRANSFERS_ENDPOINT: "{{ .Release.Name }}-api-adapter-service" # BACKEND ENDPOINT BACKEND_ENDPOINT: localhost:4000 @@ -198,7 +207,7 @@ env: # To enable request for notification on fulfiled transfer RESERVE_NOTIFICATION: true # resources API versions should be string in format: "resourceOneName=1.0,resourceTwoName=1.1" - RESOURCE_VERSIONS: transfers=1.1,participants=1.1 + RESOURCE_VERSIONS: transfers=2.0,quotes=2.0,participants=2.0,parties=2.0,transactionRequests=1.1 # Management API websocket connection settings. # The Management API uses this for exchanging connector management messages. @@ -209,6 +218,12 @@ env: # when running the scheme-adapter as a mojaloop connector component within Payment Manager for Mojaloop. PM4ML_ENABLED: false + # Set FX Provider to use, this is temporary configuration until services component is implemented + GET_SERVICES_FXP_RESPONSE: testfxp + + # Supported Currencies by this DFSP + SUPPORTED_CURRENCIES: "USD" + ## API-SVC kafka config BACKEND_EVENT_CONSUMER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' BACKEND_EVENT_PRODUCER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' @@ -304,7 +319,7 @@ containerSecurityContext: image: registry: docker.io repository: mojaloop/sdk-scheme-adapter - tag: v23.1.1 + tag: v24.0.8 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images diff --git a/sdk-scheme-adapter/values.yaml b/sdk-scheme-adapter/values.yaml index 96ed893ac..bab5efaa7 100644 --- a/sdk-scheme-adapter/values.yaml +++ b/sdk-scheme-adapter/values.yaml @@ -48,10 +48,17 @@ sdk-scheme-adapter-api-svc: config: simName: *CONFIG_SIM_NAME ## JWS configuration + # `jwsSigningKeySecret` is used to specify the secret that contains the JWS signing key. + # If `jwsSigningKeySecret` is not null, then the `jwsSigningKey` value will be ignored. + # Expected properties of `jwsSigningKeySecret` are `name` and `key`. + jwsSigningKeySecret: null jwsSigningKey: "" jwsVerificationKeys: {} env: + API_TYPE: fspiop + ILP_VERSION: "1" + ## API-SVC general config # Port number that the inbound (Mojaloop API) HTTP server will listen on INBOUND_LISTEN_PORT: 4000 @@ -117,6 +124,8 @@ sdk-scheme-adapter-api-svc: TRANSACTION_REQUESTS_ENDPOINT: '{{ .Release.Name }}-transaction-requests-service' TRANSFERS_ENDPOINT: '{{ .Release.Name }}-ml-api-adapter-service' BULK_TRANSFERS_ENDPOINT: '{{ .Release.Name }}-bulk-api-adapter-service' + FX_QUOTES_ENDPOINT: "{{ .Release.Name }}-quoting-service" + FX_TRANSFERS_ENDPOINT: "{{ .Release.Name }}-api-adapter-service" # BACKEND ENDPOINT BACKEND_ENDPOINT: localhost:4000 @@ -202,7 +211,7 @@ sdk-scheme-adapter-api-svc: # To enable request for notification on fulfiled transfer RESERVE_NOTIFICATION: true # resources API versions should be string in format: "resourceOneName=1.0,resourceTwoName=1.1" - RESOURCE_VERSIONS: transfers=1.1,participants=1.1 + RESOURCE_VERSIONS: transfers=2.0,quotes=2.0,participants=2.0,parties=2.0,transactionRequests=1.1 # Management API websocket connection settings. # The Management API uses this for exchanging connector management messages. @@ -213,6 +222,12 @@ sdk-scheme-adapter-api-svc: # when running the scheme-adapter as a mojaloop connector component within Payment Manager for Mojaloop. PM4ML_ENABLED: false + # Set FX Provider to use, this is temporary configuration until services component is implemented. Enable this for FX. + # GET_SERVICES_FXP_RESPONSE: testfxp + + # Supported Currencies by this DFSP. Enable this for FX. + # SUPPORTED_CURRENCIES: "USD" + ## API-SVC kafka config BACKEND_EVENT_CONSUMER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' BACKEND_EVENT_PRODUCER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' @@ -285,7 +300,7 @@ sdk-scheme-adapter-api-svc: image: registry: docker.io repository: mojaloop/sdk-scheme-adapter - tag: v23.1.1 + tag: v24.0.8 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -705,7 +720,7 @@ sdk-scheme-adapter-dom-evt-handler: image: registry: docker.io repository: mojaloop/sdk-scheme-adapter - tag: v23.1.1 + tag: v24.0.8 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -1128,7 +1143,7 @@ sdk-scheme-adapter-cmd-evt-handler: image: registry: docker.io repository: mojaloop/sdk-scheme-adapter - tag: v23.1.1 + tag: v24.0.8 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images diff --git a/simulator/Chart.yaml b/simulator/Chart.yaml index ae2bd80df..9c3ab5721 100644 --- a/simulator/Chart.yaml +++ b/simulator/Chart.yaml @@ -1,16 +1,14 @@ apiVersion: v2 description: Simulator Helm Chart for Simulators name: simulator -version: 13.0.0 -appVersion: "12.0.0" +version: 13.3.0 +appVersion: v12.1.0 maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.0.0 tags: - moja-common diff --git a/simulator/templates/config.yaml b/simulator/templates/config.yaml index 91d2ae330..b36d91d06 100644 --- a/simulator/templates/config.yaml +++ b/simulator/templates/config.yaml @@ -10,6 +10,7 @@ metadata: helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} data: LOG_LEVEL: {{ .Values.config.LOG_LEVEL | quote }} + HUB_NAME: {{ .Values.config.HUB_NAME | quote }} PARTIES_ENDPOINT: {{ (.Values.config.PARTIES_SERVICE_ENDPOINT | replace "$release_name" .Release.Name) }} QUOTES_ENDPOINT: {{ (.Values.config.QUOTES_SERVICE_ENDPOINT | replace "$release_name" .Release.Name) }} TRANSFERS_ENDPOINT: {{ (.Values.config.TRANSFERS_SERVICE_ENDPOINT | replace "$release_name" .Release.Name) }} diff --git a/simulator/values.yaml b/simulator/values.yaml index f70d8d984..d442c1fd0 100644 --- a/simulator/values.yaml +++ b/simulator/values.yaml @@ -5,7 +5,7 @@ image: registry: docker.io repository: mojaloop/simulator - tag: v12.0.0 + tag: v12.2.4 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -31,14 +31,13 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/index.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -96,6 +95,7 @@ config: LOG_LEVEL: 'info' ## Add '$release' into any of the *_SERVICE_ENDPOINT values to include the release name as part of the deployment + HUB_NAME: Hub PARTIES_SERVICE_ENDPOINT: 'http://localhost:8088' QUOTES_SERVICE_ENDPOINT: 'http://localhost:8088' TRANSFERS_SERVICE_ENDPOINT: 'http://localhost:8088' @@ -150,11 +150,11 @@ service: ## e.g.: ## clusterIP: None ## - clusterIP: + clusterIP: null ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer ## - loadBalancerIP: + loadBalancerIP: null ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## e.g: @@ -188,9 +188,9 @@ ingress: pathType: ImplementationSpecific ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) ## - apiVersion: - ## @param ingress.hostname Default host for the ingress record - ## + apiVersion: null +## @param ingress.hostname Default host for the ingress record +## hostname: moja-simulator.local ## @param servicePort : port for the service ## @@ -201,14 +201,14 @@ ingress: ## @param ingress.annotations Additional custom annotations for the ingress record ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added ## - annotations: - ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter - ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` - ## You can: - ## - Use the `ingress.secrets` parameter to create this TLS secret - ## - Relay on cert-manager to create it by setting `ingress.certManager=true` - ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` - ## + annotations: null +## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter +## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` +## You can: +## - Use the `ingress.secrets` parameter to create this TLS secret +## - Relay on cert-manager to create it by setting `ingress.certManager=true` +## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` +## tls: false ## @param ingress.certManager Add the corresponding annotations for cert-manager integration ## @@ -222,12 +222,11 @@ ingress: ## - name: transfer-api-svc.local ## path: / ## - extraHosts: - extraPaths: - extraTls: - secrets: + extraHosts: null + extraPaths: null + extraTls: null + secrets: null className: "nginx" - # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following diff --git a/thirdparty/Chart.yaml b/thirdparty/Chart.yaml index 585b85e89..5799b26aa 100644 --- a/thirdparty/Chart.yaml +++ b/thirdparty/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: thirdparty -version: 3.0.2 +version: 3.6.1 description: Third Party API Support for Mojaloop appVersion: "auth-service: v15.0.0; als-consent-oracle: v0.2.2; thirdparty-sdk: v15.1.1" home: http://mojaloop.io @@ -10,32 +10,30 @@ sources: - https://github.com/mojaloop/helm - https://github.com/mojaloop/pisp-project maintainers: - - name: Tom Daly - email: tomd@crosslaketech.com - name: Miguel de Barros email: miguel.debarros@modusbox.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: auth-svc - version: ">= 3.0.1" + version: ">= 3.3.0" repository: "file://./chart-auth-svc" condition: auth-svc.enabled - name: consent-oracle - version: ">= 0.4.1" + version: ">= 0.7.0" repository: "file://./chart-consent-oracle" condition: consent-oracle.enabled - name: tp-api-svc - version: ">= 3.0.1" + version: ">= 3.3.0" repository: "file://./chart-tp-api-svc" condition: tp-api-svc.enabled - name: mojaloop-simulator alias: thirdparty-simulator - version: ">= 15.0.0" + version: ">= 15.2.1" repository: "file://../mojaloop-simulator" condition: mojaloop-simulator.enabled - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.0.0 tags: - moja-common diff --git a/thirdparty/chart-auth-svc/Chart.yaml b/thirdparty/chart-auth-svc/Chart.yaml index 33602472e..b706b59e1 100644 --- a/thirdparty/chart-auth-svc/Chart.yaml +++ b/thirdparty/chart-auth-svc/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: auth-svc chart for Mojaloop Thirdparty Services name: auth-svc -version: 3.0.1 -appVersion: "15.0.0" +version: 3.3.0 +appVersion: v15.0.0 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -10,13 +10,11 @@ sources: - https://github.com/mojaloop/helm - https://github.com/mojaloop/auth-service maintainers: - - name: Tom Daly - email: tomd@crosslaketech.com - name: Miguel de Barros email: miguel.debarros@modusbox.com dependencies: - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.0.0 tags: - moja-common diff --git a/thirdparty/chart-auth-svc/example_dependencies.yaml b/thirdparty/chart-auth-svc/example_dependencies.yaml index f6853fa1f..1a0b89681 100644 --- a/thirdparty/chart-auth-svc/example_dependencies.yaml +++ b/thirdparty/chart-auth-svc/example_dependencies.yaml @@ -44,7 +44,7 @@ spec: app: mysql-auth-svc spec: containers: - - image: mysql:5.7 + - image: mysql:9.0.1 name: mysql-auth-svc # command: [ '/bin/sh' ] # args: ['-c', 'tail -f /dev/null'] diff --git a/thirdparty/chart-auth-svc/values.yaml b/thirdparty/chart-auth-svc/values.yaml index 368ac0f8d..45802071d 100644 --- a/thirdparty/chart-auth-svc/values.yaml +++ b/thirdparty/chart-auth-svc/values.yaml @@ -221,7 +221,7 @@ initContainers: | - name: REDIS_PORT value: {{ .Values.config.redis_port | quote }} - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh diff --git a/thirdparty/chart-consent-oracle/Chart.yaml b/thirdparty/chart-consent-oracle/Chart.yaml index 1995421cb..a481d480a 100644 --- a/thirdparty/chart-consent-oracle/Chart.yaml +++ b/thirdparty/chart-consent-oracle/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: consent-oracle chart for Mojaloop Thirdparty Overlay Services name: consent-oracle -version: 0.4.1 -appVersion: "0.2.2" +version: 0.7.0 +appVersion: v0.2.2 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -10,13 +10,11 @@ sources: - https://github.com/mojaloop/helm - https://github.com/mojaloop/als-consent-oracle maintainers: - - name: Tom Daly - email: tomd@crosslaketech.com - name: Miguel de Barros email: miguel.debarros@modusbox.com dependencies: - name: common - repository: https://mojaloop.github.io/charts/repo - version: 2.0.0 + repository: https://mojaloop.github.io/charts/repo + version: 3.0.0 tags: - moja-common diff --git a/thirdparty/chart-consent-oracle/example_dependencies.yaml b/thirdparty/chart-consent-oracle/example_dependencies.yaml index 4b787523b..6290ad28c 100644 --- a/thirdparty/chart-consent-oracle/example_dependencies.yaml +++ b/thirdparty/chart-consent-oracle/example_dependencies.yaml @@ -44,7 +44,7 @@ spec: app: mysql-consent-oracle spec: containers: - - image: mysql:5.7 + - image: mysql:9.0.1 name: mysql-consent-oracle # command: [ '/bin/sh' ] # args: ['-c', 'tail -f /dev/null'] diff --git a/thirdparty/chart-consent-oracle/values.yaml b/thirdparty/chart-consent-oracle/values.yaml index 56427b13a..7e49c2353 100644 --- a/thirdparty/chart-consent-oracle/values.yaml +++ b/thirdparty/chart-consent-oracle/values.yaml @@ -3,7 +3,7 @@ enabled: true image: registry: docker.io repository: mojaloop/als-consent-oracle - tag: v0.2.2 + tag: v0.2.3 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -146,7 +146,7 @@ config_files: # initContainers: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh diff --git a/thirdparty/chart-tp-api-svc/Chart.yaml b/thirdparty/chart-tp-api-svc/Chart.yaml index 2b47e3af7..48b16cf6e 100644 --- a/thirdparty/chart-tp-api-svc/Chart.yaml +++ b/thirdparty/chart-tp-api-svc/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: Thirdparty API Service chart for Mojaloop Thirdparty Overlay Services name: tp-api-svc -version: 3.0.1 -appVersion: "14.0.0" +version: 3.3.0 +appVersion: v14.0.0 home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -10,13 +10,11 @@ sources: - https://github.com/mojaloop/helm - https://github.com/mojaloop/thirdparty-api-svc maintainers: - - name: Tom Daly - email: tomd@crosslaketech.com - name: Miguel de Barros email: miguel.debarros@modusbox.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" - version: 2.0.0 + version: 3.0.0 tags: - moja-common diff --git a/thirdparty/chart-tp-api-svc/values.yaml b/thirdparty/chart-tp-api-svc/values.yaml index 5dc01f780..c86c5fc2f 100644 --- a/thirdparty/chart-tp-api-svc/values.yaml +++ b/thirdparty/chart-tp-api-svc/values.yaml @@ -3,7 +3,7 @@ enabled: true image: registry: docker.io repository: mojaloop/thirdparty-api-svc - tag: v14.0.0 + tag: v15.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -86,52 +86,59 @@ env: [] # value: debug ## Svc configs -config: {} +config: + hub_participant: + id: 1 + name: Hub ## Svc config files config_files: default.json: | { - "PORT": {{ .Values.service.internalPort }}, - "HOST": "0.0.0.0", - "INSPECT": { - "DEPTH": 4, - "SHOW_HIDDEN": false, - "COLOR": true - }, - "ENDPOINT_CACHE_CONFIG": { - "expiresIn": 180000, - "generateTimeout": 30000 - }, - "ENDPOINT_SERVICE_URL": "http://{{ .Release.Name }}-centralledger-service", - "PARTICIPANT_LIST_LOCAL": [ - "dfspa", - "dfspb" - ], - "ERROR_HANDLING": { - "includeCauseExtension": true, - "truncateExtensions": true - }, - "INSTRUMENTATION": { - "METRICS": { - "DISABLED": false, - "labels": { - "eventId": "*" - }, - "config": { - "timeout": 5000, - "prefix": "moja_3p_api", - "defaultLabels": { - "serviceName": "thirdparty-api-svc" - } + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": "{{ .Values.config.hub_participant.name }}" + }, + "PORT": {{ .Values.service.internalPort }}, + "HOST": "0.0.0.0", + "INSPECT": { + "DEPTH": 4, + "SHOW_HIDDEN": false, + "COLOR": true + }, + "ENDPOINT_CACHE_CONFIG": { + "expiresIn": 180000, + "generateTimeout": 30000 + }, + "ENDPOINT_SERVICE_URL": "http://{{ .Release.Name }}-centralledger-service", + "PARTICIPANT_LIST_LOCAL": [ + "dfspa", + "dfspb" + ], + "ERROR_HANDLING": { + "includeCauseExtension": true, + "truncateExtensions": true + }, + "INSTRUMENTATION": { + "METRICS": { + "DISABLED": false, + "labels": { + "eventId": "*" + }, + "config": { + "timeout": 5000, + "prefix": "moja_3p_api", + "defaultLabels": { + "serviceName": "thirdparty-api-svc" } } - }, - "MOCK_CALLBACK": { - "transactionRequestId": "abc-12345", - "pispId": "pisp" } + }, + "MOCK_CALLBACK": { + "transactionRequestId": "abc-12345", + "pispId": "pisp" } + } ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ diff --git a/thirdparty/values.yaml b/thirdparty/values.yaml index d1198aa7e..287fb2bb4 100644 --- a/thirdparty/values.yaml +++ b/thirdparty/values.yaml @@ -30,7 +30,7 @@ auth-svc: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - ./dist/src/cli.js - all @@ -38,7 +38,7 @@ auth-svc: ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -112,7 +112,7 @@ auth-svc: ## Svc config files config_files: - production.json: | + production.json: | { "PORT": {{ .Values.service.internalPort }}, "HOST": "0.0.0.0", @@ -222,19 +222,19 @@ auth-svc: - name: REDIS_PORT value: {{ .Values.config.redis_port | quote }} - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh - -c - | - until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; + until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -420,7 +420,7 @@ consent-oracle: image: registry: docker.io repository: mojaloop/als-consent-oracle - tag: v0.2.2 + tag: v0.2.3 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -446,14 +446,14 @@ consent-oracle: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - ./dist/src/cli.js ## @param diagnosticMode.args Args to override all containers in the deployment ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -563,19 +563,19 @@ consent-oracle: # initContainers: [] initContainers: | - name: wait-for-mysql - image: mysql:5.7 + image: mysql:9.0.1 imagePullPolicy: IfNotPresent command: - sh - -c - | - until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; + until mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} --password=${DB_PASSWORD} ${DB_DATABASE} -e 'select version()' ; do echo --------------------; echo Waiting for MySQL...; - sleep 2; + sleep 2; done; - echo ====================; + echo ====================; echo MySQL ok!; env: - name: DB_HOST @@ -761,7 +761,7 @@ tp-api-svc: image: registry: docker.io repository: mojaloop/thirdparty-api-svc - tag: v14.0.0 + tag: v15.0.1 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -787,7 +787,7 @@ tp-api-svc: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - ./dist/src/cli.js - all @@ -795,7 +795,7 @@ tp-api-svc: ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -844,52 +844,59 @@ tp-api-svc: # value: debug ## Svc configs - config: {} + config: + hub_participant: + id: 1 + name: Hub ## Svc config files config_files: default.json: | { - "PORT": {{ .Values.service.internalPort }}, - "HOST": "0.0.0.0", - "INSPECT": { - "DEPTH": 4, - "SHOW_HIDDEN": false, - "COLOR": true - }, - "ENDPOINT_CACHE_CONFIG": { - "expiresIn": 180000, - "generateTimeout": 30000 - }, - "ENDPOINT_SERVICE_URL": "http://{{ .Release.Name }}-centralledger-service", - "PARTICIPANT_LIST_LOCAL": [ - "dfspa", - "dfspb" - ], - "ERROR_HANDLING": { - "includeCauseExtension": true, - "truncateExtensions": true - }, - "INSTRUMENTATION": { - "METRICS": { - "DISABLED": false, - "labels": { - "eventId": "*" - }, - "config": { - "timeout": 5000, - "prefix": "moja_3p_api", - "defaultLabels": { - "serviceName": "thirdparty-api-svc" - } + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": "{{ .Values.config.hub_participant.name }}" + }, + "PORT": {{ .Values.service.internalPort }}, + "HOST": "0.0.0.0", + "INSPECT": { + "DEPTH": 4, + "SHOW_HIDDEN": false, + "COLOR": true + }, + "ENDPOINT_CACHE_CONFIG": { + "expiresIn": 180000, + "generateTimeout": 30000 + }, + "ENDPOINT_SERVICE_URL": "http://{{ .Release.Name }}-centralledger-service", + "PARTICIPANT_LIST_LOCAL": [ + "dfspa", + "dfspb" + ], + "ERROR_HANDLING": { + "includeCauseExtension": true, + "truncateExtensions": true + }, + "INSTRUMENTATION": { + "METRICS": { + "DISABLED": false, + "labels": { + "eventId": "*" + }, + "config": { + "timeout": 5000, + "prefix": "moja_3p_api", + "defaultLabels": { + "serviceName": "thirdparty-api-svc" } } - }, - "MOCK_CALLBACK": { - "transactionRequestId": "abc-12345", - "pispId": "pisp" } + }, + "MOCK_CALLBACK": { + "transactionRequestId": "abc-12345", + "pispId": "pisp" } + } ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ @@ -1081,7 +1088,6 @@ thirdparty-simulator: # * support arbitrary init containers + config (that might just be config that goes into defaults # or something?). Supply all config and volumes to the init containers. # * create some test containers - # * parametrise imagePullSecretName (global? like https://github.com/bitnami/charts/tree/master/bitnami/redis#parameters) # * generate JWS private/public keys, so the user does not need to supply keys at all. # * generate public key from private, so the user only needs to supply private keys for each sim? # (_might_ be possible with a job or init container or similar). @@ -1249,6 +1255,18 @@ thirdparty-simulator: schemeAdapter: secrets: jws: + # Use the privateKeySecret field if you would like to supply a JWS private key external + # to this chart. + # For example, if you create a private key called `sim-payerfsp-jws-signing-key` with data property `private.key` + # external to this chart, you would supply + # `privateKeySecret: + # name: sim-payerfsp-jws-signing-key` + # key: private.key + # here. + # These fields will take precedence over `privateKey` and `publicKey` below. + # This field is best supplied per-simulator, however it's here for documentation + # purposes. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -1808,6 +1826,18 @@ thirdparty-simulator: schemeAdapter: secrets: jws: + # Use the privateKeySecret field if you would like to supply a JWS private key external + # to this chart. + # For example, if you create a private key called `sim-payerfsp-jws-signing-key` with data property `private.key` + # external to this chart, you would supply + # `privateKeySecret: + # name: sim-payerfsp-jws-signing-key` + # key: private.key + # here. + # These fields will take precedence over `privateKey` and `publicKey` below. + # This field is best supplied per-simulator, however it's here for documentation + # purposes. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -1858,6 +1888,18 @@ thirdparty-simulator: schemeAdapter: secrets: jws: + # Use the privateKeySecret field if you would like to supply a JWS private key external + # to this chart. + # For example, if you create a private key called `sim-payerfsp-jws-signing-key` with data property `private.key` + # external to this chart, you would supply + # `privateKeySecret: + # name: sim-payerfsp-jws-signing-key` + # key: private.key + # here. + # These fields will take precedence over `privateKey` and `publicKey` below. + # This field is best supplied per-simulator, however it's here for documentation + # purposes. + privateKeySecret: {} # The following is an example key and shouldn't be used in production privateKey: |- -----BEGIN PRIVATE KEY----- @@ -1966,8 +2008,14 @@ thirdparty-simulator: initContainers: waitForCache: enabled: true - - imagePullSecretName: dock-casa-secret + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## imagePullSecrets: + ## - myRegistryKeySecretName + ## + imagePullSecrets: [] cache: @@ -1998,19 +2046,18 @@ thirdparty-simulator: schemeAdapter: secrets: jws: - # Use the privKeySecretName field if you would like to supply a JWS private key external + # Use the privateKeySecret field if you would like to supply a JWS private key external # to this chart. - # For example, if you create a private key called `sim-payerfsp-jws-signing-key` external - # to this chart, you would supply `privKeySecretName: sim-payerfsp-jws-signing-key` here. + # For example, if you create a private key called `sim-payerfsp-jws-signing-key` with data property `private.key` + # external to this chart, you would supply + # `privateKeySecret: + # name: sim-payerfsp-jws-signing-key` + # key: private.key + # here. # These fields will take precedence over `privateKey` and `publicKey` below. # This field is best supplied per-simulator, however it's here for documentation # purposes. - privKeySecretName: {} - # TODO: update `privKeySecretName` above to contain both a name and a key in the secret. - # Add documentation on usage. - # privKeySecret: {} - # name: - # key: + privateKeySecret: {} # # The `publicKeyConfigMapName` field allows you to supply a ConfigMap containing JWS public # keys external to this release, and have this release reference that ConfigMap to @@ -2023,7 +2070,7 @@ thirdparty-simulator: publicKey: '' image: repository: mojaloop/sdk-scheme-adapter - tag: v23.1.1 + tag: v24.0.8 pullPolicy: IfNotPresent command: '[ "yarn", "start:api-svc" ]' <<: *defaultProbes @@ -2168,14 +2215,14 @@ thirdparty-simulator: ALLOW_TRANSFER_WITHOUT_QUOTE: false ALLOW_DIFFERENT_TRANSFER_TRANSACTION_ID: true RESERVE_NOTIFICATION: false - RESOURCE_VERSIONS: transfers=1.1,quotes=1.1,participants=1.1,parties=1.1,transactionRequests=1.1 + RESOURCE_VERSIONS: transfers=2.0,quotes=2.0,participants=1.1,parties=2.0,transactionRequests=1.1 ENABLE_FSPIOP_EVENT_HANDLER: false ENABLE_BACKEND_EVENT_HANDLER: false backend: image: repository: mojaloop/mojaloop-simulator - tag: v15.0.0 + tag: v15.1.5 pullPolicy: IfNotPresent <<: *defaultProbes @@ -2295,19 +2342,18 @@ thirdparty-simulator: # DO NOT REMOVE COMMENT outbound: *inbound jws: - # Use the privKeySecretName field if you would like to supply a JWS private key external + # Use the privateKeySecret field if you would like to supply a JWS private key external # to this chart. - # For example, if you create a private key called `sim-payerfsp-jws-signing-key` external - # to this chart, you would supply `privKeySecretName: sim-payerfsp-jws-signing-key` here. + # For example, if you create a private key called `sim-payerfsp-jws-signing-key` with data property `private.key` + # external to this chart, you would supply + # `privateKeySecret: + # name: sim-payerfsp-jws-signing-key` + # key: private.key + # here. # These fields will take precedence over `privateKey` and `publicKey` below. # This field is best supplied per-simulator, however it's here for documentation # purposes. - privKeySecretName: {} - # TODO: update `privKeySecretName` above to contain both a name and a key in the secret. - # Add documentation on usage. - # privKeySecret: {} - # name: - # key: + privateKeySecret: {} # # The `publicKeyConfigMapName` field allows you to supply a ConfigMap containing JWS public # keys external to this release, and have this release reference that ConfigMap to @@ -2347,7 +2393,7 @@ thirdparty-simulator: target: type: Utilization averageUtilization: 80 - config: + config: production.json: { "control": { "mgmtAPIWsUrl": "127.0.0.1", @@ -2466,4 +2512,4 @@ thirdparty-simulator: ## Set toleration for scheduler ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - tolerations: [] \ No newline at end of file + tolerations: [] diff --git a/transaction-requests-service/Chart.yaml b/transaction-requests-service/Chart.yaml index a6d932f14..7b5c025d6 100644 --- a/transaction-requests-service/Chart.yaml +++ b/transaction-requests-service/Chart.yaml @@ -1,23 +1,21 @@ apiVersion: v2 description: Transaction-Requests-Service Helm chart for Kubernetes name: transaction-requests-service -version: 13.0.1 +version: 13.3.0 appVersion: "14.1.2" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: - - https://github.com/mojaloop/transaction-requests-service - - https://github.com/mojaloop/helm + - https://github.com/mojaloop/transaction-requests-service + - https://github.com/mojaloop/helm maintainers: - name: Miguel de Barros email: miguel.debarros@modusbox.com - - name: Tom Daly - email: tomd@crosslaketech.com - name: Steven Oderayi email: steven.oderayi@infitx.com dependencies: - name: common repository: "https://mojaloop.github.io/charts/repo" tags: - - moja-common - version: 2.0.0 + - moja-common + version: 3.1.1 diff --git a/transaction-requests-service/configs/default.json b/transaction-requests-service/configs/default.json index 7ab32192a..fe60dcc80 100644 --- a/transaction-requests-service/configs/default.json +++ b/transaction-requests-service/configs/default.json @@ -1,5 +1,9 @@ {{- $centralServicesHost := ( .Values.config.central_services_host | replace "$release_name" .Release.Name ) -}} { + "HUB_PARTICIPANT": { + "ID": {{ .Values.config.hub_participant.id }}, + "NAME": {{ .Values.config.hub_participant.name | quote }} + }, "PORT": {{ .Values.service.internalPort }}, "PROTOCOL_VERSIONS": {{ .Values.config.protocol_versions | toPrettyJson }}, "ENDPOINT_CACHE_CONFIG": { diff --git a/transaction-requests-service/templates/config-override.yaml b/transaction-requests-service/templates/config-override.yaml new file mode 100644 index 000000000..811ee192f --- /dev/null +++ b/transaction-requests-service/templates/config-override.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configOverride }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "transaction-requests-service.fullname" . }}-config-override + labels: + app.kubernetes.io/name: {{ include "transaction-requests-service.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +data: +{{- range $fileName, $fileContents := .Values.configOverride }} + {{ $fileName | replace "/" "-" }}: | {{ ternary $fileContents (toPrettyJson $fileContents) (eq (typeOf $fileContents) "string") | nindent 4 }} +{{- end }} +{{- end }} diff --git a/transaction-requests-service/templates/deployment.yaml b/transaction-requests-service/templates/deployment.yaml index 543726e5f..7a761dd30 100644 --- a/transaction-requests-service/templates/deployment.yaml +++ b/transaction-requests-service/templates/deployment.yaml @@ -33,12 +33,16 @@ spec: {{- end }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.configOverride }} + checksum/config-override: {{ include (print $.Template.BasePath "/config-override.yaml") . | sha256sum }} + {{- end }} checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} # Custom Pod annotations {{- if .Values.podAnnotations }} {{- include "common.tplvalues.render" ( dict "value" .Values.podAnnotations "context" $ ) | nindent 8 }} {{- end }} spec: + {{- include "common.topologySpread" . | nindent 6 }} {{- if .Values.affinity }} affinity: {{ toYaml .Values.affinity | indent 8 }} @@ -124,6 +128,11 @@ spec: - name: EVENT_SDK_TRACEID_PER_VENDOR value: {{ .Values.config.event_traceid_per_vendor | quote }} volumeMounts: +{{- range $fileName, $fileContents := .Values.configOverride }} + - name: config-override-volume + mountPath: /opt/app/{{ $fileName }} + subPath: {{ $fileName | replace "/" "-" }} +{{- end }} - name: {{ template "transaction-requests-service.fullname" . }}-config-volume mountPath: /opt/app/config {{- if .Values.sidecar.enabled }} @@ -167,6 +176,11 @@ spec: value: {{ .Values.sidecar.config.event_log_metadata_only | quote }} {{- end }} volumes: + {{- if .Values.configOverride }} + - name: config-override-volume + configMap: + name: {{ template "transaction-requests-service.fullname" . }}-config-override + {{- end }} - name: {{ template "transaction-requests-service.fullname" . }}-config-volume configMap: name: {{ template "transaction-requests-service.fullname" . }}-config diff --git a/transaction-requests-service/values.yaml b/transaction-requests-service/values.yaml index fe6b59707..848d9c6ae 100644 --- a/transaction-requests-service/values.yaml +++ b/transaction-requests-service/values.yaml @@ -9,7 +9,7 @@ global: {} image: registry: docker.io repository: mojaloop/transaction-requests-service - tag: v14.1.2 + tag: v14.3.6 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -27,6 +27,16 @@ image: replicaCount: 1 command: '["node", "src/index.js", "api"]' +# Mount configuration files in the app folder for overriding defaults +# configOverride: +# # event sdk settings override +# .EVENT_SDKrc: +# AUDIT: kafka + +# # logging settings override +# .CSLrc: +# LOG_FILTER: "" + ## Enable diagnostic mode in the deployment ## diagnosticMode: @@ -35,7 +45,7 @@ diagnosticMode: enabled: false ## @param diagnosticMode.command Command to override all containers in the deployment ## - command: + command: - node - src/index.js - api @@ -43,7 +53,7 @@ diagnosticMode: ## args: - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} - + ## @param diagnosticMode.debug config to override all debug information ## debug: @@ -126,6 +136,9 @@ metrics: serviceName: transaction-requests config: + hub_participant: + id: 1 + name: Hub central_services_host: '$release_name-centralledger-service' central_services_port: 80 diff --git a/update-charts-dep.sh b/update-charts-dep.sh index 434975cae..a4073eada 100755 --- a/update-charts-dep.sh +++ b/update-charts-dep.sh @@ -29,6 +29,7 @@ declare -a charts=( monitoring/efk account-lookup-service als-oracle-pathfinder + als-msisdn-oracle # centralkms # Deprecated - No longer supported # forensicloggingsidecar # Deprecated - No longer supported centralledger @@ -50,6 +51,8 @@ declare -a charts=( thirdparty/chart-tp-api-svc thirdparty merchant-registry-svc + inter-scheme-proxy-adapter + merchant-registry-svc mojaloop )