Commit Graph
4296 Commits
Author SHA1 Message Date
Sai Nikhil 4fa43fdff7 fix: stream detail page (schema) layout changed (#8585)
### **User description**
1. This PR introduces a new tab called configuration where we moved all
the configuration settings to that tab
2. This PR introduces a compact table so that more columns are visible
and also all the stream stats above will stay at viewport always


___

### **PR Type**
Enhancement


___

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

- Added Configuration tab for settings

- New compact stats tiles and sticky table

- Added distinct values toggle and UX polish


___

### Diagram Walkthrough


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



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>schema.vue</strong><dd><code>Schema page UI/UX overhaul
with new configuration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/logstream/schema.vue

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


</details>


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

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

</details>

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


___

### **PR Type**
Bug fix


___

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

- Prevent applying views to SQL queries

- Use case-insensitive SELECT detection


___

### Diagram Walkthrough


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



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>Index.vue</strong><dd><code>Case-insensitive SQL
detection in saved views</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/logs/Index.vue

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


</details>


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

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

</details>

___
2025-09-23 14:07:18 +05:30
ktx-akshay 83b2951a23 test: add test cases for visualization using "Select *" queries (#8589)
### **User description**
… query


___

### **PR Type**
Tests


___

### **Description**
- Add E2E test for SELECT * visualization

- Verify default line chart selection

- Validate inspector shows transformed histogram query

- Save panel to dashboard and assert success


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Open Logs"] -- "Enter SELECT *" --> B["Apply Query"]
  B -- "Open Visualise" --> C["Verify line chart rendered"]
  C -- "Run & Add Panel" --> D["Save to new dashboard"]
  D -- "Open Query Inspector" --> E["Assert histogram query present"]
  E -- "Close & Cleanup" --> F["Delete dashboard"]
```



<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>visualize.spec.js</strong><dd><code>Add E2E test for
SELECT * visualization and inspector</code>&nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

tests/ui-testing/playwright-tests/dashboards/visualize.spec.js

<ul><li>Add test for SELECT * rendering as line chart<br> <li> Save
panel to new dashboard and assert toast<br> <li> Open query inspector
and validate generated histogram SQL<br> <li> Cleanup by navigating back
and deleting dashboard</ul>


</details>


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

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

</details>

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


___

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


___

### Diagram Walkthrough


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

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



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>aliasUtils.ts</strong><dd><code>Safe lowercase
conversion for alias keys</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/utils/dashboard/aliasUtils.ts

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


</details>


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

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

</details>

___

Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
2025-09-23 12:06:48 +05:30
Subhra264andYashodhan Joshi 6fa36d6d43 fix: create scheduled_job if it does not exist in another super cluster region (#8536)
### **User description**
If one region in super cluster for some reason does not have the
scheduled_job, and it gets an "Update" event from another region to
update the scheduled_job, it will always fail because it does not exist
in the region. In this pr, it will first check if it exists, otherwise
we create the scheduled job if the module record is present in the db.


___

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


___

### **Description**
- Add parser for `module_key` extraction

- Fallback create missing scheduled triggers

- Improve DB checks before trigger creation

- Add unit tests for parser and scheduling


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Super-cluster UPDATE message"] -- "check existing trigger" --> B{"scheduler::get OK?"}
  B -- "Yes" --> C["scheduler::update_trigger(clone=true)"]
  B -- "No" --> D["Validate module existence by type"]
  D -- "exists" --> E["scheduler::push(create)"]
  D -- "missing/invalid" --> F["warn/skip"]
  G["handlers.rs"] -- "parse module_key" --> H["get_pipeline_info_from_module_key()"]
  H -- "used by" --> G
  H -- "used by" --> D
```



<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>handlers.rs</strong><dd><code>Refactor module_key
parsing and add tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/service/alerts/scheduler/handlers.rs

<ul><li>Replace inline <code>module_key</code> parsing with helper.<br>
<li> Fix API usage: pass references to <code>get_by_id</code> and
<code>process_batch</code>.<br> <li> Add
<code>get_pipeline_info_from_module_key</code> utility.<br> <li> Add
comprehensive unit tests for parsing and scheduling timestamps.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8536/files#diff-5eca8995a88fcecb6d6b8efd3c7c4496f4a96a4b060fb4ed85593574f7cf49eb">+362/-18</a></td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>scheduler.rs</strong><dd><code>Create missing triggers
with module existence checks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/super_cluster_queue/scheduler.rs

<ul><li>Add creation path when scheduler job missing on region.<br> <li>
Validate module existence per type before creation.<br> <li> Use ORM
client to check alerts/reports presence.<br> <li> Improve imports and
alert name lookup path.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8536/files#diff-000247f033ce3110163f4c4fd48eb4c462ec1b23f93f6694b633f42fa4ada822">+87/-14</a>&nbsp;
</td>

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

</details>

___

---------

Co-authored-by: Yashodhan Joshi <yashodhan@openobserve.ai>
2025-09-23 10:24:31 +05:30
Huaijin 4a182220d2 chore: upgrade datafusion to v50.0.0 (#8526) 2025-09-23 10:43:56 +08:00
Neha PandShrinath Rao 3565d4a516 test: added advanced sql queries (#8573)
### **PR Type**
Tests


___

### **Description**

SQL Query Test Coverage

- COUNT, SUM, AVG, MIN, MAX
-  approx_percentile_cont (P50, P75, P95, P99)
- histogram (time bucketing)
- str_match, str_match_ignore_case, COALESCE
- regexp_match, array_extract (regex groups)
- CASE WHEN (pattern matching)
- HAVING, LIKE, field comparisons
- GROUP BY (multi-field, time buckets)
- Kubernetes fields (kubernetes_container_name, etc.)

- Add advanced SQL E2E tests

- Validate fields and value constraints

- Cover percentiles and aggregations

- Exercise grouping, regex, and filters


___

### Diagram Walkthrough


```mermaid
flowchart LR
  tests["New E2E SQL tests"] --> errorRate["Error rate analysis"]
  tests --> percentiles["Time-bucket percentiles"]
  tests --> volume["Log volume by bucket"]
  tests --> source["Source grouping"]
  tests --> hostPerf["Host performance stats"]
  tests --> compPct["Component percentiles"]
  tests --> apiLogs["API log analysis"]
  tests --> metadata["Regex-based metadata extraction"]
```



<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_advanced_sql.py</strong><dd><code>Add
comprehensive E2E advanced SQL query tests</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/api-testing/tests/test_advanced_sql.py

<ul><li>Add eight E2E tests posting SQL queries<br> <li> Assert HTTP 200
and presence of expected fields<br> <li> Validate rates, percentile
ordering, and counts<br> <li> Use time windows, grouping, regex
extraction</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8573/files#diff-190cc55e8b961580682e09403c997fda2e8288e5f210dec5ab41c9465c68538f">+514/-0</a>&nbsp;
</td>

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

</details>

___

---------

Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-09-22 19:58:45 +05:30
sktrpathi d0ffe710ab fix: improve dashboard API models & add field annotations (#8546)
### **User description**
- Replace separate request/response models with unified
`DashboardRequestBody/DashboardResponseBody`
- Add `#[schema(required)]` to `title` and `description` fields across
all dashboard versions (v1-v5)
- Eliminate redundant `CreateDashboard/UpdateDashboard` `GetDashboard`
model types
- Use tagged enum for version-specific dashboard deserialization instead
of manual JSON parsing.

  This helps generate `OneOf` schema type in OpenAPI spec.
- Simplify owner validation in dashboard creation/update
- Update OpenAPI schema to use consolidated model types


___

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


___

### **Description**
- Add required schema for titles

- Unify dashboard request/response models

- Use tagged enum for versions

- Simplify owner assignment logic
2025-09-22 17:06:25 +05:30
Bhargav 0f7734b7e1 fix: trace id added for values api (#8408)
### **PR Type**
Bug fix


___

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

- Propagate generated trace id from UI

- Use http client with custom headers


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Logs IndexList.vue: generate trace id"] -- "pass traceparent" --> Service["stream.values() accepts traceparent"]
  Service -- "set headers if present" --> HTTP["http({ headers }).get(url)"]
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>stream.ts</strong><dd><code>Support optional
traceparent header in service</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/services/stream.ts

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


</details>


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

</tr>

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

web/src/plugins/logs/IndexList.vue

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


</details>


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

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

</details>

___
2025-09-22 16:10:48 +05:30
51d9782e5d feat: add separate telemetry url (#8564)
### **PR Type**
Enhancement


___

### **Description**
- Add keyevent telemetry support and API

- Introduce `ZO_KEYEVENT_TELEMETRY_URL` config

- Send both standard and keyevent telemetry

- Update handlers to use new API


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Cfg["Config: add ZO_KEYEVENT_TELEMETRY_URL"]
  Tel["Telemetry: send_keyevent_track_event()"]
  JWT["JWT auth: new user registered"]
  Bill["Billing: new subscription started"]
  Mkt["Marketing: new user attribution"]
  Job["Job: no ingestion after creation"]

  Cfg -- "provides URL" --> Tel
  JWT -- "send standard + keyevent" --> Tel
  Bill -- "send standard + keyevent" --> Tel
  Mkt -- "send standard + keyevent" --> Tel
  Job -- "send standard + keyevent" --> Tel
```



<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>telemetry.rs</strong><dd><code>Add keyevent telemetry
send method</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/common/meta/telemetry.rs

<ul><li>Add <code>send_keyevent_track_event</code> method.<br> <li> Use
separate keyevent telemetry URL.<br> <li> Respect telemetry enabled flag
(non-cloud).<br> <li> Robust error/status logging for keyevent
sends.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>jwt.rs</strong><dd><code>Emit keyevent telemetry on
user registration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/handler/http/auth/jwt.rs

<ul><li>Instantiate telemetry once per flow.<br> <li> Send both standard
and keyevent events for registration.<br> <li> Duplicate payload reuse
for both sends.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>billings.rs</strong><dd><code>Add keyevent telemetry
for subscription start</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/handler/http/request/cloud/billings.rs

<ul><li>Send standard and keyevent for new subscription.<br> <li> Reuse
event data across sends.<br> <li> Single telemetry instance per
request.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>marketing.rs</strong><dd><code>Add keyevent telemetry
for attribution events</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/handler/http/request/cloud/marketing.rs

<ul><li>Send standard and keyevent for attribution.<br> <li> Share
segment event data between sends.<br> <li> Use single telemetry
instance.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>cloud.rs</strong><dd><code>Add keyevent telemetry to
no-ingestion job</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/job/cloud.rs

<ul><li>Send standard and keyevent for no-ingestion report.<br> <li>
Reuse event data; single telemetry instance.</ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>config.rs</strong><dd><code>Introduce keyevent
telemetry configuration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/config/src/config.rs

<ul><li>Add <code>keyevent_telemetry_url</code> to
<code>Common</code>.<br> <li> Map to
<code>ZO_KEYEVENT_TELEMETRY_URL</code> env var.<br> <li> Default empty
string disables keyevent sending.</ul>


</details>


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

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

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Prabhat Sharma <hi.prabhat@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2025-09-22 15:24:11 +05:30
Sai Nikhil 4a4ea9fcb1 fix: should add include search term before group by clause (#8515)
### **User description**
This PR fixes the #8510


___

### **PR Type**
Bug fix


___

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

- Handle both include and exclude terms

- Preserve ORDER BY and LIMIT positions

- Align query splitting via group-by branch


___

### Diagram Walkthrough


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



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>SearchBar.vue</strong><dd><code>Add group-by-aware
filter insertion logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/plugins/logs/SearchBar.vue

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


</details>


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

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

</details>

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


___

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

- Guard chart compare against Logs context

- Expose page key to template


___

### Diagram Walkthrough


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

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



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>ConfigPanel.vue</strong><dd><code>Disable
drilldown/compare when page key is logs</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

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

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


</details>


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

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

</details>

___

Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
2025-09-22 12:41:53 +05:30
Hengfei Yang 692fda2110 fix: search parquet for wal (#8558) 2025-09-22 14:10:17 +08:00
Harsh Mahajan 83663f6fa7 fix: orphaned database entries (#8557) 2025-09-22 13:04:53 +08:00
Hengfei Yang 24bc37a80e feat: remove grpc call for get result cache also improve RW logic (#8246) 2025-09-20 20:09:17 +08:00
Shrinath Rao 3fedd93430 test: Reworked logs download tests, added 10 tests for json and sql w… (#8543)
### **User description**
…ith limit


___

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


___

### **Description**
- Add JSON download verification helpers

- Consolidate downloads into one comprehensive test

- Cover CSV and JSON for custom ranges

- Add SQL mode CSV/JSON with LIMIT 2000


___

### Diagram Walkthrough


```mermaid
flowchart LR
  LogsPage["LogsPage: add JSON verifiers"] -- used by --> Spec["logsDownloads.spec: comprehensive tests"]
  Spec -- normal downloads --> CSV["CSV verification"]
  Spec -- normal downloads --> JSON["JSON verification"]
  Spec -- custom ranges (100-10000) --> CSV
  Spec -- custom ranges (100-10000) --> JSON
  Spec -- SQL mode LIMIT 2000 --> CSV
  Spec -- SQL mode LIMIT 2000 --> JSON
```



<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>Add JSON download
verification helpers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

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

<ul><li>Add verifyJsonDownload helper for generic JSON<br> <li> Add
verifyJsonDownloadWithCount with expected count<br> <li> Validate file
presence, size, JSON structure, _timestamp<br> <li> Return saved
download path for reuse</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>logsDownloads.spec.js</strong><dd><code>Consolidate and
expand logs download tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

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

<ul><li>Replace multiple tests with one orchestrated suite<br> <li> Add
helpers to setup page and SQL mode<br> <li> Test CSV/JSON for normal,
custom ranges, SQL LIMIT<br> <li> Aggregate results with robust error
handling and summary</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8543/files#diff-90f04cfe53caddf683cc4466e9e97af96d7eb90d636bf6b0f5cdc4b76dc395ac">+198/-204</a></td>

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

</details>

___
2025-09-19 18:32:25 +05:30
udev e934bb1b93 fix: correct ent repo path (#8544)
### **PR Type**
Bug fix


___

### **Description**
- Fix enterprise config path import

- Ensure enterprise config reload compiles


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Watcher["Config watcher reload_config"] -- "imports enterprise refresh" --> Import["o2_enterprise::enterprise::common::config::refresh_config"]
  Import -- "used in" --> Reload["refresh_o2_config() chain"]
```



<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_watcher.rs</strong><dd><code>Correct enterprise
config import path</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/job/config_watcher.rs

<ul><li>Update enterprise config import path.<br> <li> Use
<code>common::config::refresh_config</code> instead of
<code>common::infra::config</code>.</ul>


</details>


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

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

</details>

___
2025-09-19 17:34:16 +05:30
Abhay Padamani b2535e2fa0 fix: series list issue for color override config on pie chart (#8540)
### **PR Type**
Bug fix, Enhancement


___

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

- Fallback to existing options logic

- Prevent invalid items via filtering


___

### Diagram Walkthrough


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



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>ColorBySeries.vue</strong><dd><code>Properly derive
series for pie/donut charts</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

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

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


</details>


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

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

</details>

___
2025-09-19 16:15:20 +05:30
Huaijin 3d89ee5044 perf: perpare support tantivy optimizer for join/subuqery in single stream (#8532) 2025-09-19 16:56:32 +08:00
Bhargav 817245b43d fix: added additional match_all pattern to the syntax guide (#8475)
### **PR Type**
Documentation


___

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

- Add prefix, phrase prefix, regex usage

- Document case-sensitive and postfix searches

- Mirror examples for query editor and SQL


___

### Diagram Walkthrough


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

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



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

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

web/src/plugins/logs/SyntaxGuide.vue

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


</details>


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

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

</details>

___
2025-09-19 13:39:09 +05:30
Subhra264 ac3f257c69 fix: make ./data/download folder default for report server chrome download (#8209) 2025-09-18 22:51:07 +08:00
Sai Nikhil 6e49099b5f fix: sql query editor rapidly increases (#8435)
### **User description**
This PR fixes the issue in #8433


___

### **PR Type**
Bug fix


___

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

- Set minimum height to 18rem

- Compute height via inline style binding

- Adjust for error message presence


___

### Diagram Walkthrough


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



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>ScheduledAlert.vue</strong><dd><code>Stabilize SQL
editor height with dynamic styles</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/alerts/ScheduledAlert.vue

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


</details>


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

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

</details>

___
2025-09-18 17:50:22 +05:30
udev c09f2822e7 feat: custom config file path (#8464)
### **PR Type**
Enhancement

This feature adds a new cli argument to openobserve binary, i.e. -c
which allows user to pass in path to a config file, adding flexibility
to load env variables from different files. Earlier versions strictly
looked for .env file in the current directory.
If this flag is not specified when running o2, the default file path
(.env) from current directory will be used to load the config files.

This feature also adds a job to watch the config file. By default this
job will run every 30 seconds, and can be configured via
ZO_CONFIG_WATCHER_INTERVAL env variable. The watcher will watch the
config file and reload the config if any changes are detected. By
default the watcher watches .env file if no other file is configured
using -c flag.

___

### **Description**
- Add CLI config file path support

- Introduce config file path manager

- Implement auto config reload watcher

- Expose watcher interval configuration


___

### Diagram Walkthrough


```mermaid
flowchart LR
  CLI["CLI adds --config option"] -- "set path + reload" --> Manager["ConfigPathManager stores path/hash"]
  Manager -- "path available" --> Watcher["ConfigWatcher job (interval)"]
  Watcher -- "hash change" --> Reload["Reload dotenv + refresh configs"]
  Reload -- "update hash" --> Manager
  ConfigInit["Config init"] -- "load from path or .env discovery" --> Manager
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>7
files</summary><table>
<tr>
<td><strong>cli.rs</strong><dd><code>Add --config option and initial
reload handling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8464/files#diff-cb1eb3e74723d891353ccf1e2e5e0d246d2e78a5e69dbe4c73006ea8412d65e0">+16/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>config.rs</strong><dd><code>Config loading via path,
hashing, and watcher interval</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8464/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+44/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>config_path_manager.rs</strong><dd><code>New config path and
hash manager</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8464/files#diff-20874a97fbe99ee6fd692896482ad236916c5f813c3857f824fe0ff6e8afd72a">+64/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>lib.rs</strong><dd><code>Export config path manager
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8464/files#diff-c1f72c148113548ea854a05d09e3576632fcd7367279563bf3f42f0aef5454e2">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Refactor enterprise config reload
helper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8464/files#diff-ca09c9c9b020049bdbc3382c466bfcca80daac92e98760d9a9a76172abf34049">+8/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>config_watcher.rs</strong><dd><code>Add periodic config file
change watcher and reloader</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8464/files#diff-598ec79e0686bf314514227cf1f0b1dc560770b0e056761d6a214289d2eeb7f2">+94/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Wire up config watcher on job
init</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8464/files#diff-f2e4c29b8eef22189ec704a832633c4bd135a24444f054864c98064bd0963681">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>pausable_job.rs</strong><dd><code>Improve macro
documentation punctuation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8464/files#diff-7e2dce7a3942789804bae659939c214c4eeb68d89315e23a08139214c339ea24">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-09-18 16:34:05 +05:30
Loakesh IndiranandSubhra264 373bbf4bdb fix: order_by_metadata for responses from cache (#8514)
### **PR Type**
Bug fix


___

### **Description**
- Preserve `order_by_metadata` in cached responses

- Clone metadata from first search result

- Align cache response fields with live responses


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Search responses (live)"] -- "first().order_by_metadata.clone()" --> B["Cache response.order_by_metadata"]
  A -- "first().order_by" --> C["Cache response.order_by"]
  D["Cache stats"] -- "compute ratio" --> E["Cache response.result_cache_ratio"]
```



<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>Propagate `order_by_metadata`
into cache response</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

src/service/search/cache/mod.rs

<ul><li>Set <code>cache_response.order_by_metadata</code> from first
result<br> <li> Clone metadata to avoid ownership issues<br> <li> Keep
default when no results available</ul>


</details>


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

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

</details>

___

Co-authored-by: Subhra264 <chakrabortysubhradeep556@gmail.com>
2025-09-18 14:49:24 +05:30
sktrpathi d40b6afc2e refactor: fix OpenAPI schemas and improvements (#8505)
### **User description**
- **OpenAPI schema fixes**: Replace generic `Object` content types with
proper typed schemas
    - `ai/prompt.rs`: Use `UpdatePromptRequest` instead of `Object`
    - `authz/fga.rs`: Use `RoleRequest` for role operations
    - `keys/mod.rs`: Use `KeyAddRequest` for cipher key operations
- `dashboards/mod.rs`: Use versioned dashboard schemas for create/update
endpoints
    - `actions/action.rs`: Remove incorrect request_body specifications

- **Deprecated endpoint disambiguation**: Add "Deprecated" suffix to
alert operation IDs to prevent OpenAPI conflicts

- **Dashboard macro refactoring**: Replace repetitive getter/setter
methods with declarative macros
- `make_getter!` macro generates type-safe field accessors across all
dashboard versions (v1-v5)
- `make_setter!` macro generates unified field mutators with
version-specific matching
- Add comprehensive unit tests covering edge cases (empty values,
unsupported versions, missing inner objects)

- **Pipeline schema**: Add `ToSchema` derive to Pipeline struct for API
documentation

- **Enterprise feature gating**: Properly gate cipher key endpoints with
conditional compilation


___

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


___

### **Description**
- Replace OpenAPI Object with typed schemas

- Introduce dashboard getter/setter macros

- Gate cipher key endpoints by feature

- Add ToSchema for Pipeline and multipart
2025-09-18 13:52:07 +05:30
6e75dc0e62 feat: add bulk enable/disable for alert and pipelines (#8438)
### **User description**
This adds two apis, one for bulk enable/disable of pipeline and one for
bulk enable/disable of alerts.


___

### **PR Type**
Enhancement


___

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

- Add bulk enable/disable for pipelines

- Introduce enterprise permission checks helper

- Update auth bypass for bulk endpoints


___

### Diagram Walkthrough


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

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



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

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

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

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>openapi.rs</strong><dd><code>Expose bulk enable endpoints in
OpenAPI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-edb8ce232c0cd08366879f642788a75d99f6bab64b4c0e77391281fdb9241e90">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2025-09-18 12:12:16 +05:30
Hengfei Yang ff29e0c9c0 fix: stream stats min_ts error (#8509) 2025-09-18 13:40:47 +08:00
Huaijin c2e8d73e65 feat: implement broadcast join (#8506) 2025-09-18 12:37:44 +08:00
c77a559183 feat: add pipeline usage (#8295)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add pipeline and remote usage tracking

- Report usage for remote destination WAL writes

- Switch pipeline channels to structured items

- Fix size accounting across pipeline branches


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Ingestion (Logs/Metrics)"] -- "pre-pipeline size" --> B["Usage: Pipeline"]
  B -- "execute pipeline" --> C["Pipeline Nodes (Condition/Function/Destination)"]
  C -- "local dest" --> D["Size by stream (no double count)"]
  C -- "remote dest WAL write" --> E["Usage: RemotePipeline"]
```



<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>3
files</summary><table>
<tr>
<td><strong>usage.rs</strong><dd><code>Add Pipeline and RemotePipeline
usage types and mapping</code>&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8295/files#diff-b15a6adcb163dc27993c83528105a6726c44c86d8a84c5cf5d1d382c6ec8cc29">+22/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ingest.rs</strong><dd><code>Report size before pipeline;
avoid double counting</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8295/files#diff-e62118e45be183266d39ffa08491f255017954235ff0f3d6937683e314da406f">+13/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>batch_execution.rs</strong><dd><code>Add usage reporting;
introduce PipelineItem; report remote WAL usage</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8295/files#diff-3f6824a6eddaf1603e5cb0f1a4311ac6a45e1ffb967266ccc1f0bba944625e69">+158/-29</a></td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>handlers.rs</strong><dd><code>Avoid ownership by cloning
stream params key</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8295/files#diff-5eca8995a88fcecb6d6b8efd3c7c4496f4a96a4b060fb4ed85593574f7cf49eb">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Formatting</strong></td><td><details><summary>3
files</summary><table>
<tr>
<td><strong>otlp.rs</strong><dd><code>Minor formatting and flow tidy in
loop</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8295/files#diff-183498d98b17ddf344cbab4da6b2d9fe89ac81112db51655c142a89023b46ef3">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>json.rs</strong><dd><code>Minor formatting; prep for
pipeline handling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8295/files#diff-506987e61095a54e47f7f208dad89f9f1bce595fa6bf1ba8a7d746f2b2ff6c4a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>prom.rs</strong><dd><code>Minor formatting; prep for
pipeline handling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8295/files#diff-c4e9e1d49a2bd0fefe67684b3768c4792be63cebcf727d71a48141f5b5957b8c">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-09-17 19:02:41 +05:30
Hengfei Yang 4f79d76323 fix: improve match_all contains query (#8491) 2025-09-17 20:25:27 +08:00
ktx-akshay e70455bfd9 test: add custom variable tests for dashboard (#8401)
### **PR Type**
Enhancement, Tests


___

### **Description**
- Add custom value search to variables

- Introduce streaming-aware dashboard tests

- Add streaming state management helper

- Update CI to run streaming tests


___

### Diagram Walkthrough


```mermaid
flowchart LR
  vars["DashboardVariables.addDashboardVariable(custom search)"]
  mgmt["ManagementPage.setStreamingState()"]
  filtSpec["dashboard-filter.spec: custom value search test"]
  streamSpec["dashboard-streaming.spec: streaming search test"]
  ci["Playwright workflow: Dashboards-Streaming job"]

  vars -- "support custom value search" --> filtSpec
  mgmt -- "toggle streaming on/off" --> streamSpec
  streamSpec -- "verifies _values_stream calls" --> ci
  filtSpec -- "validates _values calls" --> ci
```



<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-variables.js</strong><dd><code>Support custom
value search for variables</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

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

<ul><li>Extend addDashboardVariable with custom search mode<br> <li>
Conditionally skip early save/close for custom search<br> <li> Implement
custom value entry flow in settings</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8401/files#diff-67d38d39bb67f4a0cbfa473ee81ad50b1fffebc40c635417e58905f3c865a6e2">+48/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>managementPage.js</strong><dd><code>Add streaming state
management utility</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/pages/generalPages/managementPage.js

<ul><li>Add setStreamingState helper<br> <li> Navigate to settings and
toggle streaming<br> <li> Verify final toggle state with
aria-checked</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8401/files#diff-2e67acc9ff9099e14792ddeb7d0160268727fb064b85e6712f6434130cc23fdd">+48/-0</a>&nbsp;
&nbsp; </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>Add custom
value search e2e test</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

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

<ul><li>Add test for custom value dropdown search<br> <li> Capture and
assert /_values responses status<br> <li> Configure panel and filter
using variable<br> <li> Ensure dashboard cleanup</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>dashboard-streaming.spec.js</strong><dd><code>Add
streaming-aware dashboard tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

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

<ul><li>New serial test suite for streaming<br> <li> Enable/disable
streaming via page object<br> <li> Validate _values_stream requests and
200 status<br> <li> Full dashboard create, filter, save, cleanup</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8401/files#diff-92f44296937f53cb448371d1c61510c8c910fbecab83b02b8e89490d5832be19">+152/-0</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>playwright.yml</strong><dd><code>CI: run streaming
dashboard tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.github/workflows/playwright.yml

<ul><li>Add Dashboards-Streaming matrix entry<br> <li> Map folder to
Dashboards path<br> <li> Run dashboard-streaming.spec.js on Chrome</ul>


</details>


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

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

</details>

___
2025-09-17 16:02:09 +05:30
udev 25c50d2e03 fix: update remote wal config (#8359)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add two new pipeline config options

- Set safe defaults when zero provided

- Improve WAL pipeline timing controls


___

### Diagram Walkthrough


```mermaid
flowchart LR
  CFG["Config struct (Pipeline)"] -- "add fields" --> F1["pipeline_file_push_back_interval (secs)"]
  CFG -- "add fields" --> F2["pipeline_sink_task_spawn_interval_ms (ms)"]
  VALID["check_pipeline_config"] -- "apply defaults if 0" --> F1
  VALID -- "apply defaults if 0" --> F2
```



<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>New pipeline timing fields
and defaulting logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/config/src/config.rs

<ul><li>Add <code>pipeline_file_push_back_interval</code> with env
config.<br> <li> Add <code>pipeline_sink_task_spawn_interval_ms</code>
with env config.<br> <li> Enforce non-zero defaults in
<code>check_pipeline_config</code>.<br> <li> Preserve existing WAL size
handling.</ul>


</details>


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

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

</details>

___
2025-09-17 14:24:14 +05:30
mmosarafO2andShrinath Rao 8ede92a58f ci: updated oss strapi notification to pusblish content (#8465)
### **User description**
updated oss strapi notification to pusblish content


___

### **PR Type**
Enhancement


___

### **Description**
- Improve changelog cleaning logic robustness

- Stop at 'New contributors' section

- Exclude binaries and links from notes

- Publish Strapi release entries by default


___

### Diagram Walkthrough


```mermaid
flowchart LR
  GH["GitHub Release (tag)"] -- "Fetch & clean body" --> Clean["Enhanced changelog cleaner"]
  Clean -- "Cleaned notes" --> Payload["Build payload for Strapi"]
  Payload -- "POST status=published" --> Strapi["Strapi /api/github-releases"]
```



<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>release.yml</strong><dd><code>Refine changelog cleaner
and publish status</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.github/workflows/release.yml

<ul><li>Rewrote <code>cleanChangelog</code> to iterative parser.<br>
<li> Stops at 'New contributors'; removes links and binaries lines.<br>
<li> Preserves non-empty cleaned lines only.<br> <li> Changes Strapi API
call query to <code>status=published</code>.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8465/files#diff-87db21a973eed4fef5f32b267aa60fcee5cbdf03c67fafdc2a9b553bb0b15f34">+13/-14</a>&nbsp;
</td>

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

</details>

___

---------

Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-09-17 11:42:20 +05:30
1645873275 fix: interesting field config (#8480)
### **User description**
This provides the default tab for logs ui sidebar via config api and env
config


___

### **PR Type**
Enhancement


___

### **Description**
- Add env to set default fields tab

- Validate and expose config via status API

- Set frontend default tab based on config

- Add watcher to apply tab on toggle


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Env var ZO_LOG_PAGE_DEFAULT_FIELD_LIST"] --> B["Backend Config (Common.log_page_default_field_list)"]
  B --> C["Config validation (uds|all|interesting)"]
  C --> D["/api/config response (zo_config)"]
  D --> E["Frontend store.state.zoConfig.log_page_default_field_list"]
  E --> F["Logs UI sets default tab via setDefaultFieldTab()"]
  F --> G["Watch toggle to re-apply default"]
```



<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 and validate
default field list config</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/config/src/config.rs

<ul><li>Add <code>log_page_default_field_list</code> env-config
option.<br> <li> Default to <code>uds</code>; document valid values.<br>
<li> Normalize to lowercase and validate allowed values.<br> <li>
Fallback to <code>uds</code> on invalid input.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Expose default field list in
status/config API</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/handler/http/request/status/mod.rs

<ul><li>Extend <code>ConfigResponse</code> with
<code>log_page_default_field_list</code>.<br> <li> Populate response
from common config.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>IndexList.vue</strong><dd><code>Use config to set Logs
UI default fields tab</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/logs/IndexList.vue

<ul><li>Add <code>setDefaultFieldTab()</code> to pick initial tab.<br>
<li> Use backend config to select UDS vs Interesting.<br> <li> Watch
user-defined schema toggle to re-apply default.<br> <li> Remove
hardcoded default to Interesting fields.</ul>


</details>


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

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

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: omkark06 <omkar@zinclabs.io>
2025-09-17 10:45:02 +05:30
Hengfei Yang 3515e6c95d feat: support inverted index for metadata stream (#8483) 2025-09-17 07:31:49 +08:00
Hengfei Yang 3a1aaa0707 refactor: replace feature_per_thread_lock with mem_table_bucket_num (#8484) 2025-09-16 23:20:14 +08:00
Hengfei Yang 215cf796cd feat: remove etcd (#8466) 2025-09-16 19:02:47 +08:00
09abc46689 fix: fixed searcharound and parsed unparsed sql (#8240)
### **PR Type**
Enhancement, Bug fix, Tests


___

### **Description**
- Introduce streaming search composable

- Add WebSocket/HTTP streaming orchestration

- Implement histogram streaming and pagination

- Enhance multi-stream SQL handling


___

### Diagram Walkthrough


```mermaid
flowchart LR
  SB["useSearchBar: query orchestration"] -- "builds request / sets method" --> SS["useSearchStream: streaming engine"]
  SS -- "WS/HTTP streaming" --> SWS["useSearchWebSocket/useStreamingSearch"]
  SS -- "histogram logic" --> HG["useHistogram"]
  SS -- "fields/columns" --> SF["useStreamFields"]
  SB -- "partitions/page-count (HTTP)" --> PAG["usePagination"]
  SS -- "state + URL updates" --> ST["searchState/logsUtils"]
  SB -- "functions/actions" --> ACT["useFunctions/useActions"]
```



<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>25
files</summary><table>
<tr>
<td><strong>useSearchStream.ts</strong><dd><code>New streaming search
composable with WS/HTTP handlers</code>&nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-0b7e910195d1ec4b1301973bd2f4193e1e23442103f69a9fbd189d3f78547014">+2171/-0</a></td>

</tr>

<tr>
<td><strong>useSearchBar.ts</strong><dd><code>Orchestrate search,
partitions, cancel, and method selection</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-489bda221a164cbee8d66aaf178acb4e0d8a860dbdf39558804fc32c9efd71e8">+1351/-0</a></td>

</tr>

<tr>
<td><strong>logs.ts</strong><dd><code>Add logs-related TypeScript
interfaces</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-637857fa918f47ffb02ebfc8a35b124001ef4f65fd180c467f0f153382d2dc76">+89/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>index.ts</strong><dd><code>Export logs interfaces from
barrel file</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-108f7ecc761a491fd64530704bf44f21473916e1d2ae495376dc996206104088">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>useStreamFields.ts</strong><dd><code>Stream fields
extraction and grid columns utilities</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-14f575947dcdd7aa0e05646be62ed15b4651a25154f679a3a08ce1bc2252acec">+1105/-0</a></td>

</tr>

<tr>
<td><strong>usePagination.ts</strong><dd><code>Partition-aware
pagination and data fetching helpers</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-74277c3b3b1f9b684913ac55ce19c72b29b477021b0ff32af44f8191b17f24a1">+869/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>logsUtils.ts</strong><dd><code>SQL parsing helpers, query
transforms, and tracing</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-c8550678e2f4da95dd54d03d9893f6bfff2061460c4a2f2c324fdd3b1d392a52">+735/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>useHistogram.ts</strong><dd><code>Histogram generation,
skeleton, and multi-stream support</code>&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-4d467d6778569f239f96f3af9ec30214aa8b029892bf40a0aa038dfbb73eca6e">+609/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>searchState.ts</strong><dd><code>Centralized reactive logs
search state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-c0ac4f131ad64edd2ed811e183bb570be2f38d58c9ed958d093457a51280ec34">+412/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>constants.ts</strong><dd><code>Add logs module
constants</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-70282396b9397710380ad150da4428630b1b6e4a41b40d206d43cd2eb7f3b653">+279/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>searchAround.ts</strong><dd><code>Search-around utilities
for contextual queries</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-0090387d8955180e33b700e25de27dd8356a3656449a8bae3442ab476dc50494">+269/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>logsVisualization.ts</strong><dd><code>Visualization helpers
for logs/histogram</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-5913cd8ca0e98529736da0801f08bf2cd1d861ad01442fbf628d1925ed4c87a1">+46/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>useLogs.ts</strong><dd><code>Integrate new composables and
streaming flow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+598/-7006</a></td>

</tr>

<tr>
<td><strong>useStreams.ts</strong><dd><code>Stream fetching support for
multi-stream scenarios</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-a083369344f022cdf8d4f536719179b1d920369e33e2e26234e70dd36d151a7c">+50/-42</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>useSuggestions.ts</strong><dd><code>Suggestions aligned with
SQL/streams changes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-6d2ecd5b90970ea8c8f5d35c5928a2cf8bf0ed14af700db0202759158bfbbf9d">+56/-25</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>Index.vue</strong><dd><code>Wire UI to streaming search
lifecycle</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+104/-61</a></td>

</tr>

<tr>
<td><strong>SearchBar.vue</strong><dd><code>UI updates for new search
orchestration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+41/-27</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SearchHistory.vue</strong><dd><code>Adjust to new state and
tracing</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-9dd167bd5e272b2057f53c16b905047eec00655a3552daad240a964d67a6f56d">+6/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>SearchResult.vue</strong><dd><code>Display streamed hits,
histogram, pagination</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-5e65533aa4754bb6d0074fda18ffc1ecacded3b9ca6bc28a161c3f6b12f20195">+14/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>IndexList.vue</strong><dd><code>Support streaming responses
and errors</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+14/-10</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>DetailTable.vue</strong><dd><code>Column updates based on
streamed fields</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-80552b5d25fa6cef9fbbe430b1865d761c4b132284c2d2175afceea8cbabc8c7">+5/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>JsonPreview.vue</strong><dd><code>Handle streamed hit
rendering</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-3985073134d35ff074742944b114d0905524038b42e6d2ac887fef2c8436fb16">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>SearchSchedulersList.vue</strong><dd><code>Align scheduler
with new search flow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-0c0a4097c53f07712d35562b1336602bf24faddedab77a9f5717f5582dcac2f1">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>TransformSelector.vue</strong><dd><code>Transform selection
wired to query transforms</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-0037d8dd9cfbacc26309b26e98ae953e7ccbd0891ac2fd01c6314ebd7eed9d2c">+5/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>FunctionSelector.vue</strong><dd><code>Functions integration
with streaming search</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-11d9577516700b94b5f3325e77214d0d886473e690db8c9ea981613c9fb89b68">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Miscellaneous</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>useLogs_original.ts.original</strong><dd><code>Preserve
original composable for reference</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8240/files#diff-00d4815f6d83c48def131ba94f5131e6cae436bf949cc8abf9b8beacdb0aaf7f">+7033/-0</a></td>

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

</details>

___

---------

Co-authored-by: omkark06 <omkar@zinclabs.io>
Co-authored-by: Sai Nikhil <nikhil@openobserve.ai>
2025-09-16 14:51:02 +05:30
Sai Nikhil 913c41c04e fix: general management UI in sync (#8443) 2025-09-16 14:56:00 +08:00
Hengfei Yang 97d09eff1e fix: support prefix star match_all (#8451) 2025-09-16 13:05:02 +08:00
Sai Nikhil 7f3ee74085 fix: o2 ui improvements latest (#8391) 2025-09-16 10:32:51 +08:00
Huaijin aa372b53bf feat: tantivy index for multi stream [phase 2] (#8229) 2025-09-15 22:56:47 +08:00
ktx-akshayandktx-vaidehi 5fc1944621 test: add camelCase tests for dashboard (#8423)
### **PR Type**
Tests, Bug fix


___

### **Description**
- Add camelCase custom SQL UI tests

- Fix table data validation logic

- Validate line and table chart rendering


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Dashboard UI tests"] -- "add camelCase SQL cases" --> Tests["Playwright specs"]
  Renderer["PanelSchemaRenderer table check"] -- "fix grouping logic" --> Validation["Accurate data validation"]
  Tests -- "verify table & line charts" --> Charts["Rendered charts without no-data"]
```



<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>PanelSchemaRenderer.vue</strong><dd><code>Fix table
data validation logical grouping</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelSchemaRenderer.vue

<ul><li>Correct parentheses in table branch<br> <li> Ensure x/y alias
checks grouped logically</ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>dashboard.spec.js</strong><dd><code>Add camelCase
custom SQL UI tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

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

<ul><li>Add test for camelCase in table SQL<br> <li> Add test for
camelCase in line SQL<br> <li> Assert data presence and chart
rendering<br> <li> Cleanup dashboards after tests</ul>


</details>


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

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

</details>

___

---------

Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
2025-09-15 19:23:42 +05:30
Hengfei Yang 237c757c7c fix: improve nats queue with limit policy (#8436) 2025-09-15 20:06:03 +08:00
Omkar Kesarkhane 6afe046998 fix: In logs append results if partition results are chunked (#8385)
### **User description**
If we receive chunked hits of a single partition, then append the hits.


___

### **PR Type**
Bug fix


___

### **Description**
- Track chunks per partition for hits

- Append hits when partition is chunked

- Replace hits only on first partition

- Refactor partition map to structured object


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["WebSocket search responses"] -- "metadata" --> B["Init/Increment partition"]
  B -- "set chunks[partition]=0" --> C["Track chunks per partition"]
  A -- "hits" --> D["Increment chunk count"]
  D -- "is chunked or partition>1?" --> E["Append hits"]
  D -- "else" --> F["Replace 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>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>useLogs.ts</strong><dd><code>Chunk-aware partition
tracking and hit appending</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useLogs.ts

<ul><li>Introduce <code>SearchPartition</code> with
<code>partition</code> and <code>chunks</code>.<br> <li> Track chunk
counts per partition per <code>traceId</code>.<br> <li> Append hits when
single partition has multiple chunks.<br> <li> Update conditions to use
<code>partition</code> field instead of number map.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8385/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+29/-10</a>&nbsp;
</td>

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

</details>

___
2025-09-15 15:45:27 +05:30
Abhay Padamaniandktx-akshay 171bea35a6 fix: restrict select * query for visualization (#8302) (#8368)
### **User description**
- #8338

Resolved Issues:
- Implemented a check for `ZO_QUICK_MODE_ENABLED` before enabling quick
mode on logs for visualization toggle.
1. If `ZO_QUICK_MODE_ENABLED=true`, quick mode is enabled when the query
is `select *`.
2. Otherwise, `select *` query is always permitted in visualization
mode.
- Restricted the use of `SELECT *` queries in visualization mode.
- As API call triggered on changing the chart type, such changes are now
disallowed for `SELECT *` queries.


___

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


___

### **Description**
- Block SELECT * in visualization when quick mode on

- Respect quick-mode config before auto-enabling

- Centralize SELECT * detection in sqlUtils

- Prevent chart-type changes for SELECT * queries


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["sqlUtils.ts: isSimpleSelectAllQuery()"] -- "imported by" --> B["logs/Index.vue"]
  A -- "imported by" --> C["VisualizeLogsQuery.vue"]
  B -- "auto-enable quick mode only if config true" --> D["handleQuickModeChange()"]
  B -- "block run for SELECT * when quick mode" --> E["handleRunQueryFn()"]
  C -- "validate on chart type change" --> F["handleChartTypeChange()"]
```



<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>sqlUtils.ts</strong><dd><code>Add reusable SELECT *
query detector</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/utils/query/sqlUtils.ts

<ul><li>Add <code>isSimpleSelectAllQuery</code> utility with
normalization.<br> <li> Export function for reuse across
components.</ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>Index.vue</strong><dd><code>Enforce quick mode/config
and block SELECT * runs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/logs/Index.vue

<ul><li>Import shared <code>isSimpleSelectAllQuery</code>.<br> <li>
Remove local duplicate detector.<br> <li> Auto-enable quick mode only if
config enabled.<br> <li> Block visualize run for SELECT * when quick
mode enabled.</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>VisualizeLogsQuery.vue</strong><dd><code>Validate chart
type changes against SELECT * queries</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/plugins/logs/VisualizeLogsQuery.vue

<ul><li>Replace v-model with explicit <code>selectedChartType</code>
prop handling.<br> <li> Add <code>handleChartTypeChange</code>
validating against SELECT * when quick mode.<br> <li> Import shared
<code>isSimpleSelectAllQuery</code> and logs context.</ul>


</details>


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

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

</details>

___

---------

Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2025-09-15 14:00:02 +05:30
ktx-vaidehi c68cbcb8da fix: update table chart no data validation logic (#8422)
### **PR Type**
Bug fix


___

### **Description**
- Fix table chart no-data validation

- Separate table logic from other charts

- Ensure presence check on x/y aliases

- Prevent false negatives with single row


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Renderer["PanelSchemaRenderer.vue"]
  Charts["Non-table charts validation"]
  Table["Table-specific validation"]
  Metric["Metric validation (unchanged)"]

  Renderer -- "refine validation" --> Charts
  Renderer -- "add distinct logic" --> Table
  Renderer -- "keep existing flow" --> Metric
```



<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>PanelSchemaRenderer.vue</strong><dd><code>Refine table
chart data validation logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelSchemaRenderer.vue

<ul><li>Remove table from generic chart validation branch.<br> <li> Add
table-specific data presence checks.<br> <li> Allow single-row tables
with any x/y value.<br> <li> Keep gauge and others using stricter alias
checks.</ul>


</details>


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

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

</details>

___
2025-09-15 13:01:49 +05:30
ktx-vaidehiandktx-akshay 5b81317d71 fix: dashboard ensure case-insensitive comparison for stream field validation for camelCase (#8424)
### **PR Type**
Bug fix


___

### **Description**
- Make stream field validation case-insensitive

- Prevent false errors for camelCase vs snake_case


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Query field names"] -- "toLowerCase()" --> B["Normalized names"]
  C["Available stream fields"] -- "toLowerCase()" --> D["Normalized fields"]
  B -- "compare" --> D
  E["Errors array"] -- "only push if unmatched" --> F["Accurate validation"]
```



<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>convertDataIntoUnitValue.ts</strong><dd><code>Case-insensitive
comparison for stream field validation</code>&nbsp; &nbsp;
</dd></summary>
<hr>

web/src/utils/dashboard/convertDataIntoUnitValue.ts

<ul><li>Compare field names using toLowerCase().<br> <li> Avoid mismatch
when cases differ (e.g., camelCase).<br> <li> Update filter predicate
for custom X field errors.</ul>


</details>


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

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

</details>

___

---------

Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2025-09-15 11:35:39 +05:30
Hengfei Yang 53d23c4e1f fix: improve stream stats reset (#8426) 2025-09-15 13:18:01 +08:00
Ashish Kolhe 34a7341e87 chore: node list & user session refresh apis (#8198) (#8200)
### **PR Type**
Enhancement


___

### **Description**
- Add CLI commands to refresh caches

- Expose HTTP endpoints for refresh actions

- Cache node list building in cluster module

- Replace retention flag with mode enum


___

### Diagram Walkthrough


```mermaid
flowchart LR
  CLI["CLI subcommands"] -- triggers --> HTTP["HTTP endpoints"]
  HTTP -- calls --> Cluster["cluster::cache_node_list"]
  HTTP -- calls --> Sessions["db::session::cache()"]
  Config["Config: file_list_deleted_mode"] -- controls --> Retention["Compactor retention logic"]
```



<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>cli.rs</strong><dd><code>New CLI subcommands for cache
refresh</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8200/files#diff-cb1eb3e74723d891353ccf1e2e5e0d246d2e78a5e69dbe4c73006ea8412d65e0">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>http.rs</strong><dd><code>HTTP client helpers for refresh
endpoints</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8200/files#diff-790b7780a51e8eecd4754b623af8d15ad87baaaf29455ba646e2e410f83f5498">+22/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Cache node list and update
consistent hash</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8200/files#diff-d15434a27e2b8406811f5a707b605203b603dad4a262c0642326be860bd2b568">+33/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>config.rs</strong><dd><code>Replace retention flag with mode
string config</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8200/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+3/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>stream.rs</strong><dd><code>Add FileListBookKeepMode enum
and conversions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8200/files#diff-2438d04c3fe97bc5452e5b74a303163b8723d93455cda32c95f0525435ad46bd">+29/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Add refresh nodes and user sessions
endpoints</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8200/files#diff-ca09c9c9b020049bdbc3382c466bfcca80daac92e98760d9a9a76172abf34049">+20/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Wire refresh endpoints into basic
routes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8200/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>retention.rs</strong><dd><code>Use retention mode for
history/deleted behavior</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8200/files#diff-6abd048f5ef4e7163cffbb51cb4bee10c07fb88b871469d5b3724f7cd04743dc">+16/-6</a>&nbsp;
&nbsp; </td>

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

</details>

___
2025-09-15 09:52:42 +05:30