Skip to content

feat(data-product): Add data product support in Observability UI and backend#28713

Open
shah-harshit wants to merge 13 commits into
mainfrom
feat/data-product-observability-ui
Open

feat(data-product): Add data product support in Observability UI and backend#28713
shah-harshit wants to merge 13 commits into
mainfrom
feat/data-product-observability-ui

Conversation

@shah-harshit
Copy link
Copy Markdown
Contributor

@shah-harshit shah-harshit commented Jun 4, 2026

Summary

Screen.Recording.2026-06-05.at.12.27.42.PM.mov

Closes #27073

  • Test case details page: Show inherited domain and data product links in the incident manager page header. Fetches dataProducts and domains fields from API.
  • Test case list page: Add Data Product filter to the Incident Manager list page, synced to URL params and passed to the backend search API.
  • Data product details page: Add a new Data Observability tab pre-filtered to the current data product's FQN, hiding the redundant data product filter.

Changes

File Change
TestCaseClassBase.ts Add dataProducts + domains to getFields()
IncidentManagerPageHeader.component.tsx Show domain (DomainLabel) and data product links in header
incidentManagerAPI.ts Add dataProductFqn to TestCaseIncidentStatusParams
IncidentManager.component.tsx Add data product async select filter + searchDataProducts()
DataProductUtils.tsx Import DataQualityDashboard, add DATA_OBSERVABILITY tab
DataProductClassBase.ts Add EntityTabs.DATA_OBSERVABILITY to tab IDs list

Test plan

Task 1 — Data product support on test case details page

  • Navigate to Observability → Incident Manager, click any test case
  • If the test case's parent table belongs to a domain → Domain label shows in header
  • If the test case's parent table belongs to a data product → Data Products label shows with clickable link to data product detail page

Task 2 — Data product filter on test case list page

  • Go to Observability → Incident Manager list page
  • Verify Data Products filter dropdown appears in the filter bar
  • Select a data product → list refreshes filtered to incidents for test cases belonging to that data product
  • Clear filter → all incidents return

Task 3 — Data quality dashboard on data product details page

  • Go to any Data Product details page
  • Verify new Data Observability tab exists between Contract and Custom Properties
  • Click tab → Data Quality dashboard loads, pre-filtered to that data product
  • Confirm the Data Products filter inside the dashboard is hidden (already applied)

🤖 Generated with Claude Code

- Show inherited domain and data product links on test case details page header
- Add data product filter to incident manager (test case list) page
- Add Data Observability tab to Data Product details page pre-filtered by data product FQN

Closes #27073

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@shah-harshit shah-harshit requested a review from a team as a code owner June 4, 2026 16:41
@shah-harshit shah-harshit added UI UI specific issues safe to test Add this label to run secure Github workflows on PRs labels Jun 4, 2026
@shah-harshit shah-harshit self-assigned this Jun 4, 2026
shah-harshit and others added 2 commits June 4, 2026 22:28
Backend does not index dataProducts in TestCaseResolutionStatus search index
and the listFromSearch endpoint has no dataProductFqn param. Reverting until
backend support is added.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add dataProductFqn param to ListTestCaseParamsBySearch and TestCaseSearchParams
- Add dataProduct entry to TEST_CASE_FILTERS and TEST_CASE_FILTERS_LABELS
- Wire dataProductFqn in buildTestCaseParams
- Add Data Product filter in TestCases advanced filter UI
- Revert IncidentManagerPageHeader and TestCaseClassBase (not in scope)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
shah-harshit and others added 3 commits June 4, 2026 23:00
…ht panel

Adds DataProductsSectionV1 below glossary terms in the test case details
right panel (isTabExpanded). Also fetches dataProducts and domains fields
via TestCaseClassBase.getFields() so the API returns them.

Fixes: #27073

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

The Java checkstyle failed.

Please run mvn spotless:apply in the root of your repository and commit the changes to this PR.
You can also use pre-commit to automate the Java code formatting.

You can install the pre-commit hooks with make install_test precommit_install.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Jest test Coverage

UI tests summary

Lines Statements Branches Functions
Coverage: 63%
63.38% (67289/106167) 44.29% (37023/83574) 46.71% (11134/23833)

@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented Jun 4, 2026

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

🔴 Playwright Results — 1 failure(s), 17 flaky

✅ 4262 passed · ❌ 1 failed · 🟡 17 flaky · ⏭️ 88 skipped

Shard Passed Failed Flaky Skipped
🟡 Shard 1 299 0 2 4
🔴 Shard 2 800 1 3 9
🟡 Shard 3 802 0 3 8
🟡 Shard 4 853 0 2 12
🟡 Shard 5 720 0 1 47
🟡 Shard 6 788 0 6 8

Genuine Failures (failed on all attempts)

