Repository files navigation

MODERATE workflows

A project that implements the data pipelines for the MODERATE project. These pipelines are built on top of Dagster, which acts as the workflow orchestration service. The pipelines are run on MODERATE's Kubernetes cluster using the Dagster Kubernetes integration.

Development

Configure connection to API and S3

Some pipelines depend on the MODERATE's platform API and an S3-compatible object storage service. These dependencies can be configured in a local .env file—which will not be committed to the repository—using the following variables:

API_BASE_URL=http://localhost:9080API_USERNAME=andres.garciaAPI_PASSWORD=TheApiPasswordS3_ACCESS_KEY_ID=TheAccessKeyIdS3_SECRET_ACCESS_KEY=TheSecretAccessKeyS3_REGION=europe-west1S3_BUCKET_NAME=TheBucketNameS3_ENDPOINT_URL=https://storage.googleapis.com

These should be optional, so you can still run the pipelines that don't depend on these services.

Deploy a local Kubernetes-based instance

There's a task in the Taskfile called start-dev-k8s that deploys a local Kubernetes cluster using Minikube. This aims to represent, as faithfully as possible, the same environment as the production Kubernetes cluster. It is useful for testing the Dagster integration with Kubernetes locally.

Running task start-dev-k8s will do the following:

  • Build and push a Docker image containing the code deployment.
  • Start the Compose stack with the service dependencies (e.g. Postgres, Keycloak).
  • Start Minikube.
  • Install Helm charts for both Dagster and OpenMetadata.

Once the task has completed, you can access the OpenMetadata UI and Dagster UI by running task forward-k8s-open-metadata-ui and task forward-k8s-dagster-ui respectively.

Due to the particularities of the OpenMetadata OIDC integration with Keycloak, you should access the UIs using your local IP address instead of localhost.

Create the admin user

Since OpenMetadata is configured to use Keycloak as the OIDC provider, you need to create an admin user in Keycloak in order to be able to log in to OpenMetadata. This can be done in the Users section of the Keycloak UI, under the moderate realm.

The admin's email address local-part must be one of the values included under authorizer.initialAdmins in the OpenMetadata YAML values file. Additionally, the domain must match the value specified in authorizer.principalDomain within the same file:

<value-of-initialAdmins>@<principalDomain>

Update OpenMetadata token

There's a manual step that needs to be performed in order for the Dagster - OpenMetadata integration to work.

Go to Settings ▶︎ Bots in the OpenMetadata UI and click in ingestion-bot. Revoke the token and create a new one. Copy the new token and run the following task:

$ OPEN_METADATA_TOKEN="eyJraWQiOiI1NzU2ZDA1Ny0xMTRlL [...]" task update-k8s-open-metadata-token[...]+ kubectl wait --for=condition=Ready pods --all --timeout=600spod/dagster-daemon-548757dff-zd6hs condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat46gft condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat68jpc condition metpod/dagster-dagster-webserver-6bbd5b5c88-5lwzb condition metpod/openmetadata-5d5dd566d4-ljznx condition met

Now go to the Dagster UI and you should be able to successfully materialize the assets that run the OpenMetadata workflows.

About

The data pipeline orchestration system for the MODERATE platform, built on Dagster and deployed on Kubernetes. It manages ETL workflows, metadata cataloguing into OpenMetadata, anomaly detection, and user trust pipelines as the computational backbone for data processing.

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

MODERATE workflows

A project that implements the data pipelines for the MODERATE project. These pipelines are built on top of Dagster, which acts as the workflow orchestration service. The pipelines are run on MODERATE's Kubernetes cluster using the Dagster Kubernetes integration.

Development

Configure connection to API and S3

Some pipelines depend on the MODERATE's platform API and an S3-compatible object storage service. These dependencies can be configured in a local .env file—which will not be committed to the repository—using the following variables:

API_BASE_URL=http://localhost:9080API_USERNAME=andres.garciaAPI_PASSWORD=TheApiPasswordS3_ACCESS_KEY_ID=TheAccessKeyIdS3_SECRET_ACCESS_KEY=TheSecretAccessKeyS3_REGION=europe-west1S3_BUCKET_NAME=TheBucketNameS3_ENDPOINT_URL=https://storage.googleapis.com

These should be optional, so you can still run the pipelines that don't depend on these services.

Deploy a local Kubernetes-based instance

There's a task in the Taskfile called start-dev-k8s that deploys a local Kubernetes cluster using Minikube. This aims to represent, as faithfully as possible, the same environment as the production Kubernetes cluster. It is useful for testing the Dagster integration with Kubernetes locally.

