Commit Graph

59 Commits

Author SHA1 Message Date
mo b8a5b10bc4 feat(openmetadata): populate Data Insights dashboard
Assign owners to all 177 tables and descriptions + tier tags to the 18
business tables, then trigger SearchIndexing + DataInsights apps so the
platform Data Insights page shows real totals, description coverage and
tier distribution instead of empty plots.
2026-06-27 15:17:02 +00:00
mo 28821e8b04 feat(openmetadata): direct-API enrichment for real sample data, profiles & end-to-end lineage
OM connectors/profiler stored data but its denormalized read path left
Sample Data/Lineage tabs effectively empty. This script populates OM directly:
- real 50-row sample data for source + iceberg curated tables
- table/column profiles (column profiles read back correctly in UI)
- full traceable lineage: generator -> source -> Debezium/Kafka CDC topic
  -> S3 archive + Iceberg curated -> Trino query layer
2026-06-27 15:03:13 +00:00
mo 21af36a591 feat(openmetadata): profiler + data-quality tests for data insight
Profiler:
- pg/mysql: table-level metrics via DB statistics (exact-ish row counts) only;
  source tables hold 24-53M rows and OM's column profiler full-scans per column
  (no TABLESAMPLE pushdown), which would hammer the live CDC source.
- trino/iceberg: full column metrics + sample data on the small (20-25k row)
  curated_masked + hadoop tables.

Data quality: 16 test cases across 5 tables (row counts on big sources; row
count + uniqueness/not-null/range on curated/masked + historical), all passing.
This populates OM's Data Quality dashboard (coverage, healthy assets,
dimensions, test results).
2026-06-27 14:55:48 +02:00
mo 8aa2324211 fix(openmetadata): relocate MySQL datadir to 32GB data disk
The OM MySQL datadir was bind-mounted on the 448MB /opt partition and kept
filling up. Moved db-data to /var/lib/docker/openmetadata-db-data (32GB, ~31GB
free) and kept binlog disabled + redo log capped. /opt back to 7% used.
2026-06-27 13:48:49 +02:00
mo e8ff760cd1 feat(openmetadata): backfill Airflow task detail + dataset lineage
OM 1.13 cannot deserialize Airflow 3.0.6 serialized DAGs, so pipelines had no
tasks. af_tasks.py parses serialized_dag and PATCHes task lists; af_lineage.py
adds generator->table and mask_to_curated/hadoop_to_trino lineage edges.

Note: OM MySQL datadir lives on the 448MB /opt partition which had filled up
(103MB binlog). Disabled binary logging + shrank redo log capacity in the OM
docker-compose to restore headroom.
2026-06-27 13:30:08 +02:00
mo 79888dc617 feat(openmetadata): ingest Elasticsearch (search) + Airflow (pipelines)
- ES: connect over https with verify_certs=false (self-signed CA); 16 indexes incl source_data
- Airflow: ingest 8 DAGs as pipelines from SQLite metadata DB snapshot
- es_run.py: standalone runner that pins the working ES TLS config
- Command Center API now wired with ELASTIC_PASSWORD
2026-06-27 12:49:30 +02:00
mo b7965f98f4 fix(openmetadata): ES ingestion - disable self-signed cert verification (boolean) 2026-06-27 12:38:45 +02:00
mo 99ca01c4d9 chore(openmetadata): add inventory probe; full-stack ingestion verified (177 tables, +Kafka/S3/Superset) 2026-06-27 12:29:44 +02:00
mo b7dab19590 feat(openmetadata): ingest full stack - Trino all catalogs + Kafka, S3, Superset, ES
Widen Trino ingestion to every catalog (postgres_sales/mysql_hr/mongodb/iceberg)
and add messaging (Kafka), storage (S3 object store), dashboards (Superset) and
search (Elasticsearch) service ingestion configs so OpenMetadata reflects the
whole running platform. Secrets are injected at run time, not committed.
2026-06-27 12:25:51 +02:00
mo ca05e04f8c fix(dataflow): clean left-to-right stage layout for the topology
Align nodes into pipeline columns (producers -> sources -> CDC -> lakehouse ->
Trino) with governance centred at the bottom, so lineage reads in order instead
of Iceberg/Trino floating mid-canvas.
2026-06-27 12:07:25 +02:00
mo 05794906a7 perf(pii): native source-DB lookups for masking enforcement
Query postgres/mysql/mongo directly (fast, early LIMIT) instead of full Trino
table scans; Trino remains the path for the curated lakehouse + as a fallback.
2026-06-27 11:44:16 +02:00
mo 215ce111f1 feat(pii): self-service per-column masking policy enforced for the LLM
- pii_catalog: persistent per-column masking policy (default masked); GET/POST
  /api/pii/policy and POST /api/pii/lookup which redacts masked values server-side.
