mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-06 00:09:22 +00:00
511bb5ef677e034251a7ed9c87dc907f3600a448
205
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
284442c9f0 |
test: add dedicated playwright regression workflow (#11669)
## Summary - Split regression tests out of main `playwright.yml` into a dedicated `playwright_regression.yml` workflow - Regression tests now run with **one shard per spec** for maximum parallelism - Removed `RegressionSet` shard from main `playwright.yml` ## Schedule - Auto-triggers every 4 hours starting from 9 AM IST (3:30, 7:30, 11:30, 15:30, 19:30, 23:30 UTC) - Manual trigger via `workflow_dispatch` on any branch (always runs on localhost) ## Test Plan - [ ] Confirm `playwright_regression.yml` appears in Actions tab - [ ] Trigger a manual run to verify all 10 regression specs run in parallel - [ ] Verify `playwright.yml` no longer includes RegressionSet shard 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
5d86357fdd | test: add regression tests for same-dashboard drilldown-URL clobbering (#11661) | ||
|
|
3faa3d2ecc |
test: skip TestDino upload and cache on green runs (#11668)
## Summary - Skip TestDino "Cache test failures" and "Upload to TestDino" steps when all tests pass - Both steps now gate on `needs.ui_integration_tests.result == 'failure'` so they only run when at least one test shard failed - The retry mechanism (`tdpw last-failed`) is unaffected — when there are failures the cache step still runs, and the re-run flow works as before ## Why TestDino bills per test case uploaded. Running both steps on green builds wastes quota with zero value since the user only uses TestDino for failure analysis. ## Changes - `merge_and_upload_reports` job: "Cache test failures" step condition changed from `always()` to `needs.ui_integration_tests.result == 'failure'` - `merge_and_upload_reports` job: "Upload to TestDino" step condition changed from `(success() || failure())` to `needs.ui_integration_tests.result == 'failure'` 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
c41779f779 |
test: add alerts stream-switching regression tests for 5 canvas/graph bugs (#11651)
## Summary - Adds 18 new POM methods to `alertsPage.js` for stream-type/query-mode coherence verification, chart state assertions, query editor interaction, and aggregation field filtering - Adds 5 helper methods to `alertCreationWizard.js` for full editor open/close, stream switching, and query execution - Adds new regression spec `alerts-stream-switching-regression.spec.js` covering 5 closed bugs: | Bug | Description | |-----|-------------| | #11580 | Metrics+PromQL -> Logs, PromQL editor persists | | #11572 | Logs -> Metrics -> Logs, chart error "No field named value" | | #11571 | Builder -> SQL, chart blank table instead of line | | #11573 | Full editor open/close blanks the graph | | #11578 | Agg functions don't filter to integer fields | ## Test plan - [ ] Run `alerts-stream-switching-regression.spec.js` against dev environment - [ ] All 5 tests pass with no raw selectors in spec (POM-compliant) - [ ] Chart assertions verify canvas child exists (not just bounding box) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
7316ae311f | chore: enhance frontend linting and build process (#11643) | ||
|
|
f29102fd9d | fix: ubi-30 to ubi-16 (#11621) | ||
|
|
511eccf363 |
fix: correct field access order for CSV download in TableRenderer (#11591)
- #11574 |
||
|
|
ce80448cb8 |
ci: parallel frontend+binary build, remove coverage reporting (#11470)
Build frontend and Rust binary in parallel using /tmp/dist trick Remove VITE_COVERAGE/COVERAGE env vars and coverage instrumentation Remove generate_coverage_report job and all nyc upload/report steps Rename artifact debug-binary → release-ci-binary, add frontend-dist artifact Update playwright_summary needs to drop generate_coverage_report --------- Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
cb4c799476 |
ci: make merge-reports-to-TestDino non-blocking for playwright_summary (#11457)
## Summary - In `playwright_summary`, `merge_and_upload_reports` result of `failure` is now treated as non-blocking (same as `success`/`skipped`) - The Playwright summary check will pass even if the TestDino merge/upload job fails (e.g. network issues, bad token, API outage) - Actual test results (`build_binary`, `ui_integration_tests`) still gate the summary as before ## Why The TestDino upload is observability/reporting infrastructure — it should never cause a PR's required check to fail when the tests themselves passed. Previously a transient TestDino failure would block merges. ## Test plan - [ ] Verify `playwright_summary` passes when `merge_and_upload_reports` succeeds (existing behavior) - [ ] Verify `playwright_summary` passes when `merge_and_upload_reports` fails (new behavior) - [ ] Verify `playwright_summary` still fails when `ui_integration_tests` fails (unchanged) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
1bfbb70a62 | chore: improve ci rust build cache (#11426) | ||
|
|
4a6bb5326b | fix: dashboard table chart copy cell format (#11357) | ||
|
|
32009bd2a5 |
feat: dashboard auto complete suggestion for sql (#11251)
Design at: https://github.com/openobserve/designs/blob/main/dashboards/sql-autocomplete/design.md --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: undefined <undefined@users.noreply.github.com> |
||
|
|
1337a04058 |
fix: alert revamp version 3 (#11253)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Bhargav <BJP232004@GMAIL.COM> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
85d261b5d0 |
fix: vulnerability scan fixes (#11249)
| # | Severity | Category | File | | :--- | :--- | :--- | :--- | | 1 | **High** | SSRF bypass (IPv6) | `ssrf_guard.rs` | | 2 | **High** | SSRF bypass (retry) | `enrichment_table/mod.rs` | | 3 | **High** | SSRF defense-in-depth | `alert.rs` | | 4 | **Critical** | CORS + credentials | `router/mod.rs` | | 5 | **Critical** | SQL Injection | `postgres.rs`, `sqlite.rs` | | 6 | **High** | Privilege escalation (token) | `users.rs` | | 7 | **Medium** | Panic/DoS | `users.rs` | | 8 | **Low** | Integer overflow | `alerts/mod.rs` | | 9 | **Medium** | XSS | `alertSummaryGenerator.ts`, `colorizeQuery.ts` | | 10 | **Medium** | Credential exposure in logs | `validator.rs`, `organization.rs`, `users.rs` | --------- Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> Co-authored-by: Prabhat Sharma <hi.prabhat@gmail.com> |
||
|
|
85c3fd4eda | fix: dashboard promql autocomplete (#11233) | ||
|
|
ed5eca54fb |
test: tests for bug fixes (#11178)
https://github.com/openobserve/openobserve/issues/11174 --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
5b71a27729 |
fix: cross link issue with multi stream (#11200) (#11214)
fix #11200 |
||
|
|
7552a57377 |
feat: replace variable value with mustache (#11085)
Design at: https://github.com/openobserve/designs/tree/main/dashboards/mustache-migration --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Abhay Padamani <undefined@users.noreply.github.com> Co-authored-by: omkark06 <omkar@zinclabs.io> |
||
|
|
981e3a3d48 | fix: metric chart render issue with camelcase alias (#11118) | ||
|
|
0c050cfbbf |
ci: add merge_group trigger to CI workflows for merge queue support (#11105)
Add merge_group event trigger to all required CI workflows so they run when PRs enter the merge queue. Fix github.event.pull_request references in dispatch-event-enterprise.yml to handle merge_group context. |
||
|
|
ed4e476b48 |
fix: npm ci axios version (#11090)
- **fix: grpc use native/webpki trust store** - **use enum to parse values** - **cargo fmt** - **fix: pin axios versions in CI** |
||
|
|
258eecd447 |
test: add E2E tests for autocomplete value suggestions feature (#11027)
Add Playwright E2E tests for the new autocomplete value suggestions feature that persists field values in IndexedDB and shows them when typing `field =`. Tests cover: - IndexedDB capture from field expansion (Values API) - IndexedDB capture from search results (marked as expected-to-fail due to bug) - Autocomplete suggestions for operators: =, !=, <>, >=, <=, IN, NOT IN, LIKE - Numeric value quoting (no quotes for numbers) - TTL expiry filtering - Stream/org isolation - Traces page autocomplete Note: One test marked as expected-to-fail due to BLOCKER BUG where captureFromSearchHits() doesn't write to IndexedDB (schemaFields filtering issue) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Neha P <undefined@users.noreply.github.com> |
||
|
|
9abc043b0b |
test: add E2E tests for dashboard table chart core features (#11004)
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com> |
||
|
|
efeaac2c0c |
fix: changing ubicloud-16 to ubicloud-30 (#11011)
fix: playwright build failure |
||
|
|
097c4af1e4 | test: add E2E test coverage for pie and donut charts in dashboard (#10998) | ||
|
|
7d1aea9578 |
test: add automation coverage for PromQL builder in metrics (#10932)
…mplement associated tests |
||
|
|
1a6a53a0ed |
feat: pivot table support on dashboard (#10774)
Design at: https://github.com/openobserve/designs/tree/main/dashboards/dashboard-pivot-table-support --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Abhay Padamani <undefined@users.noreply.github.com> |
||
|
|
a6dbcbe183 |
test: dashboard config panel (#10903)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> |
||
|
|
230bfbbacd |
test: add test cases for cross-linking between dashboards and logs page (#10797)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> |
||
|
|
ee9c0f5b8b | test: add test cases for dashboard series color in multi-window (#10861) | ||
|
|
84c72f98b9 | test: add automation coverage for Sankey chart visualization (#10761) | ||
|
|
af77744583 |
test: add vrl testcases under alerts (#10747)
Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
66c618e331 |
test: add test cases for creating alert from dashboard chart (#10669)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> |
||
|
|
0ee7535da7 |
feat: dashboard time range available at panel level (#10288)
Design at: https://github.com/openobserve/designs/blob/main/dashboards/panel-level-time-range/design.md ### **PR Type** Enhancement, Documentation ___ ### **Description** - Add defaults for panel-level time settings in front-end - Extend backend PanelConfig with time range fields - Provide a comprehensive implementation guide document ___ <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table> <tr> <td> <details> <summary><strong>useDashboardPanel.ts</strong><dd><code>Add default panel time settings fields</code> </dd></summary> <hr> web/src/composables/useDashboardPanel.ts <ul><li>Added <code>allow_panel_time</code> default (false)<br> <li> Introduced <code>panel_time_mode</code> default ("individual")<br> <li> Initialized <code>panel_time_range</code> to null</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10288/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+3/-0</a> </td> </tr> <tr> <td> <details> <summary><strong>mod.rs</strong><dd><code>Extend PanelConfig with time fields</code> </dd></summary> <hr> src/config/src/meta/dashboards/v8/mod.rs <ul><li>Added <code>allow_panel_time: Option<bool></code> to PanelConfig<br> <li> Added <code>panel_time_mode: Option<String></code> field<br> <li> Added <code>panel_time_range: Option<DateTimeOptions></code> field</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10288/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+12/-0</a> </td> </tr> </table></td></tr><tr><td><strong>Documentation</strong></td><td><table> <tr> <td> <details> <summary><strong>PANEL_TIME_RANGE_IMPLEMENTATION.md</strong><dd><code>Add panel time range implementation guide</code> </dd></summary> <hr> web/src/components/dashboards/PANEL_TIME_RANGE_IMPLEMENTATION.md <ul><li>Added detailed implementation guide (v3.0)<br> <li> Outlined requirements, UI, URL sync, testing<br> <li> Documented data flow, edge cases, and timeline</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10288/files#diff-39b68cc51ce3089b41061b75e18c45448659cab57702dd39b01a9aad63598345">+2718/-0</a></td> </tr> </table></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: ktx-akshay <akshay.patil@kiara.tech> |
||
|
|
ae6d73e815 |
feat: dashboard stream and field support from variables (#10454)
Design at: https://github.com/openobserve/designs/blob/main/dashboards/variables-stream-field-support/design.md ### **PR Type** Enhancement, Tests ___ ### **Description** - Add stream/field variable dependency parsing - Deduplicate and validate dependency graph edges - Resolve stream/field variables at runtime - Update variable UI with autocomplete ___ ### Diagram Walkthrough ```mermaid flowchart LR ui["AddSettingVariable.vue (configure stream/field)"] runtime["VariablesValueSelector.vue (resolve & query)"] deps["variablesDependencyUtils.ts (dependency graphs)"] tests["variablesDependencyUtils.spec.ts (new coverage)"] ui -- "allows $var in stream/field" --> runtime ui -- "cycle detection messaging" --> deps runtime -- "uses resolved stream/field" --> deps tests -- "asserts stream/field deps & cycles" --> deps ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table> <tr> <td> <details> <summary><strong>variablesDependencyUtils.spec.ts</strong><dd><code>Add tests for stream/field dependencies</code> </dd></summary> <hr> web/src/utils/dashboard/variables/variablesDependencyUtils.spec.ts <ul><li>Add cases for <code>query_data.stream</code> dependencies<br> <li> Add cases for <code>query_data.field</code> dependencies<br> <li> Validate deduping and embedded variables<br> <li> Add cycle detection scenarios via stream/field</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10454/files#diff-1a8fd83eb7a8b0c906e668e7e4120a40f7b9853d5bfb485a7c569ff980e4a780">+313/-0</a> </td> </tr> </table></td></tr><tr><td><strong>Enhancement</strong></td><td><table> <tr> <td> <details> <summary><strong>variablesDependencyUtils.ts</strong><dd><code>Expand dependency detection to stream/field</code> </dd></summary> <hr> web/src/utils/dashboard/variables/variablesDependencyUtils.ts <ul><li>Collect deps from stream, field, filters<br> <li> Use <code>Set</code> to prevent duplicate parents<br> <li> Extend <code>query_data</code> typing with <code>stream</code>/<code>field</code><br> <li> Update scoped graph with deduped edges</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10454/files#diff-58a77094b6971705fb63bde853a79e17b4e2e85240694c4017aada1d01cf1fb4">+78/-31</a> </td> </tr> <tr> <td> <details> <summary><strong>VariablesValueSelector.vue</strong><dd><code>Resolve stream/field variables before querying</code> </dd></summary> <hr> web/src/components/dashboards/VariablesValueSelector.vue <ul><li>Add <code>resolveVariableValue()</code> for <code>$var</code> substitution<br> <li> Resolve <code>stream_name</code>/<code>fields</code> in request payload<br> <li> Match response hits using resolved field name<br> <li> Add debug/error console logging for resolution</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10454/files#diff-5c6e3bcb87cb64f25bf8157a541604b7a4904c1282acf662cab5d76a5be6bd56">+55/-3</a> </td> </tr> <tr> <td> <details> <summary><strong>AddSettingVariable.vue</strong><dd><code>Allow variable-based stream and field selection</code> </dd></summary> <hr> web/src/components/dashboards/settings/AddSettingVariable.vue <ul><li>Replace stream/field <code>q-select</code> with <code>CommonAutoComplete</code><br> <li> Merge variable options into stream/field option lists<br> <li> Skip schema fetch when stream contains <code>$</code><br> <li> Improve cycle error message and styling</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10454/files#diff-e622f54c1f7629ee67d29ed2fc87008d07eb9246767a05435cc42c3c17ce459a">+208/-52</a></td> </tr> </table></td></tr></tr></tbody></table> </details> ___ --------- Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com> |
||
|
|
bb7103930a | test: add test cases for dashboard share URL (#10560) | ||
|
|
25c0fe6382 |
feat: query builder support on logs page (#10305)
- #10446 Design at : https://github.com/openobserve/designs/tree/main/auto-query-builder-on-logs-page # Logs Query Builder - Behavior Guide What happens in different scenarios when using the Build tab. --- ## Switching to Build Tab - Scenarios ### Scenario 1: No Query, SQL Mode OFF **Starting state:** - Query editor is empty - SQL Mode is OFF - Stream "default" is selected **What happens when you click Build:** 1. SQL Mode turns ON automatically 2. Query is generated: `SELECT * FROM "default"` 3. Quick Mode turns ON (if enabled in config) 4. Build tab opens in **Custom SQL Mode** 5. Chart type: **Table** (with dynamic columns = true) --- ### Scenario 2: No Query, SQL Mode ON **Starting state:** - Query editor is empty - SQL Mode is ON - Stream "default" is selected **What happens when you click Build:** 1. Query is generated: `SELECT * FROM "default"` 2. Build tab opens in **Builder Mode** 3. Chart type: **Line** (default) --- ### Scenario 3: Simple SELECT * Query **Starting state:** - Query: `SELECT * FROM "logs"` - SQL Mode is ON **What happens when you click Build:** 1. Query is parsed but no explicit fields found (`*` = all columns) 2. Build tab opens in **Custom SQL Mode** 3. Chart type: **Table** (with dynamic columns) 4. Quick Mode turns ON (SELECT * pattern detected) 5. Query editor is **editable** --- ### Scenario 4: Histogram Query (Time Series) **Starting state:** - Query: `SELECT histogram(_timestamp) as time, count(*) as count FROM "logs" GROUP BY time` - SQL Mode is ON **What happens when you click Build:** 1. Query is parsed successfully 2. Build tab opens in **Builder Mode** 3. Chart type: **Bar** (default chart type) 4. Fields populated: X-axis = histogram, Y-axis = count --- ### Scenario 5: Count Only Query (No Grouping) **Starting state:** - Query: `SELECT count(*) as total FROM "logs"` - SQL Mode is ON **What happens when you click Build:** 1. Query is parsed successfully 2. Build tab opens in **Builder Mode** 3. Chart type: **Metric** (big number display - only Y-axis, no X-axis) --- ### Scenario 6: Query with 3+ GROUP BY Fields **Starting state:** - Query: `SELECT status, method, host, count(*) FROM "logs" GROUP BY status, method, host` - SQL Mode is ON **What happens when you click Build:** 1. Query is parsed successfully 2. Build tab opens in **Builder Mode** 3. Chart type: **Table** (too many grouping fields for chart) --- ### Scenario 7: Simple JOIN Query **Starting state:** - Query: `SELECT a.field, b.field FROM "stream1" a JOIN "stream2" b ON a.id = b.id` - SQL Mode is ON **What happens when you click Build:** 1. Query is parsed successfully 2. Build tab opens in **Builder Mode** 3. Chart type: **Bar** (default) 4. JOIN is recognized and shown in builder --- ### Scenario 8: Nested JOIN Query **Starting state:** - Query: `SELECT * FROM "a" JOIN ("b" JOIN "c" ON b.x = c.x) ON a.y = b.y` - SQL Mode is ON **What happens when you click Build:** 1. **Complex pattern detected** (nested JOIN with parentheses) 2. Build tab opens in **Custom SQL Mode** 3. Chart type: **Table** (with dynamic columns) 4. Query editor is **editable** 5. Field selectors are **hidden** --- ### Scenario 9: CTE Query (WITH clause) **Starting state:** - Query: `WITH recent AS (SELECT * FROM "logs" WHERE _timestamp > now() - interval '1 hour') SELECT * FROM recent` - SQL Mode is ON **What happens when you click Build:** 1. **Complex pattern detected** (CTE) 2. Build tab opens in **Custom SQL Mode** 3. Chart type: **Table** (with dynamic columns) 4. Query editor is **editable** --- ### Scenario 10: Subquery **Starting state:** - Query: `SELECT * FROM (SELECT status, count(*) FROM "logs" GROUP BY status) subq` - SQL Mode is ON **What happens when you click Build:** 1. **Complex pattern detected** (subquery) 2. Build tab opens in **Custom SQL Mode** 3. Chart type: **Table** (with dynamic columns) --- ### Scenario 11: UNION Query **Starting state:** - Query: `SELECT * FROM "logs1" UNION SELECT * FROM "logs2"` - SQL Mode is ON **What happens when you click Build:** 1. **Complex pattern detected** (UNION) 2. Build tab opens in **Custom SQL Mode** 3. Chart type: **Table** (with dynamic columns) --- ### Scenario 12: Window Function Query **Starting state:** - Query: `SELECT *, ROW_NUMBER() OVER (PARTITION BY status ORDER BY _timestamp) FROM "logs"` - SQL Mode is ON **What happens when you click Build:** 1. **Complex pattern detected** (window function) 2. Build tab opens in **Custom SQL Mode** 3. Chart type: **Table** (with dynamic columns) --- ### Scenario 13: Nested Function Query **Starting state:** - Query: `SELECT ceil(count(*)) as rounded_count FROM "logs"` - SQL Mode is ON **What happens when you click Build:** 1. **Complex pattern detected** (nested function - function inside function) 2. Build tab opens in **Custom SQL Mode** 3. Chart type: **Table** (with dynamic columns) --- ### Scenario 14: JSON Operations Query **Starting state:** - Query: `SELECT data->>'name' as name FROM "logs"` - SQL Mode is ON **What happens when you click Build:** 1. **Complex pattern detected** (JSON operator) 2. Build tab opens in **Custom SQL Mode** 3. Chart type: **Table** (with dynamic columns) --- ### Scenario 15: CASE/WHEN Query **Starting state:** - Query: `SELECT CASE WHEN status >= 500 THEN 'error' ELSE 'ok' END as status_type, count(*) FROM "logs" GROUP BY status_type` - SQL Mode is ON **What happens when you click Build:** 1. Query is parsed successfully (CASE/WHEN is supported) 2. Build tab opens in **Builder Mode** 3. Chart type: **Bar** (default) 4. CASE/WHEN shown as "raw" field type --- ### Scenario 16: Multiple JOINs (Flat) **Starting state:** - Query: `SELECT a.field as "field1", b.field as "field2" FROM "a" INNER JOIN "b" AS stream_0 ON a.x = b.x INNER JOIN "c" AS stream_1 ON b.y = c.y GROUP BY field1, field2 ORDER BY field1 ASC` - SQL Mode is ON **What happens when you click Build:** 1. Query is parsed successfully (flat JOINs are supported) 2. Build tab opens in **Builder Mode** 3. Chart type: **Bar** (default) --- ### Scenario 17: Opening Shared Link (First Time) **Starting state:** - URL contains `build_data` parameter with chart type "bar" - Query in URL: `SELECT status, count(*) FROM "logs" GROUP BY status` **What happens:** 1. Build tab opens 2. Query is parsed successfully 3. Chart type: **Bar** (restored from URL - first toggle) 4. Build tab opens in **Builder Mode** --- ### Scenario 18: Switching Back to Build Tab (After First Time) **Starting state:** - Previously visited Build tab - URL still has `build_data` with chart type "bar" - Query: `SELECT count(*) FROM "logs"` (metric query) **What happens:** 1. Build tab opens 2. Query is parsed successfully 3. Chart type: **Metric** (auto-selected, URL ignored on subsequent toggles) --- ### Scenario 19: Invalid SQL Syntax **Starting state:** - Query: `SELEC * FORM "logs"` (typos) - SQL Mode is ON **What happens when you click Build:** 1. **Parse error** (invalid SQL) 2. Build tab opens in **Custom SQL Mode** 3. Chart type: **Table** (with dynamic columns) 4. Query editor is **editable** (so user can fix the query) --- ### Scenario 20: Query with WHERE Filters **Starting state:** - Query: `SELECT histogram(_timestamp), count(*) FROM "logs" WHERE status = 500 AND method = 'GET' GROUP BY 1` - SQL Mode is ON **What happens when you click Build:** 1. Query is parsed successfully 2. Build tab opens in **Builder Mode** 3. Chart type: **Bar** (default) 4. Filters populated in filter section --- ## Summary Table | Query Type | Mode | Chart Type | |------------|------|------------| | SELECT * | **Custom** | **Table** | | Histogram + count | Builder | Bar | | Count only (no GROUP BY) | Builder | Metric | | 1-2 GROUP BY fields | Builder | Bar | | 3+ GROUP BY fields | Builder | Table | | Simple JOIN | Builder | Bar | | CASE/WHEN | Builder | Bar | | Multiple flat JOINs | Builder | Bar | | CTE (WITH clause) | **Custom** | **Table** | | Subquery | **Custom** | **Table** | | Nested JOIN | **Custom** | **Table** | | UNION/INTERSECT/EXCEPT | **Custom** | **Table** | | Window functions | **Custom** | **Table** | | Nested functions | **Custom** | **Table** | | JSON operations | **Custom** | **Table** | | Invalid SQL | **Custom** | **Table** | --- ## Quick Mode Auto-Enable Quick Mode is automatically enabled when switching to Build tab if: | Condition | Quick Mode | |-----------|------------| | SQL Mode was OFF | ✅ Enabled | | Query is `SELECT * FROM ...` | ✅ Enabled | | Complex aggregation query | ❌ Not changed | **Requires:** `quick_mode_enabled = true` in config --- ## SQL Mode Auto-Enable | Starting State | After Clicking Build | |----------------|---------------------| | SQL Mode OFF | SQL Mode **ON** | | SQL Mode ON | SQL Mode ON (no change) | **Build tab always requires SQL Mode to be ON.** --- ## Chart Type Priority When auto-selecting chart type: 1. **Custom Mode?** → Table 2. **3+ GROUP BY fields?** → Table 3. **Only Y-axis (no X, no breakdown)?** → Metric 4. **Everything else** → Bar (default) **Exception:** First visit with shared link uses chart type from URL. --- ## Builder Mode vs Custom Mode | Aspect | Builder Mode | Custom Mode | |--------|--------------|-------------| | Query Editor | Read-only | Editable | | Field Selectors | Visible | Hidden | | When Used | Parseable queries | Complex/unparseable queries | | Default Chart | Bar/Metric | Table | --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: ktx-akshay <akshay.patil@kiara.tech> |
||
|
|
e5fcaf6813 |
test: add E2E tests for Analyze Dimensions feature (Logs & Traces) (#10280)
## Summary - Added comprehensive E2E Playwright tests for the Analyze Dimensions feature - Tests cover both Logs and Traces pages - All tests pass without skipping ### Logs Tests (6 tests) - P0: Analyze button visible when search results exist - P0: Analyze button opens analysis dashboard - P1: Analysis dashboard close button works - P1: Dimension selector dialog opens in analysis dashboard - P2: Analyze button hidden in SQL mode - P2: Analyze button hidden when no search results ### Traces Tests (10 tests) - P0: Metrics dashboard visible with trace results - P0: Error only toggle filters trace results - P0: Analyze button hidden without brush selection - P1: Range filter chip behavior after brush selection attempt - P1: Analysis dashboard opens when analyze button is available - P1: Analysis dashboard close button functionality - P1: Analysis dashboard has tabs for Volume, Latency, and Error - P1: Switch between Volume, Latency and Error tabs - P2: Dimension selector in analysis dashboard - P2: Filter chip removal functionality ### Implementation Details - Added Analyze Dimensions selectors and methods to logsPage.js and tracesPage.js - Enhanced brush selection method with multiple fallback approaches - Tests are designed to pass even when brush selection doesn't trigger (verifies baseline state) - Added tab navigation methods for Volume, Latency, and Error tabs ## Test plan - [x] Run logs analyze dimensions tests: `npx playwright test playwright-tests/Logs/logsAnalyzeDimensions.spec.js` - [x] Run traces analyze dimensions tests: `npx playwright test playwright-tests/Traces/tracesAnalyzeDimensions.spec.js` - [x] All 16 tests pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
605e00768e |
test: E2E tests for pipeline traces, metrics, backfill & history (#10158)
## Summary Adds and fixes E2E Playwright tests for the Pipelines feature covering **traces**, **metrics**, **backfill jobs**, and **execution history** pages. ### Test Coverage | Spec File | Tests | Status | |-----------|-------|--------| | pipeline-traces.spec.js | 9 | All passing | | pipeline-metrics.spec.js | 10 | All passing | | pipeline-backfill.spec.js | 12 | All passing | | pipeline-history.spec.js | 8 | All passing | | **Total** | **39** | **39/39 passing** | ### Changes **Spec Files (4 files)** - Add unconditional assertions to all tests (fixes 3 critical conditional-only assertion issues) - Fix auth pattern in `pipeline-history.spec.js` from LoginPage to `storageState` - Refactor traces/metrics specs to use POM helper methods (reduces duplication) - Replace raw `afterEach` selectors with `dismissOpenDialogs()` POM method in all 4 files - Remove debug screenshot code from traces spec **Page Object — pipelinesPage.js** - Add POM helpers: `addSourceStreamNode()`, `addDestinationStreamNode()`, `savePipelineWithName()`, `cleanupPipelineByName()`, `dismissOpenDialogs()` - Fix function node offset (50,50 → 250,200) to prevent vue-flow handle overlap in edge creation - Convert `verifyMetricsDestinationStreamExists` / `verifyTracesDestinationStreamExists` to API-based verification (fixes false negatives from Streams page type filter defaulting to "logs") - Add `connectNodesViaMiddleNode` retry logic with Escape key between connections **CI Workflow** - Add `pipeline-backfill.spec.js` and `pipeline-history.spec.js` to `.github/workflows/playwright.yml` ### Quality Gate - Sentinel audit: **PASS** — 0 critical issues, 2 warnings (excessive `waitForTimeout` — non-blocking) - 0 raw locators in spec files, 0 `console.log`, 0 `expect.soft`, 0 `test.skip` - All 39 tests have unconditional assertions - Full POM compliance across all spec files ### Test Execution (Headless, 2026-02-18) | Spec File | Duration | |-----------|----------| | pipeline-backfill + history | 44.1s | | pipeline-traces | 4.5m | | pipeline-metrics | 5.4m | ## Test plan - [x] Run all 39 tests headless — 39/39 passing - [x] Sentinel audit — PASS verdict - [x] Consolidation check — no duplicates with existing pipeline tests - [ ] ENT workflow: Add 4 spec files to enterprise repo CI (separate PR needed) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
9ba7437ee6 | test: add automation coverage for raw query dashboard save (#10556) | ||
|
|
3b3cf20c8f | test: add test cases for copying dashboard legends and table cells (#10547) | ||
|
|
b55ac4a80a | test: add PromQL suggestions tests for dashboard query editor (#10513) | ||
|
|
bc80d409e6 |
fix: dashboard support custom type variables as parents in variable dependencies (#10481)
### **User description**
When using custom type variables (custom, constant, textbox) as parent
variables for query_values variables (e.g., using custom variables for
query_values), the dependent children weren't loading on initial page
load.
Root cause:
1. Custom type variables weren't marked as pending during initialization
2. Manager didn't recognize custom types as non-API variables that load
synchronously
3. finalizeVariableLoading wasn't notifying manager on completion
Fixes:
1. Mark custom/constant/textbox variables as pending so they load and
notify the manager
2. Expand non-API type detection to include custom type variables, not
just query_values with custom/all defaults
3. Add manager notification in finalizeVariableLoading, but only on
first load to avoid triggering children on dropdown reopens
4. Pass isInitialLoad to finalizePartialVariableLoading for proper child
loading
___
### **PR Type**
Bug fix
___
### **Description**
- Mark custom-type variables as pending
- Treat non-API parents as preloaded
- Notify manager only on first load
- Pass `isInitialLoad` to partial finalize
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Variables initialization"] --> B["Mark non-API variables pending"]
B --> C["VariablesValueSelector loads values"]
C --> D["Finalize partial loading (initial-load aware)"]
D --> E["Notify manager on first load"]
E --> F["Trigger dependent children loading"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>useVariablesManager.ts</strong><dd><code>Load non-API
variable types during initialization</code>
</dd></summary>
<hr>
web/src/composables/dashboard/useVariablesManager.ts
<ul><li>Mark
<code>custom</code>/<code>constant</code>/<code>textbox</code> as
pending<br> <li> Expand “non-API parent” detection logic<br> <li>
Include <code>dynamic_filters</code> as non-API parent<br> <li> Enable
child pending when all parents non-API</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10481/files#diff-95f6bdeb96f8454bdff53bb60cafe6851b0cda450591813dd4dfb2038c4f3d50">+27/-13</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>VariablesValueSelector.vue</strong><dd><code>Gate
manager notifications to first load</code>
</dd></summary>
<hr>
web/src/components/dashboards/VariablesValueSelector.vue
<ul><li>Pass <code>isInitialLoad</code> into
<code>finalizePartialVariableLoading</code><br> <li> Compute
<code>isFirstLoad</code> from partial-loaded state<br> <li> Notify
manager only on initial successful load<br> <li> Avoid triggering
children on dropdown reopen</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10481/files#diff-5c6e3bcb87cb64f25bf8157a541604b7a4904c1282acf662cab5d76a5be6bd56">+17/-2</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
|
||
|
|
0ee4c54849 |
test: add VRL support test cases for visualization (#10284)
### **PR Type**
Tests
___
### **Description**
- Add Playwright E2E tests for VRL visualization
- Validate table-only charts when VRL enabled
- Verify VRL fields persist and save correctly
- Include VRL spec in CI workflow runlist
___
### Diagram Walkthrough
```mermaid
flowchart LR
n1["Playwright VRL visualization spec"]
n2["Logs page (VRL toggle/editor)"]
n3["Visualize tab (run query)"]
n4["Chart type restrictions (table-only)"]
n5["Dashboard save/edit verification"]
n6["GitHub Actions Playwright workflow"]
n1 -- "drives UI checks" --> n2
n2 -- "executes queries with VRL" --> n3
n3 -- "enforces" --> n4
n3 -- "supports" --> n5
n6 -- "runs" --> n1
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>visualize-vrl.spec.js</strong><dd><code>Add VRL
visualization end-to-end test suite</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Dashboards/visualize-vrl.spec.js
<ul><li>Add helper to enable VRL editor toggle<br> <li> Add P1 tests for
VRL editor presence<br> <li> Validate table-only chart restriction with
VRL<br> <li> Verify VRL persistence, dashboard save, and table data</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10284/files#diff-7244cc63aab47869aba30238f88a410504df6de19bed548e495e5de9f166f740">+789/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>Run VRL visualization
spec in CI</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
- Add `visualize-vrl.spec.js` to `run_files` list
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10284/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+1/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
53ba550623 |
fix: dashboard variables for child, set default value (#10406)
### **PR Type**
Bug fix, Tests
___
### **Description**
- Preserve custom/all defaults on resets
- Mark variables loaded, notify manager
- Pre-set defaults before query loading
- Add Playwright dependency-chain coverage
___
### Diagram Walkthrough
```mermaid
flowchart LR
parent["Parent variable changes"]
manager["Variables manager resets children"]
selector["VariablesValueSelector sync/default logic"]
defaults["Apply `all`/`custom` default value"]
notify["Notify manager partial loaded"]
children["Dependent children load correctly"]
tests["Playwright chain default tests"]
parent -- "triggers" --> manager
manager -- "clears child values" --> selector
selector -- "sets when configured" --> defaults
defaults -- "unblocks" --> notify
notify -- "enables" --> children
tests -- "verifies" --> children
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>VariablesValueSelector.vue</strong><dd><code>Keep
custom/all defaults during dependency resets</code>
</dd></summary>
<hr>
web/src/components/dashboards/VariablesValueSelector.vue
<ul><li>Detect <code>custom</code>/<code>all</code> default
configuration<br> <li> Set defaults when manager resets value<br> <li>
Mark variable partially loaded and ready<br> <li> Pre-apply defaults
before query load</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10406/files#diff-5c6e3bcb87cb64f25bf8157a541604b7a4904c1282acf662cab5d76a5be6bd56">+96/-7</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>dashboard-variables-scoped.js</strong><dd><code>Support
selecting all/custom default in UI</code>
</dd></summary>
<hr>
tests/ui-testing/pages/dashboardPages/dashboard-variables-scoped.js
<ul><li>Add <code>defaultValueType</code> and <code>customValues</code>
options<br> <li> Toggle default mode to <code>all</code> or
<code>custom</code><br> <li> Fill custom default values for
single/multi<br> <li> Keep legacy <code>defaultValue</code> path</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10406/files#diff-86abb9f90fabd982dedfdd9a21a052a47b6984edc7bd29a51ee104c8c473aec4">+43/-2</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>dashboard-variables-default-values-chain.spec.js</strong><dd><code>Add
dependency-chain default values Playwright suite</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Dashboards/dashboard-variables-default-values-chain.spec.js
<ul><li>Test <code>all</code> default survives parent change<br> <li>
Test <code>custom</code> defaults for single/multi<br> <li> Validate
grandchild load with parent defaults<br> <li> Cover full A→B→C→D
dependency chain</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10406/files#diff-2221c8f751dfff03ae4d77245c5b3b881a33c2ffb09e7b7db3052f5f7381bb22">+475/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>Run new dashboard
variables chain spec</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Include
<code>dashboard-variables-default-values-chain.spec.js</code> in run
list</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10406/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+1/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
ecaed3b89f |
feat: dashboard table chart pagination (#10285)
### **User description** Design at: https://github.com/openobserve/designs/blob/main/dashboards/table-chart-pagination/design.md ### **PR Type** Enhancement ___ ### **Description** - Add pagination flags to dashboard panels - Initialize pagination defaults in frontend - Extend backend PanelConfig with pagination ___ <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Configuration changes</strong></td><td><table> <tr> <td> <details> <summary><strong>useDashboardPanel.ts</strong><dd><code>Initialize pagination settings in panel</code> </dd></summary> <hr> web/src/composables/useDashboardPanel.ts <ul><li>Added <code>show_pagination</code> default false<br> <li> Added <code>rows_per_page</code> default 10</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+2/-0</a> </td> </tr> </table></td></tr><tr><td><strong>Enhancement</strong></td><td><table> <tr> <td> <details> <summary><strong>mod.rs</strong><dd><code>Extend PanelConfig with pagination fields</code> </dd></summary> <hr> src/config/src/meta/dashboards/v8/mod.rs <ul><li>Added <code>show_pagination</code> Option<bool> field<br> <li> Added <code>rows_per_page</code> Option<i64> field</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+4/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ ___ ### **PR Type** Enhancement, Tests ___ ### **Description** - Add table pagination config and defaults - Implement reusable table pagination controls - Wire pagination into SQL/PromQL tables - Add unit and Playwright coverage ___ ### Diagram Walkthrough ```mermaid flowchart LR cfgUI["ConfigPanel: pagination toggle + rows input"] panelDefaults["useDashboardPanel: default pagination config"] tableRenderer["TableRenderer: pagination state + bottom slot"] controls["TablePaginationControls: dropdown + nav + count"] promql["PromQLTableChart: legend footer + pagination controls"] schema["PanelSchemaRenderer: pass pagination props"] backend["Backend PanelConfig: persist pagination fields"] tests["Unit + Playwright tests"] cfgUI -- "writes config" --> panelDefaults panelDefaults -- "panel config values" --> schema schema -- "props showPagination/rowsPerPage" --> tableRenderer tableRenderer -- "renders" --> controls promql -- "uses slot scope" --> controls backend -- "stores config" --> panelDefaults tests -- "verifies behavior" --> tableRenderer ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>5 files</summary><table> <tr> <td><strong>PromQLTableChart.spec.ts</strong><dd><code>Add unit coverage for PromQL table pagination</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-9db7fe6fba32c64dabbf0dd05ec6df9a1ddfc89ff4774d0e627d657e016e7674">+551/-0</a> </td> </tr> <tr> <td><strong>TableRenderer.spec.ts</strong><dd><code>Add pagination behavior unit tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-550a0a669838c47473442a7d37407fead8b7cb2a05121880dd2c0522022c8c3f">+180/-0</a> </td> </tr> <tr> <td><strong>ConfigPanel.spec.ts</strong><dd><code>Test table pagination config UI</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-a4e717cd660ad6fa369629f8de524f4d57bf4f71b11d3244ce41b9ed9f0379d2">+203/-0</a> </td> </tr> <tr> <td><strong>useDashboardPanel.spec.ts</strong><dd><code>Assert default pagination config initialization</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-5dbd79fdde0cbbb7db569095fa062931286463da0b5e72b1fbe99f56116fa5e2">+24/-0</a> </td> </tr> <tr> <td><strong>dashboard-table-pagination.spec.js</strong><dd><code>Add E2E coverage for table pagination</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-ed0804a2639080ec5164324b8e7943b469204243b66b67d85ad8e91cf46bee85">+1180/-0</a></td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>8 files</summary><table> <tr> <td><strong>useDashboardPanel.ts</strong><dd><code>Initialize default table pagination config fields</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+2/-0</a> </td> </tr> <tr> <td><strong>constants.ts</strong><dd><code>Add default rows-per-page constant</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-a5e1b14a291a4b42368faa0160f555b19bdc1a542624d4f89ea6e3ed7c4a664d">+2/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Persist pagination fields in `PanelConfig`</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+4/-0</a> </td> </tr> <tr> <td><strong>TableRenderer.vue</strong><dd><code>Implement pagination state and default footer</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+89/-9</a> </td> </tr> <tr> <td><strong>PromQLTableChart.vue</strong><dd><code>Add pagination props and legend footer controls</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-9c39051461b6f7deae94e8847f91443c4c68541f52137a423bb54b6ab5cd3317">+29/-10</a> </td> </tr> <tr> <td><strong>TablePaginationControls.vue</strong><dd><code>New reusable pagination footer component</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-b5e9d5740f8c581bb17133e249e81174ea0842b4d46b5c06fa0efa2f336a15d7">+146/-0</a> </td> </tr> <tr> <td><strong>ConfigPanel.vue</strong><dd><code>Add pagination toggle and rows-per-page input</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+59/-0</a> </td> </tr> <tr> <td><strong>PanelSchemaRenderer.vue</strong><dd><code>Pass pagination props into `TableRenderer`</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+2/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>12 files</summary><table> <tr> <td><strong>tr.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818">+4/-1</a> </td> </tr> <tr> <td><strong>ja.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3">+4/-1</a> </td> </tr> <tr> <td><strong>de.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264">+4/-1</a> </td> </tr> <tr> <td><strong>fr.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2">+4/-1</a> </td> </tr> <tr> <td><strong>it.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d">+4/-1</a> </td> </tr> <tr> <td><strong>hi.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-1e7b52b5c4e762db2c923d0d3efb6d693702825ed3a1a112d3069f26b0d5f605">+4/-1</a> </td> </tr> <tr> <td><strong>ko.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48">+4/-1</a> </td> </tr> <tr> <td><strong>nl.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906">+4/-1</a> </td> </tr> <tr> <td><strong>es.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778">+4/-1</a> </td> </tr> <tr> <td><strong>pt.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815">+4/-1</a> </td> </tr> <tr> <td><strong>en.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+4/-1</a> </td> </tr> <tr> <td><strong>zh.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e">+4/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Configuration changes</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>playwright.yml</strong><dd><code>Add CI job entry for pagination tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+7/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech> Co-authored-by: ktx-akshay <akshay.patil@kiara.tech> Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech> |
||
|
|
e066619e09 |
test: overhaul dashboard variables E2E tests with Page Object Model and parallel execution stability (#10393)
### **User description** ## Summary Comprehensive rework of Dashboard Variables E2E test suite to improve stability for parallel execution and consolidate redundant tests. ### Test Stability Improvements - Add centralized selectors in `dashboard-selectors.js` for consistent element targeting - Implement enhanced retry mechanisms with exponential backoff in `wait-helpers.js` - Add proper `waitForDashboardUIStable()` and `waitForDataLoad()` patterns across page objects - Fix race conditions in parallel test execution with network idle waits ### Test Consolidation - Merge `dashboard-variables-null-handling.spec.js` into `dashboard-variables-dependency.spec.js` (single test moved) - Remove 2 redundant tests from `dashboard-variables-global.spec.js` (duplicate coverage with setting.spec.js) - **Result: 71 → 69 tests** while maintaining full coverage ### CI/CD Improvements - Consolidate **5 dashboard variables shards into 1** "Dashboards-Variables" shard in `playwright.yml` - Group all dashboard variable specs in single workflow job for efficiency ### Files Modified | Change | File | |--------|------| | ✅ Add | `dashboard-selectors.js` (centralized selectors) | | ❌ Delete | `dashboard-variables-null-handling.spec.js` (merged) | | ✏️ Modify | All dashboard variable spec files for stability | | ✏️ Modify | `playwright.yml` workflow for shard consolidation | | ✏️ Modify | `dashboard-create.js`, `dashCreation.js` (retry patterns) | | ✏️ Modify | `wait-helpers.js` (enhanced wait utilities) | ## Test plan - [ ] Run Dashboard Variables tests locally with `npx playwright test --grep "Dashboard Variables"` - [ ] Verify all 69 tests pass in parallel execution mode - [ ] Verify CI workflow runs correctly with consolidated shard ___ ### **PR Type** Tests, Enhancement ___ ### **Description** - Centralize dashboard selectors for E2E. - Add safe wait helpers everywhere. - Add dependency null-handling regression test. - Improve page-object retries for stability. ___ ### Diagram Walkthrough ```mermaid flowchart LR specs["Dashboard variables specs"] selectors["`dashboard-selectors.js` selector registry"] waits["Safe wait helpers"] pageobjs["Page objects retries"] ci["Playwright CI shard/workflow"] specs -- "replace raw selectors" --> selectors specs -- "replace waitForLoadState" --> waits waits -- "reduce flake in parallel" --> specs pageobjs -- "retry editor/inspector opens" --> specs specs -- "run reliably in CI" --> ci ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>8 files</summary><table> <tr> <td><strong>dashboard-variables-creation-scopes.spec.js</strong><dd><code>Adopt centralized selectors and safe waits</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-878775b83972fb1f04f1d4df7bc0bbec364fbcbacda6fbd081423673e4ea4b05">+207/-201</a></td> </tr> <tr> <td><strong>dashboard-variables-dependency.spec.js</strong><dd><code>Stabilize dependency tests and add null-case</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-ad5a7685fbf4477a81657949b7dd4aa4ada6e66a4576d0c61bacb388095d0b52">+247/-123</a></td> </tr> <tr> <td><strong>dashboard-variables-tab-level.spec.js</strong><dd><code>Refactor spec to shared selectors/waits</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-b1f20469fa2e12dc68ede8ae381f60e2717489947ca693dd8a519fc03f195d48">+150/-148</a></td> </tr> <tr> <td><strong>dashboard-variables-panel-level.spec.js</strong><dd><code>Refactor spec to shared selectors/waits</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-a4f3068a8d69478dafa0bc1bfb7f51cf98a6980ecc62ae78ba46a617f8e227fd">+129/-120</a></td> </tr> <tr> <td><strong>dashboard-variables-url-sync.spec.js</strong><dd><code>Refactor spec to shared selectors/waits</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-709abba02dfd42b1be6d3838b162b544a2b97ba204dd179c37d462f0921ff14b">+126/-182</a></td> </tr> <tr> <td><strong>dashboard-variables-refresh.spec.js</strong><dd><code>Refactor spec to shared selectors/waits</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-8e82d40d2eda995a2915569d16456a9fd7d605017ed5868a28ee409e53646027">+130/-141</a></td> </tr> <tr> <td><strong>dashboard-variables-global.spec.js</strong><dd><code>Remove redundancy and stabilize global flows</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-f3750bde6fb0d471ec65d81b9d5a5a5b15d79ca900782959a0ff856a5156f5be">+106/-219</a></td> </tr> <tr> <td><strong>dashboard-variables-setting.spec.js</strong><dd><code>Align settings tests with new POM</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-1c6dd312b59d03b6cef1e15784451e5a5ffb3ed4682dec017e9834de8094fbdd">+1/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>8 files</summary><table> <tr> <td><strong>dashboard-selectors.js</strong><dd><code>Add shared dashboard selector registry</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-b7a318c5d62df2558c0afaa7b21dbaae415d2f43506209da80544992a0f0d19d">+283/-0</a> </td> </tr> <tr> <td><strong>dashboard-chart.js</strong><dd><code>Add panel editor readiness waits</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-573a312576fce62d8e14f2bbb5f9b7d9a552d746304dce3d79862edddd24de76">+17/-1</a> </td> </tr> <tr> <td><strong>dashboard-panel-edit.js</strong><dd><code>Retry query inspector open for flake</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-ea18ab21ebeaac575078abcbc4f986502578ec39e2c9cb86437c821d0dabc9b5">+16/-4</a> </td> </tr> <tr> <td><strong>dashboard-variables-scoped.js</strong><dd><code>Add helper waits and selector utilities</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-86abb9f90fabd982dedfdd9a21a052a47b6984edc7bd29a51ee104c8c473aec4">+366/-13</a></td> </tr> <tr> <td><strong>dashboard-settings.js</strong><dd><code>Harden settings open/close and variable tab</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-1a07f3f14dacb06180bc02437804d175886aeacda98f5b0ef507a274e5ddd485">+132/-32</a></td> </tr> <tr> <td><strong>dashboard-create.js</strong><dd><code>Improve dashboard creation waits for parallel</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-c3c5add2b934580a91a79bb580634b70e2376b0452113008a0911102db3863e2">+83/-11</a> </td> </tr> <tr> <td><strong>wait-helpers.js</strong><dd><code>Add safe wait wrappers and retries</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-fdf1e3fd5f38875694acd5e3f0a140ed89326ce8a2910f07b18d1004fd5d2165">+101/-4</a> </td> </tr> <tr> <td><strong>dashCreation.js</strong><dd><code>Add setup/cleanup helpers for dashboards</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-0f865c438e06691b660a9d4a2448c7c94e6f5172c6a0615eb2a905fa276db575">+91/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Configuration changes</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>playwright.yml</strong><dd><code>Consolidate dashboard variable shards in CI</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+3/-24</a> </td> </tr> </table></details></td></tr><tr><td><strong>Dependencies</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>package.json</strong><dd><code>Update UI-testing scripts/dependencies for E2E</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-a41ba7975823b7b2dc071285391f835fbefd33bfffeb5aa2fba3ae15425cc64f">+7/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>dashboard-variables-null-handling.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/10393/files#diff-e42ab503059a687ceb4fa2edeed0888a47591e0a61680c10448eaf68b4e6bbd8">+0/-152</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
e4f0040fee |
test: add PromQL query persistence tests for metrics (#10100)
### **PR Type**
Tests, Enhancement
___
### **Description**
- Add PromQL query persistence e2e suite
- Introduce Metrics query editor page object
- Improve tab switching, query entry, polling
- Run new spec in Playwright workflow
___
### Diagram Walkthrough
```mermaid
flowchart LR
spec["`metrics-promql-query-persistence.spec.js` (test suite)"]
pom["`metricsQueryEditorPage.js` (page object)"]
pm["`page-manager.js` (page registry)"]
gha["`.github/workflows/playwright.yml` (CI matrix)"]
spec -- "uses helpers" --> pom
pm -- "exposes" --> pom
gha -- "executes" --> spec
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>metricsQueryEditorPage.js</strong><dd><code>Add Metrics
query editor Page Object</code>
</dd></summary>
<hr>
tests/ui-testing/pages/metricsPages/metricsQueryEditorPage.js
<ul><li>Add <code>MetricsQueryEditorPage</code> for metrics editor
interactions<br> <li> Implement robust mode switching to PromQL
Custom<br> <li> Provide resilient query entry (Monaco API +
keyboard)<br> <li> Add tab management, polling, and debug
screenshots</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10100/files#diff-6f21fa6fca05591f7dabdedcaa62f188f9f04185ef924157c893cdd3e8e5c6a0">+481/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>metrics-promql-query-persistence.spec.js</strong><dd><code>Add
PromQL query persistence test suite</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Metrics/metrics-promql-query-persistence.spec.js
<ul><li>Add serial e2e suite covering tab query persistence<br> <li>
Validate auto-populated queries on stream selection<br> <li> Test
multi-tab isolation and rapid switching stress<br> <li> Use polling, Run
Query, and screenshots for stability</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10100/files#diff-3e8bacf0b1c46620d12216d1b14581b1b63fc683dbb7f0a89b039e0853f5d664">+447/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>page-manager.js</strong><dd><code>Register
MetricsQueryEditorPage in PageManager</code>
</dd></summary>
<hr>
tests/ui-testing/pages/page-manager.js
<ul><li>Import <code>MetricsQueryEditorPage</code> in page manager<br>
<li> Instantiate <code>this.metricsQueryEditorPage</code> for shared
use</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10100/files#diff-565eab8b3c767ae50c9d05e591621d14f66b81af84d6b5ea6efe136c1c3933df">+2/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>Include new metrics
persistence spec in CI</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Add <code>metrics-promql-query-persistence.spec.js</code> to
workflow test list</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10100/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+1/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
d729d9cfbe |
test: e2e testcase for bug #9754 (#10365)
### **PR Type** Tests, Enhancement ___ ### **Description** - Add Playwright regression coverage for bug #9754 - Ingest edge-case logs with unclosed delimiters - Assert table, highlighting, and detail sidebar - Extend LogsPage with helper accessors ___ ### Diagram Walkthrough ```mermaid flowchart LR A["Playwright regression spec: bug #9754"] B["Ingest edge-case log messages"] C["Logs UI assertions (table/search/highlighting)"] D["Log detail sidebar JSON assertions"] E["LogsPage page-object helpers"] F["Stream cleanup via API"] A -- "sends test data" --> B A -- "verifies rendering" --> C A -- "verifies sidebar content" --> D A -- "uses helper methods" --> E A -- "deletes test stream" --> F ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table> <tr> <td> <details> <summary><strong>logsPage.js</strong><dd><code>Add helpers for log detail and highlights</code> </dd></summary> <hr> tests/ui-testing/pages/logsPages/logsPage.js <ul><li>Add <code>getLogDetailJsonContentText()</code> for JSON detail text<br> <li> Add <code>getHighlightedElementsCount()</code> to count <code>.log-highlighted</code><br> <li> Log helper actions via <code>testLogger</code></ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10365/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59">+20/-0</a> </td> </tr> </table></td></tr><tr><td><strong>Tests</strong></td><td><table> <tr> <td> <details> <summary><strong>logs-9754.spec.js</strong><dd><code>Add regression suite for logs highlighting bug</code> </dd></summary> <hr> tests/ui-testing/playwright-tests/RegressionSet/logs-9754.spec.js <ul><li>Add serial Playwright suite targeting bug #9754<br> <li> Ingest logs with unclosed brackets/quotes/ANSI sequences<br> <li> Assert no character loss in table and highlighting<br> <li> Validate log detail sidebar JSON and cleanup stream</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10365/files#diff-169784bd6a86705694f5cdda656a31e6ff390cf1f76cfb9aec8ff4a652ae5f31">+403/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
4fef360f1d |
test: add table chart column ordering test cases for promql (#10243)
### **PR Type**
Tests
___
### **Description**
- Add comprehensive Column Order tests for PromQL table chart
- Covers P0 critical, P1 functional, P2 edge-case scenarios
- Implement helpers for chart setup and column extraction
- Update CI workflow to include new spec
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Metrics Page"] --> B["Table Chart Setup"]
B --> C["Column Order Button"]
C --> D["Column Order Popup"]
D --> E["Reorder & Persist Tests"]
E --> F["Edge Cases Validation"]
G["CI Workflow"] --> H["Run new spec"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>metrics-table-column-order.spec.js</strong><dd><code>Comprehensive
column order tests</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Metrics/metrics-table-column-order.spec.js
<ul><li>Added new test suite for column ordering feature<br> <li>
Defined setupTableChart and extractColumnName helpers<br> <li> Verified
button visibility, popup UI, and drag handles<br> <li> Tested reorder,
save, cancel, and persistence flows</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10243/files#diff-0c32a7a918a4ff834070d063782fe263da7a4891230229579156f436474f0024">+1104/-0</a></td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>Include new spec in CI
workflow</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Added new spec to <code>run_files</code> list<br> <li> Ensures
CI runs metrics-table-column-order tests</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10243/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+1/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|