Running task start-dev-k8s will do the following:

  • Build and push a Docker image containing the code deployment.
  • Start the Compose stack with the service dependencies (e.g. Postgres, Keycloak).
  • Start Minikube.
  • Install Helm charts for both Dagster and OpenMetadata.

Once the task has completed, you can access the OpenMetadata UI and Dagster UI by running task forward-k8s-open-metadata-ui and task forward-k8s-dagster-ui respectively.

Due to the particularities of the OpenMetadata OIDC integration with Keycloak, you should access the UIs using your local IP address instead of localhost.

Create the admin user

Since OpenMetadata is configured to use Keycloak as the OIDC provider, you need to create an admin user in Keycloak in order to be able to log in to OpenMetadata. This can be done in the Users section of the Keycloak UI, under the moderate realm.

The admin's email address local-part must be one of the values included under authorizer.initialAdmins in the OpenMetadata YAML values file. Additionally, the domain must match the value specified in authorizer.principalDomain within the same file:

<value-of-initialAdmins>@<principalDomain>

Update OpenMetadata token

There's a manual step that needs to be performed in order for the Dagster - OpenMetadata integration to work.

Go to Settings ▶︎ Bots in the OpenMetadata UI and click in ingestion-bot. Revoke the token and create a new one. Copy the new token and run the following task:

$ OPEN_METADATA_TOKEN="eyJraWQiOiI1NzU2ZDA1Ny0xMTRlL [...]" task update-k8s-open-metadata-token[...]+ kubectl wait --for=condition=Ready pods --all --timeout=600spod/dagster-daemon-548757dff-zd6hs condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat46gft condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat68jpc condition metpod/dagster-dagster-webserver-6bbd5b5c88-5lwzb condition metpod/openmetadata-5d5dd566d4-ljznx condition met

Now go to the Dagster UI and you should be able to successfully materialize the assets that run the OpenMetadata workflows.

About

The data pipeline orchestration system for the MODERATE platform, built on Dagster and deployed on Kubernetes. It manages ETL workflows, metadata cataloguing into OpenMetadata, anomaly detection, and user trust pipelines as the computational backbone for data processing.

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MODERATE workflows

A project that implements the data pipelines for the MODERATE project. These pipelines are built on top of Dagster, which acts as the workflow orchestration service. The pipelines are run on MODERATE's Kubernetes cluster using the Dagster Kubernetes integration.

Development

Configure connection to API and S3

Some pipelines depend on the MODERATE's platform API and an S3-compatible object storage service. These dependencies can be configured in a local .env file—which will not be committed to the repository—using the following variables:

API_BASE_URL=http://localhost:9080API_USERNAME=andres.garciaAPI_PASSWORD=TheApiPasswordS3_ACCESS_KEY_ID=TheAccessKeyIdS3_SECRET_ACCESS_KEY=TheSecretAccessKeyS3_REGION=europe-west1S3_BUCKET_NAME=TheBucketNameS3_ENDPOINT_URL=https://storage.googleapis.com

These should be optional, so you can still run the pipelines that don't depend on these services.

Deploy a local Kubernetes-based instance

There's a task in the Taskfile called start-dev-k8s that deploys a local Kubernetes cluster using Minikube. This aims to represent, as faithfully as possible, the same environment as the production Kubernetes cluster. It is useful for testing the Dagster integration with Kubernetes locally.

Running task start-dev-k8s will do the following:

  • Build and push a Docker image containing the code deployment.
  • Start the Compose stack with the service dependencies (e.g. Postgres, Keycloak).
  • Start Minikube.
  • Install Helm charts for both Dagster and OpenMetadata.

Once the task has completed, you can access the OpenMetadata UI and Dagster UI by running task forward-k8s-open-metadata-ui and task forward-k8s-dagster-ui respectively.

Due to the particularities of the OpenMetadata OIDC integration with Keycloak, you should access the UIs using your local IP address instead of localhost.

Create the admin user

Since OpenMetadata is configured to use Keycloak as the OIDC provider, you need to create an admin user in Keycloak in order to be able to log in to OpenMetadata. This can be done in the Users section of the Keycloak UI, under the moderate realm.

The admin's email address local-part must be one of the values included under authorizer.initialAdmins in the OpenMetadata YAML values file. Additionally, the domain must match the value specified in authorizer.principalDomain within the same file:

<value-of-initialAdmins>@<principalDomain>

