From 3bbbece7a384deea67328f234c73f3a8f2ce7f73 Mon Sep 17 00:00:00 2001 From: Emanuel Date: Fri, 5 Sep 2025 11:56:13 +0100 Subject: [PATCH 01/11] adding managed services docs --- .../managed-services/dynamic-configuration.md | 0 docs/quix-cloud/managed-services/overview.md | 58 +++++++++++++++++++ mkdocs.yml | 3 + 3 files changed, 61 insertions(+) create mode 100644 docs/quix-cloud/managed-services/dynamic-configuration.md create mode 100644 docs/quix-cloud/managed-services/overview.md diff --git a/docs/quix-cloud/managed-services/dynamic-configuration.md b/docs/quix-cloud/managed-services/dynamic-configuration.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/quix-cloud/managed-services/overview.md b/docs/quix-cloud/managed-services/overview.md new file mode 100644 index 00000000..e9e3e36d --- /dev/null +++ b/docs/quix-cloud/managed-services/overview.md @@ -0,0 +1,58 @@ +# Overview + +Managed services are Quix-provided applications built from Quix-maintained container images. You deploy them like any other application; the difference is you set `deploymentType: Managed`, choose a supported `application`, and pick a `version`. Quix manages the image lifecycle (versions and updates). + +## Why use managed services? + +- Pre-built and supported by Quix – no code to maintain +- Versioned images managed by Quix (use `latest` or pin a version) +- Security patches, bug fixes, and feature improvements shipped by Quix as new image versions (you choose when to adopt) + +## Available managed services + +- Dynamic Configuration Manager (`DynamicConfiguration`) +- Data Lake Sink (`DataLake.Sink`) +- Data Lake Replay (`DataLake.Replay`) + +## Quick example + +Here’s an example managed service definition you can add to your pipeline YAML: + +```yaml +- name: Dynamic Configuration Manager + application: DynamicConfiguration + version: latest + deploymentType: Managed + resources: + cpu: 200 + memory: 500 + replicas: 1 + configuration: + topic: config-updates + mongoDatabase: quix + mongoCollection: configuration-api + mongoHost: mongodb + mongoPort: 27017 + mongoUser: admin + mongoPasswordSecret: mongoPasswordSecret +``` + +Notes + +- `application` selects the managed app to run. Use one of the supported identifiers listed above. +- `version` can be `latest` or a specific version that Quix publishes for that application. +- `configuration` keys are specific to each managed service. See each service page for details. + +## Configuration (simplified) + +Managed services introduce a `configuration` section to make deployments easier to read and maintain. Instead of defining a large set of environment variables, you provide a small number of descriptive keys. At deploy time, Quix resolves these into the underlying environment variables and wiring needed by the managed image. This keeps your YAML concise while still allowing you to use secrets and advanced settings when needed. See each service page for the supported configs. + +## Versioning and upgrades + +- Use `version: latest` to automatically receive the newest compatible image maintained by Quix. +- Pin to an explicit version to control upgrade timing. You can later change the version and redeploy to upgrade. +- Same behavior as normal applications: if you use `latest` and Quix publishes a new image, your deployment will show as out of sync. Redeploy/sync to adopt the new image. If you pin a version, it stays stable until you change it. + +## Service pages + +- Dynamic Configuration Manager: `quix-cloud/managed-services/dynamic-configuration.md` diff --git a/mkdocs.yml b/mkdocs.yml index 5aad4876..139ef884 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -213,6 +213,9 @@ nav: - 'Overview': 'quix-cloud/overview.md' - 'Quickstart': 'quix-cloud/quickstart.md' - 'Why Use Quix Cloud': 'quix-cloud/why-quix-cloud.md' + - 'Managed services': + - 'quix-cloud/managed-services/overview.md' + - 'Dynamic Configuration Manager': 'quix-cloud/managed-services/dynamic-configuration.md' - 'Quix Cloud Tour': - '1. Create your project': - 'Overview': 'create/overview.md' From af6dda24aead445d347010c6c56ca0aca5350f3f Mon Sep 17 00:00:00 2001 From: Emanuel Date: Fri, 5 Sep 2025 15:20:59 +0100 Subject: [PATCH 02/11] Add documentation for Dynamic Configuration Manager and update overview --- .../managed-services/dynamic-configuration.md | 78 +++++++++++++++++++ docs/quix-cloud/managed-services/overview.md | 7 +- 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/docs/quix-cloud/managed-services/dynamic-configuration.md b/docs/quix-cloud/managed-services/dynamic-configuration.md index e69de29b..787bbf7f 100644 --- a/docs/quix-cloud/managed-services/dynamic-configuration.md +++ b/docs/quix-cloud/managed-services/dynamic-configuration.md @@ -0,0 +1,78 @@ +# Dynamic Configuration Manager + +The Dynamic Configuration Manager is a managed service to store, version, and distribute application configuration at runtime. It provides a simple REST API and lightweight UI, persists configuration in a backing store, and emits change events to Kafka so services can react immediately. It works great with the Quix platform and SDK, and can be used from any HTTP/Kafka client. + +Identifier: `DynamicConfiguration` + +## Example YAML + +```yaml +deployments: +- name: Dynamic Configuration Manager + application: DynamicConfiguration + version: latest + deploymentType: Managed + resources: + cpu: 200 + memory: 500 + replicas: 1 + configuration: + # Kafka topic for configuration updates + topic: config-updates + + # Backing store (MongoDB by default) + mongoDatabase: quix + mongoCollection: configuration-api + mongoHost: mongodb + mongoPort: 27017 + mongoUser: admin + mongoPasswordSecret: mongoPasswordSecret + + # Optional settings + consumerGroup: config-api-v1 + port: 80 + workers: 1 + contentStore: mongo # mongo | file +``` + +## Key capabilities + +- CRUD configuration items with optional metadata +- Versioning and history +- Real-time change notifications on a Kafka topic +- Pluggable content store (Mongo by default; file mode uses blob/object storage such as S3, GCS, or Azure Blob) +- Simple REST API and web UI +- Horizontal scaling via workers +- Optional consumer group for isolated consumption + +## How it works (high-level) + +1. Create/update requests persist content and produce a new version. +2. The service publishes a change event to the configured Kafka topic. +3. Consumers subscribe to that topic and apply changes. + +Note + +- Besides defining it in YAML, you can also add this managed service from the Quix UI: open the side panel, go to Services → Add service → Dynamic Configuration Manager, then configure and deploy. + +## Configuration + +Managed services use a simplified configuration block. At deploy time, Quix maps these keys to the underlying environment variables and wiring required by the managed image. + +### Required + +- topic: Kafka topic for configuration updates +- mongoHost: MongoDB host +- mongoPort: MongoDB port +- mongoUser: MongoDB user +- mongoPasswordSecret: Name of the Quix secret containing the MongoDB password +- mongoDatabase: MongoDB database name +- mongoCollection: MongoDB collection name + +### Optional + +- consumerGroup: Kafka consumer group identifier (default: config-api-v1) +- port: Port for the REST API (default: 80) +- workers: Number of worker processes (default: 1) +- contentStore: Storage backend for configuration content (mongo or file; default: mongo). In file mode, content is stored in blob/object storage (e.g., S3/GCS/Azure Blob) and typically requires provider-specific credentials configured via Quix secrets. + diff --git a/docs/quix-cloud/managed-services/overview.md b/docs/quix-cloud/managed-services/overview.md index e9e3e36d..117b613e 100644 --- a/docs/quix-cloud/managed-services/overview.md +++ b/docs/quix-cloud/managed-services/overview.md @@ -2,6 +2,10 @@ Managed services are Quix-provided applications built from Quix-maintained container images. You deploy them like any other application; the difference is you set `deploymentType: Managed`, choose a supported `application`, and pick a `version`. Quix manages the image lifecycle (versions and updates). +Note + +- In the Quix UI, some managed services are also available from the side panel as Connectors or Services. You can add them from there or reference them directly in YAML as shown below. + ## Why use managed services? - Pre-built and supported by Quix – no code to maintain @@ -16,9 +20,10 @@ Managed services are Quix-provided applications built from Quix-maintained conta ## Quick example -Here’s an example managed service definition you can add to your pipeline YAML: +Here’s an example managed service definition you can add to your pipeline YAML in: ```yaml +deployments: - name: Dynamic Configuration Manager application: DynamicConfiguration version: latest From 25d596a6339e7edb18c951930e37fcf129e51793 Mon Sep 17 00:00:00 2001 From: Emanuel Date: Fri, 5 Sep 2025 15:42:21 +0100 Subject: [PATCH 03/11] adding plugin docs --- docs/quix-cloud/managed-services/plugin.md | 34 ++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 35 insertions(+) create mode 100644 docs/quix-cloud/managed-services/plugin.md diff --git a/docs/quix-cloud/managed-services/plugin.md b/docs/quix-cloud/managed-services/plugin.md new file mode 100644 index 00000000..a1509cb6 --- /dev/null +++ b/docs/quix-cloud/managed-services/plugin.md @@ -0,0 +1,34 @@ +# Plugin System + +The plugin system enables services to expose an embedded UI inside Deployment Details (rendered as an iframe), and optionally add a shortcut in the environment’s left sidebar. Managed services populate these fields automatically via the Managed Framework; Non‑managed services can be configured in the yaml. + +## What it does + +- Embed a service UI in Deployment Details when enabled +- Optionally show a sidebar shortcut to the embedded UI +- Keep YAML simple: only declare intent; + +## YAML support (non‑managed and managed) + +In your deployment YAML, you can enable the embedded UI and, optionally, a sidebar item: + +```yaml +plugin: + embeddedView: true # Enables embedded UI (frontend renders iframe) + sidebarItem: # Optional environment sidebar shortcut + show: true # Whether to display a shortcut in the sidebar + label: "Configuration" # Text for the menu item + icon: "tune" # Material icon name + order: 1 # Ordering (lower = higher) +``` + +Notes + +- plugin.embeddedView: boolean. true → FE renders embedded UI; false/null → legacy details. +- plugin.sidebarItem: optional object configuring the Environment’s left sidebar item. +- Do not include embeddedViewUrl in YAML; it is derived and exposed by the API. + +## Public Url + +- Managed service → derived from Managed Services internal conventions. +- Non‑managed service → uses the deployment’s publicUrl. diff --git a/mkdocs.yml b/mkdocs.yml index 139ef884..4dfe0b46 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -215,6 +215,7 @@ nav: - 'Why Use Quix Cloud': 'quix-cloud/why-quix-cloud.md' - 'Managed services': - 'quix-cloud/managed-services/overview.md' + - 'Plugin system': 'quix-cloud/managed-services/plugin.md' - 'Dynamic Configuration Manager': 'quix-cloud/managed-services/dynamic-configuration.md' - 'Quix Cloud Tour': - '1. Create your project': From 71cfcc08f743cadc4d131c254e03045f0e18de42 Mon Sep 17 00:00:00 2001 From: Emanuel Date: Fri, 5 Sep 2025 16:35:28 +0100 Subject: [PATCH 04/11] adding reference to plugin --- docs/quix-cloud/managed-services/dynamic-configuration.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/quix-cloud/managed-services/dynamic-configuration.md b/docs/quix-cloud/managed-services/dynamic-configuration.md index 787bbf7f..10271e26 100644 --- a/docs/quix-cloud/managed-services/dynamic-configuration.md +++ b/docs/quix-cloud/managed-services/dynamic-configuration.md @@ -55,6 +55,10 @@ Note - Besides defining it in YAML, you can also add this managed service from the Quix UI: open the side panel, go to Services → Add service → Dynamic Configuration Manager, then configure and deploy. +## Embedded UI (plugin) + +Dynamic Configuration uses the Plugin system implicitly. When you open the deployment in the Portal, Deployment Details renders an embedded UI (iframe) for browsing and editing configuration. Learn more in the [Plugin system](./plugin.md). + ## Configuration Managed services use a simplified configuration block. At deploy time, Quix maps these keys to the underlying environment variables and wiring required by the managed image. From 5f2ab522fa20dc4173cc788ab88254c572cbb4c8 Mon Sep 17 00:00:00 2001 From: Emanuel Date: Mon, 8 Sep 2025 10:40:51 +0100 Subject: [PATCH 05/11] Implement code changes to enhance functionality and improve performance --- .../managed-services/dynamic-configuration.md | 2 ++ .../dynamic-configuration-embedded-view.png | Bin 0 -> 69355 bytes .../managed-services/images/plugin-sidebar.png | Bin 0 -> 30030 bytes docs/quix-cloud/managed-services/plugin.md | 8 ++++++-- 4 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 docs/quix-cloud/managed-services/images/dynamic-configuration-embedded-view.png create mode 100644 docs/quix-cloud/managed-services/images/plugin-sidebar.png diff --git a/docs/quix-cloud/managed-services/dynamic-configuration.md b/docs/quix-cloud/managed-services/dynamic-configuration.md index 10271e26..4dd7ffc1 100644 --- a/docs/quix-cloud/managed-services/dynamic-configuration.md +++ b/docs/quix-cloud/managed-services/dynamic-configuration.md @@ -59,6 +59,8 @@ Note Dynamic Configuration uses the Plugin system implicitly. When you open the deployment in the Portal, Deployment Details renders an embedded UI (iframe) for browsing and editing configuration. Learn more in the [Plugin system](./plugin.md). +![Embedded UI](images/dynamic-configuration-embedded-view.png) + ## Configuration Managed services use a simplified configuration block. At deploy time, Quix maps these keys to the underlying environment variables and wiring required by the managed image. diff --git a/docs/quix-cloud/managed-services/images/dynamic-configuration-embedded-view.png b/docs/quix-cloud/managed-services/images/dynamic-configuration-embedded-view.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a1e2dde318f602044c344b2b1e1d28f2a6ab33 GIT binary patch literal 69355 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

