Files
openobserve/tests/ui-testing/ci-matrix/ci_matrix.json
T
91e524ce2d feat(dashboards): interactive table cells with in-place Logs Explorer drawer (#13675)
Design At: designs/dashboards/interactive-table-cell-drilldown

What changed
New component: DashboardLogDrawer.vue

Clicking a cell in a dashboard table panel now opens a side drawer
scoped to that field/value filter. The drawer shows filtered log events
with a SQL editor (Ctrl+Enter to run, Reset to restore default),
server-side pagination with configurable page size (50/100/200/500), and
an event detail sub-drawer on row click.

Event detail has three tabs:

Insights — Field Anomaly Profile (rarity scoring vs current page), Event
Timeline (SVG histogram of event frequency across the selected time
range), Log Patterns (grouped by structure via /patterns/extract, each
with "Open in Logs" that prefills the log explorer), and Surrounding
Events (events from the same stream in a configurable ±1–10 min window,
paginated 20/page with per-row expand)
Details — key/value field list with copy buttons
JSON — raw event JSON
Modified: PanelSchemaRenderer.vue

Fixed type mismatch: route.query.cell_panel returns string; panel schema
IDs may be number — comparison now uses String() on both sides
Added cell_event_ts to the URL param cleanup list so it's cleared when
the outer log drawer closes
Modified: en-US.json — added complete panel.logExplorer key tree
including the new insights subsection

Modified: design-debt-baseline.json — updated baseline after audit (new
file's rawVarInComponent uses are all in sanctioned color-mix()
positions)

URL persistence
All drawer state is encoded in URL params (cell_panel, cell_field,
cell_value, cell_stream, cell_stype, cell_t0, cell_t1, cell_event_ts).
Sharing the URL reopens both drawers and restores the exact event — on
mount it does a WHERE _timestamp = {ts} targeted fetch (size 1) rather
than searching through paginated results.

Zero backend changes
Uses only existing endpoints: search (SQL), search (histogram via
histogram() function), and patterns/extract.

---------

Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-25 10:31:13 +00:00

456 lines
14 KiB
JSON

[
{
"testfolder": "Alerts",
"actual_folder": "Alerts",
"browser": "chrome",
"run_files": [
"alerts-ui-operations.spec.js",
"alerts-import.spec.js",
"alerts-metrics-notification.spec.js",
"alerts-destinations-prebuilt.spec.js",
"dl-email-destinations.spec.js",
"alerts-vrl-encoding.spec.js",
"alerts-history.spec.js",
"alerts-template-prebuilt-guard.spec.js",
"alerts-form-validation.spec.js",
"anomaly-detection-form-validation.spec.js",
"alerts-priority-tags.spec.js",
"alerts-multialert-ui.spec.js"
],
"disabled": [
{
"file": "alerts-e2e-flow.spec.js",
"reason": ""
},
{
"file": "alerts-advanced.spec.js",
"reason": ""
},
{
"file": "alerts-scheduled-features.spec.js",
"reason": ""
}
]
},
{
"testfolder": "Dashboard-Config-Settings",
"actual_folder": "Dashboards",
"browser": "chrome",
"run_files": [
"dashboard-series-color-multiwindow.spec.js",
"dashboard-config-advanced.spec.js",
"dashboard-config-axis.spec.js",
"dashboard-config-gauge-maps.spec.js",
"dashboard-config-general.spec.js",
"dashboard-config-legends.spec.js",
"dashboard-config-line-style.spec.js",
"dashboard-config-panel-time.spec.js",
"dashboard-config-table.spec.js",
"dashboard-config-trellis.spec.js",
"dashboard-config-drilldown.spec.js",
"dashboard-config-promql.spec.js",
"dashboard-config-markline.spec.js"
],
"disabled": []
},
{
"testfolder": "Dashboards-Charts",
"_comment": "Dashboard panel tests are grouped by feature so each shard stays under the ephemeral-runner endurance window. A single combined 16-spec shard ran ~40 min and got reclaimed mid-run ('runner lost communication'). Add new specs to the shard of the feature they cover.",
"actual_folder": "Dashboards",
"browser": "chrome",
"run_files": [
"custom-charts.spec.js",
"dashboard-geoMap.spec.js",
"dashboard-maps.spec.js",
"dashboard-multi-y-axis.spec.js",
"dashboard-html-chart.spec.js",
"dashboard-sankey.spec.js",
"dashboard-pie-donut.spec.js",
"dashboard-metric-camelcase.spec.js",
"dashboard-create-alert.spec.js"
],
"disabled": []
},
{
"testfolder": "Dashboards-Core",
"actual_folder": "Dashboards",
"browser": "chrome",
"run_files": [
"dashboard.spec.js",
"dashboard2.spec.js",
"dashboardtype.spec.js",
"dashboard-folder.spec.js",
"dashboard-import.spec.js",
"maxquery.spec.js",
"dashboard-chartJson.spec.js",
"dashboard-promql-suggestions.spec.js",
"dashboard-sql-autocomplete.spec.js",
"dashboard-share-link.spec.js",
"crossLinking.spec.js",
"dashboard-multi-sql.spec.js",
"crossLinkMultiStream.spec.js",
"dashboards-form-validation.spec.js"
],
"disabled": []
},
{
"testfolder": "Dashboards-Isolated",
"actual_folder": "Dashboards",
"browser": "chrome",
"run_files": [
"dashboard-favorites.spec.js"
],
"disabled": []
},
{
"testfolder": "Dashboards-Panel-Level-DateTime-Config",
"actual_folder": "Dashboards",
"browser": "chrome",
"run_files": [
"dashboard-panel-time-config-behavior.spec.js",
"dashboard-panel-time-url-priority.spec.js",
"dashboard-panel-time-advanced-edge-cases.spec.js",
"dashboard-panel-time-apply-behavior.spec.js",
"dashboard-panel-time-variables-behavior.spec.js"
],
"disabled": []
},
{
"testfolder": "Dashboards-Settings",
"actual_folder": "Dashboards",
"browser": "chrome",
"run_files": [
"dashboard-filter.spec.js",
"dashboard-general-setting.spec.js",
"dashboard-tabs-setting.spec.js",
"dashboard-transpose.spec.js",
"dashboard-join.spec.js",
"dashboard-nested-functions.spec.js",
"dashboard-legends-copy.spec.js",
"dashboard-raw-query.spec.js"
],
"disabled": []
},
{
"testfolder": "Dashboards-Streaming",
"actual_folder": "Dashboards",
"browser": "chrome",
"run_files": [
"dashboard-streaming.spec.js"
],
"disabled": []
},
{
"testfolder": "Dashboards-Tables",
"_comment": "Owns the pagination and pivot-table specs (previously their own single-spec shards) \u2014 keep them here.",
"actual_folder": "Dashboards",
"browser": "chrome",
"run_files": [
"dashboard-table-chart.spec.js",
"dashboard-table-copy-cell.spec.js",
"dashboard-table-csv-download.spec.js",
"dashboard-table-column-formatting.spec.js",
"dashboard-table-column-filtering.spec.js",
"dashboard-table-pagination.spec.js",
"dashboard-pivot-table.spec.js",
"interactive-dashboard-table.spec.js"
],
"disabled": []
},
{
"testfolder": "Dashboards-Variables",
"actual_folder": "Dashboards",
"browser": "chrome",
"run_files": [
"dashboard-variables-setting.spec.js",
"dashboard-variables-global.spec.js",
"dashboard-variables-tab-level.spec.js",
"dashboard-variables-panel-level.spec.js",
"dashboard-variables-dependency.spec.js",
"dashboard-variables-refresh.spec.js",
"dashboard-variables-url-sync.spec.js",
"dashboard-variables-creation-scopes.spec.js",
"dashboard-variables-default-values-chain.spec.js",
"dashboard-variables-custom-parents.spec.js",
"dashboard-variables-stream-field.spec.js",
"dashboard-mustache-variables.spec.js"
],
"disabled": []
},
{
"testfolder": "Dashboards-Visualize",
"actual_folder": "Dashboards",
"browser": "chrome",
"run_files": [
"visualize.spec.js",
"visualize-vrl.spec.js"
],
"disabled": []
},
{
"testfolder": "Functions",
"actual_folder": "Functions",
"browser": "chrome",
"run_files": [
"js-transform-type.spec.js",
"row-expansion.spec.js",
"enrichment-table-url.spec.js",
"functions-form-validation.spec.js",
"action-scripts-form-validation.spec.js"
],
"disabled": []
},
{
"testfolder": "GeneralTests",
"actual_folder": "GeneralTests",
"browser": "chrome",
"run_files": [
"sanity.spec.js",
"changeOrg.spec.js",
"enrichment.spec.js",
"schema.spec.js",
"schemaload.spec.js",
"serviceAccount.spec.js",
"usersOrg.spec.js",
"org.spec.js",
"theme-management.spec.js",
"ingestion-config.spec.js",
"ingestionTokens.spec.js",
"landingPage.spec.js",
"languageTranslation.spec.js",
"edition-features.spec.js",
"logsqueries.sql-comments.spec.js",
"iam-form-validation.spec.js",
"regex-patterns-form-validation.spec.js",
"cipher-keys-form-validation.spec.js",
"settings-form-validation.spec.js",
"ai-toolsets-form-validation.spec.js",
"shared-components-form-validation.spec.js",
"onboarding-form-validation.spec.js",
"rum-form-validation.spec.js",
"login-form-validation.spec.js",
"datetime-picker-copy-paste.spec.js"
],
"disabled": []
},
{
"testfolder": "Logs-Builder-Advanced",
"actual_folder": "Logs",
"browser": "chrome",
"run_files": [
"logsQueryBuilder-editor.spec.js",
"logsQueryBuilder-filters-advanced.spec.js",
"logsquickmode.spec.js",
"logshistogram.spec.js",
"logsQuickPick.spec.js"
],
"disabled": []
},
{
"testfolder": "Logs-Builder-Basic",
"actual_folder": "Logs",
"browser": "chrome",
"run_files": [
"logsQueryBuilder-chart.spec.js",
"logsQueryBuilder-filters-basic.spec.js",
"pagination.spec.js",
"unflattened.spec.js"
],
"disabled": []
},
{
"testfolder": "Logs-Core",
"actual_folder": "Logs",
"browser": "chrome",
"run_files": [
"logspage.spec.js",
"logstable.spec.js",
"logsqueries.spec.js",
"join.spec.js",
"shareLink.spec.js",
"logsAnalyzeDimensions.spec.js",
"monaco-query-prefill.spec.js",
"logsqueries.matchall.spec.js",
"ftsDefaultColumn.spec.js",
"logsVisualizePersistence.spec.js"
],
"disabled": []
},
{
"testfolder": "Logs-Features",
"actual_folder": "Logs",
"browser": "chrome",
"run_files": [
"logs-autocomplete-suggestions.spec.js",
"logs-sql-autocomplete.spec.js",
"logsqueries.cte.spec.js",
"logsDownloads.spec.js",
"secondsPrecisionAdded.spec.js",
"searchpartition.spec.js",
"indexquery.spec.js",
"region.spec.js",
"timezoneDisplay.spec.js"
],
"disabled": [
{
"file": "searchJobInspector.spec.js",
"reason": "TODO: update for new correlation feature"
}
]
},
{
"_comment": "Own shard because isSelectStarForTable() only exists when the server runs with ZO_QUICK_MODE_ENABLED=true. That flag is read once at process start, so it cannot vary between tests sharing a backend \u2014 each shard gets its own OpenObserve process. Every other shard omits quick_mode_enabled and keeps the default (false).",
"testfolder": "Logs-SelectStar",
"actual_folder": "Logs",
"browser": "chrome",
"quick_mode_enabled": "true",
"run_files": [
"logsVisualizeSelectStar.spec.js",
"logsBuildStreamList.spec.js"
],
"disabled": []
},
{
"testfolder": "Metrics",
"actual_folder": "Metrics",
"browser": "chrome",
"run_files": [
"metrics.spec.js",
"metrics-queries.spec.js",
"metrics-aggregations.spec.js",
"metrics-advanced.spec.js",
"metrics-config-tabs.spec.js",
"metrics-visualizations.spec.js",
"metrics-config.spec.js",
"metrics-promql-query-persistence.spec.js",
"metrics-table-column-order.spec.js",
"metrics-promql-builder.spec.js",
"promqlAutocomplete.spec.js",
"metrics-share-deep-link.spec.js",
"metrics-explorer-share-visualize.spec.js"
],
"disabled": []
},
{
"testfolder": "Pipelines",
"actual_folder": "Pipelines",
"browser": "chrome",
"run_files": [
"pipeline-conditions.spec.js",
"pipeline-conditions-validation.spec.js",
"pipelines.spec.js",
"pipeline-dynamic.spec.js",
"pipeline-core.spec.js",
"pipeline-traces.spec.js",
"pipeline-metrics.spec.js",
"pipeline-backfill.spec.js",
"pipeline-history.spec.js",
"scheduled-pipeline-query-builder.spec.js",
"pipelines-form-validation.spec.js"
],
"disabled": [
{
"file": "remotepipeline.spec.js",
"reason": ""
}
]
},
{
"testfolder": "Reports",
"actual_folder": "Reports",
"browser": "chrome",
"run_files": [
"reportsScheduleNow.spec.js",
"reportsScheduleLater.spec.js",
"reportFolders.spec.js",
"reports-bulk-operations.spec.js",
"reports-form-validation.spec.js",
"reportCsvMediaType.spec.js",
"scheduledReportsDrawer.spec.js"
],
"disabled": []
},
{
"testfolder": "RUM",
"_comment": "The RUM ingest/token/sourcemaps routes are part of the standard (OSS) router (src/api/http/src/handler/http/router/mod.rs), so these specs run against the OSS binary. Ingestion-auth negative cases live in the API suite (tests/api-testing/tests/rum).",
"actual_folder": "RUM",
"browser": "chrome",
"run_files": [
"rum-cdn-dataflow.spec.js",
"rum-npm-dataflow.spec.js",
"rum-page-dataflow.spec.js",
"rum-onboarding-snippets.spec.js",
"sourcemap-ui.spec.js",
"sourcemap-upload-pretty.spec.js"
],
"disabled": []
},
{
"testfolder": "RUM-Token",
"_comment": "rum-token.spec.js RESETS the org RUM token; running it beside the dataflow specs (workers run files in parallel) would 401 their in-flight SDK beacons. Own shard = own isolated instance \u2014 do NOT merge back into RUM.",
"actual_folder": "RUM",
"browser": "chrome",
"run_files": [
"rum-token.spec.js"
],
"disabled": []
},
{
"testfolder": "Streams",
"actual_folder": "Streams",
"browser": "chrome",
"run_files": [
"multiselect-stream.spec.js",
"streamname.spec.js",
"streaming.spec.js",
"stream-settings.spec.js",
"streams-form-validation.spec.js"
],
"disabled": []
},
{
"testfolder": "Traces",
"actual_folder": "Traces",
"browser": "chrome",
"run_files": [
"service-catalog.spec.js",
"tracesSearch.spec.js",
"traceQueryEditor.spec.js",
"traceErrorFilter.spec.js",
"traceDetails.spec.js",
"traceAdvancedFiltering.spec.js",
"tracesAnalyzeDimensions.spec.js",
"traces-autocomplete-suggestions.spec.js"
],
"disabled": []
},
{
"testfolder": "SLO",
"_comment": "SLO lifecycle, form validation and the alert SLI type. No backfill dependency, so these run in parallel \u2014 but pinned to 3 workers: at 5 the concurrent SLO/alert/destination writes trip SQLite's 'database is locked' on the single-node meta store. The REST contract is covered by pytest in tests/api-testing/tests/slos/.",
"actual_folder": "SLO",
"browser": "chrome",
"ingest_allowed_upto": "240",
"workers": 3,
"run_files": [
"slo-crud.spec.js",
"slo-form-validation.spec.js",
"slo-alert-sli.spec.js"
],
"disabled": []
},
{
"testfolder": "SLO-Measurement",
"_comment": "SEPARATE SHARD ON PURPOSE. These two specs seed 8 days of history and wait for the backfill job (ZO_SCHEDULER_SLO_BACKFILL_CONCURRENCY=1, so its 3 backfilled SLOs queue strictly one at a time). slo_backfill_chunk_secs is bumped from the 86400 (1-day) server default to the full 604800 (7-day) window each of those SLOs uses, so each finishes in 1 chunk instead of 7 -- no test here asserts on per-chunk timing or partial coverage, only on the final measured state. Any spec creating SLOs on the same instance queues behind them and starves the wait, so they must not share a runner with the SLO shard. Both specs are mode:serial and pay the backfill once in beforeAll.",
"actual_folder": "SLO",
"browser": "chrome",
"ingest_allowed_upto": "240",
"slo_backfill_chunk_secs": "604800",
"workers": 1,
"run_files": [
"slo-timeslice.spec.js",
"slo-alerts.spec.js"
],
"disabled": []
}
]