Update OpenMetadata token

There's a manual step that needs to be performed in order for the Dagster - OpenMetadata integration to work.

Go to Settings ▶︎ Bots in the OpenMetadata UI and click in ingestion-bot. Revoke the token and create a new one. Copy the new token and run the following task:

$ OPEN_METADATA_TOKEN="eyJraWQiOiI1NzU2ZDA1Ny0xMTRlL [...]" task update-k8s-open-metadata-token[...]+ kubectl wait --for=condition=Ready pods --all --timeout=600spod/dagster-daemon-548757dff-zd6hs condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat46gft condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat68jpc condition metpod/dagster-dagster-webserver-6bbd5b5c88-5lwzb condition metpod/openmetadata-5d5dd566d4-ljznx condition met

Now go to the Dagster UI and you should be able to successfully materialize the assets that run the OpenMetadata workflows.

About

The data pipeline orchestration system for the MODERATE platform, built on Dagster and deployed on Kubernetes. It manages ETL workflows, metadata cataloguing into OpenMetadata, anomaly detection, and user trust pipelines as the computational backbone for data processing.

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MODERATE workflows

A project that implements the data pipelines for the MODERATE project. These pipelines are built on top of Dagster, which acts as the workflow orchestration service. The pipelines are run on MODERATE's Kubernetes cluster using the Dagster Kubernetes integration.

Development

Configure connection to API and S3

Some pipelines depend on the MODERATE's platform API and an S3-compatible object storage service. These dependencies can be configured in a local .env file—which will not be committed to the repository—using the following variables:

API_BASE_URL=http://localhost:9080API_USERNAME=andres.garciaAPI_PASSWORD=TheApiPasswordS3_ACCESS_KEY_ID=TheAccessKeyIdS3_SECRET_ACCESS_KEY=TheSecretAccessKeyS3_REGION=europe-west1S3_BUCKET_NAME=TheBucketNameS3_ENDPOINT_URL=https://storage.googleapis.com

These should be optional, so you can still run the pipelines that don't depend on these services.

Deploy a local Kubernetes-based instance

There's a task in the Taskfile called start-dev-k8s that deploys a local Kubernetes cluster using Minikube. This aims to represent, as faithfully as possible, the same environment as the production Kubernetes cluster. It is useful for testing the Dagster integration with Kubernetes locally.

Running task start-dev-k8s will do the following:

  • Build and push a Docker image containing the code deployment.
  • Start the Compose stack with the service dependencies (e.g. Postgres, Keycloak).
  • Start Minikube.
  • Install Helm charts for both Dagster and OpenMetadata.

Once the task has completed, you can access the OpenMetadata UI and Dagster UI by running task forward-k8s-open-metadata-ui and task forward-k8s-dagster-ui respectively.

Due to the particularities of the OpenMetadata OIDC integration with Keycloak, you should access the UIs using your local IP address instead of localhost.

Create the admin user

Since OpenMetadata is configured to use Keycloak as the OIDC provider, you need to create an admin user in Keycloak in order to be able to log in to OpenMetadata. This can be done in the Users section of the Keycloak UI, under the moderate realm.

The admin's email address local-part must be one of the values included under authorizer.initialAdmins in the OpenMetadata YAML values file. Additionally, the domain must match the value specified in authorizer.principalDomain within the same file:

<value-of-initialAdmins>@<principalDomain>

Update OpenMetadata token

There's a manual step that needs to be performed in order for the Dagster - OpenMetadata integration to work.

Go to Settings ▶︎ Bots in the OpenMetadata UI and click in ingestion-bot. Revoke the token and create a new one. Copy the new token and run the following task:

$ OPEN_METADATA_TOKEN="eyJraWQiOiI1NzU2ZDA1Ny0xMTRlL [...]" task update-k8s-open-metadata-token[...]+ kubectl wait --for=condition=Ready pods --all --timeout=600spod/dagster-daemon-548757dff-zd6hs condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat46gft condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat68jpc condition metpod/dagster-dagster-webserver-6bbd5b5c88-5lwzb condition metpod/openmetadata-5d5dd566d4-ljznx condition met

Now go to the Dagster UI and you should be able to successfully materialize the assets that run the OpenMetadata workflows.

About

The data pipeline orchestration system for the MODERATE platform, built on Dagster and deployed on Kubernetes. It manages ETL workflows, metadata cataloguing into OpenMetadata, anomaly detection, and user trust pipelines as the computational backbone for data processing.

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

MODERATE workflows