Features/DataProductPersonaCustomization.spec.ts › Data Product - customization should work (shard 2)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoHaveCount�[2m(�[22m�[32mexpected�[39m�[2m)�[22m failed

Locator:  getByTestId('customize-tab-card').getByRole('button').filter({ hasNotText: 'Add Tab' })
Expected: �[32m6�[39m
Received: �[31m7�[39m
Timeout:  15000ms

Call log:
�[2m  - Expect "toHaveCount" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('customize-tab-card').getByRole('button').filter({ hasNotText: 'Add Tab' })�[22m
�[2m    18 × locator resolved to 7 elements�[22m
�[2m       - unexpected value "7"�[22m

🟡 17 flaky test(s) (passed on retry)
  • Pages/AuditLogs.spec.ts › should create audit log entry when glossary is soft deleted (shard 1, 1 retry)
  • Pages/AuditLogs.spec.ts › should create audit log entry when glossary is restored (shard 1, 1 retry)
  • Features/CuratedAssets.spec.ts › Test Search Indexes with display name filter (shard 2, 1 retry)
  • Features/Glossary/GlossaryWorkflow.spec.ts › should display correct status badge color and icon (shard 2, 1 retry)
  • Features/Glossary/GlossaryWorkflow.spec.ts › should start term as Draft when glossary has reviewers (shard 2, 1 retry)
  • Features/KnowledgeCenterTextEditor.spec.ts › Rich Text Editor - Text Formatting (shard 3, 1 retry)
  • Features/RTL.spec.ts › Verify Following widget functionality (shard 3, 2 retries)
  • Features/Tasks/TaskNavigation.spec.ts › navigating to /table/TASK-XXXXX should show 404 (invalid URL pattern) (shard 3, 1 retry)
  • Pages/CustomProperties.spec.ts › Should clear search and show all properties for apiCollection in right panel (shard 4, 1 retry)
  • Pages/DataContracts.spec.ts › Create Data Contract and validate for ApiEndpoint (shard 4, 1 retry)
  • Pages/ExplorePageRightPanel_KnowledgeCenter.spec.ts › Should remove user owner for knowledgeCenter (shard 5, 1 retry)
  • Pages/Lineage/LineageFilters.spec.ts › Verify lineage schema filter selection (shard 6, 1 retry)
  • Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab IS visible for supported type: searchIndex (shard 6, 1 retry)
  • Pages/Lineage/PlatformLineage.spec.ts › Verify domain platform view (shard 6, 1 retry)
  • Pages/LogsViewer.spec.ts › Logs page shows breadcrumb, summary, and log viewer or empty state after opening from bundle suite pipeline tab (shard 6, 1 retry)
  • Pages/ServiceEntity.spec.ts › Inactive Announcement create & delete (shard 6, 1 retry)
  • Pages/UserDetails.spec.ts › Create team with domain and verify visibility of inherited domain in user profile after team removal (shard 6, 1 retry)

📦 Download artifacts

How to debug locally
# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip    # view trace

… right panel of test case details page

Adds DomainLabel (editable, headerLayout) in IncidentManagerPageHeader after
OwnerLabel, matching the table page header pattern. Adds DataProductsContainer
(newLook, editable) in the TestCaseResultTab right panel, matching the
EntityRightPanel pattern.

Fixes: #27073

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 5, 2026

✅ PR checks passed

The linked issue has a description and all required Shipping project fields set. Thanks!

shah-harshit and others added 2 commits June 5, 2026 12:07
…aQualityPureUtils

buildTestCaseParams was moved from DataQualityUtils.tsx to DataQualityPureUtils.ts
in main. Add dataProductFqn filter param to the new location.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…void Router context error

DataProductsContainer uses useNavigate which requires a Router. Mock it
to keep tests isolated.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@gitar-bot
Copy link
Copy Markdown

gitar-bot Bot commented Jun 5, 2026

Code Review ✅ Approved 1 resolved / 1 findings

Integrates data product support across the observability UI and backend by adding domain labels and data product filters to incident pages. This release also introduces a pre-filtered Data Observability tab to data product detail pages, resolving the issue where the filter displayed raw FQNs on reload.

✅ 1 resolved
Edge Case: Data Product filter shows raw FQN instead of name on reload

📄 openmetadata-ui/src/main/resources/ui/src/components/IncidentManager/IncidentManager.component.tsx:543-557 📄 openmetadata-ui/src/main/resources/ui/src/components/IncidentManager/IncidentManager.component.tsx:782-795
In IncidentManager.component.tsx the new Data Product AsyncSelect is bound with value={filters.dataProductFqn} (a fully-qualified name string), while searchDataProducts returns options whose label is the entity display name and whose value is the FQN. Because filters.dataProductFqn is hydrated from the URL params on page load (before the async options are fetched), the Select has no matching option in its list, so it renders the raw FQN string instead of the friendly display name until the user re-opens the dropdown. This is a cosmetic inconsistency with how the selected value appears after selection vs. after a reload/deep-link.

Consider using labelInValue (storing both label and value) or seeding the selected option's label, so the chosen data product's display name is shown consistently even when the filter is restored from the URL.

Options

Display: compact → Showing less information.

Comment with these commands to change:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented Jun 5, 2026

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

safe to test Add this label to run secure Github workflows on PRs UI UI specific issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add support of Data product in Observability UI

2 participants