Commit Graph
4970 Commits
Author SHA1 Message Date
Ashish KolheandClaude Opus 4.5 ce09cd0a4d feat: add js for claim parser (#9873)
### **User description**
Design at : security/sso-claim-parser/configuration.md


___

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


___

### **Description**
- Introduce rquickjs-based JS runtime for functions

- Add compile_js_function and apply_js_fn utilities

- Extend pipeline to support JS via CompiledFunctionRuntime

- Update web UI: select JS/VRL transforms, show JS errors


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["FunctionNode"] -->|JS| B["compile_js_function"]
  A -->|VRL| C["compile_vrl_function"]
  B --> D["apply_js_fn"]
  C --> E["apply_vrl_fn"]
  D --> F["send to children"]
  E --> F
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>13
files</summary><table>
<tr>
<td><strong>function.ts</strong><dd><code>Add optional `trans_type` to
TestFunctionPayload</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-c6766f6c671adce05f9eef5d4a57a32371fa7da35628ef5c142fa503d191cb16">+16/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>js.rs</strong><dd><code>Introduce JS runtime, compile and
apply functions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-88e490bed5fa6c9c8e0aa2738b95c5284bb97899298f54b9cd587713e3ef0109">+756/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>batch_execution.rs</strong><dd><code>Extend pipeline
execution to handle JS functions</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-3f6824a6eddaf1603e5cb0f1a4311ac6a45e1ffb967266ccc1f0bba944625e69">+465/-96</a></td>

</tr>

<tr>
<td><strong>functions.rs</strong><dd><code>Validate and test-run JS
transforms, restrict to _meta</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-ed5611a9aa6b5c033e70d7631ba72fafad3cc842672077a7fcf965d11a4fef23">+319/-35</a></td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Forbid JavaScript functions in
pipelines globally</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-c186c796a7bdfd9d1301b1429df11456430f1d0d4758783810b9e2e44384e3b2">+39/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>jwt.rs</strong><dd><code>Add JS claim parser execution
function</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/9873/files#diff-232cab74f4cbf135af424744272e17732fbda8ac005d33c0acb4597e65479d02">+25/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Wrap JS compile/apply in ingestion
API</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/9873/files#diff-7c7b5bca85f0ced652965cae66540c96f56dfcca4f4c16b77bf7b45aac203d1b">+24/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Include `trans_type` in
test_function API payload</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-a5e1b3644cef9feb689dfe66382e44e5434ecadbff3469127346a333d4733102">+8/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddFunction.vue</strong><dd><code>UI: add JS/VRL transform
type selector</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/9873/files#diff-ebfd6c538f3cd3ecb9ab17550fd76e2e89e7a1abccc83a7505077e4af3eee110">+42/-25</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>FunctionsToolbar.vue</strong><dd><code>Toolbar: transform
type radio buttons</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/9873/files#diff-8283d2ff9c4a66b4b59eac306672aca2d54655a462e2ddb88e14e039d79dcdaf">+51/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>DomainManagement.vue</strong><dd><code>Track claim-parser
function changes for save button</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-5e47cd01fcb63f7ef27dc64d2ecf66c39e17097e29944951c3ae1bfe715bb97c">+17/-9</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>TestFunction.vue</strong><dd><code>Support JS error
messaging in test UI</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/9873/files#diff-b9af9a2d1bf04d23422c26a13e6a763c6953c8713357a2f64ed8073ce6c926a3">+15/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>PipelineEditor.vue</strong><dd><code>Filter out JS functions
in pipeline editor UI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-68c21f647336067eb79737ce9aca2d49632f2fa1c0878bcfdae55607e3473a15">+12/-4</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>function.rs</strong><dd><code>Extend `Transform` model for
JS 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/9873/files#diff-27c9f3d93723397a0e234bc45c9f543b43eff5fd518d76e735f78d95a58f3f1c">+16/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Register new `js` utils
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-2aa59ce4464e7dbabdb9367fc8bb8c1b489c914b8690577d4916870463ab12db">+1/-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>errors.rs</strong><dd><code>Rename
`MemoryTableOverflowError` display message</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-bf45932466265b732f13d0cd9b9cffbaefbe37c5861ace9315449eeca9250713">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>3
files</summary><table>
<tr>
<td><strong>result-array-functions.spec.js</strong><dd><code>Add E2E
tests for `#ResultArray#` functions in UI</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-e9911625ad2bab76f2b760f0ad254791331993a6a874b96f6a11fc6d88038b10">+470/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>cleanup.spec.js</strong><dd><code>Clean up JS function test
data in UI 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/9873/files#diff-c214275a512fa285a7e4f2ab61dfcb42d71a0436b0e4241f94d7b45693587983">+31/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>page-manager.js</strong><dd><code>Register `FunctionsPage`
in `PageManager`</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/9873/files#diff-565eab8b3c767ae50c9d05e591621d14f66b81af84d6b5ea6efe136c1c3933df">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Dependencies</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>Cargo.toml</strong><dd><code>Add `rquickjs` dependency for
JS runtime</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/9873/files#diff-2e9d962a08321605940b5a657135052fbcef87b5e360662bb527c96d9a615542">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>18 files</summary><table>
<tr>
  <td><strong>test_functions_meta_org_restriction.py</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-99ef1207d6ae6d7eeaed37d70c8cf0c4770ba78f6f51fbdc067d35492d2fe9ea">+401/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>test_js_enrichment.py</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-c5547d46bec60b888d947d1e9b7c5445aee72cf8e837182f7138e0fc903eedbb">+356/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>test_js_result_array.py</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-9ed1363a1f58c94e018bb2b0aaa9d08fa71f89e7e55a6ff6be4a82bbeed8985c">+390/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>functionsPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-7bab9cc2eb8f36d3ee5d0aab453c353ec6d6dfecbc401cf401322ff57faa8440">+326/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>javascript-functions.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-bdae6529346a7222bdec19f75f490cb9d0f3578a260ba835225efcd27db3f64e">+314/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>meta-org-js-restriction.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-16cc2373f6f1955f8344a59d5f2edcd6ce121c4fdee1d432b1f0ec8e27f25881">+483/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FunctionList.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-6ff9af50a1597504b7f0dca91e61cf30c800b4a17b4be2ed2c3a4f7a7b2d7068">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>de.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264">+30/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>en.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+15/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>es.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778">+30/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>fr.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2">+30/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>it.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d">+30/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ja.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3">+30/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ko.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48">+30/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>nl.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906">+30/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>pt.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815">+30/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>tr.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818">+30/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>zh.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9873/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e">+254/-242</a></td>

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

</details>

___

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 22:47:35 +05:30
Ashish Kolhe 0f4dcbe971 fix: 9882 add option to limit max series return for promql (#9896) 2026-01-08 23:42:48 +08:00
Shrinath RaoandClaude Opus 4.5 d8c08e7b68 test(e2e): add automation for bugs #9217, #9724, #9901 and Feature #9484 (#9883)
## Summary
E2E test automation for multiple bug fixes and features:
- Bug #9217 (Favicon missing)
- Bug #9724 (Log detail sidebar default tab)
- Bug #9901 (Scheduled pipeline validation) - includes cherry-picked
fixes
- Feature #9484 (Manual Alert Trigger via UI)

---

## Bug Fixes Automated

### Bug #9217 - Favicon icon missing on main branch
- **Issue:** https://github.com/openobserve/openobserve/issues/9217
- **Fix PR:** https://github.com/openobserve/openobserve/pull/9189
- **Test:** Verifies favicon is present in DOM and loads via HTTP 200
- **Location:**
`tests/ui-testing/playwright-tests/RegressionSet/ui-regression.spec.js`

### Bug #9724 - Log detail sidebar opens with JSON tab by default
- **Issue:** https://github.com/openobserve/openobserve/issues/9724
- **Fix PR:** https://github.com/openobserve/openobserve/pull/9703
- **Test:** Verifies JSON tab is selected by default when opening log
detail sidebar
- **Location:**
`tests/ui-testing/playwright-tests/RegressionSet/logs-regression.spec.js`

### Bug #9901 - Scheduled pipeline not validating on selected stream
type
- **Issue:** https://github.com/openobserve/openobserve/issues/9901
- **Fix PR:** https://github.com/openobserve/openobserve/pull/9897
(cherry-picked)
- **Tests:** 4 regression tests covering:
  1. Metrics stream type validation (not hardcoded "logs")
  2. Traces stream type validation (not hardcoded "logs")
  3. Quick click on "Validate and Close" without blur interference
  4. Quick click on "Cancel" without blur interference
- **Location:**
`tests/ui-testing/playwright-tests/RegressionSet/pipeline-regression.spec.js`

**Cherry-picked fixes from PR #9897:**
- `f2a211cf2`: Use selected stream type for validating SQL query
- `b1bf7e658`: Add @mousedown.prevent to prevent blur/click race
condition

### Feature #9484 - Manual Alert Trigger via UI
- **Issue:** https://github.com/openobserve/openobserve/issues/9484
- **Test:** Verifies manual alert trigger button works via kebab menu
- **Location:**
`tests/ui-testing/playwright-tests/Alerts/alerts-ui-operations.spec.js`

---

## New Page Object Methods Added

### pipelinesPage.js
- `ingestMetricsData(streamName, recordCount)` - Ingest metrics via
`/api/{org}/ingest/metrics/_json`
- `ingestTracesData(serviceName, spanCount, streamName)` - Ingest traces
via OTLP `/api/{org}/v1/traces`
- Supports custom stream name via `stream-name` header (configurable via
`ZO_GRPC_STREAM_HEADER_KEY`)
  - Proper nested parent-child span timing for waterfall visualization
- `clickValidateAndClose()`, `focusSqlEditor()`,
`isDiscardChangesDialogVisible()`
- `expectDiscardDialogNotVisible()`, `cleanupPipelineCreation()`

### logsPage.js
- Log detail sidebar selectors and verification methods
- Replaced `waitForTimeout(500)` with element waits (3 places)
- Replaced `throw new Error()` with `expect()` assertions (3 places)

### homePage.js
- `verifyFavicon()` - Verify favicon presence and HTTP load
- Fixed `domValid` boolean cast with `includes()`

### alertManagement.js
- Manual alert trigger method via kebab menu

---

## Files Changed
| File | Changes |
|------|---------|
| `tests/ui-testing/pages/pipelinesPages/pipelinesPage.js` |
Metrics/traces ingestion, scheduled pipeline validation methods |
| `tests/ui-testing/pages/logsPages/logsPage.js` | Log detail sidebar +
PR review fixes |
| `tests/ui-testing/pages/generalPages/homePage.js` | Favicon
verification + review fix |
| `tests/ui-testing/pages/alertsPages/alertManagement.js` | Manual alert
trigger method |
|
`tests/ui-testing/playwright-tests/RegressionSet/pipeline-regression.spec.js`
| **NEW** - 4 tests for #9901 |
|
`tests/ui-testing/playwright-tests/RegressionSet/ui-regression.spec.js`
| Favicon test |
|
`tests/ui-testing/playwright-tests/RegressionSet/logs-regression.spec.js`
| Log detail sidebar test |
|
`tests/ui-testing/playwright-tests/Alerts/alerts-ui-operations.spec.js`
| Manual alert trigger test |
| `tests/ui-testing/playwright-tests/cleanup.spec.js` | Cleanup patterns
for test streams |
| `.github/workflows/playwright.yml` | Added pipeline-regression.spec.js
to CI |
| `web/src/components/pipeline/...` | Cherry-picked validation fixes |

---

## Test Plan
- [x] Bug #9217 test passes locally
- [x] Bug #9724 test passes locally
- [x] Bug #9901 tests pass locally (4 tests, ~3.9 min)
- [x] Feature #9484 test passes locally
- [x] Cleanup patterns added for test streams

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 20:19:10 +05:30
Sai Nikhil f23e477b1e fix: use selected stream type for validating query (#9897)
### **User description**
1. This PR fixes below issue
use selected stream type for validating query previously we were using
default logs


___

### **PR Type**
Bug fix, Tests, Enhancement


___

### **Description**
- Query component: use selected stream_type for validation

- Query.vue: replace hardcoded "logs" with dynamic stream_type

- ScheduledPipeline.vue: improve PromQL support and conditional spinner

- Added tests for SQL/PromQL workflows and bug fixes


___



<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>Query.spec.ts</strong><dd><code>Add dynamic streamType
validation tests</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/Query.spec.ts

<ul><li>Added tests for <code>validateSqlQuery</code> using dynamic
stream_type<br> <li> Verified <code>searchService.search</code> called
with logs, metrics, traces<br> <li> Ensured no hardcoded "logs"
page_type in validation</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9897/files#diff-28606cc9e509c3f1c132551ed29c46ef168444b4425cf5e81e0eff65302a9d16">+75/-9</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>ScheduledPipeline.spec.js</strong><dd><code>Expand
tests for PromQL and SQL workflows</code>&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.spec.js

<ul><li>Added tests for PromQL tab behaviors and loader logic<br> <li>
Verified query initialization from props and stream extraction<br> <li>
Integration tests covering combined SQL/PromQL fixes</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9897/files#diff-4961fda8934ec900d20729ed7835abb5063179a09a64fbf5337ff704357e285c">+325/-4</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>Query.vue</strong><dd><code>Use dynamic stream_type in
validateSqlQuery</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/pipeline/NodeForm/Query.vue

<ul><li>Replaced hardcoded <code>page_type: "logs"</code> with
<br><code>streamRoute.value.stream_type</code><br> <li> Search
invocation now uses selected stream type for SQL validation</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9897/files#diff-6247cbd506bcf963372f2e429507fc579af95f003df246889b478da11326a657">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>ScheduledPipeline.vue</strong><dd><code>Enhance
ScheduledPipeline UI and PromQL support</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/pipeline/NodeForm/ScheduledPipeline.vue

<ul><li>Show loader only when output expanded and tab == 'sql'<br> <li>
Move spinner above table, wrap in v-if loading & expanded<br> <li> Only
render PromQL preview when output expanded<br> <li> Initialize
<code>tab</code>, <code>query</code>, <code>stream_type</code> props
correctly<br> <li> Extract PromQL stream name on mount and fetch
fields<br> <li> Use <code>nextTick</code> before refreshing
PreviewPromqlQuery</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9897/files#diff-63d8f838bb880356e7804b4a57fd9223d4f2c189de7aadc7cf33cba723b29aaf">+28/-15</a>&nbsp;
</td>

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

</details>

___
2026-01-08 19:12:56 +05:30
Ashish KolheandClaude Opus 4.5 cda5d6a2a1 test: dry run Claude PR review with single rolling comment (#9909)
### **User description**
## Test PR for Claude Review Workflow

This PR tests the updated Claude PR review workflow that:

1. Maintains a **single rolling comment** instead of creating new ones
on each push
2. Tracks resolved issues in a strikethrough section
3. Uses concise format (1-2 sentences per issue)

### Test Plan

1. First push - Claude should create initial review comment
2. Make a fix commit - Claude should update same comment, move fixed
issues to "Resolved"
3. Another commit - Should continue updating same comment

---

**Note:** This is a test PR. Will be closed after verifying the workflow
behavior.


___

### **PR Type**
Enhancement


___

### **Description**
- Added `REVIEW_MARKER` env var for comment detection

- Switched checkout fetch-depth to full history

- Extended review prompt with update instructions

- Updated allowed tools in `claude_args`


___

### Diagram Walkthrough


```mermaid
flowchart LR
  PR_Event["Pull request opened or updated"]
  Checkout["Checkout repository (fetch-depth: 0)"]
  Review_Action["Run Claude PR review action"]
  Comment_Update["Update or create review comment"]
  PR_Event --> Checkout
  Checkout --> Review_Action
  Review_Action --> Comment_Update
```



<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
incremental review comment workflow</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.github/workflows/claude-pr-review.yml

<ul><li>Defined <code>REVIEW_MARKER</code> environment variable<br> <li>
Changed <code>fetch-depth</code> from 1 to 0 for full history<br> <li>
Expanded <code>prompt</code> with step-by-step update guidelines<br>
<li> Refined <code>claude_args</code> tool permissions list</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9909/files#diff-53574b0b215fe49655d9af9b48ce745fe1b45cd4eb810c0df555b9a659caeed7">+65/-36</a>&nbsp;
</td>

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

</details>

___

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 18:05:39 +05:30
Subhra264andsai nikhil kethe fc4ad41ef6 fix: ui fixes for enrichment table url errors (#9853)
### **User description**
- [x] In the enrichment table url failed error message popup, the url
makes the popup scrollable. This pr fixes that.
- [x] The enrichment tables are not sortable by the "type"

ref - https://github.com/openobserve/openobserve/issues/9832
___

### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Improved "Type" column sorting logic

- Added custom sort comparator for type values

- Wrapped error dialog content in max-width container

- Enabled word-break and margin styling for URLs


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["EnrichmentTableList.vue"] --> B["Type column: dynamic field & custom sort"]
  A --> C["Error dialog: container & text wrapping"]
```



<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>EnrichmentTableList.vue</strong><dd><code>Update type
column sorting and popup styling</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/functions/EnrichmentTableList.vue

<ul><li>Changed <code>field</code> of "type" column to dynamic function
returning "Url" or <br>"File"<br> <li> Added <code>sort</code>
comparator using <code>localeCompare</code> for type values<br> <li>
Wrapped dialog HTML in <code><div style="max-width: 600px;"></code>
container<br> <li> Applied <code>word-break</code> and
<code>overflow-wrap</code> styling with margins</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9853/files#diff-6a29e253f59405d3c0f756dba36afd7483f10ad86927cbbc3348ede6372c3077">+11/-8</a>&nbsp;
&nbsp; </td>

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

</details>

___

---------

Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2026-01-08 17:27:39 +05:30
Huaijin 72ce69b2f9 perf: improve metrics labels load (#9904) 2026-01-08 18:59:25 +08:00
Omkar Kesarkhaneandgithub-actions[bot] 358f98167f feat: add frustration signals to RUM UI (#9842)
#9611 
Design at: rum

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


___

### **Description**
- Introduce `FrustrationBadge` and `FrustrationEventBadge` components

- Integrate frustration filter in `PlayerEventsSidebar`

- Add timeline markers and tooltips in `VideoPlayer`

- Display frustration count in `AppSessions` and `SessionViewer`


___

### Diagram Walkthrough


```mermaid
flowchart LR
  FB["FrustrationBadge"] --> AS["AppSessions"]
  FB --> SV["SessionViewer"]
  FEB["FrustrationEventBadge"] --> PES["PlayerEventsSidebar"]
  PES --> VP["VideoPlayer"]
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>FrustrationBadge.spec.ts</strong><dd><code>Add unit tests
for frustration badge component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-0edf3db60bd51c6430b52f694b3d9ec1e49aeed4ff0ca6f582c63f5f04465542">+161/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>FrustrationEventBadge.spec.ts</strong><dd><code>Add tests
for frustration event badge</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/9842/files#diff-e3f0d23472fd2ead5265f258a00da30c0ee409eac0d2d0b78c20a9cfa0f18d9b">+195/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>PlayerEventsSidebar.spec.ts</strong><dd><code>Add tests for
frustration filter in sidebar</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/9842/files#diff-89b65487bce928cbff9e6f17ea7b2288a5b44918c408d48f17e834454d8f6c60">+176/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>VideoPlayer.spec.ts</strong><dd><code>Add tests for
frustration markers in video timeline</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-ee567bd4fd196facb768c7a15cbd7e14feff6be027d3bb78e65ae811319ca82c">+149/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AppSessions.spec.ts</strong><dd><code>Add tests for
frustration count column</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/9842/files#diff-8729444f05a0c753cc1f6fbb229e0ab7fd2ac46bd6ea454131ff80314d57a888">+101/-1</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SessionViewer.spec.ts</strong><dd><code>Add tests for
frustration summary display</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/9842/files#diff-f6bc78695d658452861ef8cd068a3c15e8a244e8df6de12104f4ecb4ccf6291a">+214/-0</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>FrustrationBadge.vue</strong><dd><code>Implement frustration
count badge component</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/9842/files#diff-d0f7499816baa57b7a815ec601553328be240fce38e66e68a8b7674516f49656">+124/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>FrustrationEventBadge.vue</strong><dd><code>Implement
frustration event badges component</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/9842/files#diff-092623e0f5b95471d97cd4f39f065d35ea154df9051a44908c1aec3ea84ca682">+134/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>PlayerEventsSidebar.vue</strong><dd><code>Integrate
frustration filter and badges in sidebar</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-a7d04eb87cd7588ba4811d79c6d32696a58d737a24931258329be4f96cee7610">+45/-10</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>VideoPlayer.vue</strong><dd><code>Render frustration markers
and tooltips</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/9842/files#diff-5cb7c9f5d73672eaaabf9214cfeb949f533772e87780829664fac444e3c6fa35">+35/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AppSessions.vue</strong><dd><code>Add frustration_count
column and badge slot</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/9842/files#diff-08359708ae507d81dcdc60e3c05ba4f56a40f4a61718074cd6019bf2ceb87575">+21/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>SessionViewer.vue</strong><dd><code>Display frustration
summary and parse types</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/9842/files#diff-9f7a183be1e2cfcb3c3c852c059f66003dd4f3f586421b012e1b835724929ca1">+33/-3</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>*.json</strong><dd><code>Add `frustrationCount` translations
to locale files</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
  <td><a href=""></a></td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>11 files</summary><table>
<tr>
  <td><strong>de.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>en.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>es.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>fr.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>it.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>ja.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>ko.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>nl.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>pt.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>tr.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>zh.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9842/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e">+2/-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-08 15:25:51 +05:30
Bhargavandgithub-actions[bot] 39961fe7e8 chore: update npm dependencies (2026-01-05) (#9900)
### **User description**
- Updated packages to their latest versions
  - Regenerated package-lock.json
  - All tests passing

  🤖 Automated update by GitHub Actions


___

### **PR Type**
Other


___

### **Description**
- Bumps production dependencies to latest versions

- Updates devDependencies and regenerates lockfile

- Verifies all tests still pass after update


___



<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>Update npm package
versions</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

<ul><li>Upgraded multiple production dependencies<br> <li> Updated
various devDependencies versions<br> <li> Regenerated package-lock.json
accordingly</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9900/files#diff-b861012a5dd72b8a9f3281b7cf09f5a779c98569d040b1bbc1db50f1b15e7cce">+40/-40</a>&nbsp;
</td>

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

</details>

___

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-08 14:35:24 +05:30
ByteBaker 8776d2645d chore: improve tab navigation UX and FQN priority selector (#9879)
### **User description**
## Summary
- Added component state preservation using keep-alive for instant tab
switching
- Replaced FQN priority dropdown with dual-list selector for better
multi-item management
- Added refresh buttons to all tabs for manual data reload

## Changes
- Tab caching via Quasar's keep-alive prop (no redundant API calls)
- Dual-list interface for FQN priority dimensions with search and bulk
transfer
- Refresh buttons on Correlation Settings and correlation telemetry tabs

## Benefits
- Instant tab switching with preserved state
- Faster dimension selection workflow
- Better UX for managing correlation settings


___

### **PR Type**
Enhancement


___

### **Description**
- Add dual-list interface for dimension selection
  - New `DualListSelector.vue` component
  - Integrated into FQN priority settings

- Add manual refresh buttons on tabs

- Enable component caching on tab panels
2026-01-08 13:28:04 +05:30
ByteBaker e312f84aae chore: add super-cluster sync for incidents, service discovery, and semantic groups
- Add queue processors for incidents, service_streams, semantic_groups
- Register 3 new queues in super_cluster_queue/mod.rs (16 total)
- Add publishers in org_config.rs, incidents.rs with error logging
- Add module-level docs and error context to all processors
- Derive Clone for ServiceRecord (required for message serialization)
- Enterprise: Add 3 message enums, queue traits, 8 publisher functions
2026-01-08 12:29:58 +05:30
Sai Nikhil d2e656c767 fix: home view skeleton issue fixed - 9833 (#9886)
### **PR Type**
Enhancement


___

### **Description**
- Refactored `HomeViewSkeleton` layout and classes

- Switched to CSS variables and grid styling

- Updated tile, chart and header skeleton elements

- Simplified `HomeView.vue` loading wrapper


___

### Diagram Walkthrough


```mermaid
flowchart LR
  HV[HomeViewSkeleton] 
  HV -- "contains" --> Streams["Streams section"]
  HV -- "contains" --> Tiles["Tiles grid section"]
  HV -- "contains" --> FD["Functions & Dashboards column"]
  HV -- "contains" --> C1["Alerts Chart skeleton"]
  HV -- "contains" --> C2["Pipelines Chart skeleton"]
```



<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>HomeViewSkeleton.vue</strong><dd><code>Refactor
skeleton layout and theming</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/components/shared/HomeViewSkeleton.vue

<ul><li>Wrapped root <code>div</code> in <code>feature-card</code> with
padding utilities<br> <li> Replaced custom containers with
<code>tiles-grid</code> and <code>feature-card</code><br> <li> Updated
SkeletonBox variants and sizes for consistency<br> <li> Refactored
scoped SCSS to use CSS variables and grid</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9886/files#diff-cfcdd350ab12b088eb8bc8717b3d2c3a6b530c6c78d27c581126f6e4c7ccbda4">+168/-100</a></td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>HomeView.vue</strong><dd><code>Simplify skeleton
loading wrapper</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/views/HomeView.vue

<ul><li>Removed inline style from loading wrapper<br> <li> Simplified
<code>v-if="isLoadingSummary"</code> container<br> <li> Ensured
<code>HomeViewSkeleton</code> displays correctly</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9886/files#diff-9af441af191d3254ef5f9db603dca75486de7638cda41a3c050e7b3c33d68280">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-08 10:59:35 +05:30
Harsh Mahajan 2803da752b fix: OAuth/DEX redirect infinite loop on router nodes (#9869)
### **PR Type**
Enhancement


___

### **Description**
- Configure `get_config_routes` in HTTP server
  initialization
  - Apply in `init_http_server`
  - Apply in `init_http_server_without_tracing`


___



<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>main.rs</strong><dd><code>Configure `get_config_routes`
in HTTP init</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/main.rs

<ul><li>Added <code>.configure(get_config_routes)</code> to HTTP server
setup<br> <li> Updated both <code>init_http_server</code> and <br>
<code>init_http_server_without_tracing</code></ul>


</details>


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

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

</details>

___
2026-01-08 09:09:48 +05:30
Hengfei Yang e259008d9c fix: add metrics query retention configuration option (#9887)
___

### **PR Type**
Enhancement


___

### **Description**
- Add `metrics_query_retention` environment config option

- Import and apply new retention in time bound calc

- Override partition level when retention is daily


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Load `metrics_query_retention`"]
  B["unwrap_partition_time_level"]
  C{"Retention == Daily?"}
  D["Set level to Daily"]
  E["Compute duration"]
  F["Return time_end + duration"]
  A --> B --> C
  C -- "yes" --> D
  C -- "no" --> E
  D --> E --> F
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>config.rs</strong><dd><code>Add metrics_query_retention
config</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></summary>
<hr>

src/config/src/config.rs

<ul><li>Add <code>ZO_METRICS_QUERY_RETENTION</code> with default
"hourly"<br> <li> Introduce <code>metrics_query_retention: String</code>
field</ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Use metrics_query_retention in
time bound</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/infra/src/file_list/mod.rs

<ul><li>Import <code>get_config</code> for accessing config<br> <li> Use
<code>metrics_query_retention</code> in time bound calc<br> <li>
Override partition level when retention is daily</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9887/files#diff-3df833bc826eb12e0819620d1fe316ef1ac352d293c11e57cc3df0da3c031e93">+8/-1</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-08 08:42:52 +08:00
e991234939 fix: Create Alert from dashboard setup - alert name with spacing issue. (Backend) (#9890)
### **User description**
## 🤖 Auto-Implementation (Backend)

**Bug Fix:** Create Alert from dashboard setup - alert name with spacing
issue.
      **Source Issue:** openobserve#9875

    📚 **Complete Design Documentation:**

https://github.com/openobserve/designs/tree/main/e2e-dev/openobserve/2026-01/issue-9875-create-alert-from-dashboard-setup-alert-name-with-

- [Backend
Plan](https://github.com/openobserve/designs/tree/main/e2e-dev/openobserve/2026-01/issue-9875-create-alert-from-dashboard-setup-alert-name-with-/plans/backend-plan.md)
- [Backend
Implementation](https://github.com/openobserve/designs/tree/main/e2e-dev/openobserve/2026-01/issue-9875-create-alert-from-dashboard-setup-alert-name-with-/implementations/backend-implementation.md)
- [API
Contract](https://github.com/openobserve/designs/tree/main/e2e-dev/openobserve/2026-01/issue-9875-create-alert-from-dashboard-setup-alert-name-with-/api-contract.json)
- [Validation
Results](https://github.com/openobserve/designs/tree/main/e2e-dev/openobserve/2026-01/issue-9875-create-alert-from-dashboard-setup-alert-name-with-/validations/backend-validation.md)

    ## Changes

    - ✅ Backend code (Rust)
    - ✅ Unit + integration tests
    - ✅ All quality gates passed

    ## Related PRs

    Frontend PR: #FRONTEND_PR_NUMBER (to be linked)

    Closes openobserve#9875

    ---

    🤖 Generated with [Claude Code](https://claude.com/claude-code)

    Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>


___

### **PR Type**
Bug fix


___

### **Description**
- Replace spaces in generated alert names

- Use underscores for panel title sanitization

- Prevent validation errors for alert names


___



<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>AddAlert.vue</strong><dd><code>Sanitize alert names
with underscores</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/components/alerts/AddAlert.vue

<ul><li>Updated alert name template literal<br> <li> Added
<code>.replace(/\s+/g, '_')</code> on <code>panelTitle</code><br> <li>
Changed prefix to <code>Alert_from_</code> with underscores</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9890/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: Claude Code Bot <noreply@anthropic.com>
Co-authored-by: claude-code-bot <claude-code-bot@openobserve.ai>
2026-01-08 00:16:52 +05:30
ktx-riya 8c568e264e fix: dashboard share-url tab redirection issue caused by the route path of url (#9885)
### **PR Type**
Bug fix


___

### **Description**
- Add reactive dependency on `route.fullPath` in share URL


___



<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>ViewDashboard.vue</strong><dd><code>Add
`route.fullPath` dependency to computed URL</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/views/Dashboards/ViewDashboard.vue

<ul><li>Inserted <code>void route.fullPath</code> to trigger
reactivity<br> <li> Ensures <code>dashboardShareURL</code> recomputes on
URL change</ul>


</details>


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

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

</details>

___
2026-01-07 19:44:24 +05:30
Yashodhan JoshiandYashodhan Joshi 68759b4354 fix: sync distinct stream retention to original stream (#9871)
### **User description**
This adds functionality to always sync original stream retention to the
distinct stream created for that stream.
This also includes a once-off migration to sync the retention for
existing streams


___

### **PR Type**
Enhancement


___

### **Description**
- Bump DB schema version to 24

- Add migration syncing existing distinct stream retention

- Sync retention on settings update for distinct streams

- Refactor distinct stream naming logic


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Original Stream Settings"] --> B["Generate Distinct Stream Name"]
  C["Migration: Sync Retention"] --> B
  D["Settings Update Handler"] --> B
```



<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>config.rs</strong><dd><code>Bump database schema
version</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>

src/config/src/config.rs

- bumped `DB_SCHEMA_VERSION` from 23 to 24


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9871/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Register new
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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/infra/src/table/migration/mod.rs

- register new migration in migrator list


</details>


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

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>

<summary><strong>m20260107_000001_sync_distinct_stream_retention.rs</strong><dd><code>Add
migration for distinct stream retention</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>


src/infra/src/table/migration/m20260107_000001_sync_distinct_stream_retention.rs

<ul><li>add new migration file for retention sync<br> <li> iterate all
streams and update distinct retention<br> <li> support enterprise
super-cluster propagation</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9871/files#diff-e077e2b4452a91f484015bd939eae29bec994be01a67eb4e71e5f111c761c755">+115/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>distinct_values.rs</strong><dd><code>Refactor naming
and retention logic</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/metadata/distinct_values.rs

<ul><li>extract <code>get_distinct_stream_name</code> function<br> <li>
use helper instead of inline formatting<br> <li> update distinct stream
retention during ingest</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9871/files#diff-3fb2320197c6e8e900658f5a24158e922610eadcbf081ab0df230f770ef27e07">+35/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>stream.rs</strong><dd><code>Sync retention on settings
save</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>

src/service/stream.rs

<ul><li>on <code>save_stream_settings</code>, sync distinct stream
retention<br> <li> add <code>get_stream_retention</code> helper
function<br> <li> skip metadata streams when syncing</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9871/files#diff-41452a7fb29b4634437174fd6aecf6a9050dbfdef41b9077a21d59af3d79e9ed">+68/-0</a>&nbsp;
&nbsp; </td>

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

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2026-01-07 18:32:30 +05:30
Sai Nikhilandgithub-actions[bot] 5ac09c5018 fix: notify users when stale build (#9849)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-07 16:12:31 +05:30
Huaijin 4fd2ef051f fix: rewrite match_all should also update other filter column index (#9872) 2026-01-07 17:55:30 +08:00
Subhra264 780b7cf89b fix: remove delete bad dashboards migration (#9860)
### **User description**
From v0.14.6-rc9 to v0.40.0 migration is currently broken for dashboards
with label position . This pr fixes this by removing the migration. The
dashboard migration generally happens through UI, no migration needed by
backend.


___

### **PR Type**
Bug fix


___

### **Description**
- Remove `delete_bad_dashboards` migration logic

- Convert `up` function into no-op stub

- Delete JSON parsing and schema definitions


___



<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>m20250107_160900_delete_bad_dashboards.rs`</strong><dd><code>Simplify
delete_bad_dashboards migration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>


`src/infra/src/table/migration/m20250107_160900_delete_bad_dashboards.rs`

<ul><li>Dropped <code>chrono</code> and <code>sea_orm</code> imports<br>
<li> Simplified <code>up</code> to do nothing<br> <li> Removed
<code>can_parse_data</code> and version modules</ul>


</details>


  </td>
  <td><a href=""></a></td>

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

</details>

___
2026-01-07 14:16:41 +05:30
Neha PandClaude a84969ad4b test: add Bug #9788 test for Share URL disabled state (#9858)
### **User description**
Add automated test to validate Share button behavior when ZO_WEB_URL is
not configured. Uses Playwright route mocking to simulate backend
configuration without requiring separate test environment.

Changes:
- Add Bug #9788 test in shareLink.spec.js with API route mocking
- Mock /config endpoint to set web_url="" for testing disabled state
- Validate Share button is disabled with informative tooltip
- Add ZO_WEB_URL env variable to CI/CD playwright.yml

Test validates:
- Share button visibility
- Disabled state when ZO_WEB_URL not configured
- Tooltip: "Share URL is disabled until ZO_WEB_URL is configured"

Fixes: https://github.com/openobserve/openobserve/issues/9788

🤖 Generated with [Claude Code](https://claude.com/claude-code)


___

### **PR Type**
Tests


___

### **Description**
- Add test for disabled share button without ZO_WEB_URL

- Mock `/config` API endpoint and verify tooltip

- Set `ZO_WEB_URL` env variable in CI workflow

- Exclude `@bug-9788` tests in rerun commands


___



<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>shareLink.spec.js</strong><dd><code>Add test for
disabled share button</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></summary>
<hr>

tests/ui-testing/playwright-tests/Logs/shareLink.spec.js

<ul><li>Added new functional test for Bug #9788 scenario<br> <li> Mocked
<code>/config</code> endpoint to simulate missing
<code>web_url</code><br> <li> Asserts share button visibility, disabled
state, and tooltip</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9858/files#diff-7ee6e1f00c7f0d5464334b39d3eefbe741cd4ee271ba7c5ca4b1e492be53a2d1">+79/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>playwright.yml</strong><dd><code>CI workflow: set
ZO_WEB_URL and exclude tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.github/workflows/playwright.yml

<ul><li>Defined <code>ZO_WEB_URL</code> environment variable in CI<br>
<li> Updated rerun commands to exclude <code>@bug-9788</code> tests</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9858/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+3/-2</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-07 13:20:42 +05:30
Bhargav d0b256c6af fix: UI console error fix (#9857)
Error details:
1. Uncaught "Stream Not Found"
2. Error in getOrganizationSettings: AxiosError: Request failed with
status code 403
3. Error: ResizeObserver loop completed with undelivered notifications.
4. [handleError]:: TypeError: can't access property "dataplanes",
e.source is undefined
5. [handleError]:: Cannot read properties of undefined (reading
'config')
2026-01-07 10:58:06 +05:30
dependabot[bot] b90334fa27 chore(deps): bump rsa from 0.9.9 to 0.9.10 (#9867) 2026-01-07 11:34:32 +08:00
Hengfei Yang 88136889b3 fix: ci for release (#9868) 2026-01-07 10:18:36 +08:00
mmosarafO2 4566976b43 ci: updated runner for oss (#9864) 2026-01-07 09:12:53 +08:00
ktx-riya 4096d07c48 fix: metrics cancel query button css improved (#9863)
### **PR Type**
Enhancement


___

### **Description**
- Adjusted padding for metrics cancel button

- Removed padding on JSON editor save button


___



<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>Index.vue</strong><dd><code>Adjust metrics cancel
button padding</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/plugins/metrics/Index.vue

- Updated `q-btn` padding from "sm md" to "xs lg"


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9863/files#diff-a6734928ea4dcb5244e90de5a16fe6f5cafa95ccf58430ac7b548a065daf3d61">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>DashboardJsonEditor.vue</strong><dd><code>Remove JSON
editor save button padding</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/views/Dashboards/DashboardJsonEditor.vue

- Removed `padding="sm lg"` from save button


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9863/files#diff-e3852754d3a888bea3d2ceb9433111d178119e3d86c82e103695ee1ffd3efbfa">+0/-1</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-06 21:37:13 +05:30
ktx-kirtan 6a4cebc263 fix: update loading progress handling in PromQL response (#9859) 2026-01-06 22:09:21 +08:00
Sai Nikhil 2dc4850e09 fix: use url incident id to show the incident drawer (#9850)
### **PR Type**
Bug fix


___

### **Description**
- Load incident details from URL query parameter

- Remove `incident` prop from detail drawer

- Stop passing `selectedIncident` prop in incident list


___

### Diagram Walkthrough


```mermaid
flowchart LR
  List["IncidentList.vue"] -- "open drawer" --> Drawer["IncidentDetailDrawer.vue"]
  Drawer -- "watch ?incident_id" --> Query["router.currentRoute.query.incident_id"]
  Query -- "trigger loadDetails(id)" --> API["IncidentService API"]
```



<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>IncidentDetailDrawer.vue</strong><dd><code>Switch to
URL-based incident loading</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/components/alerts/IncidentDetailDrawer.vue

<ul><li>Removed <code>incident</code> prop definition and usage<br> <li>
Updated <code>setup</code> signature to ignore props<br> <li> Added
watcher on <code>router.currentRoute.query.incident_id</code><br> <li>
Calls <code>loadDetails</code> with URL parameter if present</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9850/files#diff-6973d58a5f49658b07d3533d4db5d32cc6430433b51732481e7497243dadb0b0">+7/-11</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>IncidentList.vue</strong><dd><code>Drop incident prop
in list drawer</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/IncidentList.vue

<ul><li>Removed <code>:incident="selectedIncident"</code> binding<br>
<li> Now opens drawer without passing incident prop</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9850/files#diff-953ad015996758a8c86e489499cd3b0a614501b99b0c9c5c242a299e34c24ff2">+0/-1</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-06 17:59:42 +05:30
Bhargav 5b54ee3c58 fix: toggle button issue on add alert page (#9856)
### **PR Type**
Enhancement


___

### **Description**
- Changed `size` prop to "30px"

- Removed `color="primary"` prop

- Updated toggle CSS classes


___



<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>AlertSettings.vue</strong><dd><code>Adjust toggle UI
sizing</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/alerts/steps/AlertSettings.vue

<ul><li>Updated <code>size</code> prop from <code>"md"</code> to
<code>"30px"</code><br> <li> Removed <code>color="primary"</code>
prop<br> <li> Simplified CSS classes to <code>text-bold
o2-toggle-button-xs</code></ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9856/files#diff-1d5bfd6a1ea672884193649b1271d751d6f3b8ec84af759071c9bfd169a8ab28">+2/-3</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-06 16:09:39 +05:30
Bhargav 2ed4eeff48 fix: fixed toggle button issue for small size (#9852)
### **PR Type**
Bug fix


___

### **Description**
- Add class to `q-toggle` in AddEnrichmentTable

- Adjust padding and font-size on toggles

- Add left margin class to Stream toggle

- Apply custom sizing to IndexList toggles


___



<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>AddEnrichmentTable.vue</strong><dd><code>Style append
toggle in AddEnrichmentTable</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/components/functions/AddEnrichmentTable.vue

<ul><li>Added <code>lookup-table-append-toggle</code> class to
<code>q-toggle</code><br> <li> Defined padding and font-size for
<code>.q-toggle__inner</code><br> <li> Made
<code>.q-toggle__thumb:before</code> background transparent</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9852/files#diff-9aad551dbc051edfdb3994a664506ed6d5e27dcb64f9c2fa917b02e51a35d86e">+12/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>Stream.vue</strong><dd><code>Add left margin to Stream
toggle</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/pipeline/NodeForm/Stream.vue

<ul><li>Added <code>q-ml-md</code> class to stream
<code>q-toggle</code><br> <li> Ensured consistent left margin on
toggle</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9852/files#diff-1a17ced9dc89022502cab0a6f9b97b413c2a2c4f8219733d063fc0180d361739">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>IndexList.vue</strong><dd><code>Style toggles in
IndexList logs</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/logs/IndexList.vue

<ul><li>Added <code>indexlist-stream-toggle</code> class to
<code>q-toggle</code><br> <li> Updated <code>size</code> attribute from
"20px" to 20<br> <li> Defined padding, font-size, transparent thumb in
CSS</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9852/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+15/-1</a>&nbsp;
&nbsp; </td>

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

</details>

___
2026-01-06 15:09:28 +05:30
Ashish Kolheandgithub-actions[bot] 0284e5ab5a feat: tenant management using service accounts (#9838)
### **User description**
Design at :
service_account_enhancements/FEATURE_TENANT_MANAGEMENT_SERVICE_ACCOUNTS


___

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


___

### **Description**
- Add session expiry cache with cleanup

- Implement `assume_service_account` endpoint

- Enforce `allow_static_token` policy for service accounts

- Automate service account creation and tenant admin role


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Create Organization"] -- "adds service account" --> B["DB org_users (allow_static_token=false)"]
  B -- "assign tenant admin role" --> C["OpenFGA"]
  A -- "respond with ServiceAccountTokenInfo" --> D["Client"]
  E["AssumeServiceAccount API"] -- "create session" --> F["DB sessions with expiry"]
  F -- "cache token & expiry" --> G["USER_SESSIONS & USER_SESSIONS_EXPIRY"]
  H["AuthExtractor"] -- "validate session token + expiry" --> I["Request Auth"]
```



<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><details><summary>5 files</summary><table>
<tr>
<td><strong>config.rs</strong><dd><code>Add session expiry cache
mapping</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/9838/files#diff-cda0d9179ed982fa5f0989c9b26f21cfa49dd1de28195a98135650ffcc7c602a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>config.rs</strong><dd><code>Bump DB schema version to
23</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></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9838/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Import new session meta
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9838/files#diff-bab79e8da2d0d9f903cb1a6187d922c6de63d3e4561e8ce633660b664b4e859f">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>

<td><strong>m20251230_000001_add_allow_static_token_to_org_users.rs</strong><dd><code>Migration:
add allow_static_token to org_users</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9838/files#diff-2c713c6a1665f7cc5b19eda98ed6663e4908201052e31bd3c6643aa48c03130b">+55/-0</a>&nbsp;
&nbsp; </td>

</tr>

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

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>20
files</summary><table>
<tr>
<td><strong>organization.rs</strong><dd><code>Add service_account fields
and response types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9838/files#diff-4f089715a7ac4f78b45039d773f2fccbb4fbc6a409e0ab9ceee1fcf7911bc44b">+24/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>user.rs</strong><dd><code>Include `org_name` in `UserOrg`
defaults</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/9838/files#diff-e13b3a981fd70182b9738a6b0ecfdee915c5b36757703a87741e1eddf3f6e786">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>auth.rs</strong><dd><code>Enhance session auth extraction
and expiry logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9838/files#diff-9bc2b1841504a435f66ad094f72ddbe7b7fa75e5e1557b8adbfe36f7f0592e1b">+101/-8</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>session.rs</strong><dd><code>Define assume_service_account
request/response schemas</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9838/files#diff-cc73e168e23e2cd5d98749492c12493cff611bc9cecfa3d45e8c6a0e9a3ba135">+50/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>user.rs</strong><dd><code>Add `org_name` field to `UserOrg`
meta</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/9838/files#diff-fc77f1b0e696889335f118cd5c1d69b7e3b385f48dd8e94c02a69912242e689b">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>jwt.rs</strong><dd><code>Populate `org_name` in JWT auth
mapping</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/9838/files#diff-232cab74f4cbf135af424744272e17732fbda8ac005d33c0acb4597e65479d02">+8/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>validator.rs</strong><dd><code>Enforce service account
static token policy</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/9838/files#diff-f4d4b51574b378a8c372345ea48875834a4eadacfac33fa4d0ceca1e0ef96b35">+58/-11</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>assume_service_account.rs</strong><dd><code>Implement
`assume_service_account` HTTP endpoint</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9838/files#diff-3cdbc33e83fda4c90aae59b6213861646ce7031b092e1f052c4c3c8e94ac468b">+208/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>org.rs</strong><dd><code>Return service_account info on org
creation</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/9838/files#diff-b47c0c1a8a78524196176430268eecdbfaf6f46d6b95873d3cbe70cfd67182b0">+12/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Register assume_service_account
route</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/9838/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>org_users.rs</strong><dd><code>Add `allow_static_token` to
OrgUsers entity</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/9838/files#diff-aec40965f56c43f49b6c162e7f7cfd549af23e0dcd9980f1e863ddb30eba357b">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>org_users.rs</strong><dd><code>Support `allow_static_token`
in ORM models</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/9838/files#diff-8e62ecba19308fdaaecfdb3d1f23021c926e244a510d9452dfbd71ac8f35ee9f">+33/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>sessions.rs</strong><dd><code>Add session expiry persistence
and cleanup</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/9838/files#diff-945b60afd1f074c5f3bf875317896181829b19153938184bad9098c75ab44b48">+11/-12</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>org_users.rs</strong><dd><code>Add `add_with_flags` for
org_users</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/9838/files#diff-3cbb516ea021b4c03cf4b5f9de2ebcd4a8afee0722a4bcc5c39cb78f485900b6">+73/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>organization.rs</strong><dd><code>Default `service_account`
in org DB functions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9838/files#diff-ce65cea926a09721a8fea14d07fe188bc2b887218e95d74a8bffefb54001da50">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>session.rs</strong><dd><code>Enhance session caching with
expiry checks</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/9838/files#diff-64311ff8ef53118e7611a2a2a28c5380a0e8b8213139b2c2108c728b1d460a2b">+152/-17</a></td>

</tr>

<tr>
<td><strong>user.rs</strong><dd><code>Map `org_name` in DB user
mapping</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/9838/files#diff-6ee6b0fc9ed03224d4ddf0b7b631c6f81ff7d1d579bdb98d2c5d4453852eb5d6">+4/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>organization.rs</strong><dd><code>Add service account
creation & tenant role logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9838/files#diff-6b3c3c2b027c1158c0d41302cc69dfcd20ab68a6a4fa365cda403f838940bbb4">+270/-7</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>session.rs</strong><dd><code>Use `set_with_expiry` for
session creation</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/9838/files#diff-2d2f0c7a3be0a3d7d953c01974be5e093c8d42953952e435bc7b3a0faed6bf38">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>users.rs</strong><dd><code>Add
`create_service_account_if_not_exists` helper</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9838/files#diff-98da2588a28d62bb2e301d989836125f89f89b76272cd7f75e08ec4deeea5f38">+56/-7</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>mod.rs</strong><dd><code>Include `allow_static_token` in
test fixtures</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9838/files#diff-2ba3bceb0d80c8008da06e45374c1f744441375e2c28b55e6a55a1be3337e79b">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Formatting</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Export assume_service_account
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/9838/files#diff-69dda3b2107f353d44361f3f47fad6f504470d26f888dec797664fb7de35ab08">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Mask static tokens in API docs and
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/9838/files#diff-095d70f65b6e69bf7de0180fcbcddcd7c89c4cf00095d7b06f039a07e73916bb">+13/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>openapi.rs</strong><dd><code>Document assume_service_account
in OpenAPI</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/9838/files#diff-edb8ce232c0cd08366879f642788a75d99f6bab64b4c0e77391281fdb9241e90">+3/-0</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-06 13:38:50 +05:30
ktx-riya bf45ace0cc fix: table chart number column alignment issue caused by copy cell button (#9843)
### **PR Type**
Bug fix


___

### **Description**
- Add conditional copy button placement based on alignment

- Show copy icon only when cell has value

- Remove obsolete wrapper and CSS styling


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Cell["Table cell"]
  Cell -- "align right" --> BtnLeft["Copy button left"]
  BtnLeft --> Value["Cell value"]
  Cell -- "non-right align" --> Value2["Cell value"]
  Value2 --> BtnRight["Copy button right"]
```



<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>TableRenderer.vue</strong><dd><code>Conditional copy
button placement</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/dashboards/panels/TableRenderer.vue

<ul><li>Added conditional copy buttons based on column alignment<br>
<li> Placed button left for right-aligned columns<br> <li> Placed button
right for other columns<br> <li> Removed wrapper div and
copy-cell-content CSS</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9843/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+22/-12</a>&nbsp;
</td>

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

</details>

___
2026-01-06 12:36:38 +05:30
Sai Nikhil 1ad0b5975e fix: show incident detail drawer details (#9847)
### **PR Type**
Bug fix


___

### **Description**
- Pass selected incident to detail drawer


___



<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>IncidentList.vue</strong><dd><code>Add incident prop
binding to drawer</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>

web/src/components/alerts/IncidentList.vue

- Added `:incident="selectedIncident"` prop binding


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9847/files#diff-953ad015996758a8c86e489499cd3b0a614501b99b0c9c5c242a299e34c24ff2">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-01-06 11:13:35 +05:30
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