Commit Graph
319 Commits
Author SHA1 Message Date
Neha PandClaude 24b024a502 test: automation for bugs fixes (#9678)
### **User description**
## Summary
Refactored the logs regression test suite to follow the Page Object
Model (POM) pattern by centralizing all locators in the logsPage.js POM
file and updating test files to use these locators instead of hardcoded
selectors.


## Testing
All 10 regression tests passing:
- ✅ Absolute time error validation
- ✅ Stream switching with saved views (#9388)
- ✅ Field values with SUBQUERY/CTE/GROUP BY (#7751)
- ✅ Pagination count after search (#8868)
- ✅ Alert graph color display (#9311)
- ✅ Histogram query from history (#8180)
- ✅ Timestamp field in quick mode (#8180)
- ✅ Source field display logic (#8180)

Test execution: 10/10 passed in 7.2 minutes


___

### **PR Type**
Tests, Enhancement


___

### **Description**
- Refactor logs regression tests to Page Object Model
  - Centralize all locators in `logsPage.js`

- Add new POM locators for regression tests

- Add regression tests for bug #7751 (subquery, CTE, GROUP BY)

- Add regression tests for bug #8868 (pagination count update)

- Add regression test for bug #9311 (alert graph color)

- Add regression tests for bug #8180 (histogram, timestamp, source
field)


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["logsPage.js: New POM locators"] --> B["logs-regression.spec.js: Bug regression tests"]
```



<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 POM locators for
regression tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/pages/logsPages/logsPage.js

<ul><li>Added alert-related selectors (<code>alertsMenuItem</code>,
<code>alertGraph</code>, <code>alertChart</code>)<br> <li> Added query
history selectors (<code>queryHistoryButton</code>,
<code>historyPanel</code>)<br> <li> Added table and pagination selectors
(<code>tableBottom</code>, <code>tableBodyRow</code>,
<br><code>tableHeaders</code>)<br> <li> Added dynamic field selector
functions (<code>fieldExpandButton</code>,
<br><code>subfieldAddButton</code>, etc.)<br> <li> Added streams search,
error indicators, timestamp detail selectors</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9678/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59">+29/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>logs-regression.spec.js</strong><dd><code>Add
regression tests for major log search bugs</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/RegressionSet/logs-regression.spec.js

<ul><li>Added tests for bug #7751: subquery, CTE, GROUP BY field
expansion<br> <li> Added test for bug #8868: pagination count after
filtering<br> <li> Added test for bug #9311: full alert graph color
rendering<br> <li> Added tests for bug #8180: histogram query, timestamp
in quick mode, <br>source field logic</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9678/files#diff-99da86ede55fa5f2e3d3fbef897ba7aaa5a7db702a0135f66ac4c888fc7311b6">+538/-0</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-19 16:11:51 +05:30
Shrinath RaoandClaude Opus 4.5 660dfbabaf test: Dashboard Joins and Nested Functions e2e tests (#9685)
### **PR Type**
Tests, Enhancement

---

### **Description**

This PR adds comprehensive E2E tests for Dashboard Joins and Dashboard
Functions features, along with supporting page object helpers.

#### Key Changes:
- **Dashboard Joins Tests**: 8 consolidated multi-panel tests covering
INNER/LEFT/RIGHT joins, conditions, aggregations, field selection,
filters, dynamic operations, persistence, and error handling
- **Dashboard Functions Tests**: 2 multi-panel tests covering basic
(COUNT, COUNT-DISTINCT, AVG, SUM) and advanced (Multiple Y-axis, MIN,
MAX) aggregation functions
- **New `JoinHelper` class**: Provides methods for configuring join
types, streams, conditions, and operators
- **Enhanced `ChartTypeSelector`**: Added Y-axis function configuration
methods and stream selection with retry mechanism
- **Org Context Fix**: Navigate directly to dashboards with
`org_identifier` parameter to ensure correct API context

---

### **Test Coverage**

#### Dashboard Joins Tests (`dashboard-join.spec.js`) - 8 Tests

| # | Test Name | Panels | Coverage | Tags |
|---|-----------|--------|----------|------|
| 1 | Core Join Types - INNER, LEFT, RIGHT | 3 | INNER JOIN (11 rows),
LEFT JOIN (12 rows), RIGHT JOIN (5 rows) | `@dashboard-joins`, `@smoke`,
`@P0` |
| 2 | Join Conditions & Multi-Join | 3 | Multiple AND conditions, 3-way
join, OR conditions | `@dashboard-joins`, `@dashboard-joins-conditions`,
`@P1` |
| 3 | Aggregation Functions | 4 | Basic aggregation, SUM-like grouping,
AVG-like grouping, COUNT grouping | `@dashboard-joins`,
`@dashboard-joins-aggregation`, `@P1` |
| 4 | Field Selection | 4 | response_time_ms, country, bytes, request_id
fields | `@dashboard-joins`, `@dashboard-joins-fields`, `@P2` |
| 5 | Filters & Edge Cases | 6 | Join with filter, LEFT JOIN with NULLs,
session duration, not-equal (!=), greater-than (>), self-join |
`@dashboard-joins`, `@dashboard-joins-filters`, `@P2` |
| 6 | Dynamic Join Operations & UI Validation | 1 | Add/remove joins,
change join types, modify conditions | `@dashboard-joins`,
`@dashboard-joins-dynamic`, `@P2` |
| 7 | Persistence - Save and Reload Dashboard | 1 | Save panel, navigate
away, reload, verify join config persisted | `@dashboard-joins`,
`@dashboard-joins-persistence`, `@P2` |
| 8 | Error Handling & Recovery | 1 | Incomplete join handling, recovery
from invalid state | `@dashboard-joins`, `@dashboard-joins-errors`,
`@P3` |

#### Dashboard Functions Tests (`dashboard-nested-functions.spec.js`) -
2 Tests

| # | Test Name | Panels | Coverage | Tags |
|---|-----------|--------|----------|------|
| 1 | Basic Aggregation Functions | 4 | COUNT, COUNT-DISTINCT, AVG, SUM
functions | `@dashboard-functions`, `@dashboard-functions-basic`, `@P1`
|
| 2 | Advanced Aggregation Functions | 2 | Multiple Y-axis (COUNT + SUM
+ AVG), MIN + MAX functions | `@dashboard-functions`,
`@dashboard-functions-advanced`, `@P2` |

---

### **New Page Object Methods**

#### `JoinHelper` (`dashboard-joins.js`)
| Method | Description |
|--------|-------------|
| `addJoin()` | Open add join popup |
| `selectJoinType(type)` | Select INNER/LEFT/RIGHT/FULL/CROSS join |
| `selectJoinStream(streamName)` | Select stream to join with |
| `selectLeftField(field)` | Select left side join field |
| `selectRightField(field)` | Select right side join field |
| `selectOperator(operator)` | Select =, !=, <, >, <=, >= operator |
| `addCondition()` | Add another join condition |
| `saveJoin()` | Save join configuration |
| `removeJoin(index)` | Remove a join by index |
| `verifyJoinChipVisible(stream, index)` | Verify join chip displays
correctly |

#### `ChartTypeSelector` (`dashboard-chart.js`)
| Method | Description |
|--------|-------------|
| `selectStream(name, retries)` | Select stream with retry mechanism |
| `configureYAxisFunction(alias, func)` | Configure Y-axis aggregation
function |
| `verifyYAxisLabel(alias, func)` | Verify Y-axis label shows function |
| `openYAxisFunctionPopup(alias)` | Open Y-axis configuration popup |
| `selectFunction(name)` | Select aggregation function from dropdown |

#### `DashboardPanelActions` (`dashboard-panel-actions.js`)
| Method | Description |
|--------|-------------|
| `addNextPanel()` | Add another panel after saving |
| `getTableRowCount()` | Get count of data rows in table |
| `verifyChartRenders(expect)` | Verify chart/table renders |
| `savePanel()` | Save panel with networkidle wait |

---

### **Test Data**

Test data files located in `test-data/` directory:
- `joins/test_app_users.json` - 5 user records
- `joins/test_web_requests.json` - 12 web request records  
- `joins/test_sessions.json` - 8 session records
- `dashboard-functions/test_records.json` - 7 records with user_name and
score fields

---

### **Fixes Included**

| Issue | Fix |
|-------|-----|
| Org context mismatch on remote environments | Navigate to
`/web/dashboards?org_identifier=${ORGNAME}` |
| Streams not appearing in dropdown | Page reload after dashboard
creation to refresh stream list |
| Save panel race condition | Added `waitForLoadState("networkidle")`
after save click |
| Stream selection timing | Retry mechanism with debug logging |
| Test 5 timeout | Increased to 5 minutes for 6-panel test |

---

<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><details><summary>5
files</summary><table>
<tr>
<td><strong>dashboard-chart.js</strong><dd><code>Enhance stream
selection and add Y-axis function methods</code>&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-573a312576fce62d8e14f2bbb5f9b7d9a552d746304dce3d79862edddd24de76">+106/-14</a></td>
</tr>
<tr>
<td><strong>dashboard-create.js</strong><dd><code>Add smart panel
addition for empty and existing dashboards</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-c3c5add2b934580a91a79bb580634b70e2376b0452113008a0911102db3863e2">+25/-1</a>&nbsp;
&nbsp; </td>
</tr>
<tr>
<td><strong>dashboard-joins.js</strong><dd><code>New JoinHelper for
configuring and validating joins</code>&nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-f88eb0cf951ec45e97befde5c83a2c187bb46db3f6cb27bc0cb88d48c5f45b78">+351/-0</a>&nbsp;
</td>
</tr>
<tr>
<td><strong>dashboard-panel-actions.js</strong><dd><code>Add next-panel,
row count and chart render verifications</code>&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-d29713fdcc11cbc93bda29da5261da389226cd718e4292a1c2cd96629f573a80">+76/-1</a>&nbsp;
&nbsp; </td>
</tr>
<tr>
<td><strong>global-setup.js</strong><dd><code>Include org_identifier in
login navigation URL</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-06323dad7214f86b41b62e121e716eeea0054bc4d950c6bcf4a0efe53894acc8">+4/-3</a>&nbsp;
&nbsp; &nbsp; </td>
</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>dashboard-join.spec.js</strong><dd><code>Consolidated
dashboard joins feature E2E tests</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-552f4ba6f199ade20dbab2c54b8573422fd644587ed1575262a7aa34f8041174">+1160/-0</a></td>
</tr>
<tr>

<td><strong>dashboard-nested-functions.spec.js</strong><dd><code>Multi-panel
dashboard functions E2E tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-d2a9855da60f5fd3820832815036c368a680e2885033ad1a7a2bcbd060e2a750">+372/-0</a>&nbsp;
</td>
</tr>
<tr>
<td><strong>test_records.json</strong><dd><code>Add test data for
dashboard functions tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-3a09d97f4091ae2f4dc97ebc14199c5d94efb878a6ebfa7da686cad5450ddda0">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>
</tr>
<tr>
<td><strong>test_app_users.json</strong><dd><code>Add user data for
dashboard joins tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-7c5af3decd88c4f9031fd83282844872f4a0a65eea2b51a46aac849aa4a5c129">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>
</tr>
<tr>
<td><strong>test_sessions.json</strong><dd><code>Add session data for
dashboard joins tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-836e072600882ffa58662a4867ac17d2ce799dd338daac585203ccaa01275e3c">+10/-0</a>&nbsp;
&nbsp; </td>
</tr>
<tr>
<td><strong>test_web_requests.json</strong><dd><code>Add web request
data for dashboard joins tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-1c4b00b1929e9a01de1cb8129161c49dc1563a5dde1c4b5e770a307245155382">+14/-0</a>&nbsp;
&nbsp; </td>
</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>cleanup.spec.js</strong><dd><code>Extend cleanup regex for
join and function test streams</code>&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-c214275a512fa285a7e4f2ab61dfcb42d71a0436b0e4241f94d7b45693587983">+8/-1</a>&nbsp;
&nbsp; &nbsp; </td>
</tr>
</table></details></td></tr></tbody></table>

</details>

---

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 07:30:12 +05:30
ktx-akshayandktx-abhay e96db6332b test(dashboard): fix flaky tests in deployed environment (#9511)
### **User description**
…riables


___

### **PR Type**
Tests, Enhancement


___

### **Description**
- Refine chart-render wait logic with class checks

- Integrate values-stream helper in variable dropdown

- Standardize relative time ranges to 30m

- Improve streaming test with API wait loops


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Formatting</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>apiCleanup.js</strong><dd><code>Remove extraneous newline at
EOF</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-537fe76c0d8e26e81c5f77c83bd0ee35daaa973822105c809bf83171a26b33c5">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>cleanup.spec.js</strong><dd><code>Remove trailing blank
line</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-c214275a512fa285a7e4f2ab61dfcb42d71a0436b0e4241f94d7b45693587983">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>4
files</summary><table>
<tr>
<td><strong>dashboard-panel-actions.js</strong><dd><code>Refine
waitForChartToRender class checks</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-d29713fdcc11cbc93bda29da5261da389226cd718e4292a1c2cd96629f573a80">+27/-10</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>dashboard-variables.js</strong><dd><code>Add stream helper
and input typing delay</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-67d38d39bb67f4a0cbfa473ee81ad50b1fffebc40c635417e58905f3c865a6e2">+18/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>dashboard-streaming.spec.js</strong><dd><code>Add API wait
loops in streaming test</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-92f44296937f53cb448371d1c61510c8c910fbecab83b02b8e89490d5832be19">+36/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>streaming-helpers.js</strong><dd><code>Implement
waitForValuesStreamComplete utility</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-ba793998d7c077815ee18543001a519b7d45a9236990b60d256124a4b30d48cb">+65/-1</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>dashboard-geoMap.spec.js</strong><dd><code>Update time range
to 30m</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-6ae8394cd6b915e6d55a179cf6c7dc32992b8ebbd5d9aac177c0cbd1b9f351b3">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>dashboard-html-chart.spec.js</strong><dd><code>Set html
chart time to 30m</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-02c503aa87193168f5aa83c8105c376ea0c4dc45e6c7bd6f255b693bf7ebc462">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>dashboard-multi-y-axis.spec.js</strong><dd><code>Update
multi-y-axis time to 30m</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-e90516a105c0b17c8e04c18e2b67ac10af213dbdd208fa4414cdcb7e377e6ee5">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>dashboard-transpose.spec.js</strong><dd><code>Change
transpose time range to 30m</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-da631007cea76a4bc59e4acd1195b59ae4131cd5208d21a9c1f94d3913911dc4">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>dashboard.spec.js</strong><dd><code>Adjust gauge and table
time ranges to 15m</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-d0fa0042783dc109334b05266edce228bad97adcb568dd1e447920596238e9b4">+5/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>dashboard2.spec.js</strong><dd><code>Standardize dashboard2
time to 30m</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-8c9189e9e3950fff987c45ee8116d89f15f8fdec5baad209bef6f5858f3b3045">+7/-7</a>&nbsp;
&nbsp; &nbsp; </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>Fix typo in run_files
list</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9511/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
2025-12-17 15:23:43 +05:30
Neha PandClaude cc3a6110ae test: add ingestion config UI tests (#9643)
### **User description**
- Added IngestionConfigPage POM with 20+ methods for page interactions
- Created 20+ comprehensive tests for ingestion configuration (3 P0, 8
P1, 1 P2)
- Tests cover: Navigation, Copy functionality, Configuration content,
Search
- Fixed all hardcoded waitForTimeout() calls with element-based waits
- Fixed search test selector to use .data-sources-recommended-tabs
.q-tab
- All tests passing (46.3s execution time)


___

### **PR Type**
Tests, Enhancement


___

### **Description**
- Added IngestionConfigPage POM for ingestion interactions

- Introduced comprehensive ingestion configuration tests

- Updated PageManager to include new POM

- Tests cover navigation, copy, content, search


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["PageManager"]
  B["IngestionConfigPage POM"]
  C["Ingestion config tests"]
  A -- "imports" --> B
  C -- "uses" --> A
```



<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>ingestionConfigPage.js</strong><dd><code>Implement
ingestion config page object</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/pages/generalPages/ingestionConfigPage.js

<ul><li>Created <code>IngestionConfigPage</code> class<br> <li> Defined
selectors for navigation, tabs, copy, search<br> <li> Implemented
navigation, copy, search, assertion methods<br> <li> Replaced hardcoded
waits with element-based waits</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9643/files#diff-22a47625a9849c4d6b6a0944d864db20d03453666f9cbfaaeb2cf5b57e00d5c5">+147/-0</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>page-manager.js</strong><dd><code>Integrate ingestion
config POM</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

tests/ui-testing/pages/page-manager.js

<ul><li>Imported <code>IngestionConfigPage</code><br> <li> Added
<code>ingestionConfigPage</code> to <code>PageManager</code>
constructor</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9643/files#diff-565eab8b3c767ae50c9d05e591621d14f66b81af84d6b5ea6efe136c1c3933df">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>ingestion-config.spec.js</strong><dd><code>Add
ingestion configuration tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

tests/ui-testing/playwright-tests/Ingestion/ingestion-config.spec.js

<ul><li>Added navigation tests for recommended/custom pages<br> <li>
Added copy functionality tests for Fluentd and Prometheus<br> <li> Added
configuration content validation tests<br> <li> Added recommended page
search and filter test</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9643/files#diff-35352597cf8f8ded17cd9c0abac4efb41cb255a1f69f110129a1b0427b4c8870">+159/-0</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-16 17:51:24 +05:30
Neha P 13f5fa239a test: add Playwright tests for theme management (#9636) 2025-12-15 21:51:19 +05:30
Shrinath Rao e0d23c42a7 fix(e2e): resolve SDR test failures with test isolation and retry logic (#9632)
## Summary
- Add unique testRunId to pattern and stream names for test isolation
during parallel execution
- Add retry logic to `checkPatternExists` for backend indexing delays (3
attempts with 2s wait)
- Add search box filtering in `selectStream` for reliable stream
selection in long lists
- Add retry logic for Stream Detail button in stream association page
- Fix ingestion retry with exponential backoff for "stream being
deleted" errors
- Update regexPatternManagement test with unique pattern names to avoid
conflicts

## Test plan
- [x] All 23 SDR tests pass reliably in parallel execution
- [x] Verified tests pass when run individually and as a suite
- [x] No regressions in other test suites
2025-12-15 15:55:46 +05:30
Neha PandClaude 138808f6a7 test: add regression tests for bugs fixes (#9630)
…#9308, #9193, #9117)

Added comprehensive E2E regression test suite for critical UI bugs:

P0 Tests:
- #9337: Query expand icon not working after stream explorer navigation
- #9388: Stream switching shows wrong table fields (BLOCKER)

P1 Tests:
- #9455-1: Download empty results notification (CSV + JSON)
- #9455-2: Download validation without stream selection
- #9308: OpenAPI button redirect from Help menu
- #9193: Enrichment table color contrast in light mode
- #9117: SQL mode conversion with pipe operators

Test Results: 7/7 passing (100%)
- Follows OpenObserve test patterns and page object model
- Proper tagging (@P0/@P1, feature tags, @regressionBugs)
- Comprehensive logging with testLogger
- All tests run independently in parallel

Files:
- tests/ui-testing/playwright-tests/RegressionSet/ui-regression.spec.js

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-13 19:29:38 +05:30
Shrinath Rao 1acd977f31 test: add share link E2E tests for logs page (#9619)
## Summary
- Add 10 comprehensive E2E tests for the share link feature on the logs
page
- Add clipboard permissions to playwright config for share link
functionality
- Add share link page object methods to logsPage.js with Firefox
compatibility fixes

## Test Coverage
| Priority | Tests | Coverage |
|----------|-------|----------|
| P0 (Smoke) | 2 | Button visibility, success notification, stream &
time preservation |
| P1 (Functional) | 4 | SQL mode, histogram toggle, complete state,
loading state |
| P2 (Edge Cases) | 4 | No stream, multiple clicks, SQL query,
redirect/org/consistency |

## Changes
- `tests/ui-testing/playwright-tests/Logs/shareLink.spec.js` - New test
file with 10 tests
- `tests/ui-testing/playwright.config.js` - Added clipboard permissions
- `tests/ui-testing/pages/logsPages/logsPage.js` - Added share link
methods and Firefox fixes

## Test Plan
- [x] All 10 tests pass locally (1.5 minutes runtime with parallel
execution)
- [ ] Tests pass in CI pipeline
2025-12-12 15:44:57 +05:30
Shrinath Rao 52974bd456 test: fixed auto trigger of release label applier (#9592) 2025-12-11 06:57:09 +05:30
Shrinath Rao b2f9b4550a ci: add workflow to auto-label milestone issues on release (#9538)
## Summary
Adds a new GitHub Actions workflow that automatically applies release
version labels to milestone issues when a release is published.

## Changes
- New workflow: `.github/workflows/release-label-applier.yml`
- Triggers automatically after the Release workflow completes
successfully
- Can also be manually triggered via workflow_dispatch with a specific
release tag

## Behavior
When a release is created (e.g., `v0.30.0-rc1`):
1. Identifies the corresponding milestone (e.g., `v0.30.0`)
2. Finds all closed issues or issues with
`Needs-Testing`/`Testing-InProgress` labels in that milestone
3. Applies the release tag as a label to those issues
4. Includes deduplication logic to prevent applying duplicate labels

This helps track which specific release version an issue was shipped in,
making it easier to identify what needs testing in each release.

## Permissions
- `issues: write` - to add labels
- `contents: read` - to checkout repository

## Test Plan
- [ ] Workflow should trigger automatically on release completion
- [ ] Manual trigger should work with provided release tag
- [ ] Labels should be applied only to eligible issues
- [ ] Duplicate labels should be prevented
2025-12-09 19:34:07 +05:30
mmosarafO2andCopilot Autofix powered by AI 6f19b8c038 ci: check design comment (#9524)
check design comment

---------

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-12-09 18:09:36 +05:30
Shrinath Rao 6ae38d5ce2 test(e2e): refactor pipeline condition tests and fix data ingestion timeout (#9528)
## Summary
Refactored pipeline condition tests into 2 new spec files for better
organization and maintainability, fixed data ingestion timeout issue,
and added comprehensive test coverage for pipeline conditions.

## Changes
- Refactored pipeline condition tests into 2 new spec files for better
organization
- Added 14 new comprehensive test cases (7 UI-based + 7 API-based
validation tests)
- Fixed beforeEach timeout issue by reducing data ingestion from 3,800+
to 10 records per stream
- Added cleanup patterns for `e2e_conditions_*` streams to prevent data
accumulation
- Updated apiCleanup.js to include 7 new stream names in pipeline
cleanup
- Removed outdated comments referencing conditional wait logic
- Added page object methods for condition testing in pipelinesPage.js,
logsPage.js, and streamsPage.js

## Test Coverage

### pipeline-conditions.spec.js (7 tests - all passing ✅)
- Basic condition operations with multiple operators (=, !=, Contains,
NotContains, >=)
- Condition groups, nesting, and reordering
- Field validation and error messages
- Complex operator precedence (A OR B AND C)
- Multiple conditions (A, B, C, D)
- Condition node deletion
- Comparison operators validation

### pipeline-conditions-validation.spec.js (7 tests - API-based)
- Operator precedence validation
- Nested groups with AND/OR logic
- Numeric comparisons
- String operators (case-insensitive Contains)

## Performance
- Reduced test execution time from 180s timeout to ~4.6 minutes for full
suite
- 100% pass rate for active UI tests (7/7)

## Files Changed
- `.github/workflows/playwright.yml` - Updated test configuration
- `tests/test-data/data_100.json` - Added test data for validation tests
- `tests/test-data/sample_pipeline_template.json` - Added pipeline
template
- `tests/ui-testing/pages/apiCleanup.js` - Added stream cleanup patterns
- `tests/ui-testing/pages/pipelinesPages/pipelinesPage.js` - Added
condition testing methods
- `tests/ui-testing/pages/logsPages/logsPage.js` - Added data ingestion
helpers
- `tests/ui-testing/pages/streamsPages/streamsPage.js` - Added stream
management helpers
-
`tests/ui-testing/playwright-tests/Pipelines/pipeline-conditions.spec.js`
- Refactored UI tests
-
`tests/ui-testing/playwright-tests/Pipelines/pipeline-conditions-validation.spec.js`
- New API validation tests
- `tests/ui-testing/playwright-tests/cleanup.spec.js` - Added
e2e_conditions_* pattern

## Testing
All 7 UI-based tests passing with 100% pass rate.
2025-12-09 15:49:28 +05:30
9056a2c92d feat: revamp Conditions in alerts and pipelines (#9267)
Co-authored-by: Uddhav Dave <uddhav@MacBook-Pro.local>
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-12-08 11:36:56 +05:30
Shrinath Rao f2a1b06795 test: auto rerun tryout attempt 1 (#9471) 2025-12-04 15:09:03 +05:30
Shrinath Rao ffc265ceba test: added auto rerun step to e2e yml (#9466) 2025-12-04 13:14:43 +05:30
dependabot[bot] f7f3a0d271 chore(deps): bump actions/stale from 9 to 10 (#9425) 2025-12-04 11:57:30 +08:00
dependabot[bot] 86add2469b chore(deps): bump slackapi/slack-github-action from 1.25.0 to 2.1.1 (#9424) 2025-12-04 11:56:16 +08:00
Shrinath Rao 7c3ed151fe test: added saved view cleanup to cleanup spec file (#9451) 2025-12-03 21:14:46 +05:30
Shrinath Rao 9e3d950c7c test: reports test stabilisation for env (#9446) 2025-12-03 10:02:24 +05:30
Yashodhan JoshiandYashodhan Joshi e45b7708a9 ci: auto label and milestone (#9384)
See working run here
https://github.com/openobserve/openobserve/actions/runs/19761555623/job/56624451400

Also check the timeline items that mention gh actions bot added the
label and milestone to it.

This adds a CI which will automatically label every PR on approve and
add it to the lowest open milestone (ignoring backlog)
So if current open milestones are backlog, v0.20.0, v0.20.1 , it will
auto add this on approval to v0.20.0 and add `Needs-Testing` label.

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2025-12-02 16:03:24 +05:30
4ecc5509d5 test: Added Shard for Regression tests and logs spec file in it (#9394)
Co-authored-by: mmosarafO2 <mosraf@openobserve.ai>
Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
Co-authored-by: Sai Nikhil <nikhil@openobserve.ai>
2025-12-01 14:38:03 +05:30
mmosarafO2 51924fa063 ci: fix for github rate limit issue (#9399)
fix for github rate limit issue
2025-11-30 12:29:34 +05:30
Subhra264 0d956ebdde test: Add tests to directly validate db records (#9356)
pytest to directly access db, and validate test cases using db queries.
2025-11-28 17:20:10 +05:30
Shrinath Rao c51434f937 test: process improvements (#9336) 2025-11-27 11:45:32 +05:30
Subhra264 ef8c797b4c test: use base branch as before commit in case of force push (#9332)
In case the before commit is not found in the history (in case of force
push) inside the api testing ci job, it compares with the base branch
commit.
2025-11-27 10:31:49 +05:30
7f55832426 ci: added workflow to udpate the language conversion (#9282)
added workflow to udpate the language conversion

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
2025-11-26 16:30:24 +05:30
Bhargav 6dd1e7bab1 fix: Stale pr workflow v1 (#9298) 2025-11-26 15:03:08 +05:30
Shrinath Rao 80b1c0f1d8 test: updated bug issue template workflow (#9324) 2025-11-26 14:30:08 +05:30
44011fbebc feat: add organization-level alert deduplication with semantic field groups (#9209)
## Summary

Implements org-level alert deduplication with semantic field groups for
intelligent alert suppression and batched notifications. This feature
prevents alert storms by deduplicating alerts based on configurable
fingerprints and grouping related alerts together.

### Core Capabilities

- **Semantic Field Groups**: Map field name variations (`hostname`,
`host`, `node`) to canonical dimensions for consistent deduplication
across different data sources
- **Organization-Level Configuration**: Global deduplication settings
with cross-alert support to suppress alerts from different rules sharing
semantic dimensions
- **Alert Grouping & Batching**: Wait-and-collect logic with three send
strategies (`FirstWithCount`, `Summary`, `All`) for batched
notifications
- **Per-Alert Control**: Individual alert deduplication settings with
optional fingerprint field customization

### Features

**Deduplication Modes:**
- Per-alert exact matching using fingerprint-based TTL expiration
- Cross-alert semantic matching using org-defined dimension groups
- Configurable time windows (per-alert override or org-level default)

**Alert Grouping:**
- Batch alerts with same fingerprint before sending notifications
- Three strategies: first alert with count, summary with names, or all
details
- Configurable wait time (1-300 seconds) and max batch size (1-100
alerts)
- Background processor runs every 1 second for expired batches

**Semantic Field Groups:**
- Built-in presets for common fields (host, IP address, service)
- Kubernetes resource groups (cluster, namespace, pod, node, container)
- Field normalization support (lowercase + trim)
- Overlap handling with first-defined precedence

### Configuration Types

- `SemanticFieldGroup`: Field name equivalence definitions with
normalization
- `GlobalDeduplicationConfig`: Org-level settings with semantic groups
and cross-alert dedup
- `DeduplicationConfig`: Per-alert fingerprint fields and grouping
options

### API Endpoints

- `GET /{org_id}/alerts/deduplication/config` - Retrieve org-level dedup
config
- `POST /{org_id}/alerts/deduplication/config` - Set org-level dedup
config
- `DELETE /{org_id}/alerts/deduplication/config` - Delete org-level
dedup config

### Implementation Details

- Pure business logic algorithms in enterprise layer (fingerprinting,
matching, calculations)
- OSS service layer orchestrates database operations with enterprise
delegation
- Feature-gated with `#[cfg(feature = "enterprise")]` for
enterprise-only functionality
- Background job architecture for async batch processing
- Storage: Org config in KV DB at `/alert_config/{org_id}/deduplication`

### Architecture

```
Alert Triggered
     ↓
Query Evaluation
     ↓
Deduplication Check (fingerprint + TTL)
     ↓
Grouping Enabled? → Add to Batch → Wait/Collect → Send Grouped
     ↓ No
Send Individual Notification
```

---------

Co-authored-by: Ashish Kolhe <ashish.j.kolhe@gmail.com>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-11-26 12:09:10 +05:30
Shrinath Rao 1410182f6d test: updated to new bug template and archived old one (#9316) 2025-11-26 10:39:30 +05:30
Shrinath Rao f3afc8e296 test: reverted original bug report workflow and updates poc flow (#9305) 2025-11-26 08:46:49 +05:30
Shrinath Rao 404a588ae4 test: updated bug report issue template (#9302) 2025-11-25 22:04:55 +05:30
Bhargav 6fa2728a43 feat: Stale pr workflow (#9288) 2025-11-25 17:04:10 +05:30
ktx-akshayandShrinath Rao 2b5eafcb86 test(dashboard): improve stability of flaky tests (#9139)
…tests

---------

Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-11-19 14:51:45 +05:30
Simha G 6ca371ec99 fix: Concurrency control for file locking has multiple anti-concurrent design patterns in the way (#8523) 2025-11-17 20:35:43 +08:00
Neha P 9f2e8c87d5 test: index-type-testcases (#9115)
1. Verify stream detail access and index type options - Test stream
navigation and available configuration options
2. Verify validation error when selecting both index types - Test
business rule enforcement for conflicting field configurations
3. Verify index type clearing mechanism works - Test ability to clear
field index selections after validation errors
2025-11-14 19:00:35 +05:30
Shrinath Rao 12a8568bd1 test: test dino issue fix (#9095) 2025-11-13 17:41:48 +05:30
Neha PandShrinath Rao 4901605a2c test: e2e-cmd+enter tests (#9098)
1. Blank SQL Query Error - Verifies proper error message when cmd+enter
pressed with empty SQL query
2. Include/Exclude Terms Persistence - Ensures search terms remain
visible in log details after query execution
3. API Call Optimization - Validates cmd+enter makes exactly 1 search +
1 histogram call (no duplicates)
4. Editor Cursor Integrity - Confirms cmd+enter doesn't add unwanted
characters to Monaco editor

---------

Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-11-13 14:49:59 +05:30
Shrinath Rao a4dd576df4 test: unskipped 2 pipeline-core tests (#9085) 2025-11-13 07:30:32 +05:30
Subhra264andShrinath Rao 683bf89c7b test: Add tests for alerts and pipelines history (#9064)
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-11-12 17:48:12 +05:30
Shrinath Raoandpriyabrata-stack 8ea3c3240f test: updated sharding logic for test dino reporting (#9073)
Co-authored-by: priyabrata-stack <pryabrata@openobserve.ai>
2025-11-12 16:04:10 +05:30
Shrinath Rao 6b11b81d06 test: updated testDino workflow order (#9059) 2025-11-11 19:28:53 +05:30
Shrinath Rao e26c810ffb test: testdino retry failed tests flow optimisations (#9015) 2025-11-11 06:34:41 +05:30
udevandmmosarafO2 7d40316a73 chore: cancel older CI runs (#8982)
adds concurrency group and cancels CI runs from multiple commits

---------

Co-authored-by: mmosarafO2 <mosraf@openobserve.ai>
2025-11-07 12:38:03 +05:30
Shrinath Rao 87ae8953b1 test: updated testdino approach to work from github variables (#8987) 2025-11-06 20:11:48 +05:30
Simran Kumari 6830b2f0b3 ci: add workflow for logging FEAT/PERF merges to sheet (#8963) 2025-11-05 19:44:45 +05:30
Shrinath Rao f61b715a1e test: Cleanup Mechanism and ENV Runs for e2e tests (#8839)
### **PR Type**
Enhancement, Tests


___

### **Description**
- Add robust alerts cleanup utilities

- Improve UI flows and resiliency

- Support deployed env testing delays

- Add CI cleanup and health checks


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Playwright UI flows hardened"]
  API["APICleanup cascade (Alerts→Folders→Destinations→Templates)"]
  CI["CI workflow targets deployed env"]
  Delay["Configurable test step delay"]
  Data["Global ingestion more robust"]

  UI -- "uses" --> API
  CI -- "runs cleanup.spec" --> API
  CI -- "health checks + env vars" --> Data
  Delay -- "slows page ops" --> UI
  Data -- "ingest logs with parsing" --> UI
```



<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><details><summary>7
files</summary><table>
<tr>
<td><strong>alertDestinationsPage.js</strong><dd><code>Add search,
cascade-safe delete, bulk prefix cleanup</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-57e5c53b4ef998b3d8708149620ff94dcc46807927f1a3a9e9f28ed3ebe25b0a">+178/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>alertTemplatesPage.js</strong><dd><code>Add template search,
in-use handling, prefix cleanup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-f4ebd248b2140051e74dbbbd1aabe344f01c80704ce5857e9c28a04350e018f3">+177/-2</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>alertsPage.js</strong><dd><code>Harden alert actions, bulk
deletion, search across folders</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-79ee01d6d7f145f19207b93b87143b545a1188cfc6a82bc8c45fecfbf68f8a1d">+280/-9</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>apiCleanup.js</strong><dd><code>New API-based cascade
cleanup utility</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-537fe76c0d8e26e81c5f77c83bd0ee35daaa973822105c809bf83171a26b33c5">+399/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>page-manager.js</strong><dd><code>Wire APICleanup into
PageManager</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-565eab8b3c767ae50c9d05e591621d14f66b81af84d6b5ea6efe136c1c3933df">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>baseFixtures.js</strong><dd><code>Add configurable test step
delay hooks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-c4c5ee7fbb248d1ab14d3d4e33ffb9626f9aab74c9e0207fcfc08051c8c3c7ee">+46/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>global-setup.js</strong><dd><code>Harden login and ingestion
with diagnostics</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-06323dad7214f86b41b62e121e716eeea0054bc4d950c6bcf4a0efe53894acc8">+61/-22</a>&nbsp;
</td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>commonActions.js</strong><dd><code>Fix ingestion URLs to use
org variable</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-4d726dd2bdb34b2c90a31798ff49b6df5bc952bd049b7c38bebb18b6db0076e2">+4/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>4
files</summary><table>
<tr>
<td><strong>alerts-e2e-flow.spec.js</strong><dd><code>Pre-move folder
cleanup and stabilization</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-32972e38c1fe0e8bb887f9f254b3130916a36f96ea924f9987493d44efefeab9">+13/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>alerts-import.spec.js</strong><dd><code>Use dedicated
invalid import test data</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-62b6ec4818685eacc0a934d68aaadfd73b512ef4f4be25fcd5135b97c2844912">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>cleanup.spec.js</strong><dd><code>New pre-test API cleanup
spec</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-c214275a512fa285a7e4f2ab61dfcb42d71a0436b0e4241f94d7b45693587983">+29/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>invalid-alert.json</strong><dd><code>Add invalid alert
sample for import tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-c695f71048e9393a45d3e3e3e415696559fecf3ba85712e7c3f366092f53f424">+24/-0</a>&nbsp;
&nbsp; </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>Target deployed env; add
cleanup job and health checks</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+123/-65</a></td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-11-04 23:54:54 +05:30
Shrinath Rao 603d641b01 test: test dino upload flag added (#8945) 2025-11-04 12:23:28 +05:30
Yashodhan Joshi 2cf0d2dc29 ci: add complete sha in dispatch params (#8765) 2025-11-03 12:18:48 +08:00
+3 450da5349e feat: UI explain query (#8831)
### **PR Type**
Enhancement, Documentation


___

### **Description**
- Add query plan dialog with EXPLAIN/ANALYZE

- Parse, render plan tree with metrics

- Integrate Explain button in logs toolbar/menu

- Add i18n strings for new UI labels


___

### Diagram Walkthrough


```mermaid
flowchart LR
  SearchBar["Logs SearchBar (Explain button)"] -- "opens" --> Dialog["QueryPlanDialog (q-dialog)"]
  Dialog -- "calls" --> StreamingSearch["streaming_search.search()"]
  StreamingSearch -- "SSE data" --> Dialog
  Dialog -- "parse/format" --> Parser["queryPlanParser (parse tree + metrics)"]
  Dialog -- "render" --> Tree["QueryPlanTree/Node components"]
  Dialog -- "summary" --> MetricsCard["MetricsSummaryCard"]
  Dialog -- "i18n labels" --> I18n["en.json additions"]
```



<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><details><summary>7
files</summary><table>
<tr>
<td><strong>queryPlanParser.ts</strong><dd><code>Add parser and metrics
utilities for DataFusion plans</code>&nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-417957960e379b5c5b042e5eb14acb7dcabfb966c81fbd2965eea383d408add5">+319/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>QueryPlanDialog.vue</strong><dd><code>New dialog to fetch,
parse, and display plans</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-857bd0334ca601c4cd4e3ce2be7bff0dca583460a2fdf02d6d1c2f25a65f0ccd">+495/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>CollapsibleProjection.vue</strong><dd><code>Collapsible
projection field list renderer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-0768b03cd68e1d7060a7a328e333a1a21a052d3d00719fdaf722c7068e044bd6">+135/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>MetricsSummaryCard.vue</strong><dd><code>Summary card for
time, rows, memory metrics</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-dc065cd3367a2c32b655a3cf9654e57eed85d6924bf81e2df39cf21a0c596433">+151/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>QueryPlanNode.vue</strong><dd><code>Tree node component with
metrics and collapse</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-db861376fe96048a639c4810804dd2ecd8a95058dac0f40ca23cc41afa4e1a67">+293/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>QueryPlanTree.vue</strong><dd><code>Render plan as
expandable ASCII tree</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-301d8f706ec4e5a46f580b4cca08bd951743a0ad5419295ab79956e5f68ec6c0">+77/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>SearchBar.vue</strong><dd><code>Add Explain button and
dialog wiring in toolbar/menu</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+51/-0</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>en.json</strong><dd><code>Add i18n strings for query plan
UI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+22/-1</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Signed-off-by: loaki07 <rustyloaki@gmail.com>
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
Co-authored-by: Loakesh Indiran <66478092+Loaki07@users.noreply.github.com>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
Co-authored-by: Harsh Mahajan <115500013+007harshmahajan@users.noreply.github.com>
Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
Co-authored-by: ByteBaker <42913098+ByteBaker@users.noreply.github.com>
Co-authored-by: Sai Nikhil <nikhil@openobserve.ai>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
Co-authored-by: Huaijin <haohuaijin@gmail.com>
Co-authored-by: Simha G <149056463+yaga-simha@users.noreply.github.com>
Co-authored-by: omkark06 <omkar@zinclabs.io>
2025-10-30 21:24:44 +05:30