mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-05 16:10:43 +00:00
b29cb44d6e25b990a470d972745cf91ccecfeabe
4937
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b29cb44d6e |
ci: added claude PR review to github workflow (#9845)
### **User description**
added claude PR review to github workflow
___
### **PR Type**
Enhancement
___
### **Description**
- Add GitHub workflow for automated PR reviews
- Triggered on PR open, sync, ready, reopen
- Integrate Claude action with progress tracking
- Define custom prompts and allowed tools
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["PR event triggers workflow"] --> B["Checkout repository"]
B --> C["Run anthropics/claude-code-action"]
C --> D["Post inline review comments"]
```
<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>claude-pr-review.yml</strong><dd><code>Configure Claude
PR review workflow</code>
</dd></summary>
<hr>
.github/workflows/claude-pr-review.yml
<ul><li>Introduce workflow triggered on pull_request events<br> <li>
Configure checkout and Claude review steps<br> <li> Enable progress
tracking with checkboxes<br> <li> Specify custom prompts and allowed
tools</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9845/files#diff-53574b0b215fe49655d9af9b48ce745fe1b45cd4eb810c0df555b9a659caeed7">+71/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
|
||
|
|
d6a740e148 |
ci: added claude code to github workflow (#9841)
### **User description**
added claude code to github workflow
___
### **PR Type**
Enhancement
___
### **Description**
- Add Claude Code GitHub Actions workflow
- Trigger on issue comments, PR comments, and reviews containing
"@claude"
- Set up job conditions and required permissions
- Checkout repo and run `anthropics/claude-code-action`
___
### Diagram Walkthrough
```mermaid
flowchart LR
A[issue_comment@created] -->|contains "@claude"| C[Claude job]
B[pull_request_review_comment@created] -->|contains "@claude"| C
D[pull_request_review@submitted] -->|contains "@claude"| C
E[issues@opened,assigned] -->|contains "@claude"| C
C --> F[Checkout repository]
F --> G[Run Claude Code action]
```
<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>claude.yml</strong><dd><code>Add Claude Code workflow
configuration</code>
</dd></summary>
<hr>
.github/workflows/claude.yml
<ul><li>Create new "Claude Code" workflow file<br> <li> Define triggers
on issue_comment, pull_request_review_comment, <br>pull_request_review,
and issues<br> <li> Add job condition checking for "@claude" in comments
or titles<br> <li> Configure permissions and steps: checkout and run
Claude Code action</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9841/files#diff-53fec9c265fdba82268df5cd90315b8da57cce43d8e20efbf5c0bdcd1de1342e">+37/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
|
||
|
|
c96605a093 | fix: metrics streaming partition (#9839) | ||
|
|
f0527b9267 |
fix: UI tailwind changes (#9836)
issue #9539 |
||
|
|
bc5143610d | chore: support dashboard placeholder other type (#9840) | ||
|
|
3231f5f960 |
fix(e2e): consolidate and stabilize alerts-incidents-tabs tests (#9837)
### **User description**
## Summary
- Consolidated 13 test cases into 5 comprehensive tests for the
Alerts/Incidents tabs feature
- Tests 1-3: UI validation, search functionality, edge cases (enterprise
feature, running)
- Tests 4-5: Incident lifecycle actions and drawer validation
(enterprise feature, skipped - requires incidents to exist)
- Added incident-related POM methods to alertsPage.js
- Fixed view tab locators to use correct AppTabs pattern (tab-alerts,
tab-incidents)
- Added `waitForViewTabsReady()` method for stable test setup
- Added incident cleanup patterns to cleanup.spec.js
- Marked entire suite as @enterprise feature since Alerts/Incidents is
enterprise-only
## Test Results
- 3 passed, 2 skipped (~32s)
## Test plan
- [x] Run alerts-incidents-tabs.spec.js - all 3 OSS tests pass
- [x] Verify 2 enterprise tests are correctly skipped
- [x] Cleanup patterns added for incident_e2e_* resources
___
### **PR Type**
Enhancement, Tests
___
### **Description**
- Enhance AlertsPage POM with incident locators
- Add helpers for view tabs and loading overlay
- Consolidate comprehensive alerts-incidents E2E tests
- Extend cleanup to include incident_e2e patterns
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Navigate to Alerts Page"] --> B["waitForLoadingOverlayToDisappear"]
B --> C["waitForAlertListPageReady"]
C --> D["waitForViewTabsReady"]
D --> E1["Test1: View UI Validation"]
D --> E2["Test2: Search Functionality"]
D --> E3["Test3: Edge Cases"]
```
<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>alertsPage.js</strong><dd><code>Enhance AlertsPage with
incident methods and locators</code>
</dd></summary>
<hr>
tests/ui-testing/pages/alertsPages/alertsPage.js
<ul><li>Added locators for incidents, drawer, and page structure<br>
<li> Introduced waitForViewTabsReady and loading overlay helpers<br>
<li> Added assertion helpers for alerts/incidents visibility<br> <li>
Implemented incident lifecycle and drawer methods</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9837/files#diff-79ee01d6d7f145f19207b93b87143b545a1188cfc6a82bc8c45fecfbf68f8a1d">+329/-8</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>commonActions.js</strong><dd><code>Use
`alert-list-page` in navigation check</code>
</dd></summary>
<hr>
tests/ui-testing/pages/commonActions.js
- Updated navigateToAlerts to check `alert-list-page`
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9837/files#diff-4d726dd2bdb34b2c90a31798ff49b6df5bc952bd049b7c38bebb18b6db0076e2">+2/-2</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>alerts-incidents-tabs.spec.js</strong><dd><code>New
Alerts/Incidents tabs E2E tests</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Alerts/alerts-incidents-tabs.spec.js
<ul><li>Added new comprehensive E2E suite for Alerts/Incidents tabs<br>
<li> Consolidates view UI, search, and edge case tests<br> <li> Skips
enterprise incident action tests</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9837/files#diff-53a1a0dc2f68166f18211c151ef356b87a34b39fe6b3d2af5263a4036ae2dd99">+413/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>alertsIncidentsTabs.spec.js</strong><dd><code>Remove
legacy alertsIncidentsTabs spec</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Alerts/alertsIncidentsTabs.spec.js
- Removed deprecated Alerts & Incidents tab spec file
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9837/files#diff-3776665660a181de2d08e4d3bccc481191e7ac88f4e4b0943c869ffa4eb12ffd">+0/-347</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>cleanup.spec.js</strong><dd><code>Add `incident_e2e`
cleanup patterns</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/cleanup.spec.js
- Extended cleanup patterns for `incident_e2e` resources
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9837/files#diff-c214275a512fa285a7e4f2ab61dfcb42d71a0436b0e4241f94d7b45693587983">+7/-4</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
8fb89109b3 |
fix: 9658 - update query on stream change (#9823)
### **User description** fixes: https://github.com/openobserve/openobserve/issues/9658 ___ ### **PR Type** Bug fix, Tests ___ ### **Description** - Auto-update SQL query FROM clause on stream change - regenerate select * query - Add comprehensive Playwright E2E 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>ScheduledPipeline.vue</strong><dd><code>Add auto-update SQL FROM clause watcher</code> </dd></summary> <hr> web/src/components/pipeline/NodeForm/ScheduledPipeline.vue <ul><li>Added watcher on <code>selectedStreamName</code> for SQL tab<br> <li> Parsed and replaced <code>FROM</code> clause when stream changes<br> <li> Ensured conditions: non-empty query and matching old stream<br> <li> Graceful error handling on parse failures</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9823/files#diff-63d8f838bb880356e7804b4a57fd9223d4f2c189de7aadc7cf33cba723b29aaf">+57/-1</a> </td> </tr> </table></td></tr><tr><td><strong>Tests</strong></td><td><table> <tr> <td> <details> <summary><strong>scheduled-pipeline-stream-auto-update.spec.js</strong><dd><code>Add scheduled pipeline stream auto-update tests</code> </dd></summary> <hr> tests/ui-testing/playwright-tests/Pipelines/scheduled-pipeline-stream-auto-update.spec.js <ul><li>Introduce E2E tests verifying SQL auto-update behavior<br> <li> Validate preservation of WHERE and complex clauses<br> <li> Test manual edit protection and initial load cases<br> <li> Skip PromQL tab scenario</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9823/files#diff-8cc925b4f4019d670b4f4a82a9dd5e3f9c29155d6b261e6dfb7ab946f3ff7d8d">+480/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> |
||
|
|
238bc56af4 |
fix: add axis label rotation and truncation options in latency insights dashboard (#9834)
### **PR Type**
Enhancement
___
### **Description**
- Add axis label rotation option
- Add axis label truncation width option
___
<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>useLatencyInsightsDashboard.ts</strong><dd><code>Add
axis label rotation & truncation</code>
</dd></summary>
<hr>
web/src/composables/useLatencyInsightsDashboard.ts
<ul><li>Added <code>axis_label_rotate</code> property to chart
config<br> <li> Added <code>axis_label_truncate_width</code> property to
chart config</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9834/files#diff-960dec4a653d7c079157499a2473d0e87bd8b61463e1c3f633e7682ba763a4b1">+2/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
20438076dd |
refactor: deduplicate ingestion handler code
Extract process time tracking and ingestion check logic into helper functions: - `get_process_time()` - consolidates slow log threshold check - `insert_process_time_header()` - adds o2_process_time header - Replace `match` with `if let Err` for cleaner error handling - Remove unused `_in_req` parameters from handler functions Reduces code duplication across `bulk`, `multi`, `json`, `hec`, `otlp_logs_write` handlers. |
||
|
|
a3a334710b |
fix: logs highlighting issues (#9754)
This PR fixes the issue when user has [ , { , < , ' , ( as single char
without closing character for the same we were losing the last character
|
||
|
|
85a952f4eb |
feat: add dynamic axis label rotation and truncation support in dashboard charts (#9808)
### **User description** Design at: https://github.com/openobserve/designs/blob/main/dashboards/axis-label-rotation/design.md ### **PR Type** Enhancement ___ ### **Description** - Add dynamic axis label rotation support - Add label truncation with dynamic width handling - Calculate dynamic nameGap and bottom spacing - Provide UI fields for configuring rotation/truncation ___ ### Diagram Walkthrough ```mermaid flowchart LR A["Panel Config\naxis_label_rotate\naxis_label_truncate_width"] B["calculateDynamicNameGap\ncalculateRotatedLabelBottomSpace"] C["Adjust grid.bottom spacing"] D["Set axisLabel.rotate/overflow/width/margin"] E["Set xAxis/yAxis nameGap\nand nameTextStyle"] A -- "pass config" --> B B -- "compute extra space" --> C B -- "compute gap/margins" --> D B -- "compute nameGap" --> E ``` <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>convertPromQLData.ts</strong><dd><code>Add dynamic label spacing and rotation logic</code> </dd></summary> <hr> web/src/utils/dashboard/convertPromQLData.ts <ul><li>Introduce <code>calculateDynamicNameGap</code> and <code>calculateRotatedLabelBottomSpace</code><br> <li> Compute <code>additionalBottomSpace</code> for grid.bottom<br> <li> Set xAxis <code>name</code>, <code>nameGap</code>, <code>nameTextStyle</code><br> <li> Apply <code>axisLabel.rotate</code>, <code>overflow</code>, <code>width</code>, <code>margin</code></ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+125/-8</a> </td> </tr> <tr> <td> <details> <summary><strong>convertSQLData.ts</strong><dd><code>Implement dynamic axis label rotation and spacing</code> </dd></summary> <hr> web/src/utils/dashboard/convertSQLData.ts <ul><li>Add <code>calculateDynamicNameGap</code> & <code>calculateRotatedLabelBottomSpace</code><br> <li> Update grid.bottom calculation with extra spacing<br> <li> Adjust axisLabel properties (rotate, width, overflow, margin)<br> <li> Apply dynamic <code>nameGap</code> across chart types</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3">+208/-25</a></td> </tr> <tr> <td> <details> <summary><strong>ConfigPanel.vue</strong><dd><code>Add UI controls for label rotation and truncation</code> </dd></summary> <hr> web/src/components/dashboards/addPanel/ConfigPanel.vue <ul><li>Add inputs for <code>axis_label_rotate</code> and <code>axis_label_truncate_width</code><br> <li> Conditionally render controls by chart type<br> <li> Bind new config fields to panel data model</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+66/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ ___ ### **PR Type** Enhancement, Tests ___ ### **Description** - Add axis label rotation and truncate configs - Compute dynamic nameGap and bottom spacing - Integrate rotation/truncate in data converters - Update ConfigPanel UI and unit tests ___ ### Diagram Walkthrough ```mermaid flowchart LR A["Panel Config axis_label_rotate & axis_label_truncate_width"] B["calculateDynamicNameGap"] C["calculateRotatedLabelBottomSpace"] D["convertPromQLData / convertSQLData"] E["chart grid.bottom & xAxis nameGap settings"] A --> B A --> C B -- "nameGap" --> D C -- "bottom space" --> D D -- "apply spacing & truncation" --> E ``` <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>useDashboardPanel.ts</strong><dd><code>Add new axis label rotate/truncate defaults</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+2/-0</a> </td> </tr> <tr> <td><strong>convertDataIntoUnitValue.ts</strong><dd><code>Introduce dynamic nameGap and bottom space functions</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-14c6fe442ef231566ec411f9e0262cdd24ec912fc67b9154eec743282ab7211a">+88/-0</a> </td> </tr> <tr> <td><strong>convertPromQLData.ts</strong><dd><code>Integrate rotation/truncate logic into PromQL converter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+57/-8</a> </td> </tr> <tr> <td><strong>convertSQLData.ts</strong><dd><code>Apply dynamic spacing and truncation in SQL converter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3">+180/-29</a></td> </tr> <tr> <td><strong>ConfigPanel.vue</strong><dd><code>Add UI inputs and tooltips for rotate/truncate</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+127/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>convertPromQLData.spec.ts</strong><dd><code>Mock new spacing utilities in PromQL tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-2769044ec488ef4070c2e1a28ce23ec36b945e46c903b870f8b340cbd6b05211">+2/-0</a> </td> </tr> <tr> <td><strong>convertSQLData.spec.ts</strong><dd><code>Mock new spacing utilities in SQL tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-1dc85f7550b15820974ad93fa461de48d24bc5cbed621bffddb27250211fa88d">+2/-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>mod.rs</strong><dd><code>Add schema fields for axis rotate/truncate</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+6/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: ktx-riya <riya.kukadiya@kiara.tech> |
||
|
|
4adc0ef19d | fix: add stream support for Prometheus query range endpoint in router (#9828) | ||
|
|
98319127ea |
fix: dashboard css issue (#9824)
### **PR Type**
Bug fix
___
### **Description**
- Fix group header background for field list themes
- Remove padding prop on metrics run query button
- Improve add panel apply button display styles
___
<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>FieldList.vue</strong><dd><code>Add theme-based
field-group-header styling</code>
</dd></summary>
<hr>
web/src/components/dashboards/addPanel/FieldList.vue
<ul><li>Replaced static grey background with
<code>field-group-header</code> class<br> <li> Added dark mode
background variable styling<br> <li> Added light mode background color
styling<br> <li> Updated header div class attribute</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9824/files#diff-a071c06e3e26629cb4ae4751450acc39c61fa49b07a1cc4be3711697829668d4">+9/-1</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>AddPanel.vue</strong><dd><code>Adjust add panel button
group and dropdown styles</code>
</dd></summary>
<hr>
web/src/views/Dashboards/addPanel/AddPanel.vue
<ul><li>Added <code>display: inline-flex</code> to
<code>q-btn-group</code> style<br> <li> Introduced <code>flat</code> and
<code>dense</code> props to <code>q-btn-dropdown</code></ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9824/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+3/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>Index.vue</strong><dd><code>Remove padding prop from
metrics button</code>
</dd></summary>
<hr>
web/src/plugins/metrics/Index.vue
<ul><li>Removed <code>padding="sm"</code> attribute from run query
button<br> <li> Ensured button height consistency</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9824/files#diff-a6734928ea4dcb5244e90de5a16fe6f5cafa95ccf58430ac7b548a065daf3d61">+0/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
ec021ac29e | perf: optimize MCP tools - reduce size from 643KB to 123KB (#9825) | ||
|
|
8c8643cec5 |
fix: translation missing fields added (#9827)
### **User description** 1. Home page fixed ___ ### **PR Type** Enhancement ___ ### **Description** - Replace static HomeView labels with translations - Add `viewButton` and `noDataAvailable` translation keys - Update all locale JSON files - Remove unused CSS cursor property ___ <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>1 files</summary><table> <tr> <td><strong>HomeView.vue</strong><dd><code>Replace static labels with translation function</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-9af441af191d3254ef5f9db603dca75486de7638cda41a3c050e7b3c33d68280">+8/-9</a> </td> </tr> </table></details></td></tr><tr><td><strong>Configuration changes</strong></td><td><details><summary>11 files</summary><table> <tr> <td><strong>de.json</strong><dd><code>Add `viewButton` and `noDataAvailable` translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264">+3/-1</a> </td> </tr> <tr> <td><strong>en.json</strong><dd><code>Add `viewButton` and `noDataAvailable` translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+2/-0</a> </td> </tr> <tr> <td><strong>es.json</strong><dd><code>Add `viewButton` and `noDataAvailable` translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778">+3/-1</a> </td> </tr> <tr> <td><strong>fr.json</strong><dd><code>Add `viewButton` and `noDataAvailable` translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2">+3/-1</a> </td> </tr> <tr> <td><strong>it.json</strong><dd><code>Add `viewButton` and `noDataAvailable` translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d">+3/-1</a> </td> </tr> <tr> <td><strong>ja.json</strong><dd><code>Add `viewButton` and `noDataAvailable` translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3">+3/-1</a> </td> </tr> <tr> <td><strong>ko.json</strong><dd><code>Add `viewButton` and `noDataAvailable` translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48">+3/-1</a> </td> </tr> <tr> <td><strong>nl.json</strong><dd><code>Add `viewButton` and `noDataAvailable` translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906">+3/-1</a> </td> </tr> <tr> <td><strong>pt.json</strong><dd><code>Add `viewButton` and `noDataAvailable` translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815">+3/-1</a> </td> </tr> <tr> <td><strong>tr.json</strong><dd><code>Add `viewButton` and `noDataAvailable` translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818">+3/-1</a> </td> </tr> <tr> <td><strong>zh.json</strong><dd><code>Add `viewButton` and `noDataAvailable` translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9827/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e">+3/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
8beb75de63 |
fix: share url disabled when web url is not configured (#9826)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
09ef3a8f88 |
feat: incident detail drawer enhancements - telemetry tabs and alert graph (#9719)
### **User description** ## Summary Enhances the incident detail drawer with two new features to improve incident investigation: 1. **Telemetry Correlation Tabs** - Logs, Metrics, and Traces tabs showing related telemetry 2. **Alert Graph Visualization** - Interactive graph of services and dependencies Design at : https://github.com/openobserve/designs/tree/main/alert-correlation --- ## Feature 1: Telemetry Correlation Tabs Adds three new tabs (Logs, Metrics, Traces) that display correlated telemetry streams based on the incident's `stable_dimensions`. **Frontend Changes:** - New service method `getCorrelatedStreams()` in `web/src/services/incidents.ts` - Integrates `TelemetryCorrelationDashboard` component in embedded mode - Lazy loading: data fetched only on first tab click - Data caching: subsequent tab switches reuse loaded data - Refresh button for manual data reload - Auto time range from `first_alert_at` to `last_alert_at` - Empty state with manual search fallback - Memory cleanup on drawer close **No backend changes** - uses existing `POST /api/{org}/service_streams/_correlate` endpoint --- ## Feature 2: Alert Graph Visualization Adds "Alert Graph" tab showing interactive visualization of all services involved in an incident. **Backend Changes:** - New endpoint: `GET /api/v2/{org}/alerts/incidents/{id}/service_graph` - Returns graph nodes (services with alert counts) and edges (dependencies) - Builds from existing `topology_context` field - Gated by `O2_INCIDENTS_ALERT_GRAPH_ENABLED` env variable (default: false) - Enterprise-only with 403 handling for non-enterprise builds **Frontend Changes:** - New `IncidentServiceGraph.vue` component using ECharts - Force-directed and circular layouts - Visual encoding: node size = alert count, color = severity/root cause - Purple border for primary incident service - Stats banner and hover tooltips - Empty state when topology unavailable **Configuration:** ```bash export O2_INCIDENTS_ALERT_GRAPH_ENABLED=true # Required to enable ``` ___ ### **PR Type** Enhancement ___ ### **Description** - Add `IncidentServiceGraph` Rust models and API - Implement `get_service_graph` service logic - Extend `incidentsService` with correlation methods - Enhance `IncidentDetailDrawer` with telemetry and graph tabs --------- Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> |
||
|
|
76f33b38c7 |
fix: remove http_url from service graph peer attributes (#9817)
## Summary - Removes `http_url` from peer attribute candidates to fix massive node cardinality - Fixes API to respect configured time range instead of hardcoded 60 minutes - Fixes tree view to display all nodes including disconnected components - Changes default visualization to graph view ## Problems Fixed ### 1. Node Explosion from URL Variations Service graph was creating separate nodes for every URL variation with different query parameters or path parameters: - `/api/products/1YMWWN1N4O`, `/api/products/9SIQT8TOJO`, etc. - `?contextKeys=books`, `?contextKeys=travel`, etc. This caused hundreds of nodes instead of a clean service topology. ### 2. API Ignoring Configuration API hardcoded 60-minute query window, ignoring the configured `service_graph.query_time_range_minutes` setting. ### 3. Tree View Missing Nodes Tree view only showed nodes reachable from root nodes (no incoming edges), hiding services in cycles or disconnected components. ## Solutions ### 1. Use server_address Instead of http_url Now uses `server_address` attribute (hostname only) following OpenTelemetry HTTP semantic conventions for service identification. ### 2. Respect Configured Time Range API now uses same configured time window as processor for consistency. ### 3. Virtual Root for Tree View Creates invisible virtual root node to display all disconnected service trees in ECharts. ### 4. Better Default UX Graph view is now the default with reordered buttons (Graph View first). |
||
|
|
67707c98d6 |
feat: Updated RUM Web Vitals (#9610)
#9611 Design at: rum |
||
|
|
4c551f839b |
fix: added unit test file ignore list and added test case files (#9807)
### **PR Type**
Tests
___
### **Description**
- Add unit tests for useSearchHistogramManager composable
- Add unit tests for useSearchPagination composable
- Add unit tests for useSearchResponseHandler composable
- Update vitest.config.ts ignore patterns
___
<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>useSearchHistogramManager.spec.ts</strong><dd><code>Add
tests for histogram manager composable</code>
</dd></summary>
<hr>
web/src/composables/useLogs/useSearchHistogramManager.spec.ts
<ul><li>New test suite for useSearchHistogramManager composable<br> <li>
Tests isHistogramDataMissing and shouldShowHistogram<br> <li> Tests
histogram result handling and socket requests<br> <li> Mocks
dependencies like searchState and useHistogram</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9807/files#diff-e6d61868c245bf89523007ecd98716bb6debf967f0ce42cc19d96d018ae0358e">+481/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>useSearchPagination.spec.ts</strong><dd><code>Add tests
for search pagination composable</code>
</dd></summary>
<hr>
web/src/composables/useLogs/useSearchPagination.spec.ts
<ul><li>New test suite for useSearchPagination composable<br> <li> Tests
pagination helpers: refresh, calculate, reset<br> <li> Tests page count
logic and chunked append<br> <li> Covers updateResult and
handlePageCountResponse</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9807/files#diff-058ee3497dc3701ca618b64984900058c85591ccf2d1e519566bd3e36989fe7e">+644/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>useSearchResponseHandler.spec.ts</strong><dd><code>Add
tests for search response handler composable</code>
</dd></summary>
<hr>
web/src/composables/useLogs/useSearchResponseHandler.spec.ts
<ul><li>New test suite for useSearchResponseHandler composable<br> <li>
Tests error message construction and error handling<br> <li> Tests
search and histogram response flows<br> <li> Mocks notifications,
pagination, histogram, and utils</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9807/files#diff-aa5427a219e00993bc6fc99dd731c4cb601b5b0390bd9dd3d25f1a533bb1c4f4">+661/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>vitest.config.ts</strong><dd><code>Update vitest config
ignore patterns</code>
</dd></summary>
<hr>
web/vitest.config.ts
<ul><li>Extend test ignore patterns in vitest config<br> <li> Ignore
locale JSON, chart templates, type definitions<br> <li> Ignore re-export
index and mixin files<br> <li> Ignore AWS exports and constants
modules</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9807/files#diff-c3fc010b682e68f2ed0b7b1485b8aa513443a66d500903b8dff1d65908d02aae">+24/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
cb178787f2 |
chore: incidents as separate tabs (#9819)
### **PR Type**
Enhancement, Tests
___
### **Description**
- Replace icon tabs with reusable app-tabs component
- Introduce Alerts/Incidents viewMode switching logic
- Add extensive UI tests for new tab functionality
- Update getPath logic and dev script configuration
___
### Diagram Walkthrough
```mermaid
flowchart LR
TabsComp["app-tabs component"] --> ViewState["viewMode state"]
ViewState --> AlertsView["Alerts view UI"]
ViewState --> IncidentsView["Incidents view UI"]
Tests["UI tests"] --> TabsComp
```
<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>zincutils.ts</strong><dd><code>Refine getPath base URL
logic</code>
</dd></summary>
<hr>
web/src/utils/zincutils.ts
<ul><li>refine getPath logic for web base path<br> <li> conditionally
prepend "/web/" on localhost</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9819/files#diff-d3d59688cccdcc6c84ebe88b698c6910030abecc3125f4c0ef81b0df023699ba">+1/-1</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>AlertList.vue</strong><dd><code>Replace custom tabs
with app-tabs</code>
</dd></summary>
<hr>
web/src/components/alerts/AlertList.vue
<ul><li>remove custom icon-only view tabs<br> <li> integrate
<code>app-tabs</code> for view switching<br> <li> add
<code>viewTabs</code> computed property<br> <li> update related SCSS
styling</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9819/files#diff-be3e41b823e163b226ffc270d95cc4981e59c600851e4e0d10ee5e4ee994ac8e">+35/-92</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>alertsPage.js</strong><dd><code>Add view mode tab
methods and locators</code>
</dd></summary>
<hr>
tests/ui-testing/pages/alertsPages/alertsPage.js
<ul><li>add locators for alert and incident tabs<br> <li> implement
click and expect methods for tabs<br> <li> add search methods for both
views</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9819/files#diff-79ee01d6d7f145f19207b93b87143b545a1188cfc6a82bc8c45fecfbf68f8a1d">+113/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>alertsIncidentsTabs.spec.js</strong><dd><code>Add E2E
tests for alerts/incidents tabs</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Alerts/alertsIncidentsTabs.spec.js
<ul><li>add E2E tests for tabs visibility and switching<br> <li> cover
functional and edge-case scenarios</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9819/files#diff-3776665660a181de2d08e4d3bccc481191e7ac88f4e4b0943c869ffa4eb12ffd">+347/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>package.json</strong><dd><code>Add base path to dev
script</code>
</dd></summary>
<hr>
web/package.json
- update `dev` script to include base `/web/`
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9819/files#diff-b861012a5dd72b8a9f3281b7cf09f5a779c98569d040b1bbc1db50f1b15e7cce">+1/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
c77bd0b79a |
fix: dont overwrite the sql query when selecting new stream (#9818)
### **PR Type**
Bug fix
___
### **Description**
- Only set default queries if input empty
- Preserve custom SQL queries on stream switch
- Apply same check for PromQL tab
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Stream selected"] --> B{"Tab and empty query?"}
B -- "SQL" --> C["Set default SQL query"]
B -- "PromQL" --> D["Set default PromQL query"]
B -- "No" --> E["Keep existing query"]
```
<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>ScheduledPipeline.vue</strong><dd><code>Avoid
overwriting custom queries on stream change</code>
</dd></summary>
<hr>
web/src/components/pipeline/NodeForm/ScheduledPipeline.vue
<ul><li>Added emptiness check before setting default queries<br> <li>
Extended check to both SQL and PromQL tabs<br> <li> Inserted comments
clarifying non-overwrite logic</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9818/files#diff-63d8f838bb880356e7804b4a57fd9223d4f2c189de7aadc7cf33cba723b29aaf">+4/-2</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
0e4228dcff | perf: add runtime module for metrics (#9813) | ||
|
|
77c1f31ca8 | chore(deps): bump qs from 6.14.0 to 6.14.1 in /tests/ui-testing (#9816) | ||
|
|
509bf7b6fb |
feat: pipeline backfill (#9462)
Design at : pipeline-gap-filler
# feat: Add Pipeline Backfill Jobs Feature
This PR introduces a complete pipeline backfill system that allows users
to reprocess historical data through existing pipelines.
## Key Features
### Backend
- **Dual-table architecture**: Separate `backfill_jobs` table for static
config and `scheduled_jobs` for scheduling state
- **RESTful API endpoints** under
`/api/{org_id}/pipelines/{pipeline_id}/backfill`:
- Create, list, pause, resume, update, and delete backfill jobs
- **Robust error handling**: Retry mechanism matching derived stream
pattern (immediate retries → scheduled retries, never delete jobs)
- **Progress tracking**: Chunk-based processing with real-time position
updates
- **Optional deletion phase**: Delete existing data before backfilling
with separate status tracking
- **Super cluster support**: Proper trigger synchronization across
regions
### Frontend
- **Backfill Jobs List Page**: Table view with status/pipeline filters,
action buttons (pause/resume/edit/delete)
- **Create Dialog**: Time range picker (absolute dates only),
configurable chunk periods and delays
- **Edit Dialog**: Update paused/completed jobs with reset to fresh
state
- **Job Details Dialog**: Real-time progress, timeline visualization,
deletion status tracking
- **Dark mode support**: Full theme compatibility across all components
- **DateTime integration**: Reuses existing DateTime component with
microsecond precision
## Technical Highlights
- Cross-database support (PostgreSQL, MySQL, SQLite)
- Frontend-only filtering for performance
- Status mapping (waiting/pending → "running" display)
- Timestamp formatting: `YYYY-MM-DDTHH:mm:ssZ`
- Default chunk period matches pipeline schedule frequency
- Navigation integration from PipelinesList component
## Files Changed
### Backend
- **Migration**:
`src/infra/src/table/migration/m20250109_000001_create_backfill_jobs.rs`
- **Table CRUD**: `src/infra/src/table/backfill_jobs.rs`
- **Service logic**: `src/service/alerts/backfill.rs`
- **Scheduler handlers**: `src/service/alerts/scheduler/handlers.rs`
- **API routes**: `src/handler/http/request/pipelines/backfill.rs`
- **Router integration**: `src/handler/http/router/mod.rs`,
`src/handler/http/router/openapi.rs`
- **Super cluster sync**: `src/super_cluster_queue/scheduler.rs`
### Frontend
- **Components**:
- `web/src/components/pipelines/BackfillJobsList.vue`
- `web/src/components/pipelines/CreateBackfillJobDialog.vue`
- `web/src/components/pipelines/EditBackfillJobDialog.vue`
- `web/src/components/pipelines/BackfillJobDetails.vue`
- **API service**: `web/src/services/backfill.ts`
- **DateTime enhancement**: `web/src/components/DateTime.vue`
## Testing
- Tested across PostgreSQL, MySQL, and SQLite databases
- Verified dark mode compatibility
- Tested pause/resume/edit/delete operations
- Validated progress tracking and completion status
- Confirmed super cluster synchronization
|
||
|
|
99d7a05a70 |
fix: dashboard raw query save issue (#9815)
### **PR Type**
Bug fix
___
### **Description**
- Add `raw_query` field to `AxisItem` struct.
___
<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>mod.rs</strong><dd><code>Add raw_query Option<String>
to AxisItem</code>
</dd></summary>
<hr>
src/config/src/meta/dashboards/v8/mod.rs
<ul><li>Introduce <code>raw_query: Option<String></code> field in
<code>AxisItem</code>.<br> <li> Use <code>skip_serializing_if</code> to
omit <code>raw_query</code> when <code>None</code>.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9815/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+2/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
7ba23ac601 |
fix(e2e): stabilize dashboard creation in Reports tests (#9811)
### **User description**
## Summary
- Fixes 13 flaky Reports tests that were failing due to unstable
dashboard creation
- Add proper waits for button enablement before clicking submit
- Wait for success notification and URL navigation after dashboard
creation
- Use data-test selector for stream dropdown selection
- Replace scroll-based field selection with search-based approach
- Extract inline locators to constructor for better maintainability
## Test Results
All 13 previously failing tests now pass:
- `reportsScheduleNow.spec.js`: 7 passed
- `reportsScheduleLater.spec.js`: 6 passed
## Test Command
```bash
npx playwright test "playwright-tests/Reports/" --project=chromium
```
___
### **PR Type**
Bug fix, Tests, Enhancement
___
### **Description**
- Stabilize dashboard creation with robust waits
- Replace scrolling with search-based field selection
- Refactor locators and error handling across methods
- Add new cleanup regex patterns for streams
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Navigate to dashboards"] --> B["Open create dialog"]
B --> C["Fill name & submit"]
C --> D["Wait for success & navigate"]
D --> E["Add panel: select stream & fields"]
E --> F["Apply panel & verify"]
```
<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>dashboardPage.js</strong><dd><code>Improve dashboard
E2E test stability</code>
</dd></summary>
<hr>
tests/ui-testing/pages/dashboardPages/dashboardPage.js
<ul><li>Added locators for menus, dashboards, panels, streams, and
charts <br> <li> Enhanced createDashboard with waitForLoadState,
retries, and expect <br>checks <br> <li> Switched field selection from
scrolling to search-based approach <br> <li> Refactored delete, logout,
share, and org-switch methods</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9811/files#diff-febeab93d1b7b929f386f852b74aa1ab16086626891d08b815afc21414b22704">+180/-121</a></td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>cleanup.spec.js</strong><dd><code>Add new cleanup
stream patterns</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/cleanup.spec.js
<ul><li>Introduced regex cleanup patterns for alert_e2e and alert_import
<br>streams <br> <li> Added dedup_test and dedup_src stream cleanup
rules</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9811/files#diff-c214275a512fa285a7e4f2ab61dfcb42d71a0436b0e4241f94d7b45693587983">+4/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
52a6aabadc |
fix(e2e): use search-filter approach for stream selection in dashboard variables (#9810)
### **User description**
## Summary
- Fixed stream selection timeout in dashboard variables settings tests
- Changed from direct text selection to search-filter approach using
keyboard.type()
- Added multiple selection strategies with fallbacks for robustness
## Root Cause
The stream dropdown uses Quasar's q-select with `use-input` which
requires typing to filter streams. The original code used `getByText()`
which fails when streams are not visible in the unfiltered list.
## Changes
- Type stream name to filter dropdown
- Wait for listbox and filtered options
- Multiple fallback strategies for selection
## Test Results
All 12 dashboard variables setting tests now pass.
___
### **PR Type**
Tests, Bug fix
___
### **Description**
- Use keyboard typing to filter stream dropdown
- Wait for filtered options before selecting
- Implement three fallback selection strategies
- Throw error if stream selection fails
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Open stream selector"] --> B["Type stream name to filter"]
B --> C["Wait for filtered options"]
C --> D["Try exact match selection"]
D -- success --> E["Done"]
D -- fail --> F["Try partial match selection"]
F -- success --> E
F -- fail --> G["Try keyboard navigation"]
G -- success --> E
G -- fail --> H["Throw selection error"]
```
<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>dashboard-settings.js</strong><dd><code>Implement
filtered stream selection with fallbacks</code>
</dd></summary>
<hr>
tests/ui-testing/pages/dashboardPages/dashboard-settings.js
<ul><li>Remove direct locator click and text selection<br> <li> Open
stream select and type name to filter<br> <li> Wait for listbox and
filtered options visibility<br> <li> Add three selection strategies:
exact, partial, keyboard</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9810/files#diff-1a07f3f14dacb06180bc02437804d175886aeacda98f5b0ef507a274e5ddd485">+54/-7</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
a342fab1e9 |
fix(e2e): improve stream selection in schema pagination test (#9809)
### **User description**
## Summary
- Fixes failing sanity test "should display pagination for schema" by
improving stream selection after page reload
- Uses search-and-filter approach to reliably find and select the
e2e_automate stream
- Replaces broken pagination selector with proper data-test attribute
selector
- Adds proper error handling when stream selection fails
## Test plan
- [x] Run sanity pagination test - passes
- [x] Run all sanity tests - 14 passed, 3 skipped
___
### **PR Type**
Bug fix, Tests
___
### **Description**
- Refactor stream selection using search-filter input
- Add multiple fallback click methods and throw error on failure
- Replace flaky pagination dropdown click with pagination button wait
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Page reload"] --> B["Stream select input visible"]
B --> C["Click and fill filter input"]
C --> D["Wait for stream toggle visible"]
D --> E["Click toggle element"]
D --> F["Fallback: click toggle element"]
F --> G["Fallback: click by text"]
G --> H["Error thrown on failure"]
E --> I["Pagination first page button visible"]
```
<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>sanityPage.js</strong><dd><code>Enhance stream
selection and pagination wait</code>
</dd></summary>
<hr>
tests/ui-testing/pages/generalPages/sanityPage.js
<ul><li>Use search-filter input for stream dropdown selection<br> <li>
Add multiple fallback mechanisms with descriptive logs<br> <li> Throw
meaningful error when stream selection fails<br> <li> Replace pagination
dropdown click with first-page button wait</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9809/files#diff-a0ac0217ef875311dc536edb97deda19927a64e73cede62123b97cbe7df113b8">+37/-19</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
0d175c09fd | chore: support streaming agg read cache when disable/enable utf8view (#9803) | ||
|
|
e0a712a80e |
fix: fix for first time data loading issue without clicking run query… (#9805)
### **User description**
… button
___
### **PR Type**
Bug fix
___
### **Description**
- Introduce `initialStreamSelected` for initial loads
- Conditionally call `getQueryData()` on selections
- Set `loading` false if no stream selected
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["loadLogsData()"] --> B["Compute `initialStreamSelected`"]
B -- "Stream selected" --> C["getQueryData()"]
B -- "No stream selected" --> D["searchObj.loading = false"]
C --> E["refreshData()"]
D --> E["refreshData()"]
```
<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>useLogs.ts</strong><dd><code>Conditional initial data
load fix</code>
</dd></summary>
<hr>
web/src/composables/useLogs.ts
<ul><li>Introduced <code>initialStreamSelected</code> boolean<br> <li>
Wrapped <code>getQueryData()</code> call in conditional<br> <li> Set
<code>searchObj.loading</code> false when unselected</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9805/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+13/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
4b1d926b27 |
fix(e2e): use semantic selectors in fillPipelineDetails for reliable dropdown selection (#9806)
### **User description** ## Summary - Fixed `fillPipelineDetails` method in pipelinesEP.js that was timing out on stream dropdown selection - Root cause: Test relied on positional error indexes (`error-0-1`, `error-0-2`, `error-0-3`) which broke after conditions revamp PR #9267 ## Changes - Replace positional error indexes with specific `data-test` attribute selectors - Use `pipeline-import-source-stream-name-input` for stream dropdown detection - Use `pipeline-import-destination-function-name-input` for function dropdowns - Add keyboard filtering and scroll fallback for virtual scroll lists - Add `exact: true` matching for function options to prevent partial matches (e.g., 'first5' matching 'first587') - Remove duplicate click in `pipelineDestinations.addDestination` ## Test plan - [x] Verified "Import RealTime Pipeline from URL" test passes - [x] Verified "Import RealTime Pipeline from JSON file" test passes - [x] Audited changes - no test validations or criteria were weakened ___ ### **PR Type** Tests, Bug fix ___ ### **Description** - Use specific data-test selectors for dropdown detection - Add robust filter and scroll fallback logic - Refactor function dropdown selection into loop - Remove redundant click in destination method ___ <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>pipelineDestinations.js</strong><dd><code>Remove redundant click in addDestination</code> </dd></summary> <hr> tests/ui-testing/pages/pipelinesPages/pipelineDestinations.js <ul><li>Removed duplicate click on destination-type card<br> <li> Ensured correct addDestination click sequence</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9806/files#diff-bab2fcd1b7817e914bf355829bdb52882fa1584e70da2f7d705549c5e30e494f">+0/-1</a> </td> </tr> </table></td></tr><tr><td><strong>Enhancement</strong></td><td><table> <tr> <td> <details> <summary><strong>pipelinesEP.js</strong><dd><code>Enhance fillPipelineDetails dropdown logic</code> </dd></summary> <hr> tests/ui-testing/pages/pipelinesPages/pipelinesEP.js <ul><li>Replaced positional error selectors with data-test inputs<br> <li> Implemented reliable stream dropdown handling<br> <li> Added typing filter and scroll fallback for virtual lists<br> <li> Refactored function dropdown selection loop with exact match</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9806/files#diff-f40d50224fc368792766aac9f85f7aae00e93374f74300651dfac7155d612449">+65/-84</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
b489f2a8d5 |
fix(e2e): use search filter in selectIndexAndStreamJoinUnion for reliable stream selection (#9802)
### **User description**
## Summary
- Fix join test failing due to stream not found in dropdown within
timeout
- Update `selectIndexAndStreamJoinUnion` method to use search filtering
## Problem
The test was timing out waiting for stream toggle element because the
dropdown had many streams and the target stream wasn't visible without
scrolling or filtering.
**Error:**
```
TimeoutError: locator.waitFor: Timeout 15000ms exceeded.
waiting for locator('[data-test="log-search-index-list-stream-toggle-e2e_join_a_mjs5hqbr"] div')
```
## Solution
Updated `selectIndexAndStreamJoinUnion` to use the search input box to
filter streams before selection (matching the robust pattern used by
`selectStream` method):
- Use search input to filter for each stream
- Clear and re-filter search for second stream
- Increased timeout from 15s to 20s
- Added explicit wait for dropdown arrow visibility
## Test Results
- ✅ Test passes in 47.7s
___
### **PR Type**
Bug fix, Tests
___
### **Description**
- Added explicit wait for dropdown arrow visibility
- Implemented search input filtering for stream selection
- Increased toggle wait timeout from 15s to 20s
- Refactored dropdown reuse for closing action
___
### Diagram Walkthrough
```mermaid
flowchart LR
Navigate["Go to logs page"]
OpenDropdown["Wait and click dropdown arrow"]
SearchFilterA["Filter for stream A"]
SelectA["Wait and click stream A toggle"]
ClearFilter["Clear and filter for stream B"]
SelectB["Wait and click stream B toggle"]
CloseDropdown["Click dropdown arrow to close"]
Navigate --> OpenDropdown
OpenDropdown --> SearchFilterA
SearchFilterA --> SelectA
SelectA --> ClearFilter
ClearFilter --> SelectB
SelectB --> CloseDropdown
```
<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>logsPage.js</strong><dd><code>Enhance stream selection
with search filter</code>
</dd></summary>
<hr>
tests/ui-testing/pages/logsPages/logsPage.js
<ul><li>Added explicit wait for dropdown arrow visibility<br> <li>
Implemented search input filtering for stream selection<br> <li>
Increased toggles' wait timeout from 15s to 20s<br> <li> Refactored
dropdown toggling for open/close actions</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9802/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59">+29/-7</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
0c5abe0f48 |
fix: adding user_session expiration (#9668)
### **User description** adding user session expiration and cleanup job ___ ### **PR Type** Enhancement ___ ### **Description** - Add `expires_at` to session model and table - Create DB migration and index for expires_at - Extend session APIs to handle expiry time - Implement periodic expired session cleanup job - Extract JWT expiry in session service ___ ### Diagram Walkthrough ```mermaid flowchart LR A["set_session called"] --> B["extract_jwt_expiry"] B --> C["sessions table with expires_at"] C -- "cleanup every hour" --> D["delete_expired sessions"] ``` <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>6 files</summary><table> <tr> <td><strong>sessions.rs</strong><dd><code>Add expires_at field to session model</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9668/files#diff-a2013af1b2d85aa34e8d231e2202040bbe9b8009804313f75dcb66911bea2964">+1/-0</a> </td> </tr> <tr> <td><strong>sessions.rs</strong><dd><code>Update session CRUD with expiry support</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9668/files#diff-945b60afd1f074c5f3bf875317896181829b19153938184bad9098c75ab44b48">+28/-2</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Integrate session cleanup into job runner</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9668/files#diff-f2e4c29b8eef22189ec704a832633c4bd135a24444f054864c98064bd0963681">+2/-0</a> </td> </tr> <tr> <td><strong>session_cleanup.rs</strong><dd><code>Implement periodic session cleanup job</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9668/files#diff-915b64283bb4276302456f6a55051d05fa2a84a6277fa67a6c7c07754c11084d">+97/-0</a> </td> </tr> <tr> <td><strong>session.rs</strong><dd><code>Enforce session expiry in DB operations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9668/files#diff-64311ff8ef53118e7611a2a2a28c5380a0e8b8213139b2c2108c728b1d460a2b">+10/-2</a> </td> </tr> <tr> <td><strong>session.rs</strong><dd><code>Parse JWT expiry for new sessions</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9668/files#diff-2d2f0c7a3be0a3d7d953c01974be5e093c8d42953952e435bc7b3a0faed6bf38">+57/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Configuration changes</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>m20251218_000001_add_expires_at_to_sessions.rs</strong><dd><code>Create migration for expires_at column and index</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9668/files#diff-2b5fc5dc47adab6e5bedf32e7b3da8cba22455d9ade119196acabe31dfc58bd2">+86/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Register expires_at migration in migrator</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9668/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+2/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
271ff27fac |
fix: remove traces error and rate value filters (#9617)
### **PR Type**
Bug fix
___
### **Description**
- Merge Rate and Errors filter chip displays
- Remove redundant Errors start-value span
- Always display Duration time range when set
___
<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>TracesMetricsDashboard.vue</strong><dd><code>Unify
filter chip display logic</code>
</dd></summary>
<hr>
web/src/plugins/traces/metrics/TracesMetricsDashboard.vue
<ul><li>Merged Rate and Errors chips into single time-range
indicator<br> <li> Removed specific Errors value display span<br> <li>
Changed Duration chip to always use time-range v-if</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9617/files#diff-7b6f29a2737d9501b18dbd8622eba4965e4bc2b92115627ae7d2e70cc3382087">+2/-5</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: omkark06 <omkar@zinclabs.io>
|
||
|
|
d814b75294 |
ci: updated install protoc step for release.yml workflow (#9800)
### **User description**
updated install protoc step for release.yml workflow
___
### **PR Type**
Enhancement
___
### **Description**
- Add Linux-specific Protoc install steps
- Add Windows-specific Protoc install steps
- Add macOS-specific Protoc install via Homebrew
- Remove arduino/setup-protoc action
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Release Workflow"] --> B["if linux"]
A --> C["if windows"]
A --> D["if macos"]
B --> E["Download & install protoc v21.12 (Linux)"]
C --> F["Download & install protoc v21.12 (Windows)"]
D --> G["Install protoc via Homebrew (macOS)"]
```
<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>release.yml</strong><dd><code>Refactor Protoc
installation in CI workflow</code>
</dd></summary>
<hr>
.github/workflows/release.yml
<ul><li>Removed arduino/setup-protoc@v3 action<br> <li> Added Linux
Protoc v21.12 download and install<br> <li> Added Windows Protoc v21.12
download and install<br> <li> Added macOS Protoc installation via
Homebrew</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9800/files#diff-87db21a973eed4fef5f32b267aa60fcee5cbdf03c67fafdc2a9b553bb0b15f34">+21/-5</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
205b9a7503 |
chore: change default memory pool to greedy (#9799)
change default memory pool from fair to greedy |
||
|
|
5a25853ac6 |
fix(e2e): update getSeverityColors selector for robust DOM matching (#9798)
### **User description** ## Summary - Fix severity color test failing due to CSS selector not matching DOM elements - Update `getSeverityColors()` method in logsPage.js with multi-fallback selector strategy ## Problem The original selector `div[class*="tw:absolute"][class*="tw:left-0"]` failed to match elements because Tailwind CSS class names with colons need different escaping in querySelector. **Error:** ``` Expected: 8 Received: 0 ``` ## Solution Implement robust multi-fallback approach: 1. First try inline style selector: `div[style*="background"]` 2. Fallback to escaped class selector: `div[class*="tw\\:absolute"]` 3. Final fallback: iterate through divs to find absolute positioned element with backgroundColor ## Test Results All 8 severity levels now verified successfully: - ✅ Severity 0-7 colors all match expected values - ✅ Test passes in 28.7s ___ ### **PR Type** Bug fix, Tests ___ ### **Description** - Add multi-fallback selector for severity color div - Skip transparent or missing background elements - Broaden severity text pattern matching ___ <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>logsPage.js</strong><dd><code>Robust colorDiv selector and severity parsing</code> </dd></summary> <hr> tests/ui-testing/pages/logsPages/logsPage.js <ul><li>Added inline style selector for background color div<br> <li> Fallback to escaped Tailwind class selector<br> <li> Computed style fallback for absolute-positioned div<br> <li> Skip transparent or missing divs before parsing<br> <li> Extended severity patterns for varied text formats</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9798/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59">+36/-3</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
c31e541f08 |
fix(e2e): update firstConditionLabel selector in pipelinesPage (#9797)
### **User description**
## Summary
- Fix fragile CSS class-based selector for `firstConditionLabel` in
pipeline conditions test
- Replace with robust `data-test` scoped text selector
## Problem
The selector `.tw:flex.tw:items-start.tw:gap-1` failed because Tailwind
classes in the Vue template are space-separated, but the selector tried
to match them as combined without spaces, resulting in "element(s) not
found" error.
## Solution
Changed from:
```javascript
page.locator('.tw\\:flex.tw\\:items-start.tw\\:gap-1').first().locator('span').first()
```
To:
```javascript
page.locator('[data-test="add-condition-section"]').getByText('if', { exact: true }).first()
```
## Test Results
- ✅ Test passes locally (2.1 minutes execution time)
___
### **PR Type**
Tests, Bug fix
___
### **Description**
- Update e2e selector for first condition label
- Replace fragile Tailwind CSS locator
- Use robust `[data-test]` scoped text locator
___
<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>pipelinesPage.js</strong><dd><code>Replace Tailwind
selector with data-test locator</code>
</dd></summary>
<hr>
tests/ui-testing/pages/pipelinesPages/pipelinesPage.js
<ul><li>Removed complex Tailwind CSS selector<br> <li> Added
<code>[data-test="add-condition-section"]</code> locator<br> <li> Used
<code>getByText('if', { exact: true })</code> on first element</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9797/files#diff-d5f2771fd1139c174c46d09a9ab2da0ea4588b853e2b87e4728322d072542f49">+1/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
d852e7656b |
test: refactor alerts module with POM architecture and comprehensive e2e coverage (#9717)
### **User description** ## Summary Complete refactoring of the Alerts UI testing module with Page Object Model architecture, comprehensive E2E test coverage, and improved test stability. ## Key Changes ### 🏗️ Architecture Refactoring Refactored monolithic `AlertsPage` (2300+ lines) into modular Page Object classes: | Module | Responsibility | |--------|---------------| | `AlertCreationWizard` | Alert creation flows (real-time, scheduled, multi-condition, deduplication) | | `AlertManagement` | CRUD operations (update, clone, pause, resume, delete, search) | | `AlertBulkOperations` | Bulk operations (select, pause/unpause, move across folders) | | `AlertsPage` | Main entry point, folder operations, UI validations, import/export | ### 🧪 Test Coverage All 12 Alerts tests passing: | Spec File | Tests | Coverage | |-----------|-------|----------| | `alerts-e2e-flow.spec.js` | 1 | Complete E2E flow: CRUD, clone, pause/resume, move, search | | `alerts-ui-operations.spec.js` | 4 | Template/destination CRUD, scheduled alerts, UI validations | | `alerts-import.spec.js` | 3 | Import/export alerts, templates, destinations (URL + file) | | `alerts-advanced.spec.js` | 4 | Multi-condition alerts, AND/OR toggle, bulk operations, deduplication | ### 🔧 Stability Fixes - Added `test.slow()` for long-running E2E flow test - Fixed `moveAllAlertsToFolder` with proper success message assertion - Fixed `deleteAllAlertsInFolder` by removing redundant verification - Fixed `verifyAlertCreated` with navigation fallback for reliability - Fixed `selectMultipleAlerts` with visibility check and search fallback - Added post-creation waits in alert wizard to handle async UI updates ### 📝 Code Quality - Cleaned up redundant comments across all alerts files - Removed obvious "what" comments, kept meaningful "why" explanations - Preserved section dividers for navigation in long methods - Maintained JSDoc for method documentation ## New Page Object Methods ### AlertCreationWizard - `createAlert()` - Standard real-time alert with column/operator/value - `createAlertWithDefaults()` - Resilient creation using first available column - `createScheduledAlertWithSQL()` - Scheduled alert with SQL query - `createAlertWithMultipleConditions()` - Multi-condition alert with AND operator - `createScheduledAlertWithDeduplication()` - Scheduled alert with dedup config - `testConditionOperatorToggle()` - Tests AND/OR toggle functionality ### AlertManagement - `updateAlert()` - Edit alert via wizard - `cloneAlert()` - Clone with stream selection - `pauseAlert()` / `resumeAlert()` - Toggle alert state - `deleteAlertByRow()` / `deleteImportedAlert()` - Delete operations - `searchAlert()` / `searchAndDeleteAlert()` - Search operations ### AlertBulkOperations - `selectMultipleAlerts()` - Select multiple alerts for bulk ops - `bulkPauseAlerts()` / `bulkUnpauseAlerts()` - Bulk state toggle - `moveAllAlertsToFolder()` - Move alerts between folders - `deleteAllAlertsInFolder()` - Clean folder contents ## Test Results ``` Running 12 tests using 4 workers 12 passed (~6.2m) ``` ## Test Plan - [x] All 12 alerts tests passing locally - [x] Tests are independent and cleanup after themselves - [x] No regressions in existing functionality ___ ### **PR Type** Enhancement, Tests ___ ### **Description** - Refactor AlertsPage into modular PageObjects - Centralize and expose locators in a map - Delegate creation, management, bulk operations - Add advanced E2E tests for multi-condition, bulk, dedup features - Enhance LogsPage.selectStream with configurable wait ___ ### Diagram Walkthrough ```mermaid flowchart LR AP["AlertsPage"] ACW["AlertCreationWizard"] AM["AlertManagement"] ABO["AlertBulkOperations"] AP -- "delegates to" --> ACW AP -- "delegates to" --> AM AP -- "delegates to" --> ABO ``` <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>alertsPage.js</strong><dd><code>Modularize AlertsPage with submodules and locators</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-79ee01d6d7f145f19207b93b87143b545a1188cfc6a82bc8c45fecfbf68f8a1d">+569/-1059</a></td> </tr> <tr> <td><strong>alertManagement.js</strong><dd><code>Introduce AlertManagement module for CRUD</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-53afe97106daddb1fb35c3624ccedc99f21476946edc181f6287f7e8fd1bbf37">+509/-0</a> </td> </tr> <tr> <td><strong>alertCreationWizard.js</strong><dd><code>Introduce AlertCreationWizard module</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-3b0a08b55d132502596d17c9d5f197de6d4779684de96ce570282e2402942e2e">+1024/-0</a></td> </tr> <tr> <td><strong>alertBulkOperations.js</strong><dd><code>Introduce AlertBulkOperations module</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-dea39c18fea38783c9ef4ae71e11021eaa3663b7012ae1c481a30277139a6907">+299/-0</a> </td> </tr> <tr> <td><strong>logsPage.js</strong><dd><code>Enhance selectStream with apiWaitMs parameter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59">+10/-6</a> </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>alerts-advanced.spec.js</strong><dd><code>Add advanced E2E tests for alerts features</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-710af4a4eaad54a1ddd5acf0d62f977bfa18c95462b38c4f84593a970297754d">+194/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>8 files</summary><table> <tr> <td><strong>alertDestinationsPage.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-57e5c53b4ef998b3d8708149620ff94dcc46807927f1a3a9e9f28ed3ebe25b0a">+95/-0</a> </td> </tr> <tr> <td><strong>alertTemplatesPage.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-f4ebd248b2140051e74dbbbd1aabe344f01c80704ce5857e9c28a04350e018f3">+74/-4</a> </td> </tr> <tr> <td><strong>apiCleanup.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-537fe76c0d8e26e81c5f77c83bd0ee35daaa973822105c809bf83171a26b33c5">+133/-221</a></td> </tr> <tr> <td><strong>commonActions.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-4d726dd2bdb34b2c90a31798ff49b6df5bc952bd049b7c38bebb18b6db0076e2">+156/-0</a> </td> </tr> <tr> <td><strong>alerts-e2e-flow.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-32972e38c1fe0e8bb887f9f254b3130916a36f96ea924f9987493d44efefeab9">+38/-23</a> </td> </tr> <tr> <td><strong>alerts-import.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-62b6ec4818685eacc0a934d68aaadfd73b512ef4f4be25fcd5135b97c2844912">+54/-106</a></td> </tr> <tr> <td><strong>alerts-ui-operations.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-c9b523b5f5dea834b69abdf20f4acef361bdf37b1585c450e10238b1d1984f2e">+38/-82</a> </td> </tr> <tr> <td><strong>cleanup.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9717/files#diff-c214275a512fa285a7e4f2ab61dfcb42d71a0436b0e4241f94d7b45693587983">+3/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> |
||
|
|
890e8d7669 |
fix: Node package upgrade v1.8 (#9773)
### **PR Type**
Enhancement
___
### **Description**
- Upgrade Tailwind CSS from v3.4.4 to v4.1.18
- Bump rudder-sdk-js from 2.48.43 to 2.52.7
___
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Dependencies</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>package.json</strong><dd><code>Bump dependency versions
in package.json</code>
</dd></summary>
<hr>
web/package.json
<ul><li>Updated <code>tailwindcss</code> version to ^4.1.18<br> <li>
Updated <code>rudder-sdk-js</code> version to ^2.52.7</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9773/files#diff-b861012a5dd72b8a9f3281b7cf09f5a779c98569d040b1bbc1db50f1b15e7cce">+2/-2</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
780977af2f |
fix: dashboard ui, legends popup now handles differently, tabs name camel case issue (#9794)
### **PR Type** Bug fix, Enhancement ___ ### **Description** - Refactor latency insights unit and decimals logic - Parameterize `showLegendsButton` across dashboards - Simplify legends popup clipboard handling and styling - Fix tab label casing and update localization ___ ### Diagram Walkthrough ```mermaid flowchart LR A["RenderDashboardCharts"] -->|passes showLegendsButton| B["PanelContainer"] B -->|forwards showLegendsButton| C["PanelSchemaRenderer"] C -->|opens popup| D["ShowLegendsPopup"] ``` <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><details><summary>3 files</summary><table> <tr> <td><strong>useLatencyInsightsDashboard.ts</strong><dd><code>Refactor latency unit and decimals logic</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9794/files#diff-960dec4a653d7c079157499a2473d0e87bd8b61463e1c3f633e7682ba763a4b1">+9/-2</a> </td> </tr> <tr> <td><strong>PanelSchemaRenderer.vue</strong><dd><code>Conditionally hide legends button on no data</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9794/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+1/-0</a> </td> </tr> <tr> <td><strong>TabList.vue</strong><dd><code>Remove tab label capitalization</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9794/files#diff-b7b5acd7824f3e257487f316c410abfdad832786288d1b98f27c0c2814729193">+3/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>4 files</summary><table> <tr> <td><strong>PanelContainer.vue</strong><dd><code>Pass `showLegendsButton` from props</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9794/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d">+2/-1</a> </td> </tr> <tr> <td><strong>ShowLegendsPopup.vue</strong><dd><code>Remove clipboard notifications and adjust layout</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9794/files#diff-e02401241391109f2082ad6742374ff47ad79af8abf37a4bfa6ebeaae3f11322">+10/-31</a> </td> </tr> <tr> <td><strong>RenderDashboardCharts.vue</strong><dd><code>Expose `showLegendsButton` prop to panels</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9794/files#diff-313f7c69102161242c893c863c50f1f1cd1fc19b68b5c99bf840b4b5c72f0f2e">+6/-0</a> </td> </tr> <tr> <td><strong>ViewDashboard.vue</strong><dd><code>Enable legends button by default</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9794/files#diff-052badb6758aff09ceaf1645869b9ba96125e6a0ea21abb01a8ee0a40d6467f3">+1/-0</a> </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>Simplify `legendsOfCharts` translation</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9794/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+1/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
e17e8bc5e6 |
fix: when retrying allow user to choose whether to resume from last byte or start from scratch (#9792)
### **PR Type**
Enhancement
When the job is failed, and the user wants to retry manually, ask the
user whether resume should be from the last successful position or from
start again.
___
### **Description**
- Support resume option for enrichment import
- Parse `resume` query param server-side
- Custom UI for resume or fresh restart
- Update JS service to include `resume` param
- Add `RetryJobDialog.vue` component
___
### Diagram Walkthrough
```mermaid
flowchart LR
UI["UI: RetryJobDialog"] -- "confirm resume choice" --> API["POST /api/{org}/enrichment_tables/{table}/url?append=&resume="]
API -- "parse `resume` param" --> Handler["save_enrichment_table_from_url"]
Handler -- "resume logic" --> DB["Job record (resumed or new)"]
```
<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>jstransform.ts</strong><dd><code>Add `resume` param in
request service</code>
</dd></summary>
<hr>
web/src/services/jstransform.ts
<ul><li>Add <code>resume</code> parameter with default false<br> <li>
Append <code>resume</code> to POST request URL</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9792/files#diff-301add2528e0f32323ca4c503bd7d460ab15ca6b9a9537192a02c5e52fd82926">+2/-1</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>mod.rs</strong><dd><code>Support resume logic in import
handler</code>
</dd></summary>
<hr>
src/handler/http/request/enrichment_table/mod.rs
<ul><li>Parse <code>resume</code> query parameter<br> <li> Store
<code>existing_job</code> for resume handling<br> <li> Resume failed
ranged jobs preserving progress<br> <li> Skip range support check when
resuming</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9792/files#diff-7b5b203002d1c3e5f671392a2a8ed84f45225896b652c2dac94ac26e72a43124">+79/-42</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>EnrichmentTableList.vue</strong><dd><code>Integrate
retry dialog into table list</code>
</dd></summary>
<hr>
web/src/components/functions/EnrichmentTableList.vue
<ul><li>Import and register <code>RetryJobDialog</code><br> <li> Manage
<code>showRetryDialog</code> and <code>retryJobData</code><br> <li>
Update <code>retryUrlJob</code> to open dialog<br> <li> Adjust
<code>handleRetryConfirm</code> to pass <code>resume</code></ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9792/files#diff-6a29e253f59405d3c0f756dba36afd7483f10ad86927cbbc3348ede6372c3077">+64/-34</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>RetryJobDialog.vue</strong><dd><code>Add RetryJobDialog
component</code>
</dd></summary>
<hr>
web/src/components/functions/RetryJobDialog.vue
<ul><li>New dialog to choose resume or restart<br> <li> Handles focus
trap and ESC key<br> <li> Displays range support warning<br> <li> Emits
<code>confirm</code> with resume choice</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9792/files#diff-7bc926ef894b5aed7010006e729ede28a2f4931809b154dc81880999b3a7e72f">+638/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
78c96c3721 |
fix: support bulk deletes for various resources (#9153)
### **User description** fixes https://github.com/openobserve/openobserve/issues/9116 This adds support for bulk delete operation from API and UI side for various resources. ___ ### **PR Type** Enhancement ___ ### **Description** - Add bulk delete endpoints for multiple resources - Enforce per-item permission checks before delete - Aggregate successful/failed items in responses - Register bulk-delete routes in HTTP router - Extend UI: add bulk-delete buttons, dialogs, service calls ___ ### Diagram Walkthrough ```mermaid flowchart LR UI["\"UI: Bulk Delete Trigger\""] API["\"HTTP DELETE /{resource}/bulk Handler\""] AUTH["\"Permission Checks per Item\""] DEL["\"Perform Delete Operations Loop\""] RESP["\"Aggregate Response: successes/ failures\""] UI_FE["\"FE: Show Notifications\""] UI -- "calls" --> API API -- "checks" --> AUTH AUTH -- "allowed" --> DEL DEL -- "deletes items" --> RESP RESP -- "returns" --> UI_FE ``` <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>14 files</summary><table> <tr> <td><strong>fga.rs</strong><dd><code>Add bulk delete roles and groups endpoints</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-e7c99f37f3abbb5e0507d2760bbf67df010d9218704b38dce84c5477acecd22e">+218/-6</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Implement delete_alert_bulk handler</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-83431801d27626ef27482e67b62661f900043544a45ddf958bd027cf2fa3bd8d">+87/-6</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Add delete_function_bulk and error types</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-a5e1b3644cef9feb689dfe66382e44e5434ecadbff3469127346a333d4733102">+97/-3</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Add delete_dashboard_bulk endpoint</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-1b3c257e1d174c826718499faa4a1d4e93465dd56cb2b7b273b690ff7e3223fd">+78/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Implement re_patterns delete_bulk logic</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-27d37a8738de89c81b540daa978e684caf2cf28803e1208d90cb4d42528ed28b">+116/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Add users bulk delete handler</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-56897e42f9436a640bc70fddc25686485ba8ae1223635b32d252a0333309f748">+80/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Add service_accounts delete_bulk API</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-095d70f65b6e69bf7de0180fcbcddcd7c89c4cf00095d7b06f039a07e73916bb">+86/-1</a> </td> </tr> <tr> <td><strong>action.rs</strong><dd><code>Implement delete_action_bulk endpoint</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-616df3014c553f763ea57e925f1bff7bb47f9467c632940d93a45b7b1e4c3a07">+90/-1</a> </td> </tr> <tr> <td><strong>destinations.rs</strong><dd><code>Add delete_destination_bulk for alerts</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-76b00293c621036de31cf499c1c276efb9704c2bf8cf1b728f49cfdd43f9fd1b">+75/-4</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Add delete_bulk for cipher_keys</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-043222e433d1e5825a4b7bfc2c7feedba417f2630f0082fa67aff64976736396">+76/-1</a> </td> </tr> <tr> <td><strong>templates.rs</strong><dd><code>Implement delete_template_bulk handler</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-b08e274a64cc935b0cec402a04271a872b1586027a77dc0ccb84c597c3960f61">+73/-4</a> </td> </tr> <tr> <td><strong>pipeline.rs</strong><dd><code>Add delete_pipeline_bulk API handler</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-c69f4f94eee97ce226caddc497b2adf89e26869f2d72b0d0206dc31ab2714daf">+70/-2</a> </td> </tr> <tr> <td><strong>reports.rs</strong><dd><code>Add delete_report_bulk endpoint</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-00435e0d9301342b51cb57ae313f1413e7ed973642e0badf3f3959125d0677d1">+75/-1</a> </td> </tr> <tr> <td><strong>ActionScripts.vue</strong><dd><code>Integrate bulk delete UI in action scripts</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-770f71fcb92a13b3b8b1041567b885fac39903c814825c878595cafa624ebbd8">+284/-5</a> </td> </tr> </table></details></td></tr><tr><td><strong>Configuration changes</strong></td><td><details><summary>3 files</summary><table> <tr> <td><strong>mod.rs</strong><dd><code>Register bulk delete services in router</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+14/-0</a> </td> </tr> <tr> <td><strong>iam.ts</strong><dd><code>Add bulkDeleteGroups and bulkDeleteRoles calls</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-3712c1bb0eecb664b6691d724c3673b8c1befa41efbd8c5de626c5849f8ace98">+10/-0</a> </td> </tr> <tr> <td><strong>dashboards.ts</strong><dd><code>Add bulkDelete service for dashboards</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-913b3f54367036b1b3960aa3eddd7e17b509b1d6011c5ab68ae0e935653179c5">+7/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Error handling</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>auth.rs</strong><dd><code>Allow bulk-delete paths in auth extractor</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-9bc2b1841504a435f66ad094f72ddbe7b7fa75e5e1557b8adbfe36f7f0592e1b">+17/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>user.rs</strong><dd><code>Define bulk delete request/response structs</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-e13b3a981fd70182b9738a6b0ecfdee915c5b36757703a87741e1eddf3f6e786">+36/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Add PipelineBulkDelete meta types</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-c4bd542e4e07ed7706b0643086f5a7d4edbb3647c7ceedbe4bea516c5274d8bd">+12/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>40 files</summary><table> <tr> <td><strong>mod.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-6f9c2e6dbc40f8d40e3d3ecbee23240813a3d4856d49bd5d979f5b98551fdc3d">+12/-0</a> </td> </tr> <tr> <td><strong>service_account.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-878ad520e1c84500cc21ff6fc4088c8da64ff2febd79e60c0d4cc8c695c49798">+11/-0</a> </td> </tr> <tr> <td><strong>action.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-fc87c75a7df9539d7e7ee6184dfab02d4a8932323e81f95d57c05363aa44752d">+15/-0</a> </td> </tr> <tr> <td><strong>reports.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-d2117a3d67d4ec47b0017861845c92143baf917e10e6746df5dd97f925f81eeb">+12/-0</a> </td> </tr> <tr> <td><strong>function.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-27c9f3d93723397a0e234bc45c9f543b43eff5fd518d76e735f78d95a58f3f1c">+12/-0</a> </td> </tr> <tr> <td><strong>requests.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-412f11e06c0e901e2292aab80536cb36edebcc4796dec52923389c3aaa32b25a">+6/-0</a> </td> </tr> <tr> <td><strong>responses.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-224027f90893122eea28e35778467acf1a4b5572ce612fc9bc9ec44ca8ebd9fb">+9/-0</a> </td> </tr> <tr> <td><strong>dashboards.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-250eeebeec9d4ac0ac271466ed83cd33fea3f121080491b340dc95d9af287259">+12/-0</a> </td> </tr> <tr> <td><strong>destinations.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-ecffe114c8200bab742dd2ee4f7f41128aa59438a879634f070edd575a1f917c">+24/-0</a> </td> </tr> <tr> <td><strong>search_stream.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-642de43ff6b19ae41087a9f1efc02d8b0b873809e0c92cbddfac1a30ef3f1184">+1/-0</a> </td> </tr> <tr> <td><strong>utils.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-96bb9f4a8f547c821f26c957e8505d0437095b08d2b36687531f71565d287bd6">+2/-1</a> </td> </tr> <tr> <td><strong>functions.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-ed5611a9aa6b5c033e70d7631ba72fafad3cc842672077a7fcf965d11a4fef23">+22/-31</a> </td> </tr> <tr> <td><strong>AppTable.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-efcf66a9e913b5d3a7c2eea800b7f4e54d9e5268307131482fd40f32e2074d8e">+72/-16</a> </td> </tr> <tr> <td><strong>AlertList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-be3e41b823e163b226ffc270d95cc4981e59c600851e4e0d10ee5e4ee994ac8e">+123/-2</a> </td> </tr> <tr> <td><strong>AlertsDestinationList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-e9d05ba6c071c0e2f5d9ef7acdef757f79910abd6897b29e27b069a10d4ba8de">+142/-5</a> </td> </tr> <tr> <td><strong>PipelinesDestinationList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-088c66f5a34e73a5350a794a772e5d905262277337c937dd36f4295072203ebf">+163/-28</a></td> </tr> <tr> <td><strong>TemplateList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-7df66364d7d69a26cfa25cbc555d0e090c2f73e51c8386d9b0435bae4412564c">+116/-27</a></td> </tr> <tr> <td><strong>EnrichmentTableList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-6a29e253f59405d3c0f756dba36afd7483f10ad86927cbbc3348ede6372c3077">+124/-13</a></td> </tr> <tr> <td><strong>FunctionList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-6ff9af50a1597504b7f0dca91e61cf30c800b4a17b4be2ed2c3a4f7a7b2d7068">+143/-6</a> </td> </tr> <tr> <td><strong>AppGroups.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-402fb2a5338e60fdc3da489f4d50b5cf52f06b4e884a6fe7b82441c9fa5ea22c">+86/-1</a> </td> </tr> <tr> <td><strong>AppRoles.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-191634ef09436199f91f442968110a01f54ae46b5ceee67476f52613ad796db4">+86/-1</a> </td> </tr> <tr> <td><strong>EditRole.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-263b6bc7d29fdf8358c8437cd637f1350aa3733cc2706eae8ff00028686cc0f5">+20/-0</a> </td> </tr> <tr> <td><strong>ServiceAccountsList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-3afe835bcfbec3fda2e9550850c29581092ee0717e7dd8de8888e774a0048d24">+114/-1</a> </td> </tr> <tr> <td><strong>User.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-e973c2a665f9b27b94673ba64cc5b23650300836a727a2e07673c8e26305aee5">+133/-3</a> </td> </tr> <tr> <td><strong>PipelinesList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-85e3ef322f3eea0fc6d74d89431ba338a1153cb82ee06bef0f7c5f439c04267d">+108/-2</a> </td> </tr> <tr> <td><strong>ReportList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-f7d700f7e67fbaba3c58ab5d2c614925db743101828214445ce9dae35dc29067">+157/-5</a> </td> </tr> <tr> <td><strong>CipherKeys.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-950b715cff2c964d8542512692030c370733b57d698abf40e1dcb3cce2cfaf7a">+104/-13</a></td> </tr> <tr> <td><strong>RegexPatternList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-524927acd9f5bb07b71bfac489e747470108574e21a6dde63ea7c1f219cea853">+109/-14</a></td> </tr> <tr> <td><strong>action_scripts.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-6c1a011ac23290134801b22feb2b50c2b19cabf2a009f37a62b4dd9ca6e415e3">+3/-0</a> </td> </tr> <tr> <td><strong>alert_destination.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-377d28822e9ad4e9e80327ecc2d09bf1981c7997c5f1c1de120c6179eef19c6e">+3/-0</a> </td> </tr> <tr> <td><strong>alert_templates.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-fd8c4260abc3df601e4331d36b0c211eca568ee70139ad90c87247bc552fe4e2">+3/-0</a> </td> </tr> <tr> <td><strong>alerts.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-7a62782cceacac92b787e058219b3c53ea7406d4be5780def899943a01f500c1">+7/-0</a> </td> </tr> <tr> <td><strong>cipher_keys.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-0a0ef3a63c29b2a74b7f904c54c3fb32bee421608474aa32334b7c55133ab1ef">+3/-0</a> </td> </tr> <tr> <td><strong>jstransform.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-301add2528e0f32323ca4c503bd7d460ab15ca6b9a9537192a02c5e52fd82926">+3/-0</a> </td> </tr> <tr> <td><strong>pipelines.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-e8626670bb4e46e073f9858ade6b3dc77eaadf39d6721d9c0006eccc1b430612">+8/-0</a> </td> </tr> <tr> <td><strong>regex_pattern.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-2a0b0828141d39ab0385e0941314ead1cdd2ec3ec7b3baf5fd0c42f8f010728a">+3/-0</a> </td> </tr> <tr> <td><strong>reports.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-32d3299b2b21dc57c39d01080baba03765d853bd05c82d6158834b54713ae825">+3/-0</a> </td> </tr> <tr> <td><strong>service_accounts.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-4038191b0dc0cad335f3d8f7f703505df905ad843fe950096aefb8abbd139a1e">+4/-1</a> </td> </tr> <tr> <td><strong>users.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-a334d8d570d9bdcaa3d4c8c2a993eff009a1ec8eb499c8a3d1a292d9224159d0">+3/-0</a> </td> </tr> <tr> <td><strong>Dashboards.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9153/files#diff-8da3187db8ce3d795d0f196ede6b2290221ffa3e27b15dcc2b645e44dd196213">+122/-6</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> |
||
|
|
12e73bcf18 |
fix: Register PromQL language for monaco-editor and metrics UI fixes (#9793)
### **PR Type**
Bug fix
___
### **Description**
- Register `promql` language in onMounted hook of CodeQueryEditor.vue
___
<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>CodeQueryEditor.vue</strong><dd><code>Add PromQL
language registration</code>
</dd></summary>
<hr>
web/src/components/CodeQueryEditor.vue
<ul><li>Add condition check for <code>promql</code> language<br> <li>
Invoke <code>monaco.languages.register({ id: "promql" })</code></ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9793/files#diff-52a36bf2d64e590036ed1c1f89b07a4a6b971a84e4fae9b4272cbc69d63f9bef">+3/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Sai Nikhil <nikhil@openobserve.ai>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
|
||
|
|
0c7d3f7485 |
refactor: cache version v3 centralize cache file_path computation (#9653)
## **Refactor: Centralize cache file path computation v3**
Moves cache file path and histogram metadata calculation to
`prepare_cache_response()` to ensure consistent values across all code
paths.
### **Key changes:**
- Extract `compute_cache_file_path()` and
`refine_is_descending_for_histogram()` helper functions
- Compute `file_path`, `ts_column`, and `is_descending` once before
calling `check_cache()`
- Remove duplicate logic that was recalculating these values in multiple
locations
- and **fixes a critical bug** where the same query generated different
cache hashes.
### **Why:**
Previously, file path components (histogram interval, ts_column) were
computed at different stages, leading to inconsistent cache lookups.
This refactor ensures cache metadata is computed once with the same
refined values, preventing cache misses and duplicate cache entries.
### **Bug Fixed:**
The main branch had inconsistent SQL hashing that caused cache misses
and duplicate cache entries:
- **First request**: SQL hashed before normalization →
`histogram(_timestamp)` → Hash A
- **Subsequent requests**: SQL hashed after normalization →
`histogram(_timestamp,'3600 second')` → Hash B
- **Result**: Same query generates different hashes, causing cache
misses and duplicate cache files
**Proof from logs:**
```
Main branch (buggy):
Request 1: hash_input = "v2,SELECT histogram(_timestamp) AS..." ← Hash: 680371199371727182
Request 2: hash_input = "v2,SELECT histogram(_timestamp,'3600 second')..." ← Hash: 9214012975698861238
Fix branch (correct):
Request 1: hash_input = "v2,SELECT histogram(_timestamp,'3600 second')..." ← Hash: 9214012975698861238
Request 2: hash_input = "v2,SELECT histogram(_timestamp,'3600 second')..." ← Hash: 9214012975698861238
```
___
### **PR Type**
Enhancement, Bug fix
___
### **Description**
- Pre-parse SQL and normalize histogram
- Compute ts_column, is_descending, file_path early
- Simplify check_cache signature and logic
- Add helper funcs for file_path and descending
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["prepare_cache_response"] --> B["parse SQL & normalize histogram"]
B --> C["compute hash"]
C --> D["refine ts_column & is_descending"]
D --> E["compute_file_path"]
E --> F["check_cache"]
F --> G["MultiCachedQueryResponse"]
```
<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>cacher.rs</strong><dd><code>Simplify check_cache
signature and logic</code>
</dd></summary>
<hr>
src/service/search/cache/cacher.rs
<ul><li>Updated <code>check_cache</code> signature and parameters<br>
<li> Removed inline SQL parsing and path logic<br> <li> Uses precomputed
<code>sql</code>, <code>result_ts_col</code>,
<code>is_descending</code>, <code>file_path</code><br> <li> Added
helpers <code>compute_cache_file_path</code> and
<br><code>refine_is_descending_for_histogram</code></ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9653/files#diff-8c387b22b2c0a282600ee41ca702b3db60f5a284d507c0feb7418608ff062c6c">+123/-92</a></td>
</tr>
<tr>
<td>
<details>
<summary><strong>mod.rs</strong><dd><code>Precompute SQL metadata & file
path</code>
</dd></summary>
<hr>
src/service/search/cache/mod.rs
<ul><li>Moved SQL parsing and histogram normalization to
<br><code>prepare_cache_response</code><br> <li> Refined
<code>ts_column</code> and <code>is_descending</code> before hash
computation<br> <li> Computed <code>file_path</code> once using new
helper<br> <li> Simplified cache vs non-cache branches</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9653/files#diff-f07bfacc0501b9c234e64b16c1dd8eb0ae8fcbe231f90c81fed72bcc94946f74">+83/-33</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
6cc7caf6c3 |
fix: only origin region ingesters should process the enrichment table url job (#9782)
### **User description** Currently, when the enrichment table url job is created, it is only processed by the ingesters of the same origin region which is correct. But, the background job responsible for reprocessing the stale jobs can process enrichment table url from other regions as well which is not ideal. This pr, adds a is_local_region field to the enrichment_table_urls table to indicate whether the db record was created in the same region. The background job in ingesters to process stale jobs, hence, now only process the jobs created in that region. This change applies to only the background jobs that processes stale jobs to ensure enrichment table data is present only in the origin region. The actual job processing (when the user creates the job) happens through router and hence is always processed by the ingesters of origin region. ___ ### **PR Type** Bug fix, Enhancement ___ ### **Description** - Add `is_local_region` flag to URL jobs - Filter stale-job recovery by `is_local_region` - Initialize URL processor on ingester startup - Mark remote jobs with `is_local_region=false` ___ ### Diagram Walkthrough ```mermaid flowchart LR JC["URL Job Created\n(is_local_region=true)"] RC["Remote Job Received\n(is_local_region=false)"] DB["enrichment_table_urls\ndatabase record"] SJ["Stale Job Recovery\n(filters is_local_region=true)"] JC -- "save_url_job" --> DB RC -- "super_cluster_queue.put" --> DB SJ -- "claim_stale_jobs" --> DB ``` <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>6 files</summary><table> <tr> <td><strong>enrichment_table_urls.rs</strong><dd><code>Add and propagate `is_local_region` field</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9782/files#diff-e9ba1ba6e742e8d7652c3f31765de43bee061e7983bca67ffefecf8590210188">+11/-6</a> </td> </tr> <tr> <td><strong>enrichment_table_urls.rs</strong><dd><code>Include `is_local_region` in ORM model</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9782/files#diff-9c3081476927bd337b2cbed8310578869845a6137a2c5305f677affb7604d39f">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Initialize URL processor at startup</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9782/files#diff-f2e4c29b8eef22189ec704a832633c4bd135a24444f054864c98064bd0963681">+7/-0</a> </td> </tr> <tr> <td><strong>enrichment_table.rs</strong><dd><code>Set `is_local_region=true` on new jobs</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9782/files#diff-6ce27ddf8a0d8b4e790bda90d088ff692a5da31a8d330beea8a9dd843294572b">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Re-export `init_url_processor` function</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9782/files#diff-3e2b6d3b8da1f9e73aca279052a97e683184d68256c23215b18ffee885836bbf">+3/-0</a> </td> </tr> <tr> <td><strong>url_processor.rs</strong><dd><code>Add `init_url_processor` for recovery task</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9782/files#diff-d39589e34157fe7930563b9bc5740128e168b8d8ac0a90371a4bdf1e52ce058b">+39/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Configuration changes</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>m20251226_000001_add_enrichment_table_urls_is_local_region.rs</strong><dd><code>Migration: add `is_local_region` column</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9782/files#diff-25f7d4220c44499608e8b139ba530335a1426f81988fae2e48d1b41aaacdfb05">+80/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Register new region-flag migration</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9782/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+2/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Bug fix</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>pipelines.rs</strong><dd><code>Mark remote jobs `is_local_region=false`</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9782/files#diff-7c8aa678045dd00de89d4c2345cf4a0511ce9bfac5d6f64e7404178c81e541ad">+3/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com> |
||
|
|
1c5981a35b | fix: update Chinese translations in zh.json (#9786) | ||
|
|
b1b8e9273a |
fix: incident drawer changes (#9783)
### **PR Type**
Enhancement
___
### **Description**
- Revamped header with compact badges
- Added collapsible table of contents sidebar
- Upgraded timeline, dimensions, topology layouts
- Enhanced RCA rendering with markdown sanitizer
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Incident Detail Drawer"] --> B["Compact Badges"]
A --> C["Table of Contents Sidebar"]
A --> D["RCA Markdown Rendering"]
```
<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>IncidentDetailDrawer.vue</strong><dd><code>Refactor
IncidentDetailDrawer layout and logic</code>
</dd></summary>
<hr>
web/src/components/alerts/IncidentDetailDrawer.vue
<ul><li>Redesigned header to show status, severity, alerts badges<br>
<li> Introduced a dynamic collapsible Table of Contents section<br> <li>
Refactored timeline, dimensions, topology layouts<br> <li> Implemented
markdown parsing & sanitized RCA content</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9783/files#diff-6973d58a5f49658b07d3533d4db5d32cc6430433b51732481e7497243dadb0b0">+707/-271</a></td>
</tr>
</table></td></tr><tr><td><strong>Formatting</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>RcaReport.scss</strong><dd><code>Add RCA report SCSS
styling</code>
</dd></summary>
<hr>
web/src/components/alerts/RcaReport.scss
<ul><li>Added themeable CSS variables for RCA report styling<br> <li>
Defined styles for headers, lists, code blocks, tables<br> <li> Included
dark mode color overrides</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9783/files#diff-2f19f394cb1da38b9b996c7f4a31aace8468dd85c900b43391efb6852511a617">+241/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
511f2389c6 | feat: new db migration (#9774) |