A project that implements the data pipelines for the MODERATE project. These pipelines are built on top of Dagster, which acts as the workflow orchestration service. The pipelines are run on MODERATE's Kubernetes cluster using the Dagster Kubernetes integration.

Development

Configure connection to API and S3

Some pipelines depend on the MODERATE's platform API and an S3-compatible object storage service. These dependencies can be configured in a local .env file—which will not be committed to the repository—using the following variables:

API_BASE_URL=http://localhost:9080API_USERNAME=andres.garciaAPI_PASSWORD=TheApiPasswordS3_ACCESS_KEY_ID=TheAccessKeyIdS3_SECRET_ACCESS_KEY=TheSecretAccessKeyS3_REGION=europe-west1S3_BUCKET_NAME=TheBucketNameS3_ENDPOINT_URL=https://storage.googleapis.com

These should be optional, so you can still run the pipelines that don't depend on these services.

Deploy a local Kubernetes-based instance

There's a task in the Taskfile called start-dev-k8s that deploys a local Kubernetes cluster using Minikube. This aims to represent, as faithfully as possible, the same environment as the production Kubernetes cluster. It is useful for testing the Dagster integration with Kubernetes locally.

Running task start-dev-k8s will do the following:

  • Build and push a Docker image containing the code deployment.
  • Start the Compose stack with the service dependencies (e.g. Postgres, Keycloak).
  • Start Minikube.
  • Install Helm charts for both Dagster and OpenMetadata.

Once the task has completed, you can access the OpenMetadata UI and Dagster UI by running task forward-k8s-open-metadata-ui and task forward-k8s-dagster-ui respectively.

Due to the particularities of the OpenMetadata OIDC integration with Keycloak, you should access the UIs using your local IP address instead of localhost.

Create the admin user

Since OpenMetadata is configured to use Keycloak as the OIDC provider, you need to create an admin user in Keycloak in order to be able to log in to OpenMetadata. This can be done in the Users section of the Keycloak UI, under the moderate realm.

The admin's email address local-part must be one of the values included under authorizer.initialAdmins in the OpenMetadata YAML values file. Additionally, the domain must match the value specified in authorizer.principalDomain within the same file:

<value-of-initialAdmins>@<principalDomain>

Update OpenMetadata token

There's a manual step that needs to be performed in order for the Dagster - OpenMetadata integration to work.

Go to Settings ▶︎ Bots in the OpenMetadata UI and click in ingestion-bot. Revoke the token and create a new one. Copy the new token and run the following task:

$ OPEN_METADATA_TOKEN="eyJraWQiOiI1NzU2ZDA1Ny0xMTRlL [...]" task update-k8s-open-metadata-token[...]+ kubectl wait --for=condition=Ready pods --all --timeout=600spod/dagster-daemon-548757dff-zd6hs condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat46gft condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat68jpc condition metpod/dagster-dagster-webserver-6bbd5b5c88-5lwzb condition metpod/openmetadata-5d5dd566d4-ljznx condition met

Now go to the Dagster UI and you should be able to successfully materialize the assets that run the OpenMetadata workflows.

About

The data pipeline orchestration system for the MODERATE platform, built on Dagster and deployed on Kubernetes. It manages ETL workflows, metadata cataloguing into OpenMetadata, anomaly detection, and user trust pipelines as the computational backbone for data processing.

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MODERATE workflows

A project that implements the data pipelines for the MODERATE project. These pipelines are built on top of Dagster, which acts as the workflow orchestration service. The pipelines are run on MODERATE's Kubernetes cluster using the Dagster Kubernetes integration.

Development

Configure connection to API and S3

Some pipelines depend on the MODERATE's platform API and an S3-compatible object storage service. These dependencies can be configured in a local .env file—which will not be committed to the repository—using the following variables:

API_BASE_URL=http://localhost:9080API_USERNAME=andres.garciaAPI_PASSWORD=TheApiPasswordS3_ACCESS_KEY_ID=TheAccessKeyIdS3_SECRET_ACCESS_KEY=TheSecretAccessKeyS3_REGION=europe-west1S3_BUCKET_NAME=TheBucketNameS3_ENDPOINT_URL=https://storage.googleapis.com

These should be optional, so you can still run the pipelines that don't depend on these services.

Deploy a local Kubernetes-based instance

There's a task in the Taskfile called start-dev-k8s that deploys a local Kubernetes cluster using Minikube. This aims to represent, as faithfully as possible, the same environment as the production Kubernetes cluster. It is useful for testing the Dagster integration with Kubernetes locally.