- get_pii masked flag now reflects the policy; dataflow exposes the dataset key.
- Data Flow PII inspector: per-column lock/unlock toggles + mask-all/unmask-all,
  so operators control exactly which data the assistant may reveal.
2026-06-27 11:36:36 +02:00
mo 9fb5b0a780 feat(llm): approval-gated movement executor + rag-api agent wiring + agent UI
- decide_approval now executes the underlying data movement when an approved
  request carries an executor=movement payload (real human-gated executor).
- rag-api service gets OPENMETADATA_* (via atc.env) + COMMAND_CENTER_URL so it can
  sync the catalog and call platform tools.
- Knowledge Chat gains an Agent-mode toggle (SSE tool-loop with step chips) and a
  'Sync catalog' button.
2026-06-27 03:28:18 +02:00
mo 8263a03190 feat(llm): add governance context (CDC/movements/PII/lineage) to lab snapshot
lab_context now includes an in-process governance section so the LLM knows the
live CDC volume, data movements + last-run state, the PII catalog (OM+heuristic)
with masked/unmasked status, and source->masked lineage.
2026-06-27 03:17:35 +02:00
mo c3cacc141d feat(masking): mask_to_curated DAG + OpenMetadata lineage + versioned OM artifacts
- deploy/airflow/mask_to_curated_dag.py: Trino-SQL masking (hash/redact/generalize)
  of PII from postgres/mysql sources into iceberg.curated_masked.* (verified:
  14k+11k masked rows, all PII masked).
- OM source->masked lineage edges created; curated tables cataloged.
- Version OM compose + ingestion configs + om_api helper under deploy/openmetadata.
2026-06-27 03:13:16 +02:00
mo 944635ffe1 feat(masking): add PII columns to generators + backfill (Faker-style, no deps)
Source generators (postgres/mysql/mongodb) now emit realistic PII
(name/email/phone/ip/iban/address/national_id/dob). deploy/mask_pii_setup.py
ALTERs the source tables and backfills a bounded sample so Debezium CDC and
OpenMetadata PII auto-classification see real sensitive values.
2026-06-27 02:50:28 +02:00
mo c70639c46d feat(dataflow): add OpenMetadata governance node + catalog edges + UI link
Data Flow graph now shows OpenMetadata as a governance node linked to all
sources and Trino (catalog edges); node inspector exposes an 'Open in
OpenMetadata' deep link and PII-columns-cataloged metric.
2026-06-27 02:43:22 +02:00
mo 3b247fa2bd feat(om): OpenMetadata integration — registry node, link, PII tag source
Add OpenMetadata node (atc-docker02 .47) to node_registry with UI links.
pii_catalog now reads OM column PII tags (Presidio auto-classification) as the
authoritative source, merged with the name heuristic; OPENMETADATA_URL wired
into the api service (token via atc.env).
2026-06-27 02:40:27 +02:00
mo 6f20e24b8b feat(ui): Data Flow tab — live lineage graph + PII overlay + movement triggers
New DataFlowView (topology-style): nodes positioned from /api/dataflow with
measured-anchor SVG edges and animated particles (active CDC + running
movements). PII overlay shows shield badges + per-column detail inspector.
Bottom strip triggers ETL movements and toggles the ETL agent. Wired into
SideNav (Data Flow) and App routing; added types + api helpers.
2026-06-27 02:09:38 +02:00
mo ee9357aa31 feat(dataflow): live Data Flow graph API + PII catalog
api/dataflow.py: node-link landscape (generators->sources->CDC/Kafka->sinks,
HDFS->Iceberg, sources->curated_masked) with live overlays (movement run state,
CDC volume, Trino counts) and PII overlay. api/pii_catalog.py: column PII
classification via Trino information_schema (OM-ready). Endpoints /api/dataflow,
/api/dataflow/{id}/run, /api/pii.
2026-06-27 02:04:46 +02:00
mo a724615a9a feat(etl): Hadoop->Trino movement DAG + movements registry + autonomous ETL-agents
- DAG hadoop_to_trino (deployed to Airflow) + worker hadoop_to_trino.py (on the
  Hadoop master) move HDFS historical_sales -> iceberg.hadoop.historical_sales_hdfs.