ZmwXKX8oeB)6gxV!~eDNsE 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 literal 0 HcmV?d00001 diff --git a/docs/quix-cloud/managed-services/images/plugin-sidebar.png b/docs/quix-cloud/managed-services/images/plugin-sidebar.png new file mode 100644 index 0000000000000000000000000000000000000000..31d2cd23b5eebfb3a382cf5d2c5e75220fae613d GIT binary patch literal 30030 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 Date: Mon, 8 Sep 2025 11:46:16 +0100 Subject: [PATCH 06/11] Update documentation to replace 'Embedded UI' with 'Embedded View' for consistency --- .../managed-services/dynamic-configuration.md | 6 +++--- docs/quix-cloud/managed-services/plugin.md | 13 ++++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/quix-cloud/managed-services/dynamic-configuration.md b/docs/quix-cloud/managed-services/dynamic-configuration.md index 4dd7ffc1..c9dabecb 100644 --- a/docs/quix-cloud/managed-services/dynamic-configuration.md +++ b/docs/quix-cloud/managed-services/dynamic-configuration.md @@ -55,11 +55,11 @@ Note - Besides defining it in YAML, you can also add this managed service from the Quix UI: open the side panel, go to Services → Add service → Dynamic Configuration Manager, then configure and deploy. -## Embedded UI (plugin) +## Embedded View (plugin) -Dynamic Configuration uses the Plugin system implicitly. When you open the deployment in the Portal, Deployment Details renders an embedded UI (iframe) for browsing and editing configuration. Learn more in the [Plugin system](./plugin.md). +Dynamic Configuration uses the Plugin system implicitly. When you open the deployment in the Portal, Deployment Details renders an embedded view (iframe) for browsing and editing configuration. Learn more in the [Plugin system](./plugin.md). -![Embedded UI](images/dynamic-configuration-embedded-view.png) +![Embedded View](images/dynamic-configuration-embedded-view.png) ## Configuration diff --git a/docs/quix-cloud/managed-services/plugin.md b/docs/quix-cloud/managed-services/plugin.md index cb2e8cd6..8d33f349 100644 --- a/docs/quix-cloud/managed-services/plugin.md +++ b/docs/quix-cloud/managed-services/plugin.md @@ -6,13 +6,13 @@ The plugin system enables services to expose an embedded UI inside Deployment De - Embed a UI in Deployment Details when enabled - ![Embedded UI](images/dynamic-configuration-embedded-view.png){width=80%} + ![Embedded View](images/dynamic-configuration-embedded-view.png){width=80%} -- Optionally show a sidebar shortcut to the embedded UI +- Optionally show a sidebar shortcut to the embedded view ![Sidebar example](images/plugin-sidebar.png){height=50%} -## YAML support (non‑managed and managed) +## YAML In your deployment YAML, you can enable the embedded UI and, optionally, a sidebar item: @@ -28,11 +28,14 @@ plugin: Notes -- plugin.embeddedView: boolean. true → FE renders embedded UI; false/null → legacy details. +- plugin.embeddedView: boolean. true → FE renders embedded UI. - plugin.sidebarItem: optional object configuring the Environment’s left sidebar item. -- Do not include embeddedViewUrl in YAML; it is derived and exposed by the API. ## Public Url - Managed service → derived from Managed Services internal conventions. - Non‑managed service → uses the deployment’s publicUrl. + +## Authentication + +The embedded view inherits authentication and authorization from the main platform. No separate login is required, and the same user/environment permissions apply to the emmbedded view. From f8aade2333d284155ff83d4d93c287760bcefb53 Mon Sep 17 00:00:00 2001 From: Emanuel Date: Tue, 9 Sep 2025 11:15:38 +0100 Subject: [PATCH 07/11] Improvements of dynamic configuration docs --- .../managed-services/dynamic-configuration.md | 133 +++++++++++++----- 1 file changed, 100 insertions(+), 33 deletions(-) diff --git a/docs/quix-cloud/managed-services/dynamic-configuration.md b/docs/quix-cloud/managed-services/dynamic-configuration.md index c9dabecb..7ee66606 100644 --- a/docs/quix-cloud/managed-services/dynamic-configuration.md +++ b/docs/quix-cloud/managed-services/dynamic-configuration.md @@ -1,21 +1,37 @@ # Dynamic Configuration Manager -The Dynamic Configuration Manager is a managed service to store, version, and distribute application configuration at runtime. It provides a simple REST API and lightweight UI, persists configuration in a backing store, and emits change events to Kafka so services can react immediately. It works great with the Quix platform and SDK, and can be used from any HTTP/Kafka client. +The **Dynamic Configuration Manager** is a managed service for handling +**large, versioned configuration files** related to devices, sensors, or +physical assets. +These configurations often change in real time (e.g., updates to +equipment parameters, IoT sensor mappings, or lab/test system setups), +but are **too large to send through Kafka directly**. + +Instead of streaming entire configuration payloads, the service: + +- Stores configurations centrally and versions them. +- Publishes a **lightweight Kafka event** with only the URL, version, +and timestamp of the new configuration. +- Works together with the **Quix Streams SDK**, which will +fetch, cache, and enrich data streams with the appropriate configuration +values. Identifier: `DynamicConfiguration` +------------------------------------------------------------------------ + ## Example YAML -```yaml +``` yaml deployments: - name: Dynamic Configuration Manager application: DynamicConfiguration version: latest deploymentType: Managed resources: - cpu: 200 - memory: 500 - replicas: 1 + cpu: 200 + memory: 500 + replicas: 1 configuration: # Kafka topic for configuration updates topic: config-updates @@ -35,50 +51,101 @@ deployments: contentStore: mongo # mongo | file ``` -## Key capabilities +------------------------------------------------------------------------ + +## Key Capabilities + +- Stores and versions large configuration files (JSON or Binary). +- Emits lightweight **Kafka change events** (URL + timestamp + + version). +- Enables **real-time enrichment** of data streams without sending + configs through Kafka. +- Designed for **physical asset/device configurations**. +- Provides a simple REST API and embedded UI for browsing/editing + configs. +- Supports multiple content stores: Mongo (default) or blob/object + storage (file mode). +- Works seamlessly with the Quix Streams SDK to fetch, cache, and join configs with live data. + +------------------------------------------------------------------------ + +## How It Works (High-Level) + +1. A new or updated configuration is **persisted and versioned** in the + service. +2. The service publishes a **Kafka event** containing metadata (URL, + timestamp, version). +3. Quix Streams SDK consumers subscribe to the topic using join_lookup feature. +4. **Quix Streams SDK downloads the config changes from the API** in realtime, caches it locally, and joins it with incoming data streams using JSONPath or custom join logic. -- CRUD configuration items with optional metadata -- Versioning and history -- Real-time change notifications on a Kafka topic -- Pluggable content store (Mongo by default; file mode uses blob/object storage such as S3, GCS, or Azure Blob) -- Simple REST API and web UI -- Horizontal scaling via workers -- Optional consumer group for isolated consumption +This design makes it possible to use very large configuration files in +real time without pushing them directly through Kafka. -## How it works (high-level) +------------------------------------------------------------------------ -1. Create/update requests persist content and produce a new version. -2. The service publishes a change event to the configured Kafka topic. -3. Consumers subscribe to that topic and apply changes. +## Typical Use Cases -Note +- **IoT sensor mappings** that change during operation. +- **Industrial machinery configurations** updated while systems are + running. +- **Laboratory or testing setups** requiring dynamic parameter + changes. +- Any scenario where **large configuration files** must be applied in + real time alongside data streams. -- Besides defining it in YAML, you can also add this managed service from the Quix UI: open the side panel, go to Services → Add service → Dynamic Configuration Manager, then configure and deploy. +------------------------------------------------------------------------ -## Embedded View (plugin) +## Embedded View (Plugin) -Dynamic Configuration uses the Plugin system implicitly. When you open the deployment in the Portal, Deployment Details renders an embedded view (iframe) for browsing and editing configuration. Learn more in the [Plugin system](./plugin.md). +Dynamic Configuration uses the Plugin system implicitly. +When you open the deployment in the Portal, Deployment Details renders +an embedded view (iframe) for browsing and editing configuration. + +Learn more in the [Plugin system](./plugin.md). ![Embedded View](images/dynamic-configuration-embedded-view.png) +------------------------------------------------------------------------ + ## Configuration -Managed services use a simplified configuration block. At deploy time, Quix maps these keys to the underlying environment variables and wiring required by the managed image. +Managed services use a simplified configuration block. +At deploy time, Quix maps these keys to environment variables and wiring +required by the managed image. ### Required -- topic: Kafka topic for configuration updates -- mongoHost: MongoDB host -- mongoPort: MongoDB port -- mongoUser: MongoDB user -- mongoPasswordSecret: Name of the Quix secret containing the MongoDB password -- mongoDatabase: MongoDB database name -- mongoCollection: MongoDB collection name +- **topic**: Kafka topic for configuration updates +- **mongoHost**: MongoDB host +- **mongoPort**: MongoDB port +- **mongoUser**: MongoDB user +- **mongoPasswordSecret**: Quix secret containing the MongoDB + password +- **mongoDatabase**: MongoDB database name +- **mongoCollection**: MongoDB collection name ### Optional -- consumerGroup: Kafka consumer group identifier (default: config-api-v1) -- port: Port for the REST API (default: 80) -- workers: Number of worker processes (default: 1) -- contentStore: Storage backend for configuration content (mongo or file; default: mongo). In file mode, content is stored in blob/object storage (e.g., S3/GCS/Azure Blob) and typically requires provider-specific credentials configured via Quix secrets. +- **consumerGroup**: Kafka consumer group identifier (default: + `config-api-v1`) +- **port**: REST API port (default: `80`) +- **workers**: Number of worker processes (default: `1`) +- **contentStore**: Storage backend for configuration (`mongo` or + `file`; default: `mongo`). + - In **file mode**, content is stored in blob/object storage (S3, + GCS, Azure Blob, etc.). + - Provider-specific credentials are configured via Quix secrets. + +------------------------------------------------------------------------ + +## SDK Integration + +The **Quix Streams SDK** provides built-in functionality to: + +- Subscribe to configuration change events. +- Download and cache the latest configuration from the API. +- Join configuration values with live data streams at the right time. +👉 See [SDK +documentation](../../quix-streams/api-reference/dataframe.html#streamingdataframejoin_lookup) +for details on `join_lookup` and related features. From 11625296db93eb8f295d1362564993708fee0ca6 Mon Sep 17 00:00:00 2001 From: Emanuel Date: Tue, 9 Sep 2025 11:20:57 +0100 Subject: [PATCH 08/11] Add note on JSON configuration size limit for mongo mode in dynamic configuration documentation --- docs/quix-cloud/managed-services/dynamic-configuration.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/quix-cloud/managed-services/dynamic-configuration.md b/docs/quix-cloud/managed-services/dynamic-configuration.md index 7ee66606..2de4f1e3 100644 --- a/docs/quix-cloud/managed-services/dynamic-configuration.md +++ b/docs/quix-cloud/managed-services/dynamic-configuration.md @@ -135,6 +135,7 @@ required by the managed image. - In **file mode**, content is stored in blob/object storage (S3, GCS, Azure Blob, etc.). - Provider-specific credentials are configured via Quix secrets. + - In **mongo mode**, only JSON configuration documents are supported and each configuration payload must be ≤ 16 MB. Use `file` (blob) mode for larger or non-JSON artifacts. ------------------------------------------------------------------------ From e1190ade5f3feb4286df97797274bf6070df56e9 Mon Sep 17 00:00:00 2001 From: Emanuel Date: Tue, 9 Sep 2025 11:35:35 +0100 Subject: [PATCH 09/11] remove separator --- .../managed-services/dynamic-configuration.md | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/docs/quix-cloud/managed-services/dynamic-configuration.md b/docs/quix-cloud/managed-services/dynamic-configuration.md index 2de4f1e3..5b474cf9 100644 --- a/docs/quix-cloud/managed-services/dynamic-configuration.md +++ b/docs/quix-cloud/managed-services/dynamic-configuration.md @@ -18,8 +18,6 @@ values. Identifier: `DynamicConfiguration` ------------------------------------------------------------------------- - ## Example YAML ``` yaml @@ -51,8 +49,6 @@ deployments: contentStore: mongo # mongo | file ``` ------------------------------------------------------------------------- - ## Key Capabilities - Stores and versions large configuration files (JSON or Binary). @@ -67,8 +63,6 @@ deployments: storage (file mode). - Works seamlessly with the Quix Streams SDK to fetch, cache, and join configs with live data. ------------------------------------------------------------------------- - ## How It Works (High-Level) 1. A new or updated configuration is **persisted and versioned** in the @@ -81,8 +75,6 @@ deployments: This design makes it possible to use very large configuration files in real time without pushing them directly through Kafka. ------------------------------------------------------------------------- - ## Typical Use Cases - **IoT sensor mappings** that change during operation. @@ -93,7 +85,6 @@ real time without pushing them directly through Kafka. - Any scenario where **large configuration files** must be applied in real time alongside data streams. ------------------------------------------------------------------------- ## Embedded View (Plugin) @@ -105,8 +96,6 @@ Learn more in the [Plugin system](./plugin.md). ![Embedded View](images/dynamic-configuration-embedded-view.png) ------------------------------------------------------------------------- - ## Configuration Managed services use a simplified configuration block. @@ -137,8 +126,6 @@ required by the managed image. - Provider-specific credentials are configured via Quix secrets. - In **mongo mode**, only JSON configuration documents are supported and each configuration payload must be ≤ 16 MB. Use `file` (blob) mode for larger or non-JSON artifacts. ------------------------------------------------------------------------- - ## SDK Integration The **Quix Streams SDK** provides built-in functionality to: From 9785e7643c7623f4febe0e04564dd8f5240fa538 Mon Sep 17 00:00:00 2001 From: Emanuel Date: Tue, 9 Sep 2025 11:41:58 +0100 Subject: [PATCH 10/11] remove spacing --- docs/quix-cloud/managed-services/dynamic-configuration.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/quix-cloud/managed-services/dynamic-configuration.md b/docs/quix-cloud/managed-services/dynamic-configuration.md index 5b474cf9..2d40b05c 100644 --- a/docs/quix-cloud/managed-services/dynamic-configuration.md +++ b/docs/quix-cloud/managed-services/dynamic-configuration.md @@ -85,7 +85,6 @@ real time without pushing them directly through Kafka. - Any scenario where **large configuration files** must be applied in real time alongside data streams. - ## Embedded View (Plugin) Dynamic Configuration uses the Plugin system implicitly. From 4db9374e62b7808274d6cd64017cd5c372ea9cc6 Mon Sep 17 00:00:00 2001 From: Emanuel Date: Tue, 9 Sep 2025 15:59:00 +0100 Subject: [PATCH 11/11] Add blob storage support to Dynamic Configuration Manager documentation --- docs/quix-cloud/managed-services/dynamic-configuration.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/quix-cloud/managed-services/dynamic-configuration.md b/docs/quix-cloud/managed-services/dynamic-configuration.md index 2d40b05c..07d713d9 100644 --- a/docs/quix-cloud/managed-services/dynamic-configuration.md +++ b/docs/quix-cloud/managed-services/dynamic-configuration.md @@ -125,6 +125,12 @@ required by the managed image. - Provider-specific credentials are configured via Quix secrets. - In **mongo mode**, only JSON configuration documents are supported and each configuration payload must be ≤ 16 MB. Use `file` (blob) mode for larger or non-JSON artifacts. +### Blob Storage + +This service can leverage a blob storage configured on our platform (see [blob storage docs](../../deploy/blob-storage.md) for setup instructions). + +The blob storage configuration is automatically injected only when `contentStore` is set to `file`. + ## SDK Integration The **Quix Streams SDK** provides built-in functionality to: