Commit Graph
1844 Commits
Author SHA1 Message Date
Ashish Kolhe f62d0d60c5 feat: traces for agent (#8800)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add distributed tracing for AI chat

- Parse W3C traceparent, fallback to UUID v7

- Enable conditional tracer provider/init

- Improve AI error logs with trace context


___

### Diagram Walkthrough


```mermaid
flowchart LR
  FE["Frontend generateTraceContext()"] -- "traceparent header" --> API["/api/{org_id}/ai/chat(_stream)"]
  API -- "Span root if enabled" --> Tracer["Tracer provider"]
  API -- "trace_id propagated" --> AIService["ai::service::{chat,chat_stream}"]
  Tracer -- "OTLP exporters" --> OO["OpenObserve OTLP"]
  Tracer -- "Filtered ai.* spans" --> OO["OpenObserve OTLP"]
  Tracer -- "Optional eval exporter" --> Eval["AI Evaluation OTLP"]
```



<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>chat.rs</strong><dd><code>Add tracing headers parsing
and span creation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/handler/http/request/ai/chat.rs

<ul><li>Accept headers and org path in chat<br> <li> Create root tracing
spans when enabled<br> <li> Parse W3C traceparent to derive trace_id<br>
<li> Propagate trace_id to AI services and logs</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8800/files#diff-12a78cbb31b313cb3a0ca50f25c177470cf49b02708f179fe138ed3d66a2926b">+77/-12</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>main.rs</strong><dd><code>Conditional tracing setup and
AI exporters</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/main.rs

<ul><li>Initialize tracer when AI tracing enabled<br> <li> Add
FilteringSpanProcessor for ai.* spans<br> <li> Configure additional OTLP
exporters<br> <li> Use UUID v7 ID generator when available</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8800/files#diff-42cb6807ad74b3e201c5a7ca98b911c5fa08380e942be6e4ac5807f8377f87fc">+223/-17</a></td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>useAiChat.ts</strong><dd><code>Add traceparent to AI
chat requests</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/composables/useAiChat.ts

<ul><li>Generate and send traceparent header<br> <li> Pass abort signal
in fetch options</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>ai_chat.ts</strong><dd><code>Propagate traceparent in
service requests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/services/ai_chat.ts

<ul><li>Include traceparent header in chat_stream<br> <li> Utilize
generateTraceContext utility</ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Miscellaneous</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>wal.rs</strong><dd><code>Remove tracing attribute from
WAL list</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

src/service/search/datafusion/storage/wal.rs

- Remove unused tracing instrument on list


</details>


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

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>vite.config.ts</strong><dd><code>Adjust Vite dependency
optimization settings</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/vite.config.ts

<ul><li>Exclude echarts modules from optimizeDeps<br> <li> Disable
forced dependency optimization</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8800/files#diff-9430906049744cbbfe5d0b382b2466843a42cfebf755ff86fec850b0712258ef">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-10-14 17:35:17 +05:30
9f8d25cb4d fix: dashboard listing pages UI changes made sync with other pages (#8796)
### **User description**
1. Table list changes 
2. folder list changes 
3. submit btn , cancel btn , move btn , export btn , discard btn, apply
btn changes


___

### **PR Type**
Enhancement


___

### **Description**
- Align dashboards UI with new design

- Replace buttons with themed O2 styles

- Standardize toggles sizing and theming

- Improve tables, search, and layout


___

### Diagram Walkthrough


```mermaid
flowchart LR
  AddDash["AddDashboard.vue"] -- "buttons, spacing" --> UI["Unified O2 styles"]
  AddFolder["AddFolder.vue"] -- "inputs, buttons" --> UI
  ConfigPanel["ConfigPanel.vue"] -- "toggle sizing/theming" --> UI
  QueryEditor["DashboardQueryEditor.vue"] -- "function toggle style" --> UI
  DashboardsView["Dashboards.vue"] -- "search, folder header, table footer" --> UI
  AddPanel["AddPanel.vue"] -- "action button styles" --> UI
  Styles["app.scss"] -- "new negative button theme" --> UI
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>7
files</summary><table>
<tr>
<td><strong>AddDashboard.vue</strong><dd><code>Update form spacing and
action buttons styling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8796/files#diff-21d49964b1a38dce6b2b2811cade3cff3dcfd0f70cb1aa94b6deb7ea9ac848ce">+10/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AddFolder.vue</strong><dd><code>Revamp paddings, inputs, and
footer buttons</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/8796/files#diff-3bd1ba28ba29b71469aac901fd8000480c3db6c0f2dbc86ea55221787ae3ffd2">+10/-12</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ConfigPanel.vue</strong><dd><code>Apply large themed toggles
across options</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/8796/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+25/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>DashboardQueryEditor.vue</strong><dd><code>Restyle function
editor toggle with theming</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/8796/files#diff-68bf1b319223d103f1b99e0b681764e4eb76942399397779c81c2cd18f6485ff">+4/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>Dashboards.vue</strong><dd><code>Redesign list UI: search,
folders, table, footer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8796/files#diff-8da3187db8ce3d795d0f196ede6b2290221ffa3e27b15dcc2b645e44dd196213">+119/-78</a></td>

</tr>

<tr>
<td><strong>AddPanel.vue</strong><dd><code>Standardize header actions
and picker height</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/8796/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+22/-15</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>app.scss</strong><dd><code>Add negative button themed
variants</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8796/files#diff-5703d12504b0395cbfbbfad02a592bc391496026e5f03743102ce06c210ea05f">+20/-0</a>&nbsp;
&nbsp; </td>

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

</details>

___

---------

Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2025-10-14 15:57:31 +05:30
Omkar Kesarkhane 62f2c35c79 fix: fixed stream name in traces RED queries (#8795)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Expand trace time window ±10s

- Use selected stream in metrics

- Unify metrics queries placeholders

- Minor template formatting fixes


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["TraceDetails.vue UI"]
  TimeWin["±10s time window"]
  MetricsDash["TracesMetricsDashboard.vue"]
  MetricsJSON["metrics.json queries"]
  StreamSel["Selected stream injected"]

  UI -- fetch traces/details --> TimeWin
  MetricsDash -- replace [STREAM_NAME] --> StreamSel
  MetricsDash -- apply WHERE --> MetricsJSON
  MetricsJSON -- updated SQL & fields --> MetricsDash
```



<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>TraceDetails.vue</strong><dd><code>Add time padding and
tidy template</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>

web/src/plugins/traces/TraceDetails.vue

<ul><li>Add ±10s padding to trace search<br> <li> Add ±10s padding to
trace details fetch<br> <li> Minor template formatting and structure
cleanup</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8795/files#diff-bc7fe6b6339ee2cde6494c0982d4b860847447e79f7431f07d598e0446df06f2">+267/-259</a></td>

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>TracesMetricsDashboard.vue</strong><dd><code>Use
selected stream in metrics queries</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/plugins/traces/metrics/TracesMetricsDashboard.vue

<ul><li>Inject selected stream into query via [STREAM_NAME]<br> <li>
Preserve and apply WHERE_CLAUSE replacement</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>metrics.json</strong><dd><code>Unify metrics SQL and
field mappings</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/traces/metrics/metrics.json

<ul><li>Replace default stream with [STREAM_NAME] placeholder<br> <li>
Unify queries for duration, rate, error rate<br> <li> Update field
aliases to new columns</ul>


</details>


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

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

</details>

___
2025-10-14 15:17:19 +05:30
ktx-vaidehiandktx-abhay caac6e6776 feat: add legends type configuration options and gridlines visibility to dashboard panels (#8291)
- #8801 


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


___

### **Description**
- Add legend type, height, alignment options

- Implement gridlines visibility configuration

- Introduce legend layout utility module

- Add comprehensive unit tests coverage


___

### Diagram Walkthrough


```mermaid
flowchart LR
  RustPanel["Rust PanelConfig schema"] -- "adds fields" --> FEConfig["Frontend default panel config"]
  FEConfig -- "used by" --> Renderer["PanelSchemaRenderer"]
  LegendUtil["legendConfiguration.ts"] -- "computes legend sizes/positions" --> Renderer
  ConfigUtils["configUtils.ts"] -- "controls UI visibility logic" --> ConfigPanel["ConfigPanel.vue/specs"]
  PromQLSpec["convertPromQLData.spec.ts"] -- "tests gridlines, legends" --> LegendUtil
```



<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>mod.rs</strong><dd><code>Extend panel schema with legends
and gridlines</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8291/files#diff-da49585bbcb02bf0f737bb68739ebc248edd15c7ad9427c0e68f7728bb4a8c17">+18/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>legendConfiguration.ts</strong><dd><code>New legend layout
and positioning utilities</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/8291/files#diff-048201ce8e1e704cdcd359b8d26f01a970a183c27c6a08fb08ea827a1e62b332">+1335/-0</a></td>

</tr>

<tr>
<td><strong>configUtils.ts</strong><dd><code>New config visibility
helpers for UI</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/8291/files#diff-13c3af76b0006aa5579eaf62dcc96012d217ef17d9ee03ce70a3abdc904558bc">+160/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>useDashboardPanel.ts</strong><dd><code>Set new default
legend and gridlines options</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/8291/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>PanelSchemaRenderer.vue</strong><dd><code>Observe layout
changes and re-render chart</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/8291/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+33/-1</a>&nbsp;
&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>Add tests for
gridlines, connect_nulls, legend sizing</code>&nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8291/files#diff-2769044ec488ef4070c2e1a28ce23ec36b945e46c903b870f8b340cbd6b05211">+1814/-0</a></td>

</tr>

<tr>
<td><strong>convertDataIntoUnitValue.spec.ts</strong><dd><code>Minor
spec file fix newline</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></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8291/files#diff-e9d8a984ed78af13e4d4424c605a3a55fe6ad2a3f7e403fad156ce17ffdc3bdd">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>8 files</summary><table>
<tr>
  <td><strong>PanelSchemaRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8291/files#diff-897e6e12808163dfb85ea964ac97d45a8c50146672558b4d86de292daaf021ce">+1199/-0</a></td>

</tr>

<tr>
  <td><strong>ConfigPanel.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8291/files#diff-a4e717cd660ad6fa369629f8de524f4d57bf4f71b11d3244ce41b9ed9f0379d2">+1310/-19</a></td>

</tr>

<tr>
  <td><strong>ConfigPanel.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8291/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+251/-42</a></td>

</tr>

<tr>
  <td><strong>configUtils.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8291/files#diff-76ffd3924d32c033abf1863d50311fe5005740ac4c03072f5bb361c53bf9a305">+1127/-0</a></td>

</tr>

<tr>
  <td><strong>convertPromQLData.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8291/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+141/-23</a></td>

</tr>

<tr>
  <td><strong>convertSQLData.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8291/files#diff-1dc85f7550b15820974ad93fa461de48d24bc5cbed621bffddb27250211fa88d">+1268/-1</a></td>

</tr>

<tr>
  <td><strong>convertSQLData.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8291/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3">+217/-148</a></td>

</tr>

<tr>
  <td><strong>legendConfiguration.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8291/files#diff-8fe65c64853f1d1a66b8fbc4ec0c567487438e84c9e03ed8ad63566b3d589a71">+1101/-0</a></td>

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

</details>

___

---------

Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
2025-10-14 12:25:36 +05:30
923348bb43 fix: ux changes for logs page (#8790)
### **PR Type**
Enhancement, Bug fix, Documentation


___

### **Description**
- Extracted inline styles to scoped SCSS

- Improved logs UI/UX and theming

- Fixed flicker and pagination UX

- Added reusable toolbar and collapse styles


___

### Diagram Walkthrough


```mermaid
flowchart LR
  SearchBar["SearchBar.vue"] -- "toolbar, toggles, menu UX" --> Styles["New SCSS modules"]
  IndexList["IndexList.vue"] -- "field list pagination, loading" --> Styles
  SearchResult["SearchResult.vue"] -- "histogram/table layout refactor" --> Styles
  Index["Index.vue"] -- "splitter/collapse UX, visualize container" --> Styles
  TenstackTable["TenstackTable.vue"] -- "table hover/headers theme" --> Styles
  DetailTable["DetailTable.vue"] -- "wrap toggle, layout" --> Styles
  History["SearchHistory.vue"] -- "wrap toggle, warning pill" --> Styles
  Scheduler["SearchSchedulersList.vue"] -- "rounded btn, external styles" --> Styles
  TransformSel["TransformSelector.vue"] -- "toolbarized toggle, icons" --> Styles
  FunctionSel["FunctionSelector.vue"] -- "class hooks, styles" --> Styles
  SyntaxGuide["SyntaxGuide.vue"] -- "dark mode class, ext styles" --> Styles
  JsonPreview["JsonPreview.vue"] -- "externalized styles" --> Styles
  App["App.vue"] -- "theme root class" --> AppStyles["app.scss: global scrollbar, collapse btn"]
```



<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>31
files</summary><table>
<tr>
<td><strong>SearchBar.vue</strong><dd><code>Toolbar/UI cleanup, toggles
and menus restyle</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+272/-585</a></td>

</tr>

<tr>
<td><strong>IndexList.vue</strong><dd><code>Field list pagination UX,
loading state, helpers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+133/-419</a></td>

</tr>

<tr>
<td><strong>SearchResult.vue</strong><dd><code>Histogram/table layout
classes, external styles</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-5e65533aa4754bb6d0074fda18ffc1ecacded3b9ca6bc28a161c3f6b12f20195">+30/-283</a></td>

</tr>

<tr>
<td><strong>Index.vue</strong><dd><code>Splitter/collapse UX, visualize
container cleanup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+99/-57</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>DetailTable.vue</strong><dd><code>Wrap toggle restyle and
list/table CSS extraction</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-80552b5d25fa6cef9fbbe430b1865d761c4b132284c2d2175afceea8cbabc8c7">+19/-79</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SearchSchedulersList.vue</strong><dd><code>Minor button
rounding, moved styles to SCSS</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/8790/files#diff-0c0a4097c53f07712d35562b1336602bf24faddedab77a9f5717f5582dcac2f1">+2/-137</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>TenstackTable.vue</strong><dd><code>Table container class
and theming adjustments</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-bc3c669f5ab65a42ae378df1f7d6b35014c9c220790bdcc72b47f55d1385dc22">+5/-104</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SearchHistory.vue</strong><dd><code>Wrap toggle restyle and
externalized styles</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/8790/files#diff-9dd167bd5e272b2057f53c16b905047eec00655a3552daad240a964d67a6f56d">+13/-100</a></td>

</tr>

<tr>
<td><strong>TransformSelector.vue</strong><dd><code>Toolbarized
transform toggle and SCSS import</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/8790/files#diff-0037d8dd9cfbacc26309b26e98ae953e7ccbd0891ac2fd01c6314ebd7eed9d2c">+25/-47</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>JsonPreview.vue</strong><dd><code>Moved component styles to
shared SCSS</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/8790/files#diff-3985073134d35ff074742944b114d0905524038b42e6d2ac887fef2c8436fb16">+1/-109</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SyntaxGuide.vue</strong><dd><code>Dark-mode class hook and
SCSS extraction</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/8790/files#diff-c6e8bb651fadd2b15b5b97f5b6069a57813fb97cc3d06eef983af4def33e8806">+5/-67</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>FunctionSelector.vue</strong><dd><code>Class hooks and SCSS
module inclusion</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/8790/files#diff-11d9577516700b94b5f3325e77214d0d886473e690db8c9ea981613c9fb89b68">+5/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>VisualizeLogsQuery.vue</strong><dd><code>Externalized
layout/splitter styles</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+1/-50</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>DateTime.vue</strong><dd><code>Rounded buttons and hover
feedback</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/8790/files#diff-c06c96ba750be6fc82f517a53ba809efff8aa619aba203b871d4d2aeb7f64f60">+6/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>App.vue</strong><dd><code>Theme root class binding for
global styles</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/8790/files#diff-7322e6842f92edbe4a6e810d63f066ec95e64806d64a02b52e2b9bef2a73db91">+7/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>app.scss</strong><dd><code>Global scrollbar, collapse
button, toggles polish</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-5703d12504b0395cbfbbfad02a592bc391496026e5f03743102ce06c210ea05f">+142/-2</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>search-result.scss</strong><dd><code>New SCSS for search
result layout and table</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/8790/files#diff-e98f726aae49bdd5f8a426c8023eed612f3f33d52b0d458b7730990b3aafc41e">+235/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>detail-table.scss</strong><dd><code>New SCSS for detail
table and panels</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/8790/files#diff-63d5673331a5ee1ab792d07831e4a6dbb0d2d40d2ad628652d57944e47a96338">+55/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>logs-page.scss</strong><dd><code>New SCSS for logs page
structure and splitter</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-3d8458bb7b934b0529dcb35f85e008a4404510435ee4a636ff86e20cfd2970c9">+1401/-0</a></td>

</tr>

<tr>
<td><strong>search-schedulerlist.scss</strong><dd><code>New SCSS for
scheduler list views</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/8790/files#diff-42bbf309982cfcfd1cca270e80a2bddd35947e59dd91f600f5c85788af1e0802">+136/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>index-list.scss</strong><dd><code>New SCSS for field/index
list</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-0a3be477d7575f8e412bf8092f91901dd1330c8458ebc2b24f96107647cfe200">+139/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>search-history.scss</strong><dd><code>New SCSS for search
history page</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/8790/files#diff-01ae0807917e4de78780d9ec549ae2b57e3004e7be72cd77536ac5ae75bda3ed">+97/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>transform-selector.scss</strong><dd><code>New SCSS for
transform selector controls</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/8790/files#diff-131c7ba7388ebe94d30b7f42ca12c30b0840a9f8d69622b68e573e829d9fa7d6">+99/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>syntax-guide.scss</strong><dd><code>New SCSS for syntax
guide dialog</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/8790/files#diff-7173f5473b8fed57af19a3017f9823e68099745dc181f7996f0024fa8099535c">+78/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>tenstack-table.scss</strong><dd><code>New SCSS for data
table and resizer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-0175daf538e52ff95480cb40fadf8e26564474f15e39c5fe2d628f2d7e72aa78">+99/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>function-selector.scss</strong><dd><code>New SCSS for
function selector</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/8790/files#diff-16e97b00c534fae20daf24545e4e6a37b83f59e22668eddfd2083c9d778a9032">+58/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>visualizelogs-query.scss</strong><dd><code>New SCSS for
visualize logs layout</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/8790/files#diff-263f2af1f510ef9047a88f4cf438ffdc7b22cc598a56071900b898899d5bdab3">+50/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>json-preview.scss</strong><dd><code>New SCSS for JSON
preview and menus</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-27d0a0d1ec327559e1c09ffec34a7fc937db12580f53d61f10897f378af7d6ff">+17/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>quasar-overrides.scss</strong><dd><code>Quasar overrides
aligned to new tokens</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/8790/files#diff-563af58e60b7250169ebe9ced59dfe163a801a106d7f20964a8d20000b320af5">+16/-15</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>_variables.scss</strong><dd><code>Variables updated for rem
units and theming</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/8790/files#diff-b3e37ee00c17b89ad1177c5592504277aa645b374095c065ea8b3782df5e89a2">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>quasar-variables.sass</strong><dd><code>Quasar variables
tuned for new UI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8790/files#diff-bb2b39e6af7e949bef75bce0c7021310c42dd0945c30f963e3c8b599598bfdaa">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>ui-guidelines.md</strong><dd><code>UI guidelines
documentation added</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/8790/files#diff-8c5e2f35601f7d06e3389626dd501fc84e694efd6cf0faab6dfaf92445483dfa">+1056/-0</a></td>

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

</details>

___

---------

Co-authored-by: Ashish Kolhe <ashish.j.kolhe@gmail.com>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-10-13 17:13:07 +05:30
Bhargav a66d0119a0 fix: update in kubernetes datasource configuration (#8785)
### **PR Type**
Enhancement, Documentation


___

### **Description**
- Update cert-manager install URL to v1.19.0

- Point OTel operator install to curated manifest


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["KubernetesConfig.vue"] -- "bump cert-manager URL" --> B["v1.16.1 -> v1.19.0"]
  A -- "change OTel operator source" --> C["GitHub latest -> OpenObserve curated YAML"]
```



<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>KubernetesConfig.vue</strong><dd><code>Refresh
Kubernetes command URLs for dependencies</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/ingestion/recommended/KubernetesConfig.vue

<ul><li>Bump cert-manager install URL to v1.19.0.<br> <li> Update
OpenTelemetry operator apply URL to OpenObserve curated
<br>manifest.</ul>


</details>


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

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

</details>

___
2025-10-11 09:53:29 +05:30
Omkar Kesarkhane c2c0ccdf2e feat: Rate, Errors and Duration (RED) metrics on traces list page (#8757)
### **PR Type**
Enhancement
#8784 


___

### **Description**
- Add RED traces metrics dashboard

- Replace scatter chart with metrics widgets

- Support view-only mode in panel schemas

- Improve traces loading and empty states


___

### Diagram Walkthrough


```mermaid
flowchart LR
  TracesPage["Traces Index.vue"] -- embeds --> SearchResult["SearchResult.vue"]
  SearchResult -- uses --> MetricsDashboard["TracesMetricsDashboard.vue"]
  MetricsDashboard -- loads --> MetricsJSON["metrics.json"]
  MetricsDashboard -- renders via --> RenderCharts["RenderDashboardCharts.vue"]
  PanelContainer["PanelContainer.vue"] -- passes --> viewOnlyProp["viewOnly prop"]
  PanelSchema["PanelSchemaRenderer.vue"] -- respects --> viewOnlyProp
```



<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>PanelContainer.vue</strong><dd><code>Pass view-only
flag and tidy tooltips</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/dashboards/PanelContainer.vue

<ul><li>Pass <code>viewOnly</code> prop to schema renderer<br> <li>
Tooltip attribute wrapping for readability<br> <li> Minor i18n quote
consistency changes<br> <li> Notification formatting improvements</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8757/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d">+32/-17</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>PanelSchemaRenderer.vue</strong><dd><code>Add view-only
support to schema renderer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelSchemaRenderer.vue

<ul><li>Add <code>viewOnly</code> prop to disable editing<br> <li> Gate
annotation button when <code>viewOnly</code><br> <li> Minor formatting
of icon tag<br> <li> Route/alert creation string refinements</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8757/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+20/-10</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>Index.vue</strong><dd><code>Simplify traces page and
delegate states</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/plugins/traces/Index.vue

<ul><li>Remove inline loading/empty blocks from page<br> <li> Delegate
result states to SearchResult<br> <li> Trigger metrics dashboard load on
first page<br> <li> Simplify histogram date setter</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8757/files#diff-952e26660e4d6aadd292ea2ef7b314e139a4f516d0b3931e20d42d6394700d07">+10/-46</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>SearchResult.vue</strong><dd><code>Integrate RED
metrics and improve UX</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/traces/SearchResult.vue

<ul><li>Replace scatter chart with RED metrics dashboard<br> <li> Add
loading and empty states within component<br> <li> Emit time-range on
metric zoom selection<br> <li> Adjust layout heights and refs</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8757/files#diff-7fc8153d64d38cf0945757bad8ab5e95ceae7e1c7daaeb300edbbfb484314e50">+76/-62</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>TracesMetricsDashboard.vue</strong><dd><code>New traces
metrics dashboard component</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/plugins/traces/metrics/TracesMetricsDashboard.vue

<ul><li>New dashboard component rendering metrics<br> <li> Accepts
stream, timeRange, filter, show<br> <li> Loads and customizes schema,
handles zoom<br> <li> Exposes refresh/load methods, auto-refresh
hooks</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>metrics.json</strong><dd><code>Add traces metrics
schema (Rate/Errors/Duration)</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/traces/metrics/metrics.json

<ul><li>Add predefined dashboard with three panels<br> <li> Rate,
Errors, Duration queries using histogram<br> <li> Uses
<code>[WHERE_CLAUSE]</code> placeholder for filters<br> <li> Layout and
visualization configs included</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8757/files#diff-8bf43bcbba5150a185625f458adcb6756145e7bfcbbf632d87a9d487a937524e">+415/-0</a>&nbsp;
</td>

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

</details>

___
2025-10-10 13:02:55 +05:30
ktx-vaidehi db53c5ceb3 fix: add support for extracting series names from gauge charts (#8774)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Add gauge series name extraction

- Keep pie/donut name extraction logic

- Fallback to existing options unchanged


___

### Diagram Walkthrough


```mermaid
flowchart LR
  panel["Detect panel type"] --> pie["Pie/Donut: data[].name -> series"]
  panel --> gauge["Gauge: series[].data[0].name -> series"]
  panel --> other["Other: return existing options"]
```



<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>ColorBySeries.vue</strong><dd><code>Support gauge chart
series name extraction</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/dashboards/addPanel/ColorBySeries.vue

<ul><li>Add gauge chart handling for series names.<br> <li> Filter
invalid gauge series safely.<br> <li> Preserve existing pie/donut
extraction logic.<br> <li> Default to original options for other
types.</ul>


</details>


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

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

</details>

___
2025-10-09 13:51:19 +05:30
ktx-vaidehi 1f889cc213 fix: dashboard add minimum height to panel container for better layout (#8773)
### **PR Type**
Bug fix


___

### **Description**
- Add min-height to panel container

- Prevent collapsed layout on small content

- Improve dashboard panel visual consistency


___

### Diagram Walkthrough


```mermaid
flowchart LR
  AddPanel["AddPanel.vue container"] -- "add tw-min-h-[140px]" --> StableLayout["Consistent panel height"]
```



<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>AddPanel.vue</strong><dd><code>Add minimum height to
panel container</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/views/Dashboards/addPanel/AddPanel.vue

<ul><li>Add Tailwind class <code>tw-min-h-[140px]</code> to
container<br> <li> Keep existing dynamic height
<code>tw-h-[calc(100vh-500px)]</code><br> <li> Improve layout stability
for panel renderer area</ul>


</details>


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

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

</details>

___
2025-10-09 12:40:14 +05:30
Ashish Kolhe e3f8cb81e0 fix: alert threshold fixes (#8752)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Add null-safety in PromQL data utils

- Improve axis show checks for empty results

- Pass executed query and Y-axis column to alerts

- Apply thresholds via HAVING/PromQL condition


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Panel["PanelSchemaRenderer: derive executedQuery + yAxis"] -- "pass via router" --> AddAlert["AddAlert: build alert payload"]
  AddAlert -- "SQL: apply HAVING; PromQL: promql_condition" --> Trigger["Trigger condition: threshold=1 operator>="]
  Utils1["convertPromQLData: null checks"] -- "limit, xAxis, axis show" --> Chart["Chart config"]
  Utils2["colorPalette: null-safe min/max"] -- "process metric values" --> Chart
```



<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>colorPalette.ts</strong><dd><code>Null-safe metric
flattening for min/max</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/utils/dashboard/colorPalette.ts

<ul><li>Filter out null metrics before flattening<br> <li> Preserve NaN
filtering logic</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>convertPromQLData.ts</strong><dd><code>Null-safe PromQL
series handling and axes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/utils/dashboard/convertPromQLData.ts

<ul><li>Guard result access with null checks<br> <li> Safely compute
total and limited series<br> <li> Safely build x-axis timestamps<br>
<li> Robust axisLine show condition</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8752/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+16/-9</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>AddAlert.vue</strong><dd><code>Reliable threshold
application for alerts</code>&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>Use executed query when available<br> <li> Inject HAVING for SQL
thresholds<br> <li> Add promql_condition for PromQL thresholds<br> <li>
Set trigger threshold to 1 (exists check)</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>PanelSchemaRenderer.vue</strong><dd><code>Provide
context for alert threshold creation</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/dashboards/PanelSchemaRenderer.vue

<ul><li>Determine executedQuery from metadata<br> <li> Infer Y-axis
column for SQL thresholds<br> <li> Pass yAxisColumn and executedQuery to
alert<br> <li> Support both builder and raw SQL</ul>


</details>


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

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

</details>

___
2025-10-08 18:12:42 +05:30
Abhay Padamani db3613392f fix: fill missing value for scatter chart (#8746)
### **PR Type**
Bug fix


___

### **Description**
- Include scatter in gap-filling chart types

- Prevent missing-value gaps for scatter charts


___

### Diagram Walkthrough


```mermaid
flowchart LR
  panelType["Panel type check"] -- "includes scatter" --> gapFilling["Enable gap-filling logic"]
  panelType -- "excludes scatter" --> bypass["Return processed data unchanged"]
```



<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>convertSQLData.ts</strong><dd><code>Enable gap filling
for scatter charts</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/utils/dashboard/convertSQLData.ts

<ul><li>Add <code>scatter</code> to supported chart types list<br> <li>
Ensures histogram-based gap filling applies to scatter</ul>


</details>


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

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

</details>

___
2025-10-07 17:56:58 +05:30
Ashish Kolhe 4174cb3f27 fix: pipepline errors cleanup (#8745)
### **PR Type**
Enhancement, Bug fix, Documentation


___

### **Description**
- Add pipeline error cleanup job

- New config for retention, interval

- Backend delete-older-than DB API

- UI dialog to view last errors


___

### Diagram Walkthrough


```mermaid
flowchart LR
  CFG["Add cleanup configs: error_retention_mins, error_cleanup_interval"]
  JOB["New job: pipeline_error_cleanup::run()"]
  LEADER["Leader election on ingesters"]
  DBAPI["DB API: delete_older_than(cutoff)"]
  UI["PipelinesList: error dialog + trigger"]

  CFG -- "drives schedule & cutoff" --> JOB
  JOB -- "runs periodically" --> LEADER
  LEADER -- "if leader" --> DBAPI
  DBAPI -- "remove stale errors" --> JOB
  UI -- "show last error details" --> UI
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>config.rs</strong><dd><code>Add pipeline error
retention and cleanup configs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/config/src/config.rs

<ul><li>Add <code>error_retention_mins</code> env config.<br> <li> Add
<code>error_cleanup_interval</code> env config.<br> <li> Document
retention and cleanup intervals.</ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Wire pipeline error cleanup
into job init</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/job/mod.rs

<ul><li>Register <code>pipeline_error_cleanup</code> module.<br> <li>
Start cleanup job during init.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>pipeline_error_cleanup.rs</strong><dd><code>Implement
scheduled pipeline error cleanup worker</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/job/pipeline_error_cleanup.rs

<ul><li>Implement periodic cleanup job for pipeline errors.<br> <li> Run
only on ingester leader via simple election.<br> <li> Compute cutoff
using retention mins; call DB delete.<br> <li> Add detailed logging and
error handling.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>pipeline_errors.rs</strong><dd><code>Add DB helper to
delete old pipeline errors</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/service/db/pipeline_errors.rs

<ul><li>Add <code>delete_older_than</code> to remove stale errors.<br>
<li> Return affected rows for metrics/logging.<br> <li> Document purpose
of cleanup API.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8745/files#diff-627b6bb9ca334984b8f08f1405a67e5110c238788f165e30abda39b03f7ab68f">+14/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>PipelinesList.vue</strong><dd><code>Show pipeline error
details dialog on list page</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/pipeline/PipelinesList.vue

<ul><li>Clickable error indicator opens error dialog.<br> <li> New
dialog shows summary and node errors.<br> <li> Add reactive state and
handlers for dialog.<br> <li> Add comprehensive styles for light/dark
modes.</ul>


</details>


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

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

</details>

___
2025-10-07 15:20:34 +05:30
Sai Nikhil 328b73cac9 fix: promql editor issues in add alert page (#8748)
### **User description**
This PR fixes the issues in
**No query is sent from the PromQL Editor resulting in error**
**PromQL Editor goes on infinite scrolling. shows console error
ResizeObserver loop completed with undelivered notifications**


___

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


___

### **Description**
- Fix PromQL editor height and classes

- Correct query payload for PromQL range

- Reset outputs on tab change

- Dynamic AI button text by tab


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Tab switch & buttons"] -- "reset outputs" --> Outputs["Output panes"]
  UI -- "dynamic label" --> AIBtn["AI Generate button"]
  PromEditor["PromQL editor"] -- "stable height/style" --> Layout["Editor layout"]
  RunQuery["Run query (PromQL)"] -- "proper payload & parsing" --> Outputs
```



<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>ScheduledAlert.vue</strong><dd><code>Stabilize PromQL
UI and fix range query handling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/alerts/ScheduledAlert.vue

<ul><li>AI button label depends on <code>tab</code> (SQL/PromQL).<br>
<li> PromQL editor: remove hard class height; set style height.<br> <li>
Hide SQL output area when on PromQL tab.<br> <li> Reset
<code>outputEvents</code>/<code>outputFnEvents</code> on tab change.<br>
<li> Use <code>promqlQuery</code> with <code>metrics_query_range</code>;
adjust response parsing.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8748/files#diff-5e143a17ab0fa5d7817f6d9301667fb5597236f27184248c7a71728e85b8d999">+20/-18</a>&nbsp;
</td>

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

</details>

___
2025-10-07 13:07:52 +05:30
ktx-vaidehi 41b243c351 fix: fetch annotations in parallel with queries (#8736)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Fetch annotations in parallel with queries

- Update watcher to re-render on annotations

- Preserve error handling and tracing

- Cache saving remains asynchronous


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Q["Build and run queries"] -- "Promise.all" --> QR["Query results"]
  A["Start annotations fetch"] -- "in parallel" --> AP["Annotations Promise"]
  QR -- "update state.data/metadata" --> S["Update state"]
  AP -- "await & assign" --> AN["state.annotations"]
  AN -- "watcher triggers" --> R["Panel re-render"]
```



<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>usePanelDataLoader.ts</strong><dd><code>Parallelize
annotations fetching across query paths</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/dashboard/usePanelDataLoader.ts

<ul><li>Start annotations fetch in parallel with PromQL queries.<br>
<li> Start annotations fetch in parallel with SQL/search paths.<br> <li>
Await annotations after primary data ready; update state.<br> <li> Add
try/catch guards; keep tracing and caching behavior.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8736/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+188/-115</a></td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>PanelSchemaRenderer.vue</strong><dd><code>Re-render
panel when annotations update</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/dashboards/PanelSchemaRenderer.vue

<ul><li>Add annotations to watch dependencies for re-render.<br> <li>
Ensure UI updates when annotations arrive.</ul>


</details>


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

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

</details>

___
2025-10-07 10:37:23 +05:30
Sai Nikhil 97f6cb078f fix: o2 UI updates (#8737)
### **User description**
1. store user input in local storage and use shortcuts to explore (up
and down arrow keys)
2. changed bg icon for o2 ai icon
3. added scroll to bottom button


___

### **PR Type**
Enhancement


___

### **Description**
- Add scroll-to-bottom button with smooth scroll

- Persist last 10 queries in localStorage

- Keyboard history navigation via arrows

- Update AI button gradient and hover/rotate


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Chat UI"]
  ScrollBtn["Scroll-to-bottom button"]
  History["LocalStorage query history"]
  Keys["ArrowUp/Down navigation"]
  Styles["AI button gradient/animations"]

  UI -- "shows when scrolled up" --> ScrollBtn
  ScrollBtn -- "click" --> UI
  UI -- "save on send" --> History
  Keys -- "navigate history" --> UI
  UI -- "visual tweaks" --> 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>O2AIChat.vue</strong><dd><code>Scroll control and
persistent query history</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/O2AIChat.vue

<ul><li>Add scroll-to-bottom button and styles.<br> <li> Implement
auto-visibility and smooth scrolling.<br> <li> Add query history with
localStorage (max 10).<br> <li> Add ArrowUp/Down history navigation
logic.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8737/files#diff-a6a125719a7b32b31b53fcfe05c12081d82c139a401699affdda0db8e73887e3">+224/-2</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>MainLayout.vue</strong><dd><code>AI button gradient and
hover behavior update</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/layouts/MainLayout.vue

<ul><li>Update AI button to gradient background.<br> <li> Adjust hover
transition timing and effect.<br> <li> Reverse icon rotation direction
on hover.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8737/files#diff-91e4134141264c4624d4eb4cfa987b33ed31eb6f551e089c0b26f2610dd54362">+4/-4</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-10-07 08:52:41 +05:30
Sai Nikhil f96b90e15f fix: o2 ai updates (#8734)
### **User description**
Loading Indicator will be visible everytime user hits the generate
before it was hidden
Implemented abort functionality for responses, allowing users to stop
generation mid-way.
Fixed the issue where empty messages appeared before actual responses,
ensuring a cleaner chat log.
when there is so much content incoming and if I try to stop it , it
should stop scroll

UI Enhancements:
Differentiated user messages and AI responses visually for better
clarity.
Updated the Send button with a gradient color and added styling for the
Stop button.
Improved the input experience by automatically focusing the input and
highlighting its border when clicking anywhere in the chat area.


___

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


___

### **Description**
- Add abortable streaming for AI chat

- Improve UI: send/stop buttons, avatars, gradients

- Auto-scroll to loading indicator on generate

- Prevent empty assistant messages during stream


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Chat UI (O2AIChat.vue)"]
  Fetch["fetchAiChat with AbortSignal (useAiChat.ts)"]
  AbortCtrl["AbortController lifecycle"]
  Stream["Streaming parser & message updates"]
  History["Save to history"]
  Styles["Theming, gradients, layout"]
  UI -- "Send -> creates AbortController" --> AbortCtrl
  AbortCtrl -- "signal" --> Fetch
  Fetch -- "stream chunks" --> Stream
  Stream -- "append assistant content" --> UI
  UI -- "Stop click" --> AbortCtrl
  AbortCtrl -- "abort()" --> Fetch
  Stream -- "on complete/error" --> History
  UI -- "focus + auto-scroll to loading" --> 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>useAiChat.ts</strong><dd><code>Abortable fetch with
streaming support and docs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useAiChat.ts

<ul><li>Add JSDoc and AbortSignal param to <code>fetchAiChat</code><br>
<li> Include optional <code>signal</code> in fetch options<br> <li>
Handle <code>AbortError</code> distinctly; return <code>{ cancelled:
true }</code><br> <li> Generalize error handling and null fallback</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8734/files#diff-830ee4f21bdbbd0fa5c5c0f43b0a1d0200831e07ccddc91982cf0371c801b046">+38/-9</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>O2AIChat.vue</strong><dd><code>Streaming UX,
cancellation, and UI enhancements</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/O2AIChat.vue

<ul><li>Implement AbortController lifecycle and Stop button<br> <li>
Avoid pre-creating empty assistant messages during stream<br> <li>
Auto-scroll to loading indicator; focus input on click<br> <li> UI/UX:
themed avatars, gradient backgrounds, send/stop styles</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8734/files#diff-a6a125719a7b32b31b53fcfe05c12081d82c139a401699affdda0db8e73887e3">+382/-39</a></td>

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

</details>

___
2025-10-06 15:49:30 +05:30
Bhargavandktx-vaidehi 9ab62c6d70 fix: disallow _timestamp field as alias (#8674)
### **PR Type**
Bug fix, Tests


___

### **Description**
- Add timestamp alias validation utility

- Block queries aliasing non-timestamp to timestamp

- Surface clear error message in SQL mode

- Add comprehensive unit tests for validator


___

### Diagram Walkthrough


```mermaid
flowchart LR
  logsUtils["logsUtils.ts"] -- "add checkTimestampAlias()" --> useSearchStream["useSearchStream.ts"]
  useSearchStream -- "validate SQL; set error 400" --> UX["User feedback"]
  logsUtils --> tests["logsUtils.spec.ts"]
```



<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>logsUtils.ts</strong><dd><code>Add timestamp alias
validation helper</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/composables/useLogs/logsUtils.ts

<ul><li>Add <code>checkTimestampAlias(query)</code> to validate
aliases.<br> <li> Parse SQL AST; fallback to string detection.<br> <li>
Return true only when aliasing is valid.<br> <li> Export
<code>checkTimestampAlias</code> from composable.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>useSearchStream.ts</strong><dd><code>Enforce timestamp
alias rule during SQL search</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useLogs/useSearchStream.ts

<ul><li>Import <code>checkTimestampAlias</code> from logsUtils.<br> <li>
Validate SQL queries in SQL mode.<br> <li> Set 400 error and message on
invalid alias.</ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Miscellaneous</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>useSearchBar.ts</strong><dd><code>Silence console error
logging in search bar</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useLogs/useSearchBar.ts

<ul><li>Comment out console.error in catch block.<br> <li> Preserve user
notification flow.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8674/files#diff-489bda221a164cbee8d66aaf178acb4e0d8a860dbdf39558804fc32c9efd71e8">+4/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>logsUtils.spec.ts</strong><dd><code>Add exhaustive
tests for timestamp alias validator</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/test/unit/composables/logsUtils.spec.ts

<ul><li>Add comprehensive unit tests for
<code>checkTimestampAlias</code>.<br> <li> Cover CTEs, joins,
subqueries, aggregates, unions.<br> <li> Test custom timestamp column
configurations.<br> <li> Mock store/router and search state.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8674/files#diff-4492d9abd2bc95897c46f6ed177f3298bda9f1419dc91b07e2aa1409b598bb7f">+611/-0</a>&nbsp;
</td>

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

</details>

___

---------

Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
2025-10-06 15:12:22 +05:30
Ashish Kolheandgreptile-apps[bot] c96999049c chore: traces UI changes (#8728)
### **PR Type**
Enhancement, Tests


___

### **Description**
- Refactor header to class-based styling

- Redesign Trace Details layout and styles

- Add span count badges and connectors

- Update tests for new selectors/classes


___

### Diagram Walkthrough


```mermaid
flowchart LR
  TraceHeaderSpec["TraceHeader.spec.ts tests"] -- align with classes --> TraceHeaderVue["TraceHeader.vue"]
  TraceTreeSpec["TraceTree.spec.ts tests"] -- new badge selectors --> TraceTreeVue["TraceTree.vue"]
  TraceDetailsVue["TraceDetails.vue"] -- layout + styles --> SidebarVue["TraceDetailsSidebar.vue"]
  TraceTreeVue -- span badges + connectors --> SpanBlockVue["SpanBlock.vue"]
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>TraceHeader.spec.ts</strong><dd><code>Update tests to assert
class-based styles</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/8728/files#diff-d8a57095481665bdacd7cc816c63d4c742048b832c15641ce20adaa4d3a58854">+8/-18</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>TraceTree.spec.ts</strong><dd><code>Adjust tests for badge
collapse and icons</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/8728/files#diff-0e779df03c894e381582de27f5c6dc36ac4905e01e12a501e0a4ca12599d4531">+9/-9</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>5
files</summary><table>
<tr>
<td><strong>SpanBlock.vue</strong><dd><code>Use rem for label offset
positioning</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/8728/files#diff-21a7d32870e3d6d3fc8098b06fd8e88ba20afea0c48cfa1ad7b309a9faf8cafc">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>TraceDetails.vue</strong><dd><code>Major layout refactor and
glassmorphism styles</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8728/files#diff-bc7fe6b6339ee2cde6494c0982d4b860847447e79f7431f07d598e0446df06f2">+297/-149</a></td>

</tr>

<tr>
<td><strong>TraceDetailsSidebar.vue</strong><dd><code>Restyle tables
with glassmorphic theme support</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8728/files#diff-0017bc08d8da96af6433770d0b274f825798d24401b33ce091b16a50fbaf4b57">+75/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>TraceHeader.vue</strong><dd><code>Replace inline styles with
CSS classes for header and tics</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8728/files#diff-b782486701e65fc550a1f3ad8303922c7aa141b7bbbab2b8a606b3115af7029b">+38/-23</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>TraceTree.vue</strong><dd><code>Add span count badges and
SVG connectors; hover highlights</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8728/files#diff-5d1fa8ba4d433439860b4bc036fb80e3e1b51948616dc04b1bfd1f9110a87091">+303/-69</a></td>

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

</details>

___

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-10-06 13:16:57 +05:30
Omkar Kesarkhane d2c60a9ab6 fix: logs histogram skeleton creation issue (#8651)
### **PR Type**
Bug fix
#8727 


___

### **Description**
- Persist histogram results using ref

- Replace array ops with ref access

- Fix skeleton resets across code paths

- Minor formatting and safety tweaks


___

### Diagram Walkthrough


```mermaid
flowchart LR
  state["searchState.ts: histogramResults ref"] -- "exposed via searchState()" --> stream["useSearchStream.ts: consume .value"]
  state -- "mapped via .value" --> hist["useHistogram.ts: build mapped data"]
  stream -- "reset/push via .value" --> hist
```



<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>searchState.ts</strong><dd><code>Make histogramResults
reactive with ref</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/composables/useLogs/searchState.ts

<ul><li>Convert <code>histogramResults</code> to
<code>ref([])</code><br> <li> Export reactive
<code>histogramResults</code> via state</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>useHistogram.ts</strong><dd><code>Use ref-based
histogram results in histogram flow</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useLogs/useHistogram.ts

<ul><li>Use <code>histogramResults.value</code> for mapping<br> <li>
Reset <code>histogramResults.value</code> in skeleton<br> <li> Push
zeros into <code>histogramResults.value</code></ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8651/files#diff-4d467d6778569f239f96f3af9ec30214aa8b029892bf40a0aa038dfbb73eca6e">+5/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>useSearchStream.ts</strong><dd><code>Stream logic uses
shared ref for histogram results</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useLogs/useSearchStream.ts

<ul><li>Remove local <code>histogramResults</code> array<br> <li> Inject
and use state <code>histogramResults</code><br> <li> Replace
resets/pushes with <code>.value</code> usage<br> <li> Minor formatting
and interval check tweak</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8651/files#diff-0b7e910195d1ec4b1301973bd2f4193e1e23442103f69a9fbd189d3f78547014">+46/-27</a>&nbsp;
</td>

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

</details>

___
2025-10-06 11:20:42 +05:30
Prabhat SharmaandmmosarafO2 3e92683350 fix: build manifest of both builds succeed plus more (#8729)
### **PR Type**
Enhancement


___

### **Description**
- Split PR image builds by architecture

- Unify Dockerfile for both builds

- Improve build cache isolation per arch

- Gate final job on both builds success


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["build_pr_image_amd64"] -- "produces amd64 image" --> C["build"]
  B["build_pr_image_arm64"] -- "produces arm64 image" --> C
  C -- "runs only if both succeed" --> D["post-build steps"]
```



<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>build-pr-image.yml</strong><dd><code>Split and harden
PR image build workflow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

.github/workflows/build-pr-image.yml

<ul><li>Rename jobs per arch: amd64/arm64<br> <li> Use single Dockerfile
path for both<br> <li> Add arch-scoped cache keys and prefixes<br> <li>
Make final job depend on both success</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8729/files#diff-ebeabab3ec6b3ad90cc66cb9c0d9f2ad72c7ec6116e30e9801241b46992742d6">+15/-22</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>Dockerfile.pr</strong><dd><code>Add unified runtime
Dockerfile for PR builds</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

deploy/build/Dockerfile.pr

<ul><li>Add Debian slim runtime base<br> <li> Install required runtime
packages<br> <li> Copy binary and init data dir<br> <li> Set default
command to run service</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8729/files#diff-0db44a1fcb127375b96718556fd43c738708efbcaf0f83a9bffe39d4bfa95a02">[link]</a>&nbsp;
&nbsp; </td>

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

</details>

___

---------

Co-authored-by: mmosarafO2 <mosraf@openobserve.ai>
2025-10-06 09:17:26 +05:30
Ashish Kolhe ca327c0311 fix: menu item and home view changes (#8725)
### **PR Type**
Enhancement


___

### **Description**
- Refine menu link hover/active behavior

- Add Streams header icon

- Redesign charts layout with CSS grid

- Improve tiles responsiveness and spacing


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Menu["MenuLink.vue styles"] -- "remove scale, add border" --> HoverActive["Stable hover/active states"]
  HomeHeader["HomeView Streams header"] -- "add icon" --> Accessibility["Improved visual affordance"]
  Layout["HomeView charts layout"] -- "CSS grid + wrappers" --> Responsive["Responsive, consistent tiles/charts"]
```



<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>MenuLink.vue</strong><dd><code>Stabilize menu item
hover/active states</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/MenuLink.vue

<ul><li>Add transparent border to .q-item<br> <li> Remove scale
transforms on hover/active<br> <li> Keep GPU-friendly translateZ(0)<br>
<li> Tweak hover background and icon/label colors</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8725/files#diff-8d69d8a33ed108d9bf912563bd5eed048a132ca6eaff6e559abf2ac0614abfe9">+5/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>HomeView.vue</strong><dd><code>Responsive charts grid
and Streams icon addition</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/views/HomeView.vue

<ul><li>Add Streams header icon using <code>outlinedWindow</code><br>
<li> Replace flex-based charts area with CSS grid<br> <li> Introduce
<code>.functions-dashboards-column</code> and
<code>.tile-wrapper</code><br> <li> Normalize tile sizing, spacing, and
hover shadow</ul>


</details>


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

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

</details>

___
2025-10-03 21:28:35 +05:30
Ashish Kolhe b6be723799 fix: alerts with threshold from dashboards (#8711)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add alert context menu on charts

- Pass threshold/condition to Add Alert

- Correct query-type handling from panels

- Sync HAVING with threshold when aggregated


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Chart["ChartRenderer (ECharts)"] -- "emit contextmenu {x,y,value}" --> Panel["PanelSchemaRenderer"]
  Panel -- "show AlertContextMenu" --> Menu["AlertContextMenu (above/below)"]
  Menu -- "select {condition, threshold}" --> Panel
  Panel -- "router.push addAlert?panelData=..." --> AddAlert["AddAlert.vue"]
  AddAlert -- "init form from panelData" --> Form["Query/Trigger setup"]
  AddAlert -- "set threshold/operator/HAVING" --> Form
```



<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>AddAlert.vue</strong><dd><code>Robust panel-driven
alert initialization and thresholds</code>&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/alerts/AddAlert.vue

<ul><li>Set query type based on panel data<br> <li> Populate SQL/PromQL
only if present<br> <li> Enable aggregation only for SQL builder
queries<br> <li> Apply threshold/operator and HAVING from panel<br> <li>
Avoid default 'custom' type when from panel</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>AlertContextMenu.vue</strong><dd><code>Add alert
creation context menu component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/components/dashboards/AlertContextMenu.vue

<ul><li>New context menu component for alerts<br> <li> Provides
above/below threshold actions<br> <li> Handles outside click and Escape
close<br> <li> Dark/light themed styling</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>PanelSchemaRenderer.vue</strong><dd><code>Integrate
context menu and route to Add Alert</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelSchemaRenderer.vue

<ul><li>Wire chart contextmenu to open alert menu<br> <li> Lazy-load and
render AlertContextMenu<br> <li> Build panelData payload with
threshold/condition<br> <li> Navigate to Add Alert with encoded
data</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>ChartRenderer.vue</strong><dd><code>Add contextmenu
support for data point alerts</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/panels/ChartRenderer.vue

<ul><li>Emit contextmenu with point coords and value<br> <li> Prevent
default menu, support bar/line charts<br> <li> Unbind/bind contextmenu
listener on lifecycle<br> <li> Extract value from diverse data
formats</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8711/files#diff-353fab39cd76197438814db862c4a506636ea7e15633ee92d9269adbd97fe67c">+54/-0</a>&nbsp;
&nbsp; </td>

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

</details>

___
2025-10-03 17:35:27 +05:30
188e43d8ca fix: menu item + home page ux changes (#8719)
### **PR Type**
Enhancement, Documentation


___

### **Description**
- Modernize menu item UX and visuals

- Add badges and accessibility to menu

- Redesign Home page tiles and charts

- Introduce animated count-up metrics


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Menu["MenuLink.vue: badges, ARIA, active state"] --> Drawer["MainLayout.vue: nav ARIA, drawer styling"]
  Drawer --> Home["HomeView.vue: tiles, charts, animations"]
  Menu --> Vars["_menu-variables.scss: theme vars"]
  Menu --> Anim["_menu-animations.scss: keyframes/mixins"]
  Home --> Anim
  Home --> Vars
```



<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>MenuLink.vue</strong><dd><code>Accessible menu link
with badges and modern styles</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/MenuLink.vue

<ul><li>Add ARIA attributes and computed active state.<br> <li>
Introduce numeric badge with pulse animation.<br> <li> Enhance
hover/active styles with gradients, shadows.<br> <li> Import new SCSS
variables/animations; light/dark modes.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8719/files#diff-8d69d8a33ed108d9bf912563bd5eed048a132ca6eaff6e559abf2ac0614abfe9">+226/-14</a></td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>MainLayout.vue</strong><dd><code>Navigation drawer
accessibility and visual refresh</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/layouts/MainLayout.vue

<ul><li>Add ARIA roles/labels to drawer navigation.<br> <li> Import menu
SCSS partials.<br> <li> Apply glassmorphism drawer background,
borders.<br> <li> Adjust left nav list paddings and light-mode
colors.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8719/files#diff-91e4134141264c4624d4eb4cfa987b33ed31eb6f551e089c0b26f2610dd54362">+36/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>HomeView.vue</strong><dd><code>Home dashboard UX
overhaul with animated metrics</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/views/HomeView.vue

<ul><li>Redesign tiles/charts layout; add ARIA to sections.<br> <li>
Implement count-up animations and formatted values.<br> <li> Introduce
responsive grid, icons, hover/focus states.<br> <li> Centralize theme
vars and animations; reduced motion.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8719/files#diff-9af441af191d3254ef5f9db603dca75486de7638cda41a3c050e7b3c33d68280">+587/-216</a></td>

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>_menu-animations.scss</strong><dd><code>Menu animation
keyframes and utilities</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/styles/_menu-animations.scss

<ul><li>Add pulse and glow keyframes.<br> <li> Provide transition mixins
and animation tokens.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>_menu-variables.scss</strong><dd><code>Theming
variables for modernized menu</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/styles/_menu-variables.scss

<ul><li>Define light/dark theme variables and sizes.<br> <li> Add
spacing, effects, and transition tokens.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8719/files#diff-3a2c84e33dabf24acb9ff0f9372f7546d5e95799d9923e1aaa1ed03e50421f96">+127/-0</a>&nbsp;
</td>

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

</details>

___

---------

Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-10-03 16:30:07 +05:30
Sai Nikhil 244c9547a7 fix: new pipeline UI improvements (#8714)
### **User description**
This PR covers the issues mentioned in #8692


___

### **PR Type**
Bug fix


___

### **Description**
- Restore zoom controls in pipeline UI

- Remove redundant back button in editor

- Set default zoom level to 0.8


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Editor["PipelineEditor.vue header"] -- "remove back button, adjust padding" --> UI["Cleaner editor UI"]
  View["PipelineView.vue"] -- "add Controls & styles" --> ZoomControls["Zoom/Fit UI restored"]
  Flow["PipelineFlow.vue"] -- "default zoom 0.8" --> Viewport["Improved initial viewport"]
```



<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>PipelineEditor.vue</strong><dd><code>Remove redundant
back button from editor header</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/pipeline/PipelineEditor.vue

<ul><li>Remove left-side back button container<br> <li> Add left padding
class to header container</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>PipelineFlow.vue</strong><dd><code>Set pipeline default
zoom to 0.8</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/plugins/pipelines/PipelineFlow.vue

- Adjust default viewport zoom from 1.5 to 0.8


</details>


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

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>PipelineView.vue</strong><dd><code>Reintroduce Vue Flow
controls for zoom/fit</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/pipeline/PipelineView.vue

<ul><li>Import Controls and ControlButton from @vue-flow/controls<br>
<li> Import controls stylesheet<br> <li> Register Controls and
ControlButton as components</ul>


</details>


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

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

</details>

___
2025-10-03 12:41:36 +05:30
Ashish Kolhe 91bbbc91ed feat: add external user warning while adding to role (#8709)
### **PR Type**
Enhancement, Documentation


___

### **Description**
- Warn on adding external users to roles

- Add email slot with tooltip icon

- Pass role context to GroupUsers

- Localize warning title and message


___

### Diagram Walkthrough


```mermaid
flowchart LR
  EditRole["EditRole.vue: use GroupUsers with role context"] -- context='role' --> GroupUsers["GroupUsers.vue: email slot + warning logic"]
  GroupUsers -- shows icon/tooltip --> UI["UI: warning for external user additions"]
  Locales["en.json: new i18n strings"] -- used by --> GroupUsers
```



<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>GroupUsers.vue</strong><dd><code>Email slot with
external-user warning for roles</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/iam/groups/GroupUsers.vue

<ul><li>Add email slot rendering with warning icon and tooltip.<br> <li>
Introduce <code>context</code> prop to control role/group behavior.<br>
<li> Compute columns to use email slot; include external flag in
data.<br> <li> Add <code>shouldShowWarning</code> helper based on
context and membership.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8709/files#diff-114c767db76d4a09278c765d8aba39a1936c861488f39e7f0f6b3883499a3c40">+54/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>EditRole.vue</strong><dd><code>Provide role context to
GroupUsers</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>

web/src/components/iam/roles/EditRole.vue

- Pass `context="role"` to `GroupUsers` when editing roles.


</details>


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

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>en.json</strong><dd><code>Add i18n strings for external
user warning</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/locales/languages/en.json

- Add `externalUserWarningTitle` and message strings.


</details>


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

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

</details>

___
2025-10-01 18:50:05 +05:30
Sai Nikhil 0b352e1ae0 fix: home page minor changes (#8704)
### **User description**
1. This PR introduces loading skeleton into application and also used in
homepage
2. it also make some UI changes moving dashboards and functions to 2nd
section and adding some hover effects


___

### **PR Type**
Enhancement


___

### **Description**
- Add reusable `SkeletonBox` component

- Introduce `HomeViewSkeleton` for loading

- Redesign functions/dashboards tiles layout

- Add hover, tooltip, and forward icons


___

### Diagram Walkthrough


```mermaid
flowchart LR
  HomeView["HomeView.vue"]
  SkeletonBox["components/shared/SkeletonBox.vue"]
  HomeSkeleton["components/shared/HomeViewSkeleton.vue"]

  HomeView -- "uses while loading" --> HomeSkeleton
  HomeSkeleton -- "composes" --> SkeletonBox
  HomeView -- "imports" --> SkeletonBox
  HomeView -- "UI updates" --> "Tiles/Charts/Buttons"
```



<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>New Home view
loading skeleton</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/shared/HomeViewSkeleton.vue

<ul><li>Add full-page home loading skeleton layout<br> <li> Theme-aware
skeleton styles and animations<br> <li> Skeletons for streams, tiles,
and charts<br> <li> Responsive layout for tiles and charts</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>SkeletonBox.vue</strong><dd><code>Reusable skeleton box
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/shared/SkeletonBox.vue

<ul><li>Create reusable skeleton component with variants<br> <li> Add
theme-aware wave animation styles<br> <li> Support shapes and sizes via
props<br> <li> Provide multiline text styling hooks</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8704/files#diff-4260429750bf9f01b844b734b41361e3a95e570062bffa71c36983a113c755d7">+193/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>HomeView.vue</strong><dd><code>Home page layout and
loading UX improvements</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/views/HomeView.vue

<ul><li>Integrate <code>HomeViewSkeleton</code> during loading<br> <li>
Move functions/dashboards tiles near charts<br> <li> Add tooltips and
forward icons to view buttons<br> <li> Update icons, chart sizes, and
hover effects</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8704/files#diff-9af441af191d3254ef5f9db603dca75486de7638cda41a3c050e7b3c33d68280">+195/-73</a></td>

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

</details>

___
2025-10-01 16:24:20 +05:30
Ashish Kolhe d6339499f8 feat: pipeline errors on ui (#8695)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Surface last pipeline error in API

- Persist pipeline errors in new table

- Batch upsert pipeline errors from reporting

- Safer error messages in VRL failures


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Reporting["Self-reporting errors"] -- "batch_upsert" --> DB["Table: pipeline_last_errors"]
  API["GET /pipelines"] -- "join with errors" --> UIData["PipelineList.last_error"]
  UIData -- "render" --> ListUI["PipelinesList error icon"]
  UIData -- "per-node errors" --> NodeUI["CustomNode error badge"]
  Ingestion["VRL apply_vrl_fn"] -- "clean error message" --> Reporting
```



<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>2 files</summary><table>
<tr>
<td><strong>config.rs</strong><dd><code>Bump DB schema version to
10</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/8695/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Wire migration for last errors
table</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/8695/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>11
files</summary><table>
<tr>
<td><strong>pipelines.rs</strong><dd><code>Add last_error to pipeline
model</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/8695/files#diff-61bb28d7091130297c917a0530d96202fcb4b073b514410531f9fe71acfc814f">+22/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>pipeline.rs</strong><dd><code>Join pipelines with last error
data</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-c69f4f94eee97ce226caddc497b2adf89e26869f2d72b0d0206dc31ab2714daf">+26/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Register pipeline_last_errors
entity</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/8695/files#diff-c539d7557d1425986d5c09849d8dbca42d1b309c2bc33d49db641d6a783098f6">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>pipeline_last_errors.rs</strong><dd><code>Define ORM entity
for last errors</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/8695/files#diff-e4ff5af0cb9c6e6343ecaad06fbb03515ace8868be6ee6d192ff0f01ee4d3e17">+22/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>prelude.rs</strong><dd><code>Export PipelineLastErrors
entity</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/8695/files#diff-a818656b9fb01945155f28450270dd2ae20b67c8248c851ffa0f25e859d263ed">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>

<td><strong>m20250930_000001_create_pipeline_last_errors_table.rs</strong><dd><code>Create
pipeline_last_errors table and index</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/8695/files#diff-173fe20fccfdcfa68563a13f9d69c2e6cb0901ac257d43386962bbac90f296de">+169/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Expose pipeline_errors DB
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; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-b7e3bf7f0ac23dd084c0c817a310a4d5e7a64ff532746d182986ef940fa03fd0">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>pipeline_errors.rs</strong><dd><code>CRUD and batch upsert
for pipeline errors</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/8695/files#diff-627b6bb9ca334984b8f08f1405a67e5110c238788f165e30abda39b03f7ab68f">+331/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>queues.rs</strong><dd><code>Batch upsert pipeline errors
during ingest</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/8695/files#diff-ed15a56d4d3becc2dfb3d05af2dac7f92962ec3091199728fa953e6aed7ed767">+45/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>PipelinesList.vue</strong><dd><code>Show pipeline-level last
error indicator</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/8695/files#diff-85e3ef322f3eea0fc6d74d89431ba338a1153cb82ee06bef0f7c5f439c04267d">+27/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>CustomNode.vue</strong><dd><code>Show node-level error badge
and navigation</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/8695/files#diff-b9d83cd503b6d3470b238accaaea0b4decf567add8ad4727c63c9e583725f408">+98/-2</a>&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>mod.rs</strong><dd><code>Return sanitized VRL error
messages</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-7c7b5bca85f0ced652965cae66540c96f56dfcca4f4c16b77bf7b45aac203d1b">+12/-8</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>mod.rs</strong><dd><code>Clarify queuing of error
data</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-c6255010f7a87d6acdb3ad04954fc9f2c27350ae319c53a1857b120aa06408a3">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-10-01 14:12:09 +05:30
Ashish Kolhe c3db39e10a feat: create alert from dashboard (#8700)
### **PR Type**
Enhancement


___

### **Description**
- Add route and view for alert creation

- Create alert from dashboard panel

- Prefill alert form using panel query

- Internationalize panel menu texts


___

### Diagram Walkthrough


```mermaid
flowchart LR
  DashboardPanel["Dashboard Panel (PanelContainer.vue)"] -- "Create Alert action" --> RouterAddAlert["Route: /alerts/add (router.ts)"]
  DashboardPanel -- "Encodes panel data in query" --> RouterAddAlert
  AddAlertView["AddAlertView.vue"] -- "Loads destinations & renders AddAlert" --> AddAlertComponent["AddAlert.vue"]
  AddAlertComponent -- "onMounted: loadPanelDataIfPresent()" --> PrefillForm["Prefill alert form from panel data"]
  i18nEN["en.json"] -- "New keys for panel UI" --> DashboardPanel
```



<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>router.ts</strong><dd><code>New route for adding
alerts</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/shared/router.ts

<ul><li>Add <code>alerts/add</code> route named
<code>addAlert</code><br> <li> Lazy-load <code>AddAlertView.vue</code>
component<br> <li> Apply <code>routeGuard</code> and set page title</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>AddAlert.vue</strong><dd><code>Prefill alert form from
panel query</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/AddAlert.vue

<ul><li>Load panel data on mount<br> <li> Implement
<code>loadPanelDataIfPresent</code> to prefill form<br> <li> Set name,
query type, aggregation, filters, VRL, and period<br> <li> Expose loader
in returned bindings</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>AlertList.vue</strong><dd><code>Preserve query params
during alert navigation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/alerts/AlertList.vue

<ul><li>Preserve existing query params on navigations<br> <li> Minor
comment whitespace fixes</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>PanelContainer.vue</strong><dd><code>Add create-alert
action and i18n to panel menu</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelContainer.vue

<ul><li>Add "Create Alert" menu action<br> <li> Implement
createAlertFromPanel with validations<br> <li> Route to
<code>addAlert</code> with encoded panel data<br> <li> Internationalize
panel tooltips/labels and messages</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8700/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d">+88/-20</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>AddAlertView.vue</strong><dd><code>New AddAlert view
with destinations loading</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/views/AddAlertView.vue

<ul><li>New view to host <code>AddAlert</code> component<br> <li> Fetch
alert destinations on mount<br> <li> Handle save/cancel navigation to
alert list</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8700/files#diff-39d244954ff4e867c07c8f983a931f941e53dc7961c83e707f362bd99de8c83a">+102/-0</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>en.json</strong><dd><code>i18n strings for panel and
alert creation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/locales/languages/en.json

<ul><li>Add i18n keys for panel actions, tooltips, notifications<br>
<li> Add message for imported panel query</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8700/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+23/-0</a>&nbsp;
&nbsp; </td>

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

</details>

___
2025-10-01 13:20:14 +05:30
Sai Nikhil 1b0098f93a fix: pass additional context to the AI depending on the page (#8697)
### **User description**
1. This PR adds the additional context to the following pages 
  - logs, dashboards , pipelines ,  alerts
2. fixed auto scrolling when user trying to stop the scroll in ai chat 
3. in add alert page when user opens the ai chat it was overlapping the
buttons of generate


___

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


___

### **Description**
- Introduce global AI context provider system

- Add page-specific context providers

- Fix AI chat auto-scroll behavior

- Prevent AI chat overlap on Add Alert


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Registry["ContextRegistry singleton"] -- "register/setActive" --> LogsProv["Logs context provider"]
  Registry -- "register/setActive" --> PipesProv["Pipelines context provider"]
  Registry -- "register/setActive" --> AlertsProv["Alerts context provider"]
  Registry -- "register/setActive" --> DashProv["Dashboards context provider"]
  Registry -- "fallback" --> DefaultProv["Default context provider"]
  UIChat["AI Chat"] -- "getActiveContext()" --> Registry
  Pages["Pages (Logs/Pipelines/Alerts/Dashboards)"] -- "mount/unmount" --> Registry
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>14
files</summary><table>
<tr>
<td><strong>alertsContextProvider.ts</strong><dd><code>New alerts page
context provider</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/8697/files#diff-95b95a1b18db00eb9a3b4b9155cf23a078e4d54032f023d6fdf7445afb9e4661">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>dashboardsContextProvider.ts</strong><dd><code>New
dashboards context provider with intents</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/8697/files#diff-c3323cfc4d7015b1b51ff5ec85fe3371c817dcc614e52ebb4fac76abc719b872">+76/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>defaultContextProvider.ts</strong><dd><code>Default app-wide
context provider</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/8697/files#diff-dedeb11e8ee3b92acda8c30cb84d2a749dec11cb1387547c613220a29744e236">+59/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>index.ts</strong><dd><code>Export registry and
providers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8697/files#diff-2f5cd69b9d0b7e1c87c1dbe6ad7cdb7b182014a03594481085561a9d694d2659">+36/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>logsContextProvider.ts</strong><dd><code>Logs context
provider with time and fields</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/8697/files#diff-bd6b1c67f0d9ef96110421aac3dd3e8f90115da95adf28e79c88e1c6fc594ac2">+198/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>pipelinesContextProvider.ts</strong><dd><code>Pipelines
editor context provider</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/8697/files#diff-9f09180c5d32d87f8c89fc0a8edc8d2153b37515dcf906123fbd8017c435fa75">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>registry.ts</strong><dd><code>Context registry singleton
with fallback</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/8697/files#diff-771da8f6897a25741c485f6637da004e3a62f6e4b70d6dbb2a408a56ba9e3923">+136/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>types.ts</strong><dd><code>Context provider/core
types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8697/files#diff-f0c33d88011ac1afc87b85a1be56756616a2a13105537cf6f6a8090747b2beb3">+34/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>useAiChat.ts</strong><dd><code>Use structured context; add
default provider init</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8697/files#diff-830ee4f21bdbbd0fa5c5c0f43b0a1d0200831e07ccddc91982cf0371c801b046">+62/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>main.ts</strong><dd><code>Initialize global default context
provider</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/8697/files#diff-37b29c5a3b76595194070205d9a0cdedcd717bf7c4367022d1e2667395962f2e">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>PipelineEditor.vue</strong><dd><code>Register/cleanup
pipelines context provider</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/8697/files#diff-68c21f647336067eb79737ce9aca2d49632f2fa1c0878bcfdae55607e3473a15">+37/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>Index.vue</strong><dd><code>Register/cleanup logs context
provider</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/8697/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+42/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ViewDashboard.vue</strong><dd><code>Register/cleanup
dashboards context provider</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/8697/files#diff-052badb6758aff09ceaf1645869b9ba96125e6a0ea21abb01a8ee0a40d6467f3">+16/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AddPanel.vue</strong><dd><code>Register/cleanup context for
add/edit panel</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/8697/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+17/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>2 files</summary><table>
<tr>
<td><strong>O2AIChat.vue</strong><dd><code>Add auto-scroll control and
event handling</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/8697/files#diff-a6a125719a7b32b31b53fcfe05c12081d82c139a401699affdda0db8e73887e3">+22/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AddAlert.vue</strong><dd><code>Avoid AI chat overlap;
register alerts context</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8697/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+15/-2</a>&nbsp;
&nbsp; </td>

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

</details>

___
2025-10-01 11:45:06 +05:30
Sai Nikhil ad34aaa420 fix: pipeline UI revamp (#8676)
### **User description**
This PR enhances the pipelines UI


___

### **PR Type**
Enhancement


___

### **Description**
- Revamped pipeline node sidebar UI

- Added inline function definition viewer

- Improved node/edge interactions and deletion UX

- Updated icons, styles, and dark mode


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Sidebar["NodeSidebar.vue UI/UX revamp"] -- styled nodes & tooltips --> Editor["PipelineEditor.vue visuals"]
  Editor -- keyboard edge delete & headers --> Flow["PipelineFlow.vue interactions"]
  Flow -- edge click help notification --> Edges["CustomEdge/EdgeWithButton cleanup"]
  AssocFn["AssociateFunction.vue function preview"] -- RAF/RBF guidelines --> Users["Better user guidance"]
```



<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>8
files</summary><table>
<tr>
<td><strong>AssociateFunction.vue</strong><dd><code>Show selected
function definition and RAF/RBF note</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8676/files#diff-24a5b2df69327a6477227ea674939dea19dd6d393b4bfcf807089d71e6391152">+205/-1</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>NodeSidebar.vue</strong><dd><code>Redesign draggable nodes
with custom tooltips</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8676/files#diff-01811ed187a4a8d0dc2cf301d145c6d236eae3d474b048b006986e755cc6d8bb">+285/-13</a></td>

</tr>

<tr>
<td><strong>PipelineEditor.vue</strong><dd><code>Visual updates, new
icons, and keyboard edge delete</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8676/files#diff-68c21f647336067eb79737ce9aca2d49632f2fa1c0878bcfdae55607e3473a15">+185/-22</a></td>

</tr>

<tr>
<td><strong>PipelineView.vue</strong><dd><code>Update assets and scoped
styles for nodes</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/8676/files#diff-a71732cf7f8ee768e21f7eb2bf9eeed4ac67ba8221cca2e8d347d8acb27d4471">+61/-50</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>CustomEdge.vue</strong><dd><code>Remove on-edge delete
button; style and cleanup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8676/files#diff-d759dc0d507d5dfb3295fdb7dfd59e4a48ae32cdced0bb3471096f8691a99f58">+9/-47</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>CustomNode.vue</strong><dd><code>Hover actions, handle
styling, labels truncation, UX polish</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8676/files#diff-b9d83cd503b6d3470b238accaaea0b4decf567add8ad4727c63c9e583725f408">+704/-342</a></td>

</tr>

<tr>
<td><strong>EdgeWithButton.vue</strong><dd><code>Remove edge button UI;
keep keyboard deletion</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8676/files#diff-838d98dd7119cb936a8971f3c631106cdda2c4113530999ff50bceb206acd375">+14/-29</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>PipelineFlow.vue</strong><dd><code>Edge click help
notification and event handling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8676/files#diff-9c7475a54f0c895dd49eb0c5b53fe0a76ceff0520f667a9cb065b364557ced50">+85/-3</a>&nbsp;
&nbsp; </td>

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

</details>

___
2025-09-30 11:55:51 +05:30
Sai Nikhil 79a916e7ad fix: rename regex patterns to sensitive data redaction (#8681)
### **PR Type**
Enhancement, Documentation


___

### **Description**
- Rename UI to Sensitive Data Redaction

- Update i18n keys and labels

- Adjust tooltips and table headers

- Simplify import/create wording


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Components (schema.vue, settings/*.vue)"] -- "rename labels/tooltips" --> SDR["Sensitive Data Redaction terminology"]
  I18N["en.json i18n strings"] -- "update keys/values" --> SDR
  SDR -- "reflected in lists, tabs, empty state" --> UX["Consistent SDR UI"]
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>schema.vue</strong><dd><code>Add SDR tooltip to
patterns column</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>

web/src/components/logstream/schema.vue

<ul><li>Add tooltip for <code>patterns</code> column<br> <li> Tooltip
text: "Sensitive Data Redaction"</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8681/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>RegexPatternList.vue</strong><dd><code>Use SDR titles
and footer labels</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/settings/RegexPatternList.vue

<ul><li>Switch header i18n key to <code>regex_patterns.title</code><br>
<li> Update footer count label to <code>bottom_header</code></ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8681/files#diff-524927acd9f5bb07b71bfac489e747470108574e21a6dde63ea7c1f219cea853">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>index.vue</strong><dd><code>Update settings tab to SDR
title</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/settings/index.vue

- Use `regex_patterns.title` for tab label


</details>


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

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>NoRegexPatterns.vue</strong><dd><code>Update empty
state copy for patterns</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/settings/NoRegexPatterns.vue

<ul><li>Simplify subtitle wording<br> <li> Rename import button text to
"Import Pattern"</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8681/files#diff-279b923f20042948c87e907d2453e9d5a4c8c73672b23df951d7d7d823ff3a88">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>en.json</strong><dd><code>i18n updates for SDR
terminology</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/locales/languages/en.json

<ul><li>Add <code>regex_patterns.title</code>: "Sensitive Data
Redaction"<br> <li> Shorten <code>sidebar.regexPatterns</code> to
"SDR"<br> <li> Rename button/search labels (Add/Search/Edit/Import
Pattern)<br> <li> Add <code>bottom_header</code>: "Pattern(s)"</ul>


</details>


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

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

</details>

___
2025-09-30 10:35:32 +05:30
Sai Nikhil 48914cefc9 fix: added warning message to the pipeline default destination node (#8596)
### **User description**
This PR solves the issue of deleting the default destination node added
implicitly so it will throw a warning message and also it will be only
available for realtime pipeline because we only add default destination
node for realtime pipelines #8597 8597


___

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


___

### **Description**
- Warn on deleting default destination node

- Detect default output for realtime pipelines

- Add reusable warning message constant

- Extend confirm dialog to show banner


___

### Diagram Walkthrough


```mermaid
flowchart LR
  useDnD["useDnD: detect default destination"] -- "expose checkIfDefaultDestinationNode" --> StreamVue["Stream.vue: delete dialog"]
  useDnD -- "expose checkIfDefaultDestinationNode" --> CustomNodeVue["CustomNode.vue: delete dialog"]
  constants["constants.ts: warning message"] -- "import" --> StreamVue
  constants -- "import" --> CustomNodeVue
  ConfirmDialog["ConfirmDialog.vue: banner + width"] -- "render warningMessage" --> UI["User sees warning on delete"]
```



<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>useDnD.ts</strong><dd><code>Add utilities to detect
default destination node</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/pipelines/useDnD.ts

<ul><li>Add helper to get input stream name.<br> <li> Add checker for
default destination node by id.<br> <li> Comment clarifying default node
auto-addition.<br> <li> Export
<code>checkIfDefaultDestinationNode</code>.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>ConfirmDialog.vue</strong><dd><code>Enhance dialog to
display warning banner</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/components/ConfirmDialog.vue

<ul><li>Support optional <code>warningMessage</code> prop.<br> <li>
Render themed banner when warning present.<br> <li> Adjust dialog width
conditionally.<br> <li> Inject Vuex store for theming.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8596/files#diff-01d149c6879aa6b1464c186a294b79de4065d9440374dfd2a38ae2ad096f1451">+30/-2</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>constants.ts</strong><dd><code>Centralize default
destination warning message</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/utils/pipelines/constants.ts

- Add `defaultDestinationNodeWarningMessage` constant.


</details>


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

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>Stream.vue</strong><dd><code>Show warning when deleting
default destination (form)</code>&nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

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

<ul><li>Pass <code>warningMessage</code> to ConfirmDialog.<br> <li>
Import and use warning message constant.<br> <li> Use
<code>checkIfDefaultDestinationNode</code> before delete.<br> <li> Clear
warning for non-default nodes/cancel dialog.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>CustomNode.vue</strong><dd><code>Warn on deleting
default destination (node card)</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/pipelines/CustomNode.vue

<ul><li>Import warning constant and checker.<br> <li> Populate warning
when deleting default destination.<br> <li> Pass
<code>warningMessage</code> to ConfirmDialog.</ul>


</details>


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

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

</details>

___
2025-09-29 22:11:44 +05:30
Bhargav 9cbb031fa1 fix: redirect to login page on unauthorised error with http2 streaming (#8656)
### **PR Type**
Bug fix


___

### **Description**
- Handle 401 during HTTP2 streaming

- Trigger logout and clear storages

- Reload app to force auth flow


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["HTTP2 streaming request"] -- "error caught" --> B["Check error type"]
  B -- "AbortError" --> C["Ignore silently"]
  B -- "status === 401" --> D["Dispatch logout"]
  D -- "then" --> E["Clear localStorage/sessionStorage"]
  E -- "then" --> F["window.location.reload()"]
  B -- "other errors" --> G["onError(traceId, error)"]
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>useStreamingSearch.ts</strong><dd><code>Add
unauthorized handling in streaming error catch</code>&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useStreamingSearch.ts

<ul><li>Add 401 error handling branch.<br> <li> Dispatch
<code>logout</code> on unauthorized error.<br> <li> Clear local and
session storage.<br> <li> Reload page to restart auth flow.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8656/files#diff-8fce3e25a161cd458e734bd9b1f98aadefe3482da7b6529a5b1f4fa20ec115e2">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-09-29 14:23:17 +05:30
Sai Nikhil 91a35cc0f1 fix: should not show checkbox before loading columns (#8618)
### **User description**
This PR fixes the issue in
https://github.com/openobserve/openobserve/issues/8615


___

### **PR Type**
Bug fix


___

### **Description**
- Hide select-all checkbox until columns load

- Prevent checkbox misalignment on initial render

- Apply conditional header cell rendering


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["PipelinesList header render"] -- "columns.length == 0" --> Hidden["Do not render q-th/checkbox"]
  UI -- "columns.length > 0" --> Visible["Render q-th with select-all checkbox"]
```



<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>PipelinesList.vue</strong><dd><code>Conditionally
render select-all checkbox based on columns</code></dd></summary>
<hr>

web/src/components/pipeline/PipelinesList.vue

<ul><li>Gate header checkbox rendering on columns length<br> <li>
Replace unconditional q-th with v-if="columns.length > 0"<br> <li>
Prevents checkbox appearing before columns load</ul>


</details>


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

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

</details>

___
2025-09-29 13:38:53 +05:30
Sai Nikhilandomkark06 5a51e28c85 fix: streams list render issue main (#8644)
### **PR Type**
Bug fix


___

### **Description**
- Show parent when children visible

- Filter rows by show before render

- Update empty/loading checks to filtered rows

- Limit items-size and rows to filtered data


___

### Diagram Walkthrough


```mermaid
flowchart LR
  EditRole["EditRole.vue: set permission.show when children exist"]
  PermissionsTable["PermissionsTable.vue: compute filtered rows"]
  UI["UI: render/empty states use filtered rows"]
  EditRole -- "propagate show to parent" --> PermissionsTable
  PermissionsTable -- "use getFilteredRows" --> UI
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>EditRole.vue</strong><dd><code>Ensure parent permission
shows when children visible</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/iam/roles/EditRole.vue

<ul><li>Set <code>permission.show = true</code> when
<code>filteredEntities</code> exist<br> <li> Move show assignment before
entity slicing<br> <li> Preserve entity slicing for specific
permissions<br> <li> Clear temporary <code>filteredEntities</code> after
processing</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8644/files#diff-263b6bc7d29fdf8358c8437cd637f1350aa3733cc2706eae8ff00028686cc0f5">+4/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>PermissionsTable.vue</strong><dd><code>Render only
visible rows via computed filter</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/iam/roles/PermissionsTable.vue

<ul><li>Add <code>getFilteredRows</code> computed to filter by
<code>row.show</code><br> <li> Replace <code>rows</code> with
<code>getFilteredRows</code> across template<br> <li> Update empty and
resource messages to use filtered length<br> <li> Import
<code>computed</code> and <code>defineEmits</code></ul>


</details>


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

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

</details>

___

---------

Co-authored-by: omkark06 <omkar@zinclabs.io>
2025-09-26 18:33:55 +05:30
Abhay Padamani 41f03aba06 fix: histogram interval config issue (#8622)
### **User description**
- #8614


___

### **PR Type**
Bug fix


___

### **Description**
- Preserve histogram interval for visualization

- Add dedicated interval field to avoid pagination bug

- Ensure missing values can be filled in charts

- Fix regression impacting WITH clause streaming


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["WebSocket streaming response"] -- "has histogram_interval" --> B["Set visualization_histogram_interval"]
  B -- "drives chart fill logic" --> C["Correct chart rendering"]
  B -- "separate from pagination interval" --> D["Pagination unaffected"]
```



<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>useSearchStream.ts</strong><dd><code>Preserve histogram
interval in separate visualization field</code></dd></summary>
<hr>

web/src/composables/useLogs/useSearchStream.ts

<ul><li>Capture histogram_interval from first streaming response<br>
<li> Store in new field
<code>visualization_histogram_interval</code><br> <li> Avoids pagination
counters conflict<br> <li> Enables missing-value fill in charts</ul>


</details>


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

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

</details>

___
2025-09-25 17:46:33 +05:30
Abhay Padamani fad1692855 fix: do not allow select * query with share link (#8565) (#8568)
### **User description**
fix #8565


___

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


___

### **Description**
- Block SELECT * queries in visualization

- Respect SQL vs builder modes for query source

- Display user-friendly error notification

- Guarded by quick mode configuration flag


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Toggle visualization"] -- "determine query source" --> B["Build or read SQL"]
  B -- "quick mode enabled?" --> C["Check SELECT * pattern"]
  C -- "is SELECT *" --> D["Show error notification"]
  C -- "not SELECT *" --> E["Proceed to extract fields"]
```



<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>Index.vue</strong><dd><code>Add guard against SELECT *
for visualization</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/logs/Index.vue

<ul><li>Determine SQL from builder or raw mode.<br> <li> Detect simple
SELECT * queries in quick mode.<br> <li> Block visualization and notify
on invalid query.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8568/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+21/-0</a>&nbsp;
&nbsp; </td>

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

</details>

___
2025-09-24 15:35:23 +05:30
Sai Nikhil 980949392a fix: alert module code splitting (#8611)
### **User description**
add alert module splitting into util files


___

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


___

### **Description**
- Extract alert logic into utils modules

- Refactor AddAlert to use utilities

- Add SQL/where/query builder helpers

- Update tests to new utilities


___

### Diagram Walkthrough


```mermaid
flowchart LR
  AddAlertVue["AddAlert.vue (component)"] -- uses --> alertQueryBuilder["utils/alerts/alertQueryBuilder.ts"]
  AddAlertVue -- uses --> alertPayload["utils/alerts/alertPayload.ts"]
  AddAlertVue -- uses --> alertValidation["utils/alerts/alertValidation.ts"]
  AddAlertVue -- uses --> alertDataTransforms["utils/alerts/alertDataTransforms.ts"]
  AddAlertVue -- uses --> alertSqlUtils["utils/alerts/alertSqlUtils.ts"]
  AddAlertSpec["AddAlert.spec.ts"] -- import --> alertQueryBuilder
  validateAlertsSpec["utils/validateAlerts.spec.ts"] -- import --> alertValidation
```



<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>2
files</summary><table>
<tr>
<td><strong>AddAlert.spec.ts</strong><dd><code>Tests use extracted
generateWhereClause utility</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-84362398fea8abd9acf30f4f40ba8d4cf27348677454017bd4e6f568d5176ac6">+13/-9</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>validateAlerts.spec.ts</strong><dd><code>Point validation
tests to new module path</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/8611/files#diff-8ba923d1b6e78fb3134f2775e51fce66e5171bcfb001fcac4837639313c55b4a">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>7
files</summary><table>
<tr>
<td><strong>alertDataTransforms.ts</strong><dd><code>New FE/BE condition
transform and group ops</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/8611/files#diff-7db039e3a78f8c5306c84382f42b071f680cf4f18f84d17cedcc8d484a8b113f">+116/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>alertPayload.ts</strong><dd><code>New payload build and save
alert helpers</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/8611/files#diff-914546afcdb9f9604ad6efe448d8b373fa3f24be1ba7cbc75bd18bf8c419ab3c">+211/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>alertQueryBuilder.ts</strong><dd><code>New SQL and WHERE
clause builder utilities</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/8611/files#diff-5c829ce5fd3ad2f5ef359df5976e6adfc52eaa6b5f249f594c8b8a588acf8b3e">+204/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>alertSqlUtils.ts</strong><dd><code>New SQL parser wrapper
for column checks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-fea836214c2a77154fb97a519b6fa4bd0315acbffb9b3d7d94738bf073d5eabd">+33/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>alertValidation.ts</strong><dd><code>Consolidated alert
validation and JSON save flow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-3164a4a58c1865cfcbbba084ac339664c99564545be4d57504dd406d59d8ad4a">+649/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AddAlert.vue</strong><dd><code>Refactor to use new alert
utils modules</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/8611/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+110/-681</a></td>

</tr>

<tr>
<td><strong>ScheduledAlert.vue</strong><dd><code>UI tweaks and cleanup
of unused logic</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/8611/files#diff-5e143a17ab0fa5d7817f6d9301667fb5597236f27184248c7a71728e85b8d999">+22/-165</a></td>

</tr>

</table></details></td></tr><tr><td><strong>Miscellaneous</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>validateAlerts.ts</strong><dd><code>Remove legacy validation
(replaced by utils)</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/8611/files#diff-31dfccb7ecf243d062992787997f3e29b26579144def6a562e7f138cf3a73ed6">+0/-313</a>&nbsp;
</td>

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

</details>

___
2025-09-24 13:48:05 +05:30
ktx-vaidehi 3dde03ec9f fix: update quick_mode parameter handling in logs URL based on configuration for drilldown and go to logs in dashboard (#8586)
### **PR Type**
Bug fix


___

### **Description**
- Respect `quick_mode_enabled` in logs URL

- Apply to drilldown and go-to-logs flows

- Minor watch formatting cleanup


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Config["zoConfig.quick_mode_enabled"]
  Builder1["PanelContainer: build logs URL"]
  Builder2["PanelSchemaRenderer: build logs URL"]
  URLParam["Set quick_mode=true/false"]
  Format["Refactor watch() formatting"]

  Config -- controls --> Builder1
  Config -- controls --> Builder2
  Builder1 -- sets --> URLParam
  Builder2 -- sets --> URLParam
  PanelSchemaRenderer --> Format
```



<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>PanelContainer.vue</strong><dd><code>Conditional
quick_mode in logs URL construction</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelContainer.vue

<ul><li>Set <code>quick_mode</code> based on
<code>zoConfig.quick_mode_enabled</code>.<br> <li> Remove unconditional
<code>quick_mode=false</code>.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8586/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d">+5/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>PanelSchemaRenderer.vue</strong><dd><code>Apply
config-driven quick_mode and tidy watchers</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelSchemaRenderer.vue

<ul><li>Set <code>quick_mode</code> based on
<code>zoConfig.quick_mode_enabled</code>.<br> <li> Keep histogram
hidden; preserve other params.<br> <li> Reformat watch() for
readability.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8586/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+12/-5</a>&nbsp;
&nbsp; </td>

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

</details>

___
2025-09-23 18:04:47 +05:30
Abhay Padamani 803154ef4b fix: import issue due to refactoring on visualization (#8591)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Replace deprecated logs composable imports

- Switch to `useSearchStream` and `searchState`

- Update imports to new module paths

- Adjust usage to new APIs


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["VisualizeLogsQuery.vue"] --> B["Remove useLogs import"]
  A --> C["Import useSearchStream"]
  A --> D["Import searchState"]
  A --> E["Use searchState().searchObj"]
  A --> F["Use useSearchStream().buildSearch"]
```



<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>VisualizeLogsQuery.vue</strong><dd><code>Migrate logs
search to new composables</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/plugins/logs/VisualizeLogsQuery.vue

<ul><li>Remove <code>useLogs</code> import and usage.<br> <li> Import
<code>useSearchStream</code> for <code>buildSearch</code>.<br> <li>
Import <code>searchState</code> to access <code>searchObj</code>.<br>
<li> Update variable initializations to new composables.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8591/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+4/-2</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-09-23 16:45:10 +05:30
Sai Nikhil 4fa43fdff7 fix: stream detail page (schema) layout changed (#8585)
### **User description**
1. This PR introduces a new tab called configuration where we moved all
the configuration settings to that tab
2. This PR introduces a compact table so that more columns are visible
and also all the stream stats above will stay at viewport always


___

### **PR Type**
Enhancement


___

### **Description**
- Redesigned schema page layout and header

- Added Configuration tab for settings

- New compact stats tiles and sticky table

- Added distinct values toggle and UX polish


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Header["Header: title + name + timeline"] -- "context" --> Tabs["Tabs: Schema Settings / Configuration / Extended Retention"]
  Tabs -- "schema fields" --> SchemaTbl["Schema table: compact, sticky header, mini-select"]
  Tabs -- "settings" --> Config["Configuration panel: retention, max range, flatten, toggles"]
  Tabs -- "retention" --> ExtRet["Extended Retention: date selection + table"]
  Stats["Stats tiles: Events, Storage, Compressed, Index"] -- "overview" --> Header
```



<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>schema.vue</strong><dd><code>Schema page UI/UX overhaul
with new configuration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/logstream/schema.vue

<ul><li>Revamped header with stream name badge and timeline.<br> <li>
Added stats tiles grid and compact layout.<br> <li> Introduced
'Configuration' tab with inputs and toggles.<br> <li> Improved schema
table: sticky header, mini-select, tooltips, <br>pagination.<br> <li>
Added 'Enable Distinct Values' setting wired to backend.<br> <li>
Updated date formatting and preserved original timestamps.<br> <li>
Adjusted per-page options and floating footer behavior.<br> <li> Added
new icons and theme-aware styling; extensive CSS updates.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8585/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+1068/-604</a></td>

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

</details>

___
2025-09-23 15:00:23 +05:30
Sai Nikhil 4aa8424682 fix: check for lower case select as well in middle of the query (#8545)
### **User description**
This PR fixes the issue mentioned in #8541


___

### **PR Type**
Bug fix


___

### **Description**
- Handle lowercase SELECT in saved views

- Prevent applying views to SQL queries

- Use case-insensitive SELECT detection


___

### Diagram Walkthrough


```mermaid
flowchart LR
  InputQuery["User query input"] -- toLowerCase check --> SelectDetector["Detect 'select' anywhere"]
  SelectDetector -- true --> EarlyReturn["Skip applying saved views"]
  SelectDetector -- false --> ContinueFlow["Proceed with view application"]
```



<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>Index.vue</strong><dd><code>Case-insensitive SQL
detection in saved views</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/logs/Index.vue

<ul><li>Make SELECT detection case-insensitive.<br> <li> Detect 'select'
anywhere in the query string.<br> <li> Prevent applying saved views when
SQL mode detected.</ul>


</details>


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

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

</details>

___
2025-09-23 14:07:18 +05:30
ktx-vaidehiandAbhay Padamani 02fb65df88 fix: dashboard toLowercase issue (#8538) (#8563)
### **PR Type**
Bug fix


___

### **Description**
- Fix alias lowercase conversion with non-strings


___

### Diagram Walkthrough


```mermaid
flowchart LR
  getDataValue["getDataValue in aliasUtils.ts"]
  aliasInput["alias input (any type)"]
  toStringLower["toString() then toLowerCase()"]
  propertyAccess["Safe property access on obj"]

  aliasInput -- "fallback path" --> toStringLower
  toStringLower -- "compute lowercase key" --> propertyAccess
  propertyAccess -- "return value" --> getDataValue
```



<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>aliasUtils.ts</strong><dd><code>Safe lowercase
conversion for alias keys</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/utils/dashboard/aliasUtils.ts

<ul><li>Add toString() before toLowerCase().<br> <li> Prevent errors
when alias isn't a string.</ul>


</details>


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

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

</details>

___

Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
2025-09-23 12:06:48 +05:30
Bhargav 0f7734b7e1 fix: trace id added for values api (#8408)
### **PR Type**
Bug fix


___

### **Description**
- Add optional trace header to values API

- Propagate generated trace id from UI

- Use http client with custom headers


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Logs IndexList.vue: generate trace id"] -- "pass traceparent" --> Service["stream.values() accepts traceparent"]
  Service -- "set headers if present" --> HTTP["http({ headers }).get(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>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>stream.ts</strong><dd><code>Support optional
traceparent header in service</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/services/stream.ts

<ul><li>Accept new <code>traceparent</code> param in <code>values</code>
method.<br> <li> Build optional headers with
<code>traceparent</code>.<br> <li> Switch to <code>http({ headers
}).get(url)</code> to send header.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>IndexList.vue</strong><dd><code>Propagate trace id from
UI to service</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/logs/IndexList.vue

<ul><li>Generate trace context in UI.<br> <li> Pass
<code>traceparent</code> (traceId) to values API call.</ul>


</details>


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

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

</details>

___
2025-09-22 16:10:48 +05:30
Sai Nikhil 4a4ea9fcb1 fix: should add include search term before group by clause (#8515)
### **User description**
This PR fixes the #8510


___

### **PR Type**
Bug fix


___

### **Description**
- Insert filters before GROUP BY clause

- Handle both include and exclude terms

- Preserve ORDER BY and LIMIT positions

- Align query splitting via group-by branch


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Query["Incoming query"] --> CheckOB["Has ORDER BY?"]
  CheckOB -- Yes --> InsertBeforeOB["Insert filter before ORDER BY"]
  CheckOB -- No --> CheckGB["Has GROUP BY?"]
  CheckGB -- Yes --> InsertBeforeGB["Insert filter before GROUP BY"]
  CheckGB -- No --> CheckLimit["Has LIMIT?"]
  CheckLimit -- Yes --> InsertBeforeLimit["Insert filter before LIMIT"]
  CheckLimit -- No --> AppendFilter["Append filter at end/with WHERE"]
```



<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>SearchBar.vue</strong><dd><code>Add group-by-aware
filter insertion logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/plugins/logs/SearchBar.vue

<ul><li>Add GROUP BY branch when adding filters.<br> <li> Insert
"AND"/"where" filter before GROUP BY.<br> <li> Maintain existing ORDER
BY and LIMIT handling.<br> <li> Minor formatting of conditional
branches.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8515/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+26/-2</a>&nbsp;
&nbsp; </td>

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

</details>

___
2025-09-22 14:26:04 +05:30
ktx-vaidehiandAbhay Padamani 37675d5320 fix: remove drilldown and compare against config on visualization rc7(#8534) (#8562)
### **PR Type**
Bug fix


___

### **Description**
- Disable drilldown on Logs page

- Guard chart compare against Logs context

- Expose page key to template


___

### Diagram Walkthrough


```mermaid
flowchart LR
  ConfigPanel["ConfigPanel.vue"]
  DrilldownGuard["Add 'pageKey !== logs' guard"]
  CompareGuard["Guard compare UI for logs"]
  ExposeKey["Return dashboardPanelDataPageKey from setup()"]

  ConfigPanel -- "update Drilldown v-if" --> DrilldownGuard
  ConfigPanel -- "update compare v-if" --> CompareGuard
  ConfigPanel -- "export key to template" --> ExposeKey
```



<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>ConfigPanel.vue</strong><dd><code>Disable
drilldown/compare when page key is logs</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/addPanel/ConfigPanel.vue

<ul><li>Add <code>dashboardPanelDataPageKey !== 'logs'</code> to
Drilldown v-if.<br> <li> Add same guard to compare/series options v-if
with <code>!promqlMode</code>.<br> <li> Return
<code>dashboardPanelDataPageKey</code> from setup exports.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8562/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+5/-2</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
2025-09-22 12:41:53 +05:30
Abhay Padamani b2535e2fa0 fix: series list issue for color override config on pie chart (#8540)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Correct series extraction for pie/donut

- Fallback to existing options logic

- Prevent invalid items via filtering


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["panelType check"] -- "pie/donut" --> B["extract from data[].name"]
  A -- "other types" --> C["use existing options"]
  B -- "build series list" --> D["return { series: names }"]
  C -- "fallback" --> E["return options or empty series"]
```



<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>ColorBySeries.vue</strong><dd><code>Properly derive
series for pie/donut charts</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/dashboards/addPanel/ColorBySeries.vue

<ul><li>Add panel type detection for pie/donut.<br> <li> Extract series
names from data[].name.<br> <li> Filter out invalid data items.<br> <li>
Preserve fallback to existing options.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8540/files#diff-2783259507b45f0b3664d9be68ca236690bbbf151472da3fa8b552d230af5b3f">+16/-0</a>&nbsp;
&nbsp; </td>

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

</details>

___
2025-09-19 16:15:20 +05:30
Bhargav 817245b43d fix: added additional match_all pattern to the syntax guide (#8475)
### **PR Type**
Documentation


___

### **Description**
- Expand syntax guide with match_all examples

- Add prefix, phrase prefix, regex usage

- Document case-sensitive and postfix searches

- Mirror examples for query editor and SQL


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Guide["Syntax guide (logs)"]
  MatchAll["match_all examples"]
  Prefix["Prefix & postfix"]
  Phrase["Phrase prefix"]
  Regex["Regex patterns"]
  Case["Case-sensitive usage"]

  Guide -- "adds" --> MatchAll
  MatchAll -- "includes" --> Prefix
  MatchAll -- "includes" --> Phrase
  MatchAll -- "includes" --> Regex
  MatchAll -- "includes" --> Case
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>SyntaxGuide.vue</strong><dd><code>Extend logs syntax
guide with match_all patterns</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/logs/SyntaxGuide.vue

<ul><li>Add match_all prefix example ('error*')<br> <li> Add phrase
prefix example ('error code*')<br> <li> Add regex-like example ('*code
40*')<br> <li> Add case-sensitive and postfix examples ('traceHits',
'*failed')</ul>


</details>


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

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

</details>

___
2025-09-19 13:39:09 +05:30
Sai Nikhil 6e49099b5f fix: sql query editor rapidly increases (#8435)
### **User description**
This PR fixes the issue in #8433


___

### **PR Type**
Bug fix


___

### **Description**
- Prevent SQL editor height growth

- Set minimum height to 18rem

- Compute height via inline style binding

- Adjust for error message presence


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Alert Form UI"] -- contains --> Editor["SQL Query Editor"]
  ErrorState["SQL Error State"] -- toggles --> EditorHeight["Dynamic Height Style"]
  Editor -- renders with --> EditorHeight
```



<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>ScheduledAlert.vue</strong><dd><code>Stabilize SQL
editor height with dynamic styles</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/alerts/ScheduledAlert.vue

<ul><li>Remove class-based height toggling.<br> <li> Add inline dynamic
height style based on error state.<br> <li> Increase minimum editor
height to 18rem.<br> <li> Use calc values: 100%-150px or 100%-80px.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8435/files#diff-5e143a17ab0fa5d7817f6d9301667fb5597236f27184248c7a71728e85b8d999">+4/-2</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-09-18 17:50:22 +05:30
6e75dc0e62 feat: add bulk enable/disable for alert and pipelines (#8438)
### **User description**
This adds two apis, one for bulk enable/disable of pipeline and one for
bulk enable/disable of alerts.


___

### **PR Type**
Enhancement


___

### **Description**
- Add bulk enable/disable for alerts

- Add bulk enable/disable for pipelines

- Introduce enterprise permission checks helper

- Update auth bypass for bulk endpoints


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["New models: Bulk request/response (alerts, pipelines)"]
  B["Alerts: POST /v2/{org_id}/alerts/bulk/enable"]
  C["Pipelines: POST /{org_id}/pipelines/bulk/enable"]
  D["Enterprise permission check: check_resource_permissions"]
  E["Router: register bulk endpoints"]
  F["Auth: bypass for /bulk/enable paths"]

  A -- "used by" --> B
  A -- "used by" --> C
  D -- "enforced in" --> B
  D -- "enforced in" --> C
  E -- "exposes" --> B
  E -- "exposes" --> C
  F -- "allows unauth extraction for" --> B
  F -- "allows unauth extraction for" --> C
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>auth.rs</strong><dd><code>Allow auth extractor bypass for
bulk enable endpoints</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-9bc2b1841504a435f66ad094f72ddbe7b7fa75e5e1557b8adbfe36f7f0592e1b">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>responses.rs</strong><dd><code>Add alerts bulk enable
request/response models</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-224027f90893122eea28e35778467acf1a4b5572ce612fc9bc9ec44ca8ebd9fb">+12/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>pipelines.rs</strong><dd><code>Add pipelines bulk enable
request/response models</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-61bb28d7091130297c917a0530d96202fcb4b073b514410531f9fe71acfc814f">+12/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Implement alerts bulk enable
endpoint with permissions</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-83431801d27626ef27482e67b62661f900043544a45ddf958bd027cf2fa3bd8d">+91/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>pipeline.rs</strong><dd><code>Implement pipelines bulk
enable endpoint with permissions</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-c69f4f94eee97ce226caddc497b2adf89e26869f2d72b0d0206dc31ab2714daf">+89/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>utils.rs</strong><dd><code>Add generic enterprise resource
permission checker</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-96bb9f4a8f547c821f26c957e8505d0437095b08d2b36687531f71565d287bd6">+38/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Register bulk enable endpoints in
service routes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>openapi.rs</strong><dd><code>Expose bulk enable endpoints in
OpenAPI</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/8438/files#diff-edb8ce232c0cd08366879f642788a75d99f6bab64b4c0e77391281fdb9241e90">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2025-09-18 12:12:16 +05:30