Running task start-dev-k8s will do the following:

  • Build and push a Docker image containing the code deployment.
  • Start the Compose stack with the service dependencies (e.g. Postgres, Keycloak).
  • Start Minikube.
  • Install Helm charts for both Dagster and OpenMetadata.

Once the task has completed, you can access the OpenMetadata UI and Dagster UI by running task forward-k8s-open-metadata-ui and task forward-k8s-dagster-ui respectively.

Due to the particularities of the OpenMetadata OIDC integration with Keycloak, you should access the UIs using your local IP address instead of localhost.

Create the admin user

Since OpenMetadata is configured to use Keycloak as the OIDC provider, you need to create an admin user in Keycloak in order to be able to log in to OpenMetadata. This can be done in the Users section of the Keycloak UI, under the moderate realm.

The admin's email address local-part must be one of the values included under authorizer.initialAdmins in the OpenMetadata YAML values file. Additionally, the domain must match the value specified in authorizer.principalDomain within the same file:

<value-of-initialAdmins>@<principalDomain>

Update OpenMetadata token

There's a manual step that needs to be performed in order for the Dagster - OpenMetadata integration to work.

Go to Settings ▶︎ Bots in the OpenMetadata UI and click in ingestion-bot. Revoke the token and create a new one. Copy the new token and run the following task:

$ OPEN_METADATA_TOKEN="eyJraWQiOiI1NzU2ZDA1Ny0xMTRlL [...]" task update-k8s-open-metadata-token[...]+ kubectl wait --for=condition=Ready pods --all --timeout=600spod/dagster-daemon-548757dff-zd6hs condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat46gft condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat68jpc condition metpod/dagster-dagster-webserver-6bbd5b5c88-5lwzb condition metpod/openmetadata-5d5dd566d4-ljznx condition met

Now go to the Dagster UI and you should be able to successfully materialize the assets that run the OpenMetadata workflows.

About

The data pipeline orchestration system for the MODERATE platform, built on Dagster and deployed on Kubernetes. It manages ETL workflows, metadata cataloguing into OpenMetadata, anomaly detection, and user trust pipelines as the computational backbone for data processing.

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MODERATE workflows

A project that implements the data pipelines for the MODERATE project. These pipelines are built on top of Dagster, which acts as the workflow orchestration service. The pipelines are run on MODERATE's Kubernetes cluster using the Dagster Kubernetes integration.

Development

Configure connection to API and S3

Some pipelines depend on the MODERATE's platform API and an S3-compatible object storage service. These dependencies can be configured in a local .env file—which will not be committed to the repository—using the following variables:

API_BASE_URL=http://localhost:9080API_USERNAME=andres.garciaAPI_PASSWORD=TheApiPasswordS3_ACCESS_KEY_ID=TheAccessKeyIdS3_SECRET_ACCESS_KEY=TheSecretAccessKeyS3_REGION=europe-west1S3_BUCKET_NAME=TheBucketNameS3_ENDPOINT_URL=https://storage.googleapis.com

These should be optional, so you can still run the pipelines that don't depend on these services.

Deploy a local Kubernetes-based instance

There's a task in the Taskfile called start-dev-k8s that deploys a local Kubernetes cluster using Minikube. This aims to represent, as faithfully as possible, the same environment as the production Kubernetes cluster. It is useful for testing the Dagster integration with Kubernetes locally.

Running task start-dev-k8s will do the following:

  • Build and push a Docker image containing the code deployment.
  • Start the Compose stack with the service dependencies (e.g. Postgres, Keycloak).
  • Start Minikube.
  • Install Helm charts for both Dagster and OpenMetadata.

Once the task has completed, you can access the OpenMetadata UI and Dagster UI by running task forward-k8s-open-metadata-ui and task forward-k8s-dagster-ui respectively.

Due to the particularities of the OpenMetadata OIDC integration with Keycloak, you should access the UIs using your local IP address instead of localhost.

Create the admin user

Since OpenMetadata is configured to use Keycloak as the OIDC provider, you need to create an admin user in Keycloak in order to be able to log in to OpenMetadata. This can be done in the Users section of the Keycloak UI, under the moderate realm.

The admin's email address local-part must be one of the values included under authorizer.initialAdmins in the OpenMetadata YAML values file. Additionally, the domain must match the value specified in authorizer.principalDomain within the same file:

<value-of-initialAdmins>@<principalDomain>

Update OpenMetadata token

