Commit Graph
4937 Commits
Author SHA1 Message Date
mmosarafO2andgreptile-apps[bot] 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.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>&nbsp;
&nbsp; </td>

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

</details>

___

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-01-06 10:09:34 +05:30
mmosarafO2andgreptile-apps[bot] 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; </td>

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

</details>

___

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-01-06 07:36:17 +05:30
Hengfei Yang c96605a093 fix: metrics streaming partition (#9839) 2026-01-06 01:07:10 +08:00
Bhargav f0527b9267 fix: UI tailwind changes (#9836)
issue #9539
2026-01-05 18:29:10 +05:30
Huaijin bc5143610d chore: support dashboard placeholder other type (#9840) 2026-01-05 19:57:15 +08:00
Shrinath Rao 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>&nbsp; &nbsp; &nbsp; &nbsp;
</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>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>commonActions.js</strong><dd><code>Use
`alert-list-page` in navigation check</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/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>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>alertsIncidentsTabs.spec.js</strong><dd><code>Remove
legacy alertsIncidentsTabs spec</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/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>&nbsp;
</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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-05 16:37:06 +05:30
Ashish Kolheandgreptile-apps[bot] 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; </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>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
</td>

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

</details>

___

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-01-05 15:37:23 +05:30
ktx-vaidehi 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>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-05 15:02:35 +05:30
ByteBaker 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.
2026-01-05 14:05:53 +05:30
Sai Nikhil 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
2026-01-05 12:32:10 +05:30
ktx-vaidehiandktx-riya 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>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</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>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>convertSQLData.ts</strong><dd><code>Implement dynamic
axis label rotation and spacing</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9808/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>convertDataIntoUnitValue.ts</strong><dd><code>Introduce
dynamic nameGap and bottom space functions</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9808/files#diff-14c6fe442ef231566ec411f9e0262cdd24ec912fc67b9154eec743282ab7211a">+88/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>convertPromQLData.ts</strong><dd><code>Integrate
rotation/truncate logic into PromQL converter</code>&nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9808/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+57/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>convertSQLData.ts</strong><dd><code>Apply dynamic spacing
and truncation in SQL converter</code>&nbsp; &nbsp; &nbsp; &nbsp;
</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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9808/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+127/-0</a>&nbsp;
</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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9808/files#diff-2769044ec488ef4070c2e1a28ce23ec36b945e46c903b870f8b340cbd6b05211">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>convertSQLData.spec.ts</strong><dd><code>Mock new spacing
utilities in SQL tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9808/files#diff-1dc85f7550b15820974ad93fa461de48d24bc5cbed621bffddb27250211fa88d">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Add schema fields for axis
rotate/truncate</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9808/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: ktx-riya <riya.kukadiya@kiara.tech>
2026-01-03 22:33:01 +05:30
Hengfei Yang 4adc0ef19d fix: add stream support for Prometheus query range endpoint in router (#9828) 2026-01-03 21:47:32 +08:00
ktx-riya 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</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>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>AddPanel.vue</strong><dd><code>Adjust add panel button
group and dropdown styles</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-03 13:18:50 +05:30
Hengfei Yang ec021ac29e perf: optimize MCP tools - reduce size from 643KB to 123KB (#9825) 2026-01-03 14:47:15 +08:00
Sai Nikhilandgithub-actions[bot] 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-9af441af191d3254ef5f9db603dca75486de7638cda41a3c050e7b3c33d68280">+8/-9</a>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>en.json</strong><dd><code>Add `viewButton` and
`noDataAvailable` translations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>es.json</strong><dd><code>Add `viewButton` and
`noDataAvailable` translations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>fr.json</strong><dd><code>Add `viewButton` and
`noDataAvailable` translations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>it.json</strong><dd><code>Add `viewButton` and
`noDataAvailable` translations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>ja.json</strong><dd><code>Add `viewButton` and
`noDataAvailable` translations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>ko.json</strong><dd><code>Add `viewButton` and
`noDataAvailable` translations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>nl.json</strong><dd><code>Add `viewButton` and
`noDataAvailable` translations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>pt.json</strong><dd><code>Add `viewButton` and
`noDataAvailable` translations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>tr.json</strong><dd><code>Add `viewButton` and
`noDataAvailable` translations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>zh.json</strong><dd><code>Add `viewButton` and
`noDataAvailable` translations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9827/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-03 09:14:01 +05:30
Sai Nikhilandgithub-actions[bot] 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>
2026-01-03 01:11:47 +05:30
ByteBakerandsai nikhil kethe 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>
2026-01-02 22:02:45 +05:30
ByteBaker 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).
2026-01-02 20:34:50 +05:30
Omkar Kesarkhane 67707c98d6 feat: Updated RUM Web Vitals (#9610)
#9611 
Design at: rum
2026-01-02 19:34:21 +05:30
Bhargav 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>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </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>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>useSearchPagination.spec.ts</strong><dd><code>Add tests
for search pagination composable</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </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>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>useSearchResponseHandler.spec.ts</strong><dd><code>Add
tests for search response handler composable</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
</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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; </td>

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

</details>

___
2026-01-02 18:32:23 +05:30
Ashish Kolhe 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></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>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

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>&nbsp;
</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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/pages/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>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>alertsIncidentsTabs.spec.js</strong><dd><code>Add E2E
tests for alerts/incidents tabs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/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>&nbsp;
</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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-02 14:11:31 +05:30
Sai Nikhil 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>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-02 12:00:15 +05:30
Hengfei Yang 0e4228dcff perf: add runtime module for metrics (#9813) 2026-01-02 10:46:19 +08:00
dependabot[bot] 77c1f31ca8 chore(deps): bump qs from 6.14.0 to 6.14.1 in /tests/ui-testing (#9816) 2026-01-02 10:03:06 +08:00
Subhra264 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
2026-01-01 23:05:23 +05:30
Abhay Padamani 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-01 12:16:49 +05:30
Shrinath Rao 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/pages/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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

tests/ui-testing/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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-12-31 00:10:51 +05:30
Shrinath Rao 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>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; </td>

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

</details>

___
2025-12-30 22:38:08 +05:30
Shrinath Rao 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
</td>

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

</details>

___
2025-12-30 20:21:42 +05:30
Huaijin 0d175c09fd chore: support streaming agg read cache when disable/enable utf8view (#9803) 2025-12-30 21:58:57 +08:00
Bhargav 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

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>&nbsp;
&nbsp; </td>

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

</details>

___
2025-12-30 16:56:01 +05:30
Shrinath Rao 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>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </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>&nbsp;
</td>

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

</details>

___
2025-12-30 16:06:40 +05:30
Shrinath Rao 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

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

<ul><li>Added 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>&nbsp;
&nbsp; </td>

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

</details>

___
2025-12-30 14:09:53 +05:30
Harsh Mahajan 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9668/files#diff-a2013af1b2d85aa34e8d231e2202040bbe9b8009804313f75dcb66911bea2964">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>sessions.rs</strong><dd><code>Update session CRUD with
expiry support</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9668/files#diff-945b60afd1f074c5f3bf875317896181829b19153938184bad9098c75ab44b48">+28/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Integrate session cleanup into job
runner</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9668/files#diff-f2e4c29b8eef22189ec704a832633c4bd135a24444f054864c98064bd0963681">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>session_cleanup.rs</strong><dd><code>Implement periodic
session cleanup job</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9668/files#diff-915b64283bb4276302456f6a55051d05fa2a84a6277fa67a6c7c07754c11084d">+97/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>session.rs</strong><dd><code>Enforce session expiry in DB
operations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9668/files#diff-64311ff8ef53118e7611a2a2a28c5380a0e8b8213139b2c2108c728b1d460a2b">+10/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>session.rs</strong><dd><code>Parse JWT expiry for new
sessions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9668/files#diff-2d2f0c7a3be0a3d7d953c01974be5e093c8d42953952e435bc7b3a0faed6bf38">+57/-1</a>&nbsp;
&nbsp; </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>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9668/files#diff-2b5fc5dc47adab6e5bedf32e7b3da8cba22455d9ade119196acabe31dfc58bd2">+86/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Register expires_at migration in
migrator</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9668/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-12-30 13:31:02 +05:30
Bhargavandomkark06 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: omkark06 <omkar@zinclabs.io>
2025-12-30 12:08:04 +05:30
mmosarafO2 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</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>&nbsp;
&nbsp; </td>

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

</details>

___
2025-12-30 11:35:56 +05:30
Huaijin 205b9a7503 chore: change default memory pool to greedy (#9799)
change default memory pool from fair to greedy
2025-12-30 11:40:29 +08:00
Shrinath Rao 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

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

<ul><li>Added 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>&nbsp;
&nbsp; </td>

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

</details>

___
2025-12-29 23:31:41 +05:30
Shrinath Rao 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-12-29 22:12:56 +05:30
Shrinath RaoandClaude Opus 4.5 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9717/files#diff-53afe97106daddb1fb35c3624ccedc99f21476946edc181f6287f7e8fd1bbf37">+509/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>alertCreationWizard.js</strong><dd><code>Introduce
AlertCreationWizard module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9717/files#diff-3b0a08b55d132502596d17c9d5f197de6d4779684de96ce570282e2402942e2e">+1024/-0</a></td>

</tr>

<tr>
<td><strong>alertBulkOperations.js</strong><dd><code>Introduce
AlertBulkOperations module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9717/files#diff-dea39c18fea38783c9ef4ae71e11021eaa3663b7012ae1c481a30277139a6907">+299/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>logsPage.js</strong><dd><code>Enhance selectStream with
apiWaitMs parameter</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9717/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59">+10/-6</a>&nbsp;
&nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9717/files#diff-710af4a4eaad54a1ddd5acf0d62f977bfa18c95462b38c4f84593a970297754d">+194/-0</a>&nbsp;
</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>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; </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>&nbsp;
</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>&nbsp;
</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>&nbsp;
</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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 21:07:00 +05:30
Bhargav 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-12-29 20:00:34 +05:30
ktx-kirtan 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9794/files#diff-960dec4a653d7c079157499a2473d0e87bd8b61463e1c3f633e7682ba763a4b1">+9/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>PanelSchemaRenderer.vue</strong><dd><code>Conditionally hide
legends button on no data</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9794/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>TabList.vue</strong><dd><code>Remove tab label
capitalization</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9794/files#diff-b7b5acd7824f3e257487f316c410abfdad832786288d1b98f27c0c2814729193">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>4
files</summary><table>
<tr>
<td><strong>PanelContainer.vue</strong><dd><code>Pass
`showLegendsButton` from props</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9794/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>ShowLegendsPopup.vue</strong><dd><code>Remove clipboard
notifications and adjust layout</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9794/files#diff-e02401241391109f2082ad6742374ff47ad79af8abf37a4bfa6ebeaae3f11322">+10/-31</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>RenderDashboardCharts.vue</strong><dd><code>Expose
`showLegendsButton` prop to panels</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9794/files#diff-313f7c69102161242c893c863c50f1f1cd1fc19b68b5c99bf840b4b5c72f0f2e">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>ViewDashboard.vue</strong><dd><code>Enable legends button by
default</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9794/files#diff-052badb6758aff09ceaf1645869b9ba96125e6a0ea21abb01a8ee0a40d6467f3">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>en.json</strong><dd><code>Simplify `legendsOfCharts`
translation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9794/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-12-29 18:41:09 +05:30
Subhra264 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Support resume logic in import
handler</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </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>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>EnrichmentTableList.vue</strong><dd><code>Integrate
retry dialog into table list</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>RetryJobDialog.vue</strong><dd><code>Add RetryJobDialog
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </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>&nbsp;
</td>

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

</details>

___
2025-12-29 17:57:15 +05:30
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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-e7c99f37f3abbb5e0507d2760bbf67df010d9218704b38dce84c5477acecd22e">+218/-6</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Implement delete_alert_bulk
handler</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-83431801d27626ef27482e67b62661f900043544a45ddf958bd027cf2fa3bd8d">+87/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Add delete_function_bulk and error
types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-a5e1b3644cef9feb689dfe66382e44e5434ecadbff3469127346a333d4733102">+97/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Add delete_dashboard_bulk
endpoint</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-1b3c257e1d174c826718499faa4a1d4e93465dd56cb2b7b273b690ff7e3223fd">+78/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Implement re_patterns delete_bulk
logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-27d37a8738de89c81b540daa978e684caf2cf28803e1208d90cb4d42528ed28b">+116/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Add users bulk delete
handler</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-56897e42f9436a640bc70fddc25686485ba8ae1223635b32d252a0333309f748">+80/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Add service_accounts delete_bulk
API</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-095d70f65b6e69bf7de0180fcbcddcd7c89c4cf00095d7b06f039a07e73916bb">+86/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>action.rs</strong><dd><code>Implement delete_action_bulk
endpoint</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-616df3014c553f763ea57e925f1bff7bb47f9467c632940d93a45b7b1e4c3a07">+90/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>destinations.rs</strong><dd><code>Add
delete_destination_bulk for alerts</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-76b00293c621036de31cf499c1c276efb9704c2bf8cf1b728f49cfdd43f9fd1b">+75/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Add delete_bulk for
cipher_keys</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-043222e433d1e5825a4b7bfc2c7feedba417f2630f0082fa67aff64976736396">+76/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>templates.rs</strong><dd><code>Implement
delete_template_bulk handler</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-b08e274a64cc935b0cec402a04271a872b1586027a77dc0ccb84c597c3960f61">+73/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>pipeline.rs</strong><dd><code>Add delete_pipeline_bulk API
handler</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-c69f4f94eee97ce226caddc497b2adf89e26869f2d72b0d0206dc31ab2714daf">+70/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>reports.rs</strong><dd><code>Add delete_report_bulk
endpoint</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-00435e0d9301342b51cb57ae313f1413e7ed973642e0badf3f3959125d0677d1">+75/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ActionScripts.vue</strong><dd><code>Integrate bulk delete UI
in action scripts</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-770f71fcb92a13b3b8b1041567b885fac39903c814825c878595cafa624ebbd8">+284/-5</a>&nbsp;
</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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+14/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>iam.ts</strong><dd><code>Add bulkDeleteGroups and
bulkDeleteRoles calls</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-3712c1bb0eecb664b6691d724c3673b8c1befa41efbd8c5de626c5849f8ace98">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>dashboards.ts</strong><dd><code>Add bulkDelete service for
dashboards</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-913b3f54367036b1b3960aa3eddd7e17b509b1d6011c5ab68ae0e935653179c5">+7/-0</a>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-9bc2b1841504a435f66ad094f72ddbe7b7fa75e5e1557b8adbfe36f7f0592e1b">+17/-1</a>&nbsp;
&nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-e13b3a981fd70182b9738a6b0ecfdee915c5b36757703a87741e1eddf3f6e786">+36/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Add PipelineBulkDelete meta
types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9153/files#diff-c4bd542e4e07ed7706b0643086f5a7d4edbb3647c7ceedbe4bea516c5274d8bd">+12/-0</a>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
</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>&nbsp;
</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>&nbsp;
</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>&nbsp;
</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>&nbsp;
</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>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; </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>&nbsp;
</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>&nbsp;
</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>&nbsp;
</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>&nbsp;
</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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
</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>
2025-12-29 16:37:29 +05:30
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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

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>&nbsp;
&nbsp; &nbsp; </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>
2025-12-29 15:50:28 +05:30
Loakesh Indiran 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

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>&nbsp;
</td>

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

</details>

___
2025-12-29 13:48:42 +05:30
Subhra264andHengfei Yang 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9782/files#diff-e9ba1ba6e742e8d7652c3f31765de43bee061e7983bca67ffefecf8590210188">+11/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>enrichment_table_urls.rs</strong><dd><code>Include
`is_local_region` in ORM model</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9782/files#diff-9c3081476927bd337b2cbed8310578869845a6137a2c5305f677affb7604d39f">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Initialize URL processor at
startup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9782/files#diff-f2e4c29b8eef22189ec704a832633c4bd135a24444f054864c98064bd0963681">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>enrichment_table.rs</strong><dd><code>Set
`is_local_region=true` on new jobs</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9782/files#diff-6ce27ddf8a0d8b4e790bda90d088ff692a5da31a8d330beea8a9dd843294572b">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Re-export `init_url_processor`
function</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9782/files#diff-3e2b6d3b8da1f9e73aca279052a97e683184d68256c23215b18ffee885836bbf">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>url_processor.rs</strong><dd><code>Add `init_url_processor`
for recovery task</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9782/files#diff-d39589e34157fe7930563b9bc5740128e168b8d8ac0a90371a4bdf1e52ce058b">+39/-0</a>&nbsp;
&nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9782/files#diff-25f7d4220c44499608e8b139ba530335a1426f81988fae2e48d1b41aaacdfb05">+80/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Register new region-flag
migration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9782/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+2/-0</a>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9782/files#diff-7c8aa678045dd00de89d4c2345cf4a0511ce9bfac5d6f64e7404178c81e541ad">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
2025-12-29 13:12:51 +05:30
Hengfei Yang 1c5981a35b fix: update Chinese translations in zh.json (#9786) 2025-12-29 14:50:50 +08:00
Sai Nikhil 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>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></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>&nbsp;
</td>

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

</details>

___
2025-12-28 15:10:00 +05:30
Hengfei Yang 511f2389c6 feat: new db migration (#9774) 2025-12-27 21:05:07 +08:00