- api/movements.py: movement registry, Airflow trigger+watch, run tracking
  (state/duration/rows), endpoints /api/movements, /{id}/run, /runs.
- agent_ops.py: ETL-agent loop autonomously triggers movements on an interval
  and logs each run; /api/agent-ops/etl/toggle + etl status.
2026-06-27 01:59:35 +02:00
mo 921342442f feat(ui): Live Changes (CDC) tab — real-time Debezium stream with filters, volume bars and before/after diff 2026-06-27 01:44:26 +02:00
mo 1a454f76cf feat(cdc): live Debezium CDC consumer + /api/changes for the Changes dashboard
Add api/cdc_consumer.py: aiokafka background consumer subscribes to the CDC
topics (postgres_sales/mysql_hr/mongodb_supplychain + cassandra/neo4j), parses
Debezium before/after envelopes, keeps a ring buffer and publishes each change
live as type=cdc_change. Endpoints /api/changes, /api/changes/stats, /status.
2026-06-27 01:31:18 +02:00
mo 5147538b05 fix(agents): use in-memory PK pools for DML (avoid full-table scans on 54M-row tables) 2026-06-27 01:27:56 +02:00
mo 3c9661e7f9 feat(agents): autonomous guard-railed DML on source DBs for Debezium CDC
Add api/agent_ops.py: background loop performs small INSERT/UPDATE/DELETE on
public.sales_orders (PG), hr.employee_events (MySQL) and supplychain.events
(Mongo). Agent rows are tagged (notes/atc_agent); UPDATE/DELETE only ever touch
agent-created rows. Env kill-switch + interval + per-tick row cap. Endpoints
/api/agent-ops/{status,toggle,run-once}. Loop started in lifespan.
2026-06-27 01:25:08 +02:00
mo 96d490807a feat(hadoop): real Hive engine + filterable, detailed analytics with lineage
Deploys Apache Hive 3.1.3 (Derby metastore + external table over the HDFS
historical CSV, MapReduce exec) on the Hadoop master, so the engine comparison
shows a REAL measured Hive latency (~5.2s) next to live Trino (~0.3s); Impala
stays clearly-labelled representative. The API re-measures Hive over SSH on a
30-min TTL (cached + persisted, with a committed seed). Adds filters
(year/region/category/channel), a region×category heatmap, Trino exec stats,
and a "where is this data read from" lineage panel (Trino->S3/Iceberg/Parquet
with snapshot+files, Hive->HDFS/CSV with namenode+files). Mounts host SSH key
read-only into the api container for the live Hive benchmark.
2026-06-26 17:08:57 +00:00
mo 71a64d5a21 feat(hadoop): embedded lakehouse analytics + Impala/Hive vs Trino comparison
Adds an Analytics sub-tab to the Hadoop view with live KPIs and revenue
breakdowns (by year/region/category/channel) queried from Trino over
iceberg.hadoop.historical_sales, plus a query-engine comparison panel. Trino
latency is measured live; Impala and Hive are shown as clearly-labelled
representative figures (those engines are not deployed). New cached endpoints
/api/hadoop/analytics and /api/hadoop/engines.
2026-06-26 15:44:43 +00:00
mo 1147826dee fix(superset): disable Secure session cookie over HTTP so mo/bart can log in
Talisman forced Secure on the session cookie while Superset is served over
plain HTTP, so browsers never returned the cookie and every login failed CSRF
validation ("CSRF session token is missing"). Set session_cookie_secure=False
(+ SESSION_COOKIE_SECURE/WTF_CSRF_SSL_STRICT). Also rename S3 lakehouse prefix
iceberg-warehouse -> hadoop (Trino iceberg.hadoop.historical_sales) and repoint
the Superset dataset. Adds sanitized infra backup scripts.
2026-06-26 15:27:34 +00:00
mo 2d14eae55f feat(historical): offload historical_sales to S3 (Iceberg/Parquet on Dell ECS), repoint dashboard, drop Postgres copy 2026-06-26 11:38:30 +00:00
mo 8437ded990 topology: add direct source->Trino federated-query edges 2026-06-26 11:16:13 +00:00
mo 37c03b6881 feat(historical): durable Postgres-backed historical_sales + repoint Superset dashboard (no Trino downtime) 2026-06-26 09:43:21 +00:00
mo be2bbcbd92 feat(cdc): app-level Cassandra+Neo4j change events to Kafka (->S3) on generate 2026-06-26 09:21:17 +00:00
mo f4cd33b784 infra: historical sales -> iceberg.historical (Trino) + Superset dashboard scripts 2026-06-26 09:04:33 +00:00
mo 88ca338f5a feat: neo4j in topology + agent-driven datagen with activity log; fix all-sources generate 2026-06-26 08:51:39 +00:00
mo 9cbdccb403 infra: fix mongodb uuid encoding + combined DAG honors rows conf 2026-06-26 08:41:44 +00:00
mo 897ccaa9f3 api: non-blocking /sync via background refresher (full-scan counts cached) 2026-06-26 01:39:53 +00:00
mo d26698a0c7 infra: hadoop historical sales loader (HDFS partitioned by year) 2026-06-26 01:26:43 +00:00
mo 2f2cecd16f infra: neo4j generator creates indexes for fast relationship MERGE 2026-06-26 01:24:56 +00:00
mo 89b31c680a infra: fix cassandra (prepared stmt) + neo4j (drop APOC, grouped MERGE) generators 2026-06-26 01:24:06 +00:00
mo be526bb0e3 ui: Data Generation view (per-DB tabs, light generate, run status) + topology pulse 2026-06-26 01:17:51 +00:00
mo bac3a90775 api: pipeline_ops router (per-source generate trigger, run status, Trino sync counts) 2026-06-26 01:12:07 +00:00
mo 62b416d210 infra: mirror light per-source Airflow DAGs + generators (GEN_ROWS), fix script path 2026-06-26 01:07:23 +00:00
mo 9400f9410c Add scripts/save.sh helper for commit+push per change 2026-06-26 00:48:11 +00:00
mo 46b51a891c Add HDFS browser, SSH terminal, presentation editor, lab health panel
- HDFS WebHDFS file browser (api/hdfs_api.py + HdfsView)
- In-browser SSH terminal via paramiko WebSocket bridge (api/ssh_terminal.py + SshTerminal, xterm.js)
- Presentation deck editor (text + image upload) and CRUD endpoints
- Collapsible GPU matrix + new LabHealthPanel in SideNav
- Topology fixes (edge alignment, Hadoop node, compact nodes)
- nginx ws timeout bump for long-lived SSH sessions
2026-06-26 00:47:49 +00:00
mo fefe3016ad Fix dangling topology edge by routing wide ETL paths below intermediate nodes 2026-06-25 10:12:43 +00:00
mo ff2c31a6b5 Fix remaining Dutch string in DataQualityView 2026-06-25 10:00:07 +00:00
mo 41a8a3b18e Resizable workbench with proper scroll and fix chat message contrast.
Workbench drag handle for SQL/agent panels; dark-theme user bubbles and input field readable.
2026-06-25 01:42:25 +00:00
mo 4ff9f5589e Fix MySQL demo query for existing hr tables 2026-06-25 01:34:07 +00:00
mo 7da2dd60f0 Add MySQL/MongoDB consoles, fit topology without scroll, longer flow lines.
Compact workbench panel, collapsible infra bar, narrower topology nodes with wider inter-stage gaps for visible connection lines.
2026-06-25 01:33:48 +00:00
mo 4e1cf9ef6c Use equivalent 5M sin benchmark query on Trino 2026-06-25 01:24:58 +00:00