There's a manual step that needs to be performed in order for the Dagster - OpenMetadata integration to work.

Go to Settings ▶︎ Bots in the OpenMetadata UI and click in ingestion-bot. Revoke the token and create a new one. Copy the new token and run the following task:

$ OPEN_METADATA_TOKEN="eyJraWQiOiI1NzU2ZDA1Ny0xMTRlL [...]" task update-k8s-open-metadata-token[...]+ kubectl wait --for=condition=Ready pods --all --timeout=600spod/dagster-daemon-548757dff-zd6hs condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat46gft condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat68jpc condition metpod/dagster-dagster-webserver-6bbd5b5c88-5lwzb condition metpod/openmetadata-5d5dd566d4-ljznx condition met

Now go to the Dagster UI and you should be able to successfully materialize the assets that run the OpenMetadata workflows.

About

The data pipeline orchestration system for the MODERATE platform, built on Dagster and deployed on Kubernetes. It manages ETL workflows, metadata cataloguing into OpenMetadata, anomaly detection, and user trust pipelines as the computational backbone for data processing.

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

MODERATE workflows

A project that implements the data pipelines for the MODERATE project. These pipelines are built on top of Dagster, which acts as the workflow orchestration service. The pipelines are run on MODERATE's Kubernetes cluster using the Dagster Kubernetes integration.

Development

Configure connection to API and S3

Some pipelines depend on the MODERATE's platform API and an S3-compatible object storage service. These dependencies can be configured in a local .env file—which will not be committed to the repository—using the following variables:

API_BASE_URL=http://localhost:9080API_USERNAME=andres.garciaAPI_PASSWORD=TheApiPasswordS3_ACCESS_KEY_ID=TheAccessKeyIdS3_SECRET_ACCESS_KEY=TheSecretAccessKeyS3_REGION=europe-west1S3_BUCKET_NAME=TheBucketNameS3_ENDPOINT_URL=https://storage.googleapis.com

These should be optional, so you can still run the pipelines that don't depend on these services.

Deploy a local Kubernetes-based instance

There's a task in the Taskfile called start-dev-k8s that deploys a local Kubernetes cluster using Minikube. This aims to represent, as faithfully as possible, the same environment as the production Kubernetes cluster. It is useful for testing the Dagster integration with Kubernetes locally.

Running task start-dev-k8s will do the following:

  • Build and push a Docker image containing the code deployment.
  • Start the Compose stack with the service dependencies (e.g. Postgres, Keycloak).
  • Start Minikube.
  • Install Helm charts for both Dagster and OpenMetadata.

Once the task has completed, you can access the OpenMetadata UI and Dagster UI by running task forward-k8s-open-metadata-ui and task forward-k8s-dagster-ui respectively.

Due to the particularities of the OpenMetadata OIDC integration with Keycloak, you should access the UIs using your local IP address instead of localhost.

Create the admin user

Since OpenMetadata is configured to use Keycloak as the OIDC provider, you need to create an admin user in Keycloak in order to be able to log in to OpenMetadata. This can be done in the Users section of the Keycloak UI, under the moderate realm.

The admin's email address local-part must be one of the values included under authorizer.initialAdmins in the OpenMetadata YAML values file. Additionally, the domain must match the value specified in authorizer.principalDomain within the same file:

<value-of-initialAdmins>@<principalDomain>

Update OpenMetadata token

There's a manual step that needs to be performed in order for the Dagster - OpenMetadata integration to work.

Go to Settings ▶︎ Bots in the OpenMetadata UI and click in ingestion-bot. Revoke the token and create a new one. Copy the new token and run the following task:

$ OPEN_METADATA_TOKEN="eyJraWQiOiI1NzU2ZDA1Ny0xMTRlL [...]" task update-k8s-open-metadata-token[...]+ kubectl wait --for=condition=Ready pods --all --timeout=600spod/dagster-daemon-548757dff-zd6hs condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat46gft condition metpod/dagster-dagster-user-deployments-k8s-code-location-moderat68jpc condition metpod/dagster-dagster-webserver-6bbd5b5c88-5lwzb condition metpod/openmetadata-5d5dd566d4-ljznx condition met

Now go to the Dagster UI and you should be able to successfully materialize the assets that run the OpenMetadata workflows.

About

The data pipeline orchestration system for the MODERATE platform, built on Dagster and deployed on Kubernetes. It manages ETL workflows, metadata cataloguing into OpenMetadata, anomaly detection, and user trust pipelines as the computational backbone for data processing.

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages