mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-05 08:09:22 +00:00
97dda39d97befeaba7c05fc2802a0a2be41bb2ac
4317
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
97dda39d97 |
feat: cloud email domains (#8584)
### **User description**
This adds a validation check for emails in cloud.
___
### **PR Type**
Enhancement, Bug fix
___
### **Description**
- Enforce cloud email domain validation
- Propagate errors via Result returns
- Update redirect to handle unauthorized
- Improve logging for blocked domains
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["JWT process_token"] -- "cloud feature" --> B["check_and_add_to_org"]
B -- "invalid domain -> Err" --> C["Result error"]
C -- "map to 401" --> D["redirect handler returns Unauthorized"]
B -- "ok -> (new_user,pending)" --> E["redirect builds URL params"]
```
<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>jwt.rs</strong><dd><code>Result-based flow and cloud
email validation</code>
</dd></summary>
<hr>
src/handler/http/auth/jwt.rs
<ul><li>Change return type to Result for error propagation<br> <li>
Validate cloud email domain on new user creation<br> <li> Convert
multiple None returns to Ok(None)<br> <li> Wrap org/user operations to
return Result from cloud path</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8584/files#diff-232cab74f4cbf135af424744272e17732fbda8ac005d33c0acb4597e65479d02">+18/-11</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>mod.rs</strong><dd><code>Unauthorized handling for
invalid email domains</code>
</dd></summary>
<hr>
src/handler/http/request/status/mod.rs
<ul><li>Handle process_token errors explicitly<br> <li> Return 401
Unauthorized on blocked email domain<br> <li> Preserve URL params on
successful processing</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8584/files#diff-ca09c9c9b020049bdbc3382c466bfcca80daac92e98760d9a9a76172abf34049">+9/-3</a>
</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>
|
||
|
|
f3a42c2d51 | fix: data missing issue during search on ingester nodes (#8639) | ||
|
|
891d3f5d1a |
test: pytest tests sql (#8637)
### **PR Type**
Tests
___
### **Description**
- Add time-series window functions test
- Add advanced regex aggregation test
- Add complex nested aggregation test
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Add E2E test: array case-sensitive"] -- "validates substring match in arrays" --> T["tests/test_advanced_sql.py"]
B["Add E2E test: window functions"] -- "histogram + LAG growth" --> T
C["Add E2E test: regex + metrics"] -- "regexp_match, health status" --> T
D["Add E2E test: complex CTEs"] -- "env metrics, ranks" --> T
```
<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 multiple
advanced E2E SQL tests</code>
</dd></summary>
<hr>
tests/api-testing/tests/test_advanced_sql.py
<ul><li>Add case-sensitive array extraction E2E test.<br> <li> Add
time-series window functions E2E test.<br> <li> Add advanced regex with
JSON-path metrics test.<br> <li> Add complex nested aggregation with
CTEs and ranking test.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8637/files#diff-190cc55e8b961580682e09403c997fda2e8288e5f210dec5ab41c9465c68538f">+451/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
fafd4444ef | fix: search partition alignment (#8581) | ||
|
|
a49641e625 | fix: stream stats merge (#8648) | ||
|
|
50179fe463 | fix: distinct values has no _timestamp (#8634) | ||
|
|
41f03aba06 |
fix: histogram interval config issue (#8622)
### **User description** - #8614 ___ ### **PR Type** Bug fix ___ ### **Description** - Preserve histogram interval for visualization - Add dedicated interval field to avoid pagination bug - Ensure missing values can be filled in charts - Fix regression impacting WITH clause streaming ___ ### Diagram Walkthrough ```mermaid flowchart LR A["WebSocket streaming response"] -- "has histogram_interval" --> B["Set visualization_histogram_interval"] B -- "drives chart fill logic" --> C["Correct chart rendering"] B -- "separate from pagination interval" --> D["Pagination unaffected"] ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Bug fix</strong></td><td><table> <tr> <td> <details> <summary><strong>useSearchStream.ts</strong><dd><code>Preserve histogram interval in separate visualization field</code></dd></summary> <hr> web/src/composables/useLogs/useSearchStream.ts <ul><li>Capture histogram_interval from first streaming response<br> <li> Store in new field <code>visualization_histogram_interval</code><br> <li> Avoids pagination counters conflict<br> <li> Enables missing-value fill in charts</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/8622/files#diff-0b7e910195d1ec4b1301973bd2f4193e1e23442103f69a9fbd189d3f78547014">+12/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
1077ad0461 |
fix: enrichment table delete event must be watched (#8578)
### **PR Type**
Bug fix, Tests
___
### **Description**
- Fix delete to watch enrichment deletions
- Add GeoIP config and parsing tests
- Add multipart CSV extraction tests
- Add derived stream timerange edge-case tests
- Add enrichment table integration tests
___
### Diagram Walkthrough
```mermaid
flowchart LR
DeleteFn["DB delete for enrichment tables"] -- "enable prev_kv for watch" --> Watcher["Cluster watcher reacts to deletions"]
GeoIP["GeoIP module"] -- "unit tests" --> Confidence["Parsing/config defaults validated"]
Multipart["Multipart CSV extraction"] -- "unit tests" --> CSVRecords["Robust CSV handling verified"]
Pipeline["Derived stream scheduler"] -- "integration tests" --> TimeRange["Invalid timerange scenarios covered"]
Enrichment["Enrichment tables"] -- "integration tests" --> CacheSchema["Schema, caches, disk cache validated"]
```
<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>Enable prev_kv on
enrichment table delete</code>
</dd></summary>
<hr>
src/service/db/enrichment_table.rs
<ul><li>Change delete call flag to enable previous value<br> <li>
Ensures delete events are observable via watch</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8578/files#diff-6ce27ddf8a0d8b4e790bda90d088ff692a5da31a8d330beea8a9dd843294572b">+1/-1</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>geoip.rs</strong><dd><code>Add GeoIP config and parsing
tests</code>
</dd></summary>
<hr>
src/service/enrichment_table/geoip.rs
<ul><li>Add comprehensive unit tests for DatabaseKind parsing<br> <li>
Test defaults, config clone/eq, serialization<br> <li> Validate error on
invalid DB path</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8578/files#diff-e9b58b850f67eed76a5e8afb0bf98dbbc6e09216558dcdc4441663f58998f800">+116/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>mod.rs</strong><dd><code>Add multipart CSV extraction
test suite</code>
</dd></summary>
<hr>
src/service/enrichment_table/mod.rs
<ul><li>Add extensive tests for multipart CSV extraction<br> <li> Cover
headers-only, malformed, whitespace, specials<br> <li> Test multiple
files and append behavior</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8578/files#diff-3e2b6d3b8da1f9e73aca279052a97e683184d68256c23215b18ffee885836bbf">+381/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>integration_test.rs</strong><dd><code>Add pipeline and
enrichment integration tests</code>
</dd></summary>
<hr>
tests/integration_test.rs
<ul><li>Add helpers and integration tests<br> <li> Cover derived stream
invalid timeranges (delay/cron)<br> <li> Add enrichment table end-to-end
tests and cleanup<br> <li> Refactor pipeline retrieval helper and minor
logs</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8578/files#diff-7ff815b68943f08bef79f083c09e55ca8c18db8e25033034b12fa31f1d43dab4">+830/-18</a></td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
d85065b567 |
fix: change enrichment_table data type to blob for mysql (#8628)
### **PR Type**
Bug fix, Enhancement
___
### **Description**
- Add MySQL migration to blob data
- Bump DB schema version to 9
- Register migration in migrator module
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["config.rs: DB_SCHEMA_VERSION 8 -> 9"]
B["new migration: update_enrichment_table_data_size"]
C["migrator: register new migration"]
D["MySQL only: ALTER TABLE enrichment_tables MODIFY data BLOB"]
A -- "enables" --> B
B -- "executes" --> D
C -- "includes" --> B
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>config.rs</strong><dd><code>Bump DB schema version to
9</code>
</dd></summary>
<hr>
src/config/src/config.rs
<ul><li>Increment <code>DB_SCHEMA_VERSION</code> from 8 to 9.<br> <li>
Aligns with new migration addition.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8628/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+1/-1</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>mod.rs</strong><dd><code>Register enrichment table data
size migration</code>
</dd></summary>
<hr>
src/infra/src/table/migration/mod.rs
- Register new migration module.
- Append migration to migrator list.
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8628/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+2/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>m20251023_000001_update_enrichment_table_data_size.rs</strong><dd><code>Add
MySQL migration to enlarge data column</code>
</dd></summary>
<hr>
src/infra/src/table/migration/m20251023_000001_update_enrichment_table_data_size.rs
<ul><li>Add migration to modify <code>enrichment_tables.data</code> to
BLOB.<br> <li> MySQL-only execution; no-op for other backends.<br> <li>
Non-reversible down migration noted.<br> <li> Include unit test
validating generated SQL.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8628/files#diff-478cb511f1fa96c2a54d72f8fef94eff6bf3724dfe023cf9c6b6470bad636e02">+73/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
|
||
|
|
9b971f0b7f |
test: add camelCase test scenarios (#8570)
### **PR Type**
Tests, Enhancement
___
### **Description**
- Add transpose custom SQL dashboard test
- Extend error checking return structure
- Validate no errors post-transpose
- Optimize test flow and assertions
___
### Diagram Walkthrough
```mermaid
flowchart LR
Tests["Dashboards transpose test"] -- "enable transpose via config" --> Transpose["Apply transpose"]
Transpose -- "check errors" --> ErrorCheck["Enhanced error results"]
ErrorCheck -- "assert zero errors" --> Save["Save panel and cleanup"]
```
<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>visualise.js</strong><dd><code>Enrich dashboard error
check return payload</code>
</dd></summary>
<hr>
tests/ui-testing/pages/dashboardPages/visualise.js
<ul><li>Extend error result object.<br> <li> Include
<code>errorTextCount</code> and <code>errorListCount</code>.<br> <li>
Preserve existing no-error logic.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8570/files#diff-c14ac1db3e4aa86190d7525e8e38c410bcbbae7f46b01890e74937cc11be67e6">+2/-2</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>dashboard-transpose.spec.js</strong><dd><code>New E2E
test: transpose with custom SQL</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/dashboards/dashboard-transpose.spec.js
<ul><li>Add test for transpose with custom SQL.<br> <li> Configure
fields, time range, and transpose.<br> <li> Use enhanced error counts
for assertions.<br> <li> Save and cleanup created dashboard.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8570/files#diff-da631007cea76a4bc59e4acd1195b59ae4131cd5208d21a9c1f94d3913911dc4">+88/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
fab37bafb2 | feat: support index optimizer topn asc (#8630) | ||
|
|
1a8e749cac | feat: support match_all for multi stream (#8608) | ||
|
|
8894c23261 |
fix: config load at top and ensure otlp url is set (#8627)
### **PR Type**
Bug fix, Enhancement
___
### **Description**
- Load CLI/config before any get_config
- Enforce OTLP URL presence for tracing
- Add anyhow::ensure for validation
- Reorder CLI mode execution flow
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Program start"] -- "run CLI to load config" --> B["Config loaded from file/env"]
B -- "proceed if not CLI-only" --> C["Initialize services (logging, profiling)"]
C -- "enable_tracing()" --> D["Validate OTLP URL"]
D -- "missing URL -> error" --> E["Fail early"]
D -- "URL present" --> F["Setup tracer provider"]
```
<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>main.rs</strong><dd><code>Early config loading and OTLP
URL validation</code>
</dd></summary>
<hr>
src/main.rs
<ul><li>Run CLI/config loading at program start.<br> <li> Remove later
duplicate CLI early-return block.<br> <li> Require
<code>otel_otlp_url</code> if gRPC URL empty.<br> <li> Import and use
<code>anyhow::ensure</code> for validation.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8627/files#diff-42cb6807ad74b3e201c5a7ca98b911c5fa08380e942be6e4ac5807f8377f87fc">+16/-5</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
ac966225ce |
fix: Add CC0-1.0 license to allow list (#8626)
### **User description**
# PR Type
Fix
# Description
cargo builds were failing on the license checking. Reason being the zip
crate needed a sub dependency `ppmd-rust` which is CC0-1.0 which wasn't
explicitly listed in the allowed licenses. This broke builds. We are
adding it back ti fix this.
___
### **PR Type**
Bug fix, Configuration changes
___
### **Description**
- Allow CC0-1.0 in license policy
- Unblocks cargo license checks
___
### Diagram Walkthrough
```mermaid
flowchart LR
deny["deny.toml license allowlist"] -- "add" --> cc0["CC0-1.0"]
cc0 -- "permits" --> cargo["Cargo license check passes"]
```
<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>deny.toml</strong><dd><code>Add CC0-1.0 to allowed
licenses</code>
</dd></summary>
<hr>
deny.toml
<ul><li>Added <code>CC0-1.0</code> to <code>allow</code> licenses
list.<br> <li> Keeps existing allowed licenses unchanged.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8626/files#diff-1040309c64844eb1b6b63d8fd67938adbf9461f1b3c61f12cf738f064a02d3de">+1/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
fad1692855 |
fix: do not allow select * query with share link (#8565) (#8568)
### **User description** fix #8565 ___ ### **PR Type** Bug fix, Enhancement ___ ### **Description** - Block SELECT * queries in visualization - Respect SQL vs builder modes for query source - Display user-friendly error notification - Guarded by quick mode configuration flag ___ ### Diagram Walkthrough ```mermaid flowchart LR A["Toggle visualization"] -- "determine query source" --> B["Build or read SQL"] B -- "quick mode enabled?" --> C["Check SELECT * pattern"] C -- "is SELECT *" --> D["Show error notification"] C -- "not SELECT *" --> E["Proceed to extract fields"] ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Bug fix</strong></td><td><table> <tr> <td> <details> <summary><strong>Index.vue</strong><dd><code>Add guard against SELECT * for visualization</code> </dd></summary> <hr> web/src/plugins/logs/Index.vue <ul><li>Determine SQL from builder or raw mode.<br> <li> Detect simple SELECT * queries in quick mode.<br> <li> Block visualization and notify on invalid query.</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/8568/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+21/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
980949392a |
fix: alert module code splitting (#8611)
### **User description** add alert module splitting into util files ___ ### **PR Type** Enhancement, Tests ___ ### **Description** - Extract alert logic into utils modules - Refactor AddAlert to use utilities - Add SQL/where/query builder helpers - Update tests to new utilities ___ ### Diagram Walkthrough ```mermaid flowchart LR AddAlertVue["AddAlert.vue (component)"] -- uses --> alertQueryBuilder["utils/alerts/alertQueryBuilder.ts"] AddAlertVue -- uses --> alertPayload["utils/alerts/alertPayload.ts"] AddAlertVue -- uses --> alertValidation["utils/alerts/alertValidation.ts"] AddAlertVue -- uses --> alertDataTransforms["utils/alerts/alertDataTransforms.ts"] AddAlertVue -- uses --> alertSqlUtils["utils/alerts/alertSqlUtils.ts"] AddAlertSpec["AddAlert.spec.ts"] -- import --> alertQueryBuilder validateAlertsSpec["utils/validateAlerts.spec.ts"] -- import --> alertValidation ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>AddAlert.spec.ts</strong><dd><code>Tests use extracted generateWhereClause utility</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8611/files#diff-84362398fea8abd9acf30f4f40ba8d4cf27348677454017bd4e6f568d5176ac6">+13/-9</a> </td> </tr> <tr> <td><strong>validateAlerts.spec.ts</strong><dd><code>Point validation tests to new module path</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8611/files#diff-8ba923d1b6e78fb3134f2775e51fce66e5171bcfb001fcac4837639313c55b4a">+1/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>7 files</summary><table> <tr> <td><strong>alertDataTransforms.ts</strong><dd><code>New FE/BE condition transform and group ops</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8611/files#diff-7db039e3a78f8c5306c84382f42b071f680cf4f18f84d17cedcc8d484a8b113f">+116/-0</a> </td> </tr> <tr> <td><strong>alertPayload.ts</strong><dd><code>New payload build and save alert helpers</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8611/files#diff-914546afcdb9f9604ad6efe448d8b373fa3f24be1ba7cbc75bd18bf8c419ab3c">+211/-0</a> </td> </tr> <tr> <td><strong>alertQueryBuilder.ts</strong><dd><code>New SQL and WHERE clause builder utilities</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8611/files#diff-5c829ce5fd3ad2f5ef359df5976e6adfc52eaa6b5f249f594c8b8a588acf8b3e">+204/-0</a> </td> </tr> <tr> <td><strong>alertSqlUtils.ts</strong><dd><code>New SQL parser wrapper for column checks</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8611/files#diff-fea836214c2a77154fb97a519b6fa4bd0315acbffb9b3d7d94738bf073d5eabd">+33/-0</a> </td> </tr> <tr> <td><strong>alertValidation.ts</strong><dd><code>Consolidated alert validation and JSON save flow</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8611/files#diff-3164a4a58c1865cfcbbba084ac339664c99564545be4d57504dd406d59d8ad4a">+649/-0</a> </td> </tr> <tr> <td><strong>AddAlert.vue</strong><dd><code>Refactor to use new alert utils modules</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8611/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+110/-681</a></td> </tr> <tr> <td><strong>ScheduledAlert.vue</strong><dd><code>UI tweaks and cleanup of unused logic</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8611/files#diff-5e143a17ab0fa5d7817f6d9301667fb5597236f27184248c7a71728e85b8d999">+22/-165</a></td> </tr> </table></details></td></tr><tr><td><strong>Miscellaneous</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>validateAlerts.ts</strong><dd><code>Remove legacy validation (replaced by utils)</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8611/files#diff-31dfccb7ecf243d062992787997f3e29b26579144def6a562e7f138cf3a73ed6">+0/-313</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
10e9c4b80b |
chore: bump crate versions (#8593)
### **User description** - `cloudevents-sdk`: v0.7.0 -> v0.8.0 - `env_logger`: v0.10 -> v0.11.8 - `hashbrown`: v0.15 -> v0.16.0 - `itertools`: v0.13 -> v0.14 - `md5`: v0.7.0 -> v0.8.0 - `ordered-float`: v4.5.0 -> v5.0.0 - `rand`: v0.8 -> v0.9.2 - `strum`: v0.26 -> v0.27 - `sysinfo`: v0.33 -> v0.37 - `x509-parser`: v0.17.0 -> v0.18.0 Also remove `getrandom` from dependencies |
||
|
|
f6bc5ef6f6 |
fix: consider all fts fields to ignore for distinct values (#8601)
### **User description**
Consider all fts fields including env specified fts fields for ignoring
in distinct field setup
___
### **PR Type**
Bug fix
___
### **Description**
- Exclude all FTS fields from distinct setup
- Use global and per-stream FTS sources
- Add config constant checks for FTS fields
- Centralize FTS retrieval via schema helper
___
### Diagram Walkthrough
```mermaid
flowchart LR
CFG["SQL_FULL_TEXT_SEARCH_FIELDS (config)"]
SCH["get_stream_setting_fts_fields (schema)"]
MIG["migration/dashboards.rs"]
SVCDB["service/dashboards/mod.rs"]
SVCSTR["service/stream.rs"]
CFG -- "global FTS list" --> MIG
SCH -- "resolve stream FTS" --> MIG
SCH -- "resolve stream FTS" --> SVCDB
SCH -- "resolve stream FTS" --> SVCSTR
MIG -- "skip FTS in distinct" --> Distinct["Distinct setup"]
SVCDB -- "skip FTS in distinct" --> Distinct
SVCSTR -- "skip FTS in distinct" --> Distinct
```
<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>dashboards.rs</strong><dd><code>Ignore global and
stream FTS in migration distincts</code>
</dd></summary>
<hr>
src/migration/dashboards.rs
<ul><li>Import <code>SQL_FULL_TEXT_SEARCH_FIELDS</code> and
<code>get_stream_setting_fts_fields</code><br> <li> Skip adding distinct
fields if in global or stream FTS<br> <li> Preserve existing reserved
field checks</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8601/files#diff-eba7ddaafafa0efbc35474fd19af320f0cce754dc6048bf4ce3d9ff3f22358b1">+6/-3</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>mod.rs</strong><dd><code>Use unified FTS set when
updating dashboard distincts</code>
</dd></summary>
<hr>
src/service/dashboards/mod.rs
<ul><li>Import <code>SQL_FULL_TEXT_SEARCH_FIELDS</code> and schema FTS
helper<br> <li> Use <code>get_stream_setting_fts_fields</code> to filter
FTS<br> <li> Continue ignoring reserved fields like timestamp and
count</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8601/files#diff-6ae9e22ced40c50675dde5348b8d696f6559655bbbded915d7e6e88bf64b71a6">+9/-5</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>stream.rs</strong><dd><code>Centralize FTS filtering in
stream settings update</code>
</dd></summary>
<hr>
src/service/stream.rs
<ul><li>Import <code>get_stream_setting_fts_fields</code><br> <li>
Precompute FTS set from settings<br> <li> Skip distinct additions if in
FTS or newly added FTS</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8601/files#diff-41452a7fb29b4634437174fd6aecf6a9050dbfdef41b9077a21d59af3d79e9ed">+5/-5</a>
</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>
|
||
|
|
3dde03ec9f |
fix: update quick_mode parameter handling in logs URL based on configuration for drilldown and go to logs in dashboard (#8586)
### **PR Type**
Bug fix
___
### **Description**
- Respect `quick_mode_enabled` in logs URL
- Apply to drilldown and go-to-logs flows
- Minor watch formatting cleanup
___
### Diagram Walkthrough
```mermaid
flowchart LR
Config["zoConfig.quick_mode_enabled"]
Builder1["PanelContainer: build logs URL"]
Builder2["PanelSchemaRenderer: build logs URL"]
URLParam["Set quick_mode=true/false"]
Format["Refactor watch() formatting"]
Config -- controls --> Builder1
Config -- controls --> Builder2
Builder1 -- sets --> URLParam
Builder2 -- sets --> URLParam
PanelSchemaRenderer --> Format
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>PanelContainer.vue</strong><dd><code>Conditional
quick_mode in logs URL construction</code>
</dd></summary>
<hr>
web/src/components/dashboards/PanelContainer.vue
<ul><li>Set <code>quick_mode</code> based on
<code>zoConfig.quick_mode_enabled</code>.<br> <li> Remove unconditional
<code>quick_mode=false</code>.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8586/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d">+5/-2</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>PanelSchemaRenderer.vue</strong><dd><code>Apply
config-driven quick_mode and tidy watchers</code>
</dd></summary>
<hr>
web/src/components/dashboards/PanelSchemaRenderer.vue
<ul><li>Set <code>quick_mode</code> based on
<code>zoConfig.quick_mode_enabled</code>.<br> <li> Keep histogram
hidden; preserve other params.<br> <li> Reformat watch() for
readability.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8586/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+12/-5</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
803154ef4b |
fix: import issue due to refactoring on visualization (#8591)
### **PR Type**
Bug fix, Enhancement
___
### **Description**
- Replace deprecated logs composable imports
- Switch to `useSearchStream` and `searchState`
- Update imports to new module paths
- Adjust usage to new APIs
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["VisualizeLogsQuery.vue"] --> B["Remove useLogs import"]
A --> C["Import useSearchStream"]
A --> D["Import searchState"]
A --> E["Use searchState().searchObj"]
A --> F["Use useSearchStream().buildSearch"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>VisualizeLogsQuery.vue</strong><dd><code>Migrate logs
search to new composables</code>
</dd></summary>
<hr>
web/src/plugins/logs/VisualizeLogsQuery.vue
<ul><li>Remove <code>useLogs</code> import and usage.<br> <li> Import
<code>useSearchStream</code> for <code>buildSearch</code>.<br> <li>
Import <code>searchState</code> to access <code>searchObj</code>.<br>
<li> Update variable initializations to new composables.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8591/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+4/-2</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
c2b7b2c728 | feat: support index optimizer for join/subuqery in multi stream (#8575) | ||
|
|
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>
</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>
___
|
||
|
|
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> </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> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
|
||
|
|
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>
</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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Yashodhan Joshi <yashodhan@openobserve.ai>
|
||
|
|
4a182220d2 | chore: upgrade datafusion to v50.0.0 (#8526) | ||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
|
||
|
|
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 |
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>IndexList.vue</strong><dd><code>Propagate trace id from
UI to service</code>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>jwt.rs</strong><dd><code>Emit keyevent telemetry on
user registration</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>billings.rs</strong><dd><code>Add keyevent telemetry
for subscription start</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>marketing.rs</strong><dd><code>Add keyevent telemetry
for attribution events</code>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>cloud.rs</strong><dd><code>Add keyevent telemetry to
no-ingestion job</code>
</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>
</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>
</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>
</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>
|
||
|
|
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> </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> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
|
||
|
|
692fda2110 | fix: search parquet for wal (#8558) | ||
|
|
83663f6fa7 | fix: orphaned database entries (#8557) | ||
|
|
24bc37a80e | feat: remove grpc call for get result cache also improve RW logic (#8246) | ||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>logsDownloads.spec.js</strong><dd><code>Consolidate and
expand logs download tests</code>
</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>
___
|
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
3d89ee5044 | perf: perpare support tantivy optimizer for join/subuqery in single stream (#8532) | ||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
ac3f257c69 | fix: make ./data/download folder default for report server chrome download (#8209) | ||
|
|
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> </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> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8464/files#diff-cb1eb3e74723d891353ccf1e2e5e0d246d2e78a5e69dbe4c73006ea8412d65e0">+16/-2</a> </td> </tr> <tr> <td><strong>config.rs</strong><dd><code>Config loading via path, hashing, and watcher interval</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8464/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+44/-3</a> </td> </tr> <tr> <td><strong>config_path_manager.rs</strong><dd><code>New config path and hash manager</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8464/files#diff-20874a97fbe99ee6fd692896482ad236916c5f813c3857f824fe0ff6e8afd72a">+64/-0</a> </td> </tr> <tr> <td><strong>lib.rs</strong><dd><code>Export config path manager module</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8464/files#diff-c1f72c148113548ea854a05d09e3576632fcd7367279563bf3f42f0aef5454e2">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Refactor enterprise config reload helper</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8464/files#diff-ca09c9c9b020049bdbc3382c466bfcca80daac92e98760d9a9a76172abf34049">+8/-3</a> </td> </tr> <tr> <td><strong>config_watcher.rs</strong><dd><code>Add periodic config file change watcher and reloader</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8464/files#diff-598ec79e0686bf314514227cf1f0b1dc560770b0e056761d6a214289d2eeb7f2">+94/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Wire up config watcher on job init</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8464/files#diff-f2e4c29b8eef22189ec704a832633c4bd135a24444f054864c98064bd0963681">+2/-0</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8464/files#diff-7e2dce7a3942789804bae659939c214c4eeb68d89315e23a08139214c339ea24">+3/-3</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
Co-authored-by: Subhra264 <chakrabortysubhradeep556@gmail.com>
|
||
|
|
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
|
||
|
|
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> </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-9bc2b1841504a435f66ad094f72ddbe7b7fa75e5e1557b8adbfe36f7f0592e1b">+1/-0</a>
</td>
</tr>
<tr>
<td><strong>responses.rs</strong><dd><code>Add alerts bulk enable
request/response models</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-224027f90893122eea28e35778467acf1a4b5572ce612fc9bc9ec44ca8ebd9fb">+12/-0</a>
</td>
</tr>
<tr>
<td><strong>pipelines.rs</strong><dd><code>Add pipelines bulk enable
request/response models</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-61bb28d7091130297c917a0530d96202fcb4b073b514410531f9fe71acfc814f">+12/-0</a>
</td>
</tr>
<tr>
<td><strong>mod.rs</strong><dd><code>Implement alerts bulk enable
endpoint with permissions</code> </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-83431801d27626ef27482e67b62661f900043544a45ddf958bd027cf2fa3bd8d">+91/-2</a>
</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>
</td>
</tr>
<tr>
<td><strong>utils.rs</strong><dd><code>Add generic enterprise resource
permission checker</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-96bb9f4a8f547c821f26c957e8505d0437095b08d2b36687531f71565d287bd6">+38/-0</a>
</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>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+2/-0</a>
</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>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-edb8ce232c0cd08366879f642788a75d99f6bab64b4c0e77391281fdb9241e90">+2/-0</a>
</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>
|
||
|
|
ff29e0c9c0 | fix: stream stats min_ts error (#8509) | ||
|
|
c2e8d73e65 | feat: implement broadcast join (#8506) | ||
|
|
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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8295/files#diff-b15a6adcb163dc27993c83528105a6726c44c86d8a84c5cf5d1d382c6ec8cc29">+22/-0</a> </td> </tr> <tr> <td><strong>ingest.rs</strong><dd><code>Report size before pipeline; avoid double counting</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8295/files#diff-e62118e45be183266d39ffa08491f255017954235ff0f3d6937683e314da406f">+13/-7</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8295/files#diff-5eca8995a88fcecb6d6b8efd3c7c4496f4a96a4b060fb4ed85593574f7cf49eb">+1/-1</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8295/files#diff-183498d98b17ddf344cbab4da6b2d9fe89ac81112db51655c142a89023b46ef3">+1/-0</a> </td> </tr> <tr> <td><strong>json.rs</strong><dd><code>Minor formatting; prep for pipeline handling</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8295/files#diff-506987e61095a54e47f7f208dad89f9f1bce595fa6bf1ba8a7d746f2b2ff6c4a">+1/-0</a> </td> </tr> <tr> <td><strong>prom.rs</strong><dd><code>Minor formatting; prep for pipeline handling</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8295/files#diff-c4e9e1d49a2bd0fefe67684b3768c4792be63cebcf727d71a48141f5b5957b8c">+1/-0</a> </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> |