mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-04 08:09:27 +00:00
1f889cc2136606f0edcc5c19bf016bab6012d5d2
4380
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>convertPromQLData.ts</strong><dd><code>Null-safe PromQL
series handling and axes</code>
</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>
</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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>PanelSchemaRenderer.vue</strong><dd><code>Provide
context for alert threshold creation</code>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
8ed584521f | chore: increase minimum coverage threshold for API | ||
|
|
0cf0923a59 | fix: flaky integration test | ||
|
|
c7a064d947 | chore: check if code changes before running UT | ||
|
|
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 |
||
|
|
fd17f6fff5 | fix: timed_annotations.end_time column update type | ||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>pipeline_error_cleanup.rs</strong><dd><code>Implement
scheduled pipeline error cleanup worker</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>pipeline_errors.rs</strong><dd><code>Add DB helper to
delete old pipeline errors</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>PipelinesList.vue</strong><dd><code>Show pipeline error
details dialog on list page</code>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>MainLayout.vue</strong><dd><code>AI button gradient and
hover behavior update</code>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>page-manager.js</strong><dd><code>Temporarily disable
SDR page objects</code>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>O2AIChat.vue</strong><dd><code>Streaming UX,
cancellation, and UI enhancements</code>
</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>
___
|
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>useSearchStream.ts</strong><dd><code>Enforce timestamp
alias rule during SQL search</code>
</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>
</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>
</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>
</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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
|
||
|
|
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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8728/files#diff-d8a57095481665bdacd7cc816c63d4c742048b832c15641ce20adaa4d3a58854">+8/-18</a> </td> </tr> <tr> <td><strong>TraceTree.spec.ts</strong><dd><code>Adjust tests for badge collapse and icons</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8728/files#diff-0e779df03c894e381582de27f5c6dc36ac4905e01e12a501e0a4ca12599d4531">+9/-9</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8728/files#diff-21a7d32870e3d6d3fc8098b06fd8e88ba20afea0c48cfa1ad7b309a9faf8cafc">+1/-1</a> </td> </tr> <tr> <td><strong>TraceDetails.vue</strong><dd><code>Major layout refactor and glassmorphism styles</code> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8728/files#diff-0017bc08d8da96af6433770d0b274f825798d24401b33ce091b16a50fbaf4b57">+75/-5</a> </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> </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> |
||
|
|
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> </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>
</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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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> </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> </td> </tr> <tr> <td> <details> <summary><strong>useHistogram.ts</strong><dd><code>Use ref-based histogram results in histogram flow</code> </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> </td> </tr> <tr> <td> <details> <summary><strong>useSearchStream.ts</strong><dd><code>Stream logic uses shared ref for histogram results</code> </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> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>Dockerfile.pr</strong><dd><code>Add unified runtime
Dockerfile for PR builds</code>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: mmosarafO2 <mosraf@openobserve.ai>
|
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>HomeView.vue</strong><dd><code>Responsive charts grid
and Streams icon addition</code>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
934aaadbfc | fix: flaky integration tests | ||
|
|
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. |
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>handlers.rs</strong><dd><code>Scheduler uses cache for
pipeline lookups</code>
</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>
</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>
___
|
||
|
|
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> </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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>AlertContextMenu.vue</strong><dd><code>Add alert
creation context menu component</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>PanelSchemaRenderer.vue</strong><dd><code>Integrate
context menu and route to Add Alert</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>ChartRenderer.vue</strong><dd><code>Add contextmenu
support for data point alerts</code>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>HomeView.vue</strong><dd><code>Home dashboard UX
overhaul with animated metrics</code>
</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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>_menu-variables.scss</strong><dd><code>Theming
variables for modernized menu</code>
</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>
</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>
|
||
|
|
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> </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> </td> </tr> <tr> <td> <details> <summary><strong>PipelineFlow.vue</strong><dd><code>Set pipeline default zoom to 0.8</code> </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> </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> </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> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
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>
</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>
</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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>EditRole.vue</strong><dd><code>Provide role context to
GroupUsers</code>
</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>
</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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>SkeletonBox.vue</strong><dd><code>Reusable skeleton box
component</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>HomeView.vue</strong><dd><code>Home page layout and
loading UX improvements</code>
</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>
___
|
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+1/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Wire migration for last errors table</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+2/-0</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-61bb28d7091130297c917a0530d96202fcb4b073b514410531f9fe71acfc814f">+22/-3</a> </td> </tr> <tr> <td><strong>pipeline.rs</strong><dd><code>Join pipelines with last error data</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-c69f4f94eee97ce226caddc497b2adf89e26869f2d72b0d0206dc31ab2714daf">+26/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Register pipeline_last_errors entity</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-c539d7557d1425986d5c09849d8dbca42d1b309c2bc33d49db641d6a783098f6">+1/-0</a> </td> </tr> <tr> <td><strong>pipeline_last_errors.rs</strong><dd><code>Define ORM entity for last errors</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-e4ff5af0cb9c6e6343ecaad06fbb03515ace8868be6ee6d192ff0f01ee4d3e17">+22/-0</a> </td> </tr> <tr> <td><strong>prelude.rs</strong><dd><code>Export PipelineLastErrors entity</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-a818656b9fb01945155f28450270dd2ae20b67c8248c851ffa0f25e859d263ed">+1/-0</a> </td> </tr> <tr> <td><strong>m20250930_000001_create_pipeline_last_errors_table.rs</strong><dd><code>Create pipeline_last_errors table and index</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-173fe20fccfdcfa68563a13f9d69c2e6cb0901ac257d43386962bbac90f296de">+169/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Expose pipeline_errors DB module</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-b7e3bf7f0ac23dd084c0c817a310a4d5e7a64ff532746d182986ef940fa03fd0">+1/-0</a> </td> </tr> <tr> <td><strong>pipeline_errors.rs</strong><dd><code>CRUD and batch upsert for pipeline errors</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-627b6bb9ca334984b8f08f1405a67e5110c238788f165e30abda39b03f7ab68f">+331/-0</a> </td> </tr> <tr> <td><strong>queues.rs</strong><dd><code>Batch upsert pipeline errors during ingest</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-ed15a56d4d3becc2dfb3d05af2dac7f92962ec3091199728fa953e6aed7ed767">+45/-5</a> </td> </tr> <tr> <td><strong>PipelinesList.vue</strong><dd><code>Show pipeline-level last error indicator</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-85e3ef322f3eea0fc6d74d89431ba338a1153cb82ee06bef0f7c5f439c04267d">+27/-0</a> </td> </tr> <tr> <td><strong>CustomNode.vue</strong><dd><code>Show node-level error badge and navigation</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-b9d83cd503b6d3470b238accaaea0b4decf567add8ad4727c63c9e583725f408">+98/-2</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-7c7b5bca85f0ced652965cae66540c96f56dfcca4f4c16b77bf7b45aac203d1b">+12/-8</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-c6255010f7a87d6acdb3ad04954fc9f2c27350ae319c53a1857b120aa06408a3">+2/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>AddAlert.vue</strong><dd><code>Prefill alert form from
panel query</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>AlertList.vue</strong><dd><code>Preserve query params
during alert navigation</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>PanelContainer.vue</strong><dd><code>Add create-alert
action and i18n to panel menu</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>AddAlertView.vue</strong><dd><code>New AddAlert view
with destinations loading</code>
</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>
</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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-95b95a1b18db00eb9a3b4b9155cf23a078e4d54032f023d6fdf7445afb9e4661">+52/-0</a> </td> </tr> <tr> <td><strong>dashboardsContextProvider.ts</strong><dd><code>New dashboards context provider with intents</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-c3323cfc4d7015b1b51ff5ec85fe3371c817dcc614e52ebb4fac76abc719b872">+76/-0</a> </td> </tr> <tr> <td><strong>defaultContextProvider.ts</strong><dd><code>Default app-wide context provider</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-dedeb11e8ee3b92acda8c30cb84d2a749dec11cb1387547c613220a29744e236">+59/-0</a> </td> </tr> <tr> <td><strong>index.ts</strong><dd><code>Export registry and providers</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-2f5cd69b9d0b7e1c87c1dbe6ad7cdb7b182014a03594481085561a9d694d2659">+36/-0</a> </td> </tr> <tr> <td><strong>logsContextProvider.ts</strong><dd><code>Logs context provider with time and fields</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-bd6b1c67f0d9ef96110421aac3dd3e8f90115da95adf28e79c88e1c6fc594ac2">+198/-0</a> </td> </tr> <tr> <td><strong>pipelinesContextProvider.ts</strong><dd><code>Pipelines editor context provider</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-9f09180c5d32d87f8c89fc0a8edc8d2153b37515dcf906123fbd8017c435fa75">+52/-0</a> </td> </tr> <tr> <td><strong>registry.ts</strong><dd><code>Context registry singleton with fallback</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-771da8f6897a25741c485f6637da004e3a62f6e4b70d6dbb2a408a56ba9e3923">+136/-0</a> </td> </tr> <tr> <td><strong>types.ts</strong><dd><code>Context provider/core types</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-f0c33d88011ac1afc87b85a1be56756616a2a13105537cf6f6a8090747b2beb3">+34/-0</a> </td> </tr> <tr> <td><strong>useAiChat.ts</strong><dd><code>Use structured context; add default provider init</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-830ee4f21bdbbd0fa5c5c0f43b0a1d0200831e07ccddc91982cf0371c801b046">+62/-8</a> </td> </tr> <tr> <td><strong>main.ts</strong><dd><code>Initialize global default context provider</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-37b29c5a3b76595194070205d9a0cdedcd717bf7c4367022d1e2667395962f2e">+5/-0</a> </td> </tr> <tr> <td><strong>PipelineEditor.vue</strong><dd><code>Register/cleanup pipelines context provider</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-68c21f647336067eb79737ce9aca2d49632f2fa1c0878bcfdae55607e3473a15">+37/-0</a> </td> </tr> <tr> <td><strong>Index.vue</strong><dd><code>Register/cleanup logs context provider</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+42/-1</a> </td> </tr> <tr> <td><strong>ViewDashboard.vue</strong><dd><code>Register/cleanup dashboards context provider</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-052badb6758aff09ceaf1645869b9ba96125e6a0ea21abb01a8ee0a40d6467f3">+16/-0</a> </td> </tr> <tr> <td><strong>AddPanel.vue</strong><dd><code>Register/cleanup context for add/edit panel</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+17/-0</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-a6a125719a7b32b31b53fcfe05c12081d82c139a401699affdda0db8e73887e3">+22/-2</a> </td> </tr> <tr> <td><strong>AddAlert.vue</strong><dd><code>Avoid AI chat overlap; register alerts context</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8697/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+15/-2</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>file_statistics_cache.rs</strong><dd><code>File stat
cache uses dynamic config limits</code>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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> </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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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 |
||
|
|
9bb8c2eb69 | fix: resolve concurrency issue in put_file_contents (#8684) | ||
|
|
075168ab8a | chore: clippy delint | ||
|
|
8ce92b8d34 | chore: add UTs for enrichment and VRL | ||
|
|
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) |
||
|
|
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>
</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>
___
|
||
|
|
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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8676/files#diff-24a5b2df69327a6477227ea674939dea19dd6d393b4bfcf807089d71e6391152">+205/-1</a> </td> </tr> <tr> <td><strong>NodeSidebar.vue</strong><dd><code>Redesign draggable nodes with custom tooltips</code> </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> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8676/files#diff-a71732cf7f8ee768e21f7eb2bf9eeed4ac67ba8221cca2e8d347d8acb27d4471">+61/-50</a> </td> </tr> <tr> <td><strong>CustomEdge.vue</strong><dd><code>Remove on-edge delete button; style and cleanup</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8676/files#diff-d759dc0d507d5dfb3295fdb7dfd59e4a48ae32cdced0bb3471096f8691a99f58">+9/-47</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8676/files#diff-838d98dd7119cb936a8971f3c631106cdda2c4113530999ff50bceb206acd375">+14/-29</a> </td> </tr> <tr> <td><strong>PipelineFlow.vue</strong><dd><code>Edge click help notification and event handling</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8676/files#diff-9c7475a54f0c895dd49eb0c5b53fe0a76ceff0520f667a9cb065b364557ced50">+85/-3</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>RegexPatternList.vue</strong><dd><code>Use SDR titles
and footer labels</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>index.vue</strong><dd><code>Update settings tab to SDR
title</code>
</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>
</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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>en.json</strong><dd><code>i18n updates for SDR
terminology</code>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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> </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> </td> </tr> <tr> <td> <details> <summary><strong>ConfirmDialog.vue</strong><dd><code>Enhance dialog to display warning banner</code> </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> </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> </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> </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> </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> </td> </tr> <tr> <td> <details> <summary><strong>CustomNode.vue</strong><dd><code>Warn on deleting default destination (node card)</code> </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> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |