Commit Graph
4380 Commits
Author SHA1 Message Date
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
Hengfei Yang 0ee605280e fix: set download mmdb to disable as default (#8768)
### **User description**
- [x] Disable mmdb download as default
- [x] Upgrade to datafusion v50.1.0


___

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


___

### **Description**
- Default enable MMDB downloads

- Bump DataFusion to 50.1.0

- Project version to 0.16.0


___

### Diagram Walkthrough


```mermaid
flowchart LR
  cfg["Config: mmdb_disable_download default"] -- set to false --> behavior["MMDB downloads enabled by default"]
  deps["Cargo: DataFusion 50.1.0"] -- upgrade --> engine["Query engine components"]
  ver["Cargo: version 0.16.0"] -- release bump --> pkg["Crate metadata"]
```



<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>config.rs</strong><dd><code>Enable MMDB downloads by
default</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/config/src/config.rs

<ul><li>Flip <code>mmdb_disable_download</code> default to false<br>
<li> Keeps env var name <code>ZO_MMDB_DISABLE_DOWNLOAD</code></ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>Cargo.toml</strong><dd><code>Version and DataFusion
dependency upgrades</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

Cargo.toml

<ul><li>Bump crate version to 0.16.0<br> <li> Upgrade
<code>datafusion</code> to 50.1.0<br> <li> Upgrade
<code>datafusion-proto</code> and aggregate-common to 50.1.0</ul>


</details>


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

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

</details>

___
2025-10-08 21:28:40 +08:00
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
Subhra264 383fd49f3c fix: when local mode is true ignore role group (#8764)
### **User description**
When local_mode is true for a search request, we can ignore role_group
and use the local querier node irrespective of role group of the local
node.


___

### **PR Type**
Bug fix


___

### **Description**
- Ignore role group in local mode

- Derive role group only when not local

- Preserve default Interactive role otherwise


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Request received"] --> B{"local_mode?"}
  B -- "true" --> C["role_group = None"]
  B -- "false" --> D["Derive role_group from search_event_type or Interactive"]
  C --> E["get_online_querier_nodes(trace_id, None)"]
  D --> E["get_online_querier_nodes(trace_id, role_group)"]
```



<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>flight.rs</strong><dd><code>Bypass role_group selection
in local mode</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/service/search/cluster/flight.rs

<ul><li>Add <code>is_local_mode</code> flag extraction.<br> <li> Set
<code>role_group = None</code> when local mode.<br> <li> Keep existing
role_group derivation otherwise.<br> <li> Use computed role_group for
node selection.</ul>


</details>


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

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

</details>

___
2025-10-08 16:41:46 +05:30
ByteBaker 8ed584521f chore: increase minimum coverage threshold for API 2025-10-08 15:24:45 +05:30
ByteBaker 0cf0923a59 fix: flaky integration test 2025-10-08 14:08:36 +05:30
ByteBaker c7a064d947 chore: check if code changes before running UT 2025-10-08 14:08:36 +05:30
ByteBaker da96d301ab refactor: extract reusable Headers extractor for actix-web handlers
This commit:
- Creates a new extractors.rs module with a generic Headers<T> extractor
- Implements FromRequest trait for type-safe header deserialization
- Centralizes header parsing logic to reduce code duplication across HTTP handlers
2025-10-08 14:08:36 +05:30
ByteBaker fd17f6fff5 fix: timed_annotations.end_time column update type 2025-10-08 10:30:51 +05:30
udev c0e8efe084 fix: node health api (#8744)
### **PR Type**
Bug fix


___

### **Description**
- Initialize health map on node add

- Remove from health map on node delete

- Fail when online node missing health entry

- Fix heartbeat comment typo


___

### Diagram Walkthrough


```mermaid
flowchart LR
  add["Node added (watch_node_list)"] -- "insert" --> healthMap["NODES_HEALTH_CHECK[uuid]=0"]
  del["Node deleted (watch_node_list)"] -- "remove" --> healthMap
  check["check_nodes_status"] -- "missing entry" --> err["Return error + warn log"]
  check -- "present entry" --> incr["Increment failure counter"]
  note["Comment fix"] -- "typo" --> hb["heartbeat"]
```



<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>mod.rs</strong><dd><code>Health check map lifecycle and
validation fixes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/common/infra/cluster/mod.rs

<ul><li>Initialize <code>NODES_HEALTH_CHECK</code> on node add.<br> <li>
Remove <code>NODES_HEALTH_CHECK</code> entry on node delete.<br> <li>
Validate presence in health map; error if missing.<br> <li> Fix comment
typo: heartbeat.</ul>


</details>


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

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

</details>

___
2025-10-08 01:59:03 +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
Shrinath Rao 3e9c6203c5 test: updated page manager and logs page files (#8730)
### **PR Type**
Tests, Enhancement


___

### **Description**
- Replace console logs with testLogger

- Improve logs page navigation robustness

- Add streaming response verification logging

- Comment out SDR page objects


___

### Diagram Walkthrough


```mermaid
flowchart LR
  LogsPage["LogsPage"] -- "console.* -> testLogger.*" --> Logging["Centralized test logging"]
  LogsPage -- "navigation retries, params" --> Navigation["More robust navigation"]
  LogsPage -- "response checks" --> Streaming["Streaming/JSON response verification"]
  PageManager["PageManager"] -- "comment out" --> SDR["SDR page objects"]
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>logsPage.js</strong><dd><code>Centralize logging and
harden LogsPage behavior</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

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

<ul><li>Swap console.log/error to testLogger.debug/error<br> <li>
Enhance VRL editor detection and fallback reload<br> <li> Add detailed
network response checks for search/streaming<br> <li> Adjust messages
around errors and no data cases</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>page-manager.js</strong><dd><code>Temporarily disable
SDR page objects</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

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

<ul><li>Comment out SDR-related imports<br> <li> Comment out SDR page
object initializations</ul>


</details>


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

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

</details>

___
2025-10-06 18:15:31 +05:30
ktx-akshay 89e6a180b6 fix: dashboard filter flaky testcases (#8732)
### **PR Type**
Tests, Enhancement


___

### **Description**
- Add robust nested group filter helpers

- Introduce E2E test for nested groups

- Stabilize selectors and waits in filters

- Limit CI to dashboard filter suite


___

### Diagram Walkthrough


```mermaid
flowchart LR
  helper["DashboardFilter helper"] -- "add stability + nested group API" --> spec["dashboard-filter.spec.js"]
  spec -- "adds nested group test" --> ci["playwright.yml matrix"]
  ci -- "run only dashboard-filter suite" --> pipeline["CI run scope"]
```



<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>dashboard-filter.js</strong><dd><code>Stabilize filter
interactions and add nested group helper</code></dd></summary>
<hr>

tests/ui-testing/pages/dashboardPages/dashboard-filter.js

<ul><li>Add stable operator/value selection with waits<br> <li> Use
last() portal-aware locators<br> <li> Add addNestedGroupFilterCondition
helper<br> <li> Improve column selection via ArrowDown/Enter</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8732/files#diff-cc4b5c84fa9084ee18943e000284fe9fbdaed9605503109d90a00a95871940a2">+123/-49</a></td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>dashboard-filter.spec.js</strong><dd><code>New E2E test
for nested filter groups</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/dashboards/dashboard-filter.spec.js

<ul><li>Add E2E test for group inside group<br> <li> Validate variable
rendering and SQL query<br> <li> Create dashboard, apply filters,
cleanup</ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>playwright.yml</strong><dd><code>Narrow CI matrix to
dashboard filter suite</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

.github/workflows/playwright.yml

<ul><li>Limit matrix to Dashboards-Settings<br> <li> Run only
dashboard-filter.spec.js<br> <li> Comment out other test groups</ul>


</details>


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

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

</details>

___
2025-10-06 16:20:57 +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
Subhra264 d85e5e62fc fix: add retry for enrichment table failure (#8716) (#8720)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Add retry on enrichment table fetch failure

- Propagate errors instead of swallowing them

- Improve logging for fetch outcomes

- Adjust log levels to info for visibility


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["watch() listener"] -- "fetch table" --> B["get_enrichment_table()"]
  B -- "calls" --> C["get_enrichment_table_data()"]
  C -- "success with hits" --> D["return hits"]
  C -- "success no hits" --> E["return empty vec"]
  C -- "error" --> F["return Err (no swallow)"]
  F -- "watch retries once" --> B
  G["get_enrichment_table_json()"] -- "decide source" --> H["remote via get_enrichment_table_data()"]
  G -- "or" --> I["local cache retrieve()"]
```



<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>enrichment_table.rs</strong><dd><code>Error propagation
and retry in enrichment table DB layer</code>&nbsp; </dd></summary>
<hr>

src/service/db/enrichment_table.rs

<ul><li>Add detailed success/no-hit logs.<br> <li> Change error handling
to return Err instead of empty vec.<br> <li> Improve error log message
formatting.<br> <li> Implement single retry in watch() before giving
up.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8720/files#diff-6ce27ddf8a0d8b4e790bda90d088ff692a5da31a8d330beea8a9dd843294572b">+23/-4</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>Increase logging level for
enrichment table source</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

src/service/enrichment/mod.rs

<ul><li>Elevate debug logs to info for fetch source.<br> <li> Clarify
remote vs local fetch logging.<br> <li> No functional logic changes
beyond logging.</ul>


</details>


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

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

</details>

___
2025-10-06 11:45:58 +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
ByteBaker 934aaadbfc fix: flaky integration tests 2025-10-03 20:09:49 +05:30
ByteBaker a288a0604a chore: update default dashboard version from 1 to 5
In `CreateDashboard` API, the default dashboard version when
`version` key was absent in the payload used to be 1, which
was wrong. It is now 5 (for v5).

Going forward, this value should default to the latest version
supported by OpenObserve.

This is tracked by `const LATEST_DASHBOARD_VERSION`, which is
automatically populated at compile time by counting the number
of variants of `enum DashboardRequestBody`, requiring no human
intervention beyond adding the new variant itself to the enum.
2025-10-03 20:09:49 +05:30
Subhra264 41dc18866a feat: use cache for scheduled pipeline (#8707)
### **User description**
Currently we call the db when we process a scheduled pipeline and hence
increases db calls from the alert manager. This pr maintains a cache for
scheduled pipeline, so that alert manager does not make unnecessary db
calls.


___

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


___

### **Description**
- Add cache for scheduled pipelines

- Use cache in scheduler handler

- Extend pipeline cache/watch logic

- Add tests for cache behavior


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Scheduler["Scheduler handler"] -- "get/cache pipeline" --> PipelineDB["DB pipeline module"]
  PipelineDB -- "reads/writes" --> ScheduledCache["Scheduled pipelines cache"]
  RealtimeCache["Realtime exec cache"] -- "unchanged usage" --> Scheduler
  Watcher["Pipelines watcher"] -- "update caches" --> ScheduledCache
  Watcher -- "update caches" --> RealtimeCache
```



<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>config.rs</strong><dd><code>Introduce global scheduled
pipelines cache</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/common/infra/config.rs

- Import `Pipeline` type.
- Add `SCHEDULED_PIPELINES` global cache.


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>handlers.rs</strong><dd><code>Scheduler uses cache for
pipeline lookups</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/service/alerts/scheduler/handlers.rs

<ul><li>Use scheduled pipeline cache before DB.<br> <li> Cache
DB-fetched pipelines on miss.<br> <li> Preserve existing error handling
path.<br> <li> Add debug logs for cache hits/misses.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>pipeline.rs</strong><dd><code>Implement scheduled
pipelines cache and watcher integration</code></dd></summary>
<hr>

src/service/db/pipeline.rs

<ul><li>Add cache APIs: get/cache/remove/size/clear/stats.<br> <li>
Populate scheduled cache during full cache load.<br> <li> Extend watcher
to maintain scheduled cache.<br> <li> Improve logging and delete
handling for both caches.<br> <li> Add unit tests for scheduled cache
behavior.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8707/files#diff-0856951eadc646b4d4d3f0417317150cdbdc37b46c2f2a25a3c2bae15601dc50">+229/-57</a></td>

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

</details>

___
2025-10-03 19:01:04 +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
udev d706adc0ee fix: new import path (#8667)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Update enterprise import path for TopK exec

- Align codec imports with module rename


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["enterprise module path"] -- "rename aggregate_topk_exec → agg_topk_exec" --> B["codec imports updated"]
  B -- "used by" --> C["aggregate_topk_exec.rs"]
  B -- "used by" --> D["physical_plan_node.rs"]
```



<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>aggregate_topk_exec.rs</strong><dd><code>Fix
AggregateTopkExec import path</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>


src/service/search/datafusion/distributed_plan/codec/aggregate_topk_exec.rs

<ul><li>Change import to
<code>agg_topk_exec::AggregateTopkExec</code><br> <li> Keep
feature-gated enterprise path intact</ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>physical_plan_node.rs</strong><dd><code>Update codec
imports to new module path</code>&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/distributed_plan/codec/physical_plan_node.rs

<ul><li>Update import to
<code>agg_topk_exec::AggregateTopkExec</code><br> <li> Consolidate
multi-line import formatting</ul>


</details>


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

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

</details>

___
2025-10-03 10:50:42 +05:30
Subhra264 9d357d0b8f fix: add aws-lc-rs feature to lettre to avoid smtp client initialization error (#8691)
### **PR Type**
Bug fix, Configuration changes


___

### **Description**
- Enable `aws-lc-rs` for `lettre`

- Prevent SMTP client init errors

- Adjust Cargo features for TLS backend


___

### Diagram Walkthrough


```mermaid
flowchart LR
  cargo["Cargo.toml dependencies"]
  lettre["lettre crate features"]
  smtp["SMTP client initialization"]

  cargo -- "enable aws-lc-rs feature" --> lettre
  lettre -- "stronger TLS backend" --> smtp
  smtp -- "avoid init errors" --> smtp
```



<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>Cargo.toml</strong><dd><code>Enable aws-lc-rs feature
for lettre</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>

Cargo.toml

<ul><li>Add <code>aws-lc-rs</code> to <code>lettre</code> features.<br>
<li> Keep existing <code>tokio1-rustls-tls</code> and pool
settings.</ul>


</details>


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

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

</details>

___
2025-10-03 10:01:52 +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 dfeb6f0452 fix: pipeline_last_errors existing index issue (#8705)
### **PR Type**
Bug fix


___

### **Description**
- Add safeguard to index creation

- Prevent failures on existing index


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Migration["Migration: create index on pipeline_last_errors"]
  IndexCreate["Index::create with OrgId, LastErrorTimestamp"]
  IfNotExists["Add .if_not_exists()"]
  SafeMigrate["Idempotent migration without duplicate index error"]

  Migration -- "build index" --> IndexCreate
  IndexCreate -- "ensure exists check" --> IfNotExists
  IfNotExists -- "prevents duplicate creation" --> SafeMigrate
```



<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>m20250930_000001_create_pipeline_last_errors_table.rs</strong><dd><code>Guard
index creation with if_not_exists</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


src/infra/src/table/migration/m20250930_000001_create_pipeline_last_errors_table.rs

<ul><li>Add <code>.if_not_exists()</code> to index creation<br> <li>
Make migration idempotent on existing index</ul>


</details>


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

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

</details>

___
2025-10-01 15:35:20 +05:30
ktx-akshay b88b7573b0 test: add pytest for dashboard (#8698)
### **PR Type**
Tests


___

### **Description**
- Add end-to-end dashboard API tests

- Cover CRUD flows and edge cases

- Validate SSE search stream responses

- Include auth, pagination, and folders


___

### Diagram Walkthrough


```mermaid
flowchart LR
  list["List dashboards"] -- "200 with/without auth" --> validateList["Validate structure"]
  create["Create dashboard"] -- "returns v1.dashboardId" --> read["Get by ID"]
  read -- "assert fields" --> delete["Delete dashboard"]
  updateNE["Update nonexistent"] -- "expect 400/404" --> done1["Handled"]
  missingReq["Missing required fields"] -- "expect 400/422" --> done2["Handled"]
  dupTitle["Duplicate title create"] -- "allowed" --> cleanup["Cleanup created dashboards"]
  pagination["List with limit"] -- "verify dashboards key" --> cleanup2["Cleanup"]
  sse["Search stream (SSE)"] -- "parse events/data" --> validateSSE["Validate results/hits"]
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>test_dashboards.py</strong><dd><code>End-to-end pytest
for dashboard APIs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/api-testing/tests/test_dashboards.py

<ul><li>Add pytest suite for dashboard APIs<br> <li> Test list, create,
get, delete flows<br> <li> Validate SSE search stream parsing<br> <li>
Cover pagination, auth, errors, duplicate titles</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8698/files#diff-936c6e8532b2f4ad8ebd0d5d2bd43638e278ce0880498ccf0c446f9e01a20901">+404/-0</a>&nbsp;
</td>

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

</details>

___
2025-10-01 15:04:40 +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
udev 247d90e40f fix: make memory cache and file stats cache reloadable (#8689)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Make caches read config at runtime

- Remove fixed max sizes from structs

- Add test-only max size injection

- Adjust stats and GC to dynamic limits


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Cfg["Runtime config (get_config)"]
  Mem["FileData memory cache"]
  Stat["FileStatisticsCache"]
  Tests["Tests: inject max limits"]

  Cfg -- "max_size, release_size" --> Mem
  Cfg -- "file_stat max_entries" --> Stat
  Tests -- "with_cache_strategy_and_max_size" --> Mem
```



<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>memory.rs</strong><dd><code>Memory cache reads dynamic
config; test hooks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/infra/src/cache/file_data/memory.rs

<ul><li>Remove stored max_size; read from config<br> <li> Add test-only
constructor to set max_size<br> <li> Update GC, stats, and size API
accordingly<br> <li> Adjust tests to new constructors and API</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8689/files#diff-ff00d697a9b223ef2858c5e41111a8918e7cc347dc22891c02bda6982682eee1">+36/-28</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>file_statistics_cache.rs</strong><dd><code>File stat
cache uses dynamic config limits</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

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

<ul><li>Remove stored max_entries; read from config<br> <li> Update
constructors and eviction logic<br> <li> Adjust tests to new default
constructor</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8689/files#diff-5b3f948f2ad04a6babe72c15365b95a284d0533720419fa5dc793aa379783a7d">+9/-11</a>&nbsp;
&nbsp; </td>

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

</details>

___
2025-09-30 22:01:21 +05:30
sktrpathi b220f55435 fix: handle LLM-specific errors (#8690)
### **User description**
Enterprise code now returns error when raised by LLM API. These errors
are handled in this commit.


___

### **PR Type**
Bug fix


___

### **Description**
- Map rate limit errors to 429 responses

- Normalize other AI errors to 500

- Improve error logging messages consistency

- Audit reporting updated for error paths


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["AI service call"] --> B{"Error?"}
  B -- "No" --> C["200 OK with response"]
  B -- "Yes" --> D{"Rate limit (429)?"}
  D -- "Yes" --> E["Return 429 Too Many Requests"]
  D -- "No" --> F["Return 500 Internal Error"]
  E -- "Audit report" --> G["Audit trail updated"]
  F -- "Audit report" --> G
```



<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>chat.rs</strong><dd><code>Standardize AI chat error
handling and 429 pass-through</code>&nbsp; &nbsp; </dd></summary>
<hr>

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

<ul><li>Log errors using extracted message string<br> <li> Return 429
JSON on rate limit errors<br> <li> Convert other AI errors to 500
internal errors<br> <li> Align stream path with audit reporting and
responses</ul>


</details>


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

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

</details>

___
2025-09-30 18:46:56 +05:30
ByteBaker a5507e9dc0 feat (AI): add context support to chat requests and improve type safety
- Add context parameter to PromptRequest for passing additional data
- Update AiServerRequest initialization to include context across chat endpoints
- Change PromptResponse role field from String to Role enum for type safety
- Add Serialize trait to DashboardRequestBody for serialization support
2025-09-30 16:35:54 +05:30
Hengfei Yang 9bb8c2eb69 fix: resolve concurrency issue in put_file_contents (#8684) 2025-09-30 17:45:48 +08:00
ByteBaker 075168ab8a chore: clippy delint 2025-09-30 15:08:19 +05:30
ByteBaker 8ce92b8d34 chore: add UTs for enrichment and VRL 2025-09-30 15:08:19 +05:30
ByteBaker 33237447c4 chore: bump crate versions
- `async-walkdir`: v1.0.0 -> v2.1.0
- `maxminddb`: v0.25 -> v0.26
- `pprof`: v0.14 -> v0.15.0
- `prometheus`: v0.13 -> v0.14
- `promql-parser`: v0.4 -> v0.6
- `rcgen`: v0.13 -> v0.14.4
- `snafu`: v0.7.5 -> v0.8.9
- `tantivy`: v0.24 -> v0.25
- `vector-enrichment`: 063cabb -> 2003d61
- `vrl`: v0.22 -> v0.27.0

Removed `tokio-tungstenite` from dependencies.

Also updated `vrl` to use git source from main branch
as `vector-enrichment` needed syncing

Changes to enrichment tables:
- return early for empty conditions, avoiding computation
- avoid vector collection before iterating again
- added support for `FromDate` & `ToDate` condition types
- simplified data processing using iterator chains
- update `vector-enrichment` trait impl (add `wildcard` param)
2025-09-30 15:08:19 +05:30
Subhra264 c70519f6a0 test: add tests for enrichment table local storage functions (#8680)
### **PR Type**
Tests


___

### **Description**
- Add comprehensive local storage tests

- Cover store, retrieve, delete flows

- Validate metadata and timestamps

- Remove unused local list function


___

### Diagram Walkthrough


```mermaid
flowchart LR
  LocalStorage["Local storage module"] -- "store/retrieve/delete" --> Behavior["Behavior under test"]
  Behavior -- "timestamps & metadata" --> Metadata["Metadata tracking"]
  Behavior -- "background writes" --> AsyncOps["Async operations"]
  Behavior -- "large datasets" --> Scalability["Scalability"]
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>storage.rs</strong><dd><code>Add tests and remove
unused list function</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/service/enrichment/storage.rs

<ul><li>Remove <code>local::list</code> helper function.<br> <li> Add
end-to-end async tests for local storage.<br> <li> Test
store/retrieve/delete, versions, metadata, timestamps.<br> <li> Add
background write, large data, and error-handling tests.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8680/files#diff-335bb1eea9193dc398da6838c6a6a11dd6f09e984a1ed4a2e611618a427754f0">+335/-28</a></td>

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

</details>

___
2025-09-30 13:07:42 +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