mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-05 08:09:22 +00:00
24ac8ee0ffaaaae1e3d2156ba00e3f562f33427d
912
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
24ac8ee0ff |
fix: Add RBAC to the Alerts and Pipelines history endpoints and add tests (#8930)
# PR Type Feature/Fix # Description The pipelines history and alerts history endpoints are now covered by RBAC. Added basic e2e api test for the same endpoints. --------- Co-authored-by: Subhradeep Chakraborty <chakrabortysubhradeep556@gmail.com> |
||
|
|
098ee9d7d2 |
fix: dashboard panel re-position (#9016)
- #9020 --------- Co-authored-by: Kirtan Thakkar <kirtan@kiara.tech> |
||
|
|
a5ea45bd54 |
fix: fix middleware check (#8986)
There were few issues with the middleware, this attempts to fix it. --------- Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com> |
||
|
|
eedebaeec8 |
feat: enable dual reporting and add alert history UI
Changes alert trigger reporting behavior to write to both the originating organization and `_meta` org by default, with new UI for viewing history. **Backend:** - Change `ZO_USAGE_REPORT_TO_OWN_ORG` config default from `false` to `true` - Update alert history API to query organization's own `triggers` stream - Add comprehensive backend tests for history API and config **Frontend:** - Integrate history metrics into main alerts table (`Total Evaluations`, `Firing Count`) - Add alert details drawer showing properties and evaluation timeline - Display formatted timestamps, status badges, and performance metrics - Support click-outside and ESC key to close drawer - Add i18n translations for history-related labels This eliminates cross-org API calls for alert history while maintaining global monitoring capability in `_meta` org. |
||
|
|
c7ee02a9f1 |
fix: aggs cache ratio reporting (#8984)
Signed-off-by: loaki07 <rustyloaki@gmail.com> |
||
|
|
6b76fbf785 | feat: clear cache main (#8919) | ||
|
|
9492f23353 |
fix: add a middleware for blocked org checks (#8951)
This adds a midddleware for blocking the requests for invalid orgs before they reach the handler level. --------- Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com> |
||
|
|
1593db0e22 |
feat: skip aud validation for MCP-invoked requests
- Add `x-o2-mcp` header support for MCP request identification in token validator - Wrap OpenAPI schema types with `inline()` for better documentation generation - Update AI module imports to use new agent namespace - fix compilation for `cloud` feature, also return early if user isn't in trial - Enable service graph by default |
||
|
|
8bd7b62672 |
fix: Alert and Pipelines history recovery + Pagination fix + View fixes (#8935)
# PR type fix/enchancement # Description The pagination issue with alerts and pipeline history is fixed - now works as normally expected. A few elements of the views were improved with better choices of representation. A previous PR about styling changes has removed the Pipelines History related changes partially. This was recovered and restored to functional state while also taking in the styling changes. --------- Co-authored-by: Bhargav <BJP232004@GMAIL.COM> |
||
|
|
ad74be0b9e | fix: cloud build (#8938) | ||
|
|
196512057c |
feat: log patterns (#8927)
PR introduces below features: - [x] Reporting triggers to source org - [x] Alerts Insights for detailed visibility in alerts Enterprise features: - [x] Patterns extraction during query - UI and API - [x] Patterns extraction as part of ingestion process (No Sampling today) - [x] Settings to enable pattern extraction --------- Co-authored-by: omkark06 <omkar@zinclabs.io> |
||
|
|
b267159579 |
feat: adding built-in regex patterns (#8827)
### **PR Type**
Enhancement, Documentation
___
### **Description**
- Add built-in regex patterns fetch API
- Introduce GitHub data service with caching
- Handle duplicate pattern names gracefully
- UI to browse and import built-ins
___
### Diagram Walkthrough
```mermaid
flowchart LR
cfg["Config: regex_patterns_source_url"] -- used by --> ghsvc["GitHubDataService"]
ghsvc -- fetch_json/cache --> adapter["PyWhatAdapter.fetch_built_in_patterns"]
adapter -- returns --> api["GET /api/{org}/re_patterns/built-in"]
api -- consumed by --> websvc["web regexPatterns.getBuiltInPatterns()"]
websvc -- powers --> ui["BuiltInPatternsTab.vue"]
ui -- import selected --> importFlow["ImportRegexPattern.vue"]
importFlow -- create --> dbsvc["db::re_pattern::add (duplicate-safe)"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><details><summary>3 files</summary><table>
<tr>
<td><strong>config.rs</strong><dd><code>Add source URL for built-in
regex patterns</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+6/-0</a>
</td>
</tr>
<tr>
<td><strong>mod.rs</strong><dd><code>Register built-in patterns and
reorder routes</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+2/-2</a>
</td>
</tr>
<tr>
<td><strong>mod.rs</strong><dd><code>Export github service
module</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-1b15316505c31acccb26ba66d920fdb0894567d08d2bf1e3457716d128a67b83">+1/-0</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>10
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>New endpoint to fetch built-in
patterns and improved save response</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-27d37a8738de89c81b540daa978e684caf2cf28803e1208d90cb4d42528ed28b">+103/-4</a>
</td>
</tr>
<tr>
<td><strong>re_pattern.rs</strong><dd><code>Add duplicate-safe creation
with auto-suffix names</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-0cb2bf6d550d07b66db7e325c6d44c6a598f2ac8e315bf9e168f4a1d9d6e745d">+47/-17</a>
</td>
</tr>
<tr>
<td><strong>mod.rs</strong><dd><code>Add adapters module export for
pattern formats</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-3a24aa67600735383b8b94a435974dc9b2677b6bb3f5fb502fb7d617af8bdec0">+20/-0</a>
</td>
</tr>
<tr>
<td><strong>pywhat.rs</strong><dd><code>Implement generic pattern
adapter and filters</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-9ecd12df46c16fca3984bc46122a26568db208839f904e0b216185df43e13e08">+264/-0</a>
</td>
</tr>
<tr>
<td><strong>cache.rs</strong><dd><code>Introduce in-memory cache with
eviction and stats</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-09bcde8f6abf0cbf88628e1e6e7290e9fde7655c7903569902bf28742e958326">+130/-0</a>
</td>
</tr>
<tr>
<td><strong>client.rs</strong><dd><code>Add GitHub data client with
retry and caching</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-20a335d645493f38003faf7303124a6e85c3c2dfd765e148811aebee1ebfd890">+246/-0</a>
</td>
</tr>
<tr>
<td><strong>types.rs</strong><dd><code>Define service config, errors,
and cache types</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-35becfa9ecfcd7711485f645f09a3fe2429231d0c351f0374f20f121225fbaae">+119/-0</a>
</td>
</tr>
<tr>
<td><strong>regex_pattern.ts</strong><dd><code>Add client method to
fetch built-in patterns</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-2a0b0828141d39ab0385e0941314ead1cdd2ec3ec7b3baf5fd0c42f8f010728a">+18/-0</a>
</td>
</tr>
<tr>
<td><strong>BuiltInPatternsTab.vue</strong><dd><code>New UI to search,
filter, preview, import patterns</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-0747e124429b322a69f6ae0117ec635044059bd48fb03e90b2328aa1f79b8b28">+451/-0</a>
</td>
</tr>
<tr>
<td><strong>ImportRegexPattern.vue</strong><dd><code>Integrate built-in
tab and import flow updates</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-e8e1bcb5a02311504d7d571090eab27a270aaa71cae185ad2703023e2e70a31e">+94/-36</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>3
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Expose GitHub service modules and
types</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-90a3518cd7c8b2a8b2a2093535b64a3dc4e6ffead41e5dca7901521e0c0ba910">+39/-0</a>
</td>
</tr>
<tr>
<td><strong>.env.example</strong><dd><code>Document regex patterns
source URL env var</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-a3046da0d15a27e89f2afe639b25748a7ad4d9290af3e7b1b6c1a5533c8f0a8c">+6/-1</a>
</td>
</tr>
<tr>
<td><strong>en.json</strong><dd><code>Add i18n strings for built-in
patterns UI</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+17/-1</a>
</td>
</tr>
</table></details></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
|
||
|
|
dd11cb4dae |
feat: removed http api from ui and add multistream search v2 (#8735)
Removed HTTP API support from the UI. The backend API will remain unchanged, and the UI will now communicate exclusively through the streaming API. --------- Co-authored-by: omkark06 <omkar@zinclabs.io> Co-authored-by: udev <uddhavdave1@gmail.com> Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech> Co-authored-by: hengfeiyang <hengfei.yang@gmail.com> Co-authored-by: ByteBaker <42913098+ByteBaker@users.noreply.github.com> Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech> Co-authored-by: ktx-akshay <akshay.patil@kiara.tech> |
||
|
|
1aba9c5169 |
feat: Pipeline history endpoint and views composed on _meta org's triggers stream contents. (#8902)
# PR Type Enhancement # Description Implements a complete Pipeline History feature that allows users to view and analyse execution history of pipelines, mirroring the existing Alert History functionality. --------- Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> |
||
|
|
83f2213847 |
fix: check ingestion allowed before parsing the request (#8900)
Currently we first parse the request body, and then check if the ingestion is allowed for given org (in case of cloud, for trial period) . However, if the ingestion is not allowed, we shouldn't even spend cpu and mem for parsing the request, and instead reject it with 429 right away. This will also clean up our logs a bit, as right now there are many req, which have invalid body, and log that error, however even if they had a valid body structure, they would be rejected because trial period expiry. With this PR, the logs would be reduced for such kind of requests. Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com> |
||
|
|
4715205654 |
feat: add OpenAPI documentation and rate limiting to service graph endpoints
- Add Utoipa path documentation for get_service_graph_metrics endpoint - Add Utoipa path documentation for get_store_stats endpoint - Add rate limiting via x-o2-ratelimit extension (module: Traces) - Register both endpoints in OpenAPI configuration for Swagger UI - Include detailed response examples and parameter descriptions |
||
|
|
e4e7274ec8 |
feat: add service graph as enterprise-only feature
Service graph automatically discovers service topology from distributed traces. OSS includes: - API routing endpoints (gated with enterprise feature flag) - UI components (functional only with enterprise backend) - Configuration options Enterprise includes: - 256-shard concurrent edge store with LRU eviction - Span matching and processing logic - Prometheus metrics and background workers |
||
|
|
f56b2b8f17 | fix: metrics can't search parquet in wal (#8896) | ||
|
|
d360151332 | fix: metrics data duplicate when compact (#8888) | ||
|
|
b00444102c |
feat: Alerts History api and the front end! (#8894)
# PR Type
Enhancement
# Description
This PR implements a comprehensive Alert History view for OpenObserve,
providing users with detailed visibility into alert execution history.
The feature includes a dedicated history page accessible from the alerts
list, complete with advanced filtering, search capabilities, and
detailed execution logs.
### Features Implemented
#### 1. **New Alert History Backend Endpoint**
(`/api/{org_id}/alerts/history`)
- Created new Rust handler at
`/src/handler/http/request/alerts/history.rs`
- Queries the `_meta` organization's triggers stream for alert execution
data
- Supports query parameters:
- `alert_name`: Filter by specific alert
- `start_time` & `end_time`: Time range in microseconds
- `from` & `size`: Pagination support (max 1000 records)
- Returns comprehensive execution details including status, timing,
errors, and performance metrics
#### 2. **Alert History Vue Component**
(`/web/src/components/alerts/AlertHistory.vue`)
- Full-featured table view with server-side pagination
- Column display for: Timestamp, Alert Name, Status, Type, Silenced
state, Duration, Retries, Errors, and Actions
- Smart status indicators with color-coded chips
- Responsive design with dark/light theme support
#### 3. **Advanced Search Functionality**
- **Dropdown with type-ahead search**: Users can select from existing
alerts or type custom names
- **Manual search button**: Reduces backend load by eliminating
automatic API calls
- **Debounced search removed**: Prevents excessive API requests while
typing
- Fetches alert list using the same pattern as AlertList.vue for
consistency
#### 4. **DateTime Picker Integration**
- Properly integrated DateTime component (replaced incorrect
DateTimePicker)
- Supports both relative (15m, 1h, 1d, etc.) and absolute date selection
- Default time range: Last 15 minutes
- Time values correctly handled in microseconds for API compatibility
#### 5. **Alert Details Modal**
- Non-maximized modal dialog (700px width, 80vw max)
- Organized sections with visual separators:
- Basic Information (name, status)
- Time Information (timestamp, duration)
- Alert Configuration (type, silenced state)
- Performance Metrics (evaluation time, query time, retries)
- Error/Success details with syntax highlighting
- Scrollable content with custom styled scrollbars
- Professional UI with icons and proper typography hierarchy
#### 6. **Navigation Integration**
- Added "Alert History" button to AlertList.vue with history icon
- Proper routing configuration at `/alerts/history`
- Back navigation to alerts list
- Organization-scoped data with automatic refresh on org change
<img width="1728" height="1080" alt="Screenshot 2025-10-28 at 10 18
12 AM"
src="https://github.com/user-attachments/assets/c4aa13a5-b6e1-4903-92aa-595b8d1c519c"
/>
<img width="1728" height="1080" alt="Screenshot 2025-10-28 at 10 18
42 AM"
src="https://github.com/user-attachments/assets/94f01621-607d-42a5-a692-c0210172e4e6"
/>
<img width="1728" height="1080" alt="Screenshot 2025-10-28 at 10 19
08 AM"
src="https://github.com/user-attachments/assets/5b6ca7f2-37af-4268-baaa-993dff8ea350"
/>
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
||
|
|
0c8438db57 |
fix: increase no. of grid columns for dashboard panel (#8459)
### **User description** - #8460 - Increase no. of columns in the grid from 48 to 192 columns per row. - Decrease cellHeight from `34px` to `17px`. ### **PR Type** Enhancement ___ ### **Description** - Add dashboard schema version v6 - Extend API/DB handling for v6 - Migrate FE grid to 192 columns - Add v5→v6 layout width migration ___ ### Diagram Walkthrough ```mermaid flowchart LR FE["Frontend grid 48→192 cols"] -- "w,x scaled x4" --> MIG["Migration v5→v6"] MIG -- "version=6" --> API["API accepts/returns v6"] API -- "serde + routing" --> META["Meta dashboards v6 structs"] META -- "persist/load v6" --> DB["Infra table serialization"] ``` <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>mod.rs</strong><dd><code>Wire Dashboard v6 into meta model</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-5bf716db7e1d91dfbd427a2e320ce407c4f0c92d55d68f8e636daed1b02abd56">+24/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Introduce full v6 dashboard schema</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-4390c1715a037aea58be340f8b34c1293fd4ea8911851d17384ed700440077c3">+675/-0</a> </td> </tr> <tr> <td><strong>dashboards.rs</strong><dd><code>API models support and parse v6</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-250eeebeec9d4ac0ac271466ed83cd33fea3f121080491b340dc95d9af287259">+11/-2</a> </td> </tr> <tr> <td><strong>dashboards.rs</strong><dd><code>Persist/load v6 dashboards in DB</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-edd90c6ec720f676311aa31a635f954d559e63582f0b4c39cb9206bfb095737b">+12/-2</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Variables extraction supports v6</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-6ae9e22ced40c50675dde5348b8d696f6559655bbbded915d7e6e88bf64b71a6">+5/-1</a> </td> </tr> <tr> <td><strong>commons.ts</strong><dd><code>Default panel layout width to 96 cols</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-17cb74f8142984fc46bbfecdeaacccc118fd5d4ab7f040a55695caaa309d104f">+2/-2</a> </td> </tr> <tr> <td><strong>convertDashboardSchemaVersion.ts</strong><dd><code>Current schema v6 and v5→v6 migration</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-b7ba5dff91b00365f729648ca24a8dfc70bd74e803300da81e5b89d29ed42c9e">+13/-1</a> </td> </tr> <tr> <td><strong>RenderDashboardCharts.vue</strong><dd><code>GridStack columns increased to 192</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-313f7c69102161242c893c863c50f1f1cd1fc19b68b5c99bf840b4b5c72f0f2e">+1/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Formatting</strong></td><td><details><summary>5 files</summary><table> <tr> <td><strong>mod.rs</strong><dd><code>Init super Dashboard with v6 None</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-412e639b6e6e1d2a5571773c03c159462976db4f3b891fe326937779572aeec4">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Init super Dashboard with v6 None</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-997402d8930b95aa77124bc72920e3c7ff746286d605c94bf3fb7fe1aec62aa8">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Init super Dashboard with v6 None</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-84b6c5b1ecc108223434a008e1e382d4cc494668a12b6ac22ab457a72e308dd4">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Init super Dashboard with v6 None</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-63a64145239e03a59debc87c63764d425a36746d00f1bd6563ce2be1847b1213">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Init super Dashboard with v6 None</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-da49585bbcb02bf0f737bb68739ebc248edd15c7ad9427c0e68f7728bb4a8c17">+1/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ ___ ### **PR Type** Enhancement ___ ### **Description** - Add dashboard schema version v6 - Support v6 across API and DB - Migrate grid from 48 to 192 cols - FE migration scales layout x4 ___ ### Diagram Walkthrough ```mermaid flowchart LR V5["Dashboard v5 schema"] -- "migrate (x4 w,x)" --> V6["Dashboard v6 schema"] V6 -- "serde + hashing" --> META["Meta model supports v6"] META -- "persist/load v6" --> DB["DB table adapters"] FE["Frontend grid 48→192"] -- "GridStack column=192" --> UI["Panel layout behavior"] API["HTTP models/parsing"] -- "routes v1..v6" --> META ``` <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>13 files</summary><table> <tr> <td><strong>mod.rs</strong><dd><code>Wire v6 into dashboard meta model</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-5bf716db7e1d91dfbd427a2e320ce407c4f0c92d55d68f8e636daed1b02abd56">+24/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Initialize v6 None in root wrapper</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-412e639b6e6e1d2a5571773c03c159462976db4f3b891fe326937779572aeec4">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Initialize v6 None in root wrapper</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-997402d8930b95aa77124bc72920e3c7ff746286d605c94bf3fb7fe1aec62aa8">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Initialize v6 None in root wrapper</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-84b6c5b1ecc108223434a008e1e382d4cc494668a12b6ac22ab457a72e308dd4">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Initialize v6 None in root wrapper</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-63a64145239e03a59debc87c63764d425a36746d00f1bd6563ce2be1847b1213">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Initialize v6 None in root wrapper</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-da49585bbcb02bf0f737bb68739ebc248edd15c7ad9427c0e68f7728bb4a8c17">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Introduce dashboard schema v6 structures</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-4390c1715a037aea58be340f8b34c1293fd4ea8911851d17384ed700440077c3">+675/-0</a> </td> </tr> <tr> <td><strong>dashboards.rs</strong><dd><code>API models/routes support v6 dashboards</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-250eeebeec9d4ac0ac271466ed83cd33fea3f121080491b340dc95d9af287259">+11/-2</a> </td> </tr> <tr> <td><strong>dashboards.rs</strong><dd><code>Persist and load v6 in DB layer</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-edd90c6ec720f676311aa31a635f954d559e63582f0b4c39cb9206bfb095737b">+12/-2</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Variable extraction supports v6</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-6ae9e22ced40c50675dde5348b8d696f6559655bbbded915d7e6e88bf64b71a6">+5/-1</a> </td> </tr> <tr> <td><strong>commons.ts</strong><dd><code>Default new panel width and bounds x4</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-17cb74f8142984fc46bbfecdeaacccc118fd5d4ab7f040a55695caaa309d104f">+2/-2</a> </td> </tr> <tr> <td><strong>convertDashboardSchemaVersion.ts</strong><dd><code>FE migration v5→v6 scale layout x4</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-b7ba5dff91b00365f729648ca24a8dfc70bd74e803300da81e5b89d29ed42c9e">+13/-1</a> </td> </tr> <tr> <td><strong>RenderDashboardCharts.vue</strong><dd><code>GridStack columns increased to 192</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8459/files#diff-313f7c69102161242c893c863c50f1f1cd1fc19b68b5c99bf840b4b5c72f0f2e">+1/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
001d444521 |
feat: alert dedup (#8884)
### **PR Type** Enhancement, Tests ___ ### **Description** - Introduce alert deduplication feature - Persist dedup state and migration - API/UI support for dedup config - Scheduled cleanup job added ___ ### Diagram Walkthrough ```mermaid flowchart LR Config["Config: DeduplicationConfig + grouping"] -- "exposed in Alert" --> API["HTTP Models: Alert.deduplication"] API -- "persist/read" --> Infra["Infra: alerts table cols + dedup_state table"] Infra -- "migration + entity" --> DB["DB Schema v11"] Scheduler["Scheduler handlers"] -- "apply_deduplication()" --> Service["Service: alerts/deduplication"] Service -- "fingerprint + state" --> Infra Job["Background job"] -- "cleanup_expired_state" --> Service UI["Web UI: form + i18n"] -- "bind Alert.deduplication" --> API ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Configuration changes</strong></td><td><details><summary>3 files</summary><table> <tr> <td><strong>config.rs</strong><dd><code>Bump DB schema version to 11</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+1/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Wire enterprise-only dedup migration</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+7/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Gate deduplication module behind enterprise feature</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-ba9b65130898444f7815fd6068bdb0dc590612f74cc893f79d91b0afc44cc851">+2/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>15 files</summary><table> <tr> <td><strong>alert.rs</strong><dd><code>Add optional deduplication to Alert model</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-45c7eaf1a764ab52f3e014fe0555c03dc59d77c5ce974684cdee4ed90463a234">+4/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Export deduplication module</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-308ddd8764236c9a75da9ba7742843ee096f34a126306a58a1e695c1ee148fe5">+1/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Expose deduplication in HTTP Alert model mappings</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-7937de550cb8784a6c3beca0689c8a88508c4b93ecf441280f47e08f988d2a5a">+7/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Map dedup fields to DB and serialize config</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-238b8087501b1743c3c4608469596d431869f021e9bb30e9a058d1294229ee67">+29/-0</a> </td> </tr> <tr> <td><strong>alert_dedup_state.rs</strong><dd><code>New entity for deduplication state</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-f6ea59e731cb65769f76f5e3a092331e433d73cfb55589861c7cd4fc415744dc">+85/-0</a> </td> </tr> <tr> <td><strong>alerts.rs</strong><dd><code>Add dedup columns to alerts entity</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-a3e9c7993f95c9f2414e5da12d12f5f60422ac927c105f32141e4854f0e7179a">+3/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Register alert_dedup_state entity</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-c539d7557d1425986d5c09849d8dbca42d1b309c2bc33d49db641d6a783098f6">+1/-0</a> </td> </tr> <tr> <td><strong>m20251024_000001_add_alert_deduplication.rs</strong><dd><code>Migration: add dedup columns and state table</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-5146fa66b9b2805cd19d8a0fe363976a5966d70132400e54e576f277c23c8d34">+245/-0</a> </td> </tr> <tr> <td><strong>alert_manager.rs</strong><dd><code>Add scheduled dedup state cleanup job</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-7e30858abad652a860186eb047347305488f52356112b1495dd53ce740316d7c">+55/-0</a> </td> </tr> <tr> <td><strong>deduplication.rs</strong><dd><code>Implement dedup logic, fingerprinting, cleanup</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-6073bba67ae904acb5f5b73104f84a81c13608f31aeb6558e9787da67efa03df">+975/-0</a> </td> </tr> <tr> <td><strong>handlers.rs</strong><dd><code>Apply deduplication before sending alerts</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-5eca8995a88fcecb6d6b8efd3c7c4496f4a96a4b060fb4ed85593574f7cf49eb">+49/-0</a> </td> </tr> <tr> <td><strong>alert.ts</strong><dd><code>Add deduplication to Alert interface</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-95f520d803aecbe4142e486037faf07124a5da245d504f0d11147bcb6a4c8918">+11/-0</a> </td> </tr> <tr> <td><strong>AlertsContainer.vue</strong><dd><code>UX: expand/collapse area clickable with hover</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-39b487d54970cff4a1ccdfbb49a4ccb38f7131bb9d30944ce1c6e86d3f818148">+12/-5</a> </td> </tr> <tr> <td><strong>DeduplicationConfig.vue</strong><dd><code>New UI for configuring alert deduplication</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-63eb39111409780e4dc064ea80056dfe096038ee76b389cdd8e9d14c0ae29a32">+401/-0</a> </td> </tr> <tr> <td><strong>ScheduledAlert.vue</strong><dd><code>Integrate dedup config into scheduled alerts (enterprise)</code></dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-5e143a17ab0fa5d7817f6d9301667fb5597236f27184248c7a71728e85b8d999">+13/-3</a> </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>deduplication.rs</strong><dd><code>New deduplication and grouping config with tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-ee8d9d671130757ae84ef01809003701d36e4cc90a1d1eca286d3af9a6def2ea">+183/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>en.json</strong><dd><code>i18n strings for deduplication UI</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8884/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+23/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
ca1ca8e169 |
chore: fix MCP endpoint routing and add OpenAPI documentation
- Fix .well-known/oauth-authorization-server endpoint to use /mcp prefix - Add MCP endpoints to OpenAPI spec - Add rate limiting configuration for all MCP endpoints with module name 'mcp' |
||
|
|
845dd1506e | perf: improve get_min_ts to reduce db calls (#8861) | ||
|
|
e850ea2f29 | fix: read user session from db if the cache is missing (#8846) | ||
|
|
bb725e94ee |
feat: add MCP OAuth 2.0 support and auth improvements
- Implement OAuth 2.0 Authorization Server Metadata endpoint (RFC 8414) - Add JWT token validation for MCP endpoints with dynamic clients - Add `WWW-Authenticate` header support for unauthorized responses - Add `AuthTokensExt::has_expired()` method for token validation - Refactor base64 decode to accept generic byte inputs - Update authentication flow to allow MCP users without DB records - Clippy delinting |
||
|
|
0c1268a230 |
feat: add hash replace feature in SDR (#8803)
Adds a config variable to control the length of hash UI changes to accomodate Hash pattern policy <img width="720" height="410" alt="image" src="https://github.com/user-attachments/assets/b99e28ec-2b7d-431e-9606-7b855df62f8d" /> <img width="2037" height="1112" alt="image (3)" src="https://github.com/user-attachments/assets/67432a01-c598-4b0a-830b-137a4cd04bf9" /> --------- Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
499de57b4f |
fix: return partial error for single partition on error and continue to (#8825)
### **User description** TODO: - [x] fix: return partial error for parqet file not found for single partition - [x] fix: result array skip vrl - [x] fix: values streaming api Ref: - https://github.com/openobserve/openobserve/pull/8500 - https://github.com/openobserve/openobserve/pull/8654 - https://github.com/openobserve/openobserve/pull/8760/commits/9f2bb94b695e3abdc051b7b52e5e357ea37b6921 ___ ### **PR Type** Bug fix ___ ### **Description** - Handle parquet not found error codes - Return partial results on partition errors - Improve DataFusion error string matching ___ ### Diagram Walkthrough ```mermaid flowchart LR DFErr["DataFusion error string"] -- detect "parquet not found"/"file not found" --> MapErr["Map to SearchParquetFileNotFound"] GRPCRespErr["gRPC do_get error"] -- parse JSON error code --> IsParquetNF["is_parquet_file_not_found"] IsParquetNF -- true or Cancelled/Deadline --> EmptyStream["Return empty stream with error"] EmptyStream -- continue --> RemainingPartitions["Process remaining partitions"] ``` <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>grpc.rs</strong><dd><code>Expand parquet not found detection in mapper</code> </dd></summary> <hr> src/infra/src/errors/grpc.rs <ul><li>Treat "parquet file not found" like "parquet not found".<br> <li> Map both to <code>SearchParquetFileNotFound</code> with logging.</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/8825/files#diff-211c5cb8fa12eac14c3637a43d74cd114034b8a6f6f8c1ead51e56efb54141cd">+1/-1</a> </td> </tr> </table></td></tr><tr><td><strong>Error handling</strong></td><td><table> <tr> <td> <details> <summary><strong>remote_scan_exec.rs</strong><dd><code>Partial error handling for remote scan parquet-miss</code> </dd></summary> <hr> src/service/search/datafusion/distributed_plan/remote_scan_exec.rs <ul><li>Parse gRPC Internal error JSON to detect parquet-not-found.<br> <li> Return empty stream on Cancelled/Deadline or parquet-not-found.<br> <li> Continue processing remaining partitions after partial error.</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/8825/files#diff-81dd7297fe2cf5a3076270fa888bc2c49c7bd9c2c0bfcec20d7b6eb6d520032c">+9/-1</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ --------- Signed-off-by: loaki07 <rustyloaki@gmail.com> |
||
|
|
5dee87a8d5 | feat: add update fields api (#8826) | ||
|
|
826cbbd276 |
feat: partial err warning if results exceeds query limit only for (#8802)
### **User description** - show warning in dashboards if the ZO_QUERY_DEFAULT_LIMIT is reached only dashboards - truncate the results exactly to the query limit on error - remove query result error if search_type is ui ___ ### **PR Type** Enhancement, Bug fix ___ ### **Description** - Add capped results warning on default limit - Hide cachable function errors for UI - Truncate results when default limit exceeded - Fix partition function naming in cluster paths ___ ### Diagram Walkthrough ```mermaid flowchart LR DF["DataFusion execution"] -- "row count" --> CL["check_query_default_limit_exceeded"] CL -- "set partial_err with capped msg" --> PR["Partial response propagation"] CL -- "truncate rows" --> HC["HTTP cluster response"] UI["UI search requests"] -- "filter function_error" --> HF["HTTP search handlers"] ``` <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>9 files</summary><table> <tr> <td><strong>search.rs</strong><dd><code>Add capped results warning constant</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8802/files#diff-a36a6683e327641569d8098ee0d4f13e894e1b9d51230dc3569abe42e87ba310">+2/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Hide cachable function errors for UI</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8802/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6">+9/-1</a> </td> </tr> <tr> <td><strong>search_stream.rs</strong><dd><code>Filter cachable errors in streaming UI responses</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8802/files#diff-642de43ff6b19ae41087a9f1efc02d8b0b873809e0c92cbddfac1a30ef3f1184">+15/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Standardize partial error message usage and mark partial on fn errors</code></dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8802/files#diff-f07bfacc0501b9c234e64b16c1dd8eb0ae8fcbe231f90c81fed72bcc94946f74">+3/-2</a> </td> </tr> <tr> <td><strong>flight.rs</strong><dd><code>Add default-limit check and rename partition function</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8802/files#diff-dbffb1a03b65f6a9163b18c5bb1241ba2966735657be39bbe9f4d0e3260d8c1d">+12/-5</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Over-fetch default limit by 5 to detect cap</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8802/files#diff-3b1c9f0a84041235ca3765361e8eadfd7e9309a52319da882dee0540c826eb3d">+2/-1</a> </td> </tr> <tr> <td><strong>execution.rs</strong><dd><code>Simplify partial error handling logic</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8802/files#diff-75d432351865224f0b00d7cc819554c2ad5fa1f777e9c645d91a3fd5c1113bc0">+0/-2</a> </td> </tr> <tr> <td><strong>leader.rs</strong><dd><code>Inject default-limit partial warning via DF path</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8802/files#diff-21a32af318adcd10e62fb0d45944993f623fb3d2d6df4bb70d882dfc8f677fdc">+10/-3</a> </td> </tr> <tr> <td><strong>utils.rs</strong><dd><code>Add limit-exceeded checks and cachable-error helper</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8802/files#diff-bfdb4ff6a6e6bebf219b885f74dcbd3058ada7d2a7aa4c306b2e604aa1471474">+80/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Bug fix</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>http.rs</strong><dd><code>Truncate results when default limit exceeded</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8802/files#diff-fe0a1bbec7ef6418120544b589a531e5144b28cd2650f99135ed8a70ac17ac03">+12/-2</a> </td> </tr> <tr> <td><strong>follower.rs</strong><dd><code>Use corrected partition function name</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8802/files#diff-59e0cc386582cf8baf201977475fd9a7e479fd8ed000bbaa6746a51ecb28632f">+2/-2</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Signed-off-by: loaki07 <rustyloaki@gmail.com> Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech> |
||
|
|
50e0b64aa9 |
feat: add MCP protocol endpoints
Integrate Model Context Protocol server endpoints at `/api/{org_id}/mcp`
for both enterprise and non-enterprise builds.
Changes:
- Add POST and GET handlers for MCP requests with streaming support
- Extract and pass through Authorization header for API authentication
- Add non-enterprise stub endpoints that return "not available" error
- Update router to register MCP endpoints conditionally
Endpoints:
- POST `/api/{org_id}/mcp`: Single MCP request/response
- GET `/api/{org_id}/mcp`: Streaming MCP requests
|
||
|
|
40bbbe7f2e | fix: improve slow log detail (#8811) | ||
|
|
f62d0d60c5 |
feat: traces for agent (#8800)
### **PR Type**
Enhancement, Bug fix
___
### **Description**
- Add distributed tracing for AI chat
- Parse W3C traceparent, fallback to UUID v7
- Enable conditional tracer provider/init
- Improve AI error logs with trace context
___
### Diagram Walkthrough
```mermaid
flowchart LR
FE["Frontend generateTraceContext()"] -- "traceparent header" --> API["/api/{org_id}/ai/chat(_stream)"]
API -- "Span root if enabled" --> Tracer["Tracer provider"]
API -- "trace_id propagated" --> AIService["ai::service::{chat,chat_stream}"]
Tracer -- "OTLP exporters" --> OO["OpenObserve OTLP"]
Tracer -- "Filtered ai.* spans" --> OO["OpenObserve OTLP"]
Tracer -- "Optional eval exporter" --> Eval["AI Evaluation OTLP"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>chat.rs</strong><dd><code>Add tracing headers parsing
and span creation</code>
</dd></summary>
<hr>
src/handler/http/request/ai/chat.rs
<ul><li>Accept headers and org path in chat<br> <li> Create root tracing
spans when enabled<br> <li> Parse W3C traceparent to derive trace_id<br>
<li> Propagate trace_id to AI services and logs</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8800/files#diff-12a78cbb31b313cb3a0ca50f25c177470cf49b02708f179fe138ed3d66a2926b">+77/-12</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>main.rs</strong><dd><code>Conditional tracing setup and
AI exporters</code>
</dd></summary>
<hr>
src/main.rs
<ul><li>Initialize tracer when AI tracing enabled<br> <li> Add
FilteringSpanProcessor for ai.* spans<br> <li> Configure additional OTLP
exporters<br> <li> Use UUID v7 ID generator when available</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8800/files#diff-42cb6807ad74b3e201c5a7ca98b911c5fa08380e942be6e4ac5807f8377f87fc">+223/-17</a></td>
</tr>
<tr>
<td>
<details>
<summary><strong>useAiChat.ts</strong><dd><code>Add traceparent to AI
chat requests</code>
</dd></summary>
<hr>
web/src/composables/useAiChat.ts
<ul><li>Generate and send traceparent header<br> <li> Pass abort signal
in fetch options</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8800/files#diff-830ee4f21bdbbd0fa5c5c0f43b0a1d0200831e07ccddc91982cf0371c801b046">+6/-1</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>ai_chat.ts</strong><dd><code>Propagate traceparent in
service requests</code>
</dd></summary>
<hr>
web/src/services/ai_chat.ts
<ul><li>Include traceparent header in chat_stream<br> <li> Utilize
generateTraceContext utility</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8800/files#diff-d5a69d2b2a2a97e0875282b079de6092a5aa1e9cb93a4eb7ff68034b43eac3a1">+3/-1</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Miscellaneous</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>wal.rs</strong><dd><code>Remove tracing attribute from
WAL list</code>
</dd></summary>
<hr>
src/service/search/datafusion/storage/wal.rs
- Remove unused tracing instrument on list
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8800/files#diff-9ca700516d742bbc3c93f2271b27034650124c06a594f5b668144c51d7e28637">+0/-1</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>vite.config.ts</strong><dd><code>Adjust Vite dependency
optimization settings</code>
</dd></summary>
<hr>
web/vite.config.ts
<ul><li>Exclude echarts modules from optimizeDeps<br> <li> Disable
forced dependency optimization</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8800/files#diff-9430906049744cbbfe5d0b382b2466843a42cfebf755ff86fec850b0712258ef">+8/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
162dd34277 | fix: (openapi) deprecate duplicate operationId | ||
|
|
abc11250fd |
refactor: replace manual JSON deser with web::Json extractors in handlers
|
||
|
|
c868605736 | chore: add tests, fmt, clippy | ||
|
|
da96d301ab |
refactor: extract reusable Headers extractor for actix-web handlers
This commit: - Creates a new extractors.rs module with a generic Headers<T> extractor - Implements FromRequest trait for type-safe header deserialization - Centralizes header parsing logic to reduce code duplication across HTTP handlers |
||
|
|
a288a0604a |
chore: update default dashboard version from 1 to 5
In `CreateDashboard` API, the default dashboard version when `version` key was absent in the payload used to be 1, which was wrong. It is now 5 (for v5). Going forward, this value should default to the latest version supported by OpenObserve. This is tracked by `const LATEST_DASHBOARD_VERSION`, which is automatically populated at compile time by counting the number of variants of `enum DashboardRequestBody`, requiring no human intervention beyond adding the new variant itself to the enum. |
||
|
|
d6339499f8 |
feat: pipeline errors on ui (#8695)
### **PR Type** Enhancement, Bug fix ___ ### **Description** - Surface last pipeline error in API - Persist pipeline errors in new table - Batch upsert pipeline errors from reporting - Safer error messages in VRL failures ___ ### Diagram Walkthrough ```mermaid flowchart LR Reporting["Self-reporting errors"] -- "batch_upsert" --> DB["Table: pipeline_last_errors"] API["GET /pipelines"] -- "join with errors" --> UIData["PipelineList.last_error"] UIData -- "render" --> ListUI["PipelinesList error icon"] UIData -- "per-node errors" --> NodeUI["CustomNode error badge"] Ingestion["VRL apply_vrl_fn"] -- "clean error message" --> Reporting ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Configuration changes</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>config.rs</strong><dd><code>Bump DB schema version to 10</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+1/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Wire migration for last errors table</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+2/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>11 files</summary><table> <tr> <td><strong>pipelines.rs</strong><dd><code>Add last_error to pipeline model</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-61bb28d7091130297c917a0530d96202fcb4b073b514410531f9fe71acfc814f">+22/-3</a> </td> </tr> <tr> <td><strong>pipeline.rs</strong><dd><code>Join pipelines with last error data</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-c69f4f94eee97ce226caddc497b2adf89e26869f2d72b0d0206dc31ab2714daf">+26/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Register pipeline_last_errors entity</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-c539d7557d1425986d5c09849d8dbca42d1b309c2bc33d49db641d6a783098f6">+1/-0</a> </td> </tr> <tr> <td><strong>pipeline_last_errors.rs</strong><dd><code>Define ORM entity for last errors</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-e4ff5af0cb9c6e6343ecaad06fbb03515ace8868be6ee6d192ff0f01ee4d3e17">+22/-0</a> </td> </tr> <tr> <td><strong>prelude.rs</strong><dd><code>Export PipelineLastErrors entity</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-a818656b9fb01945155f28450270dd2ae20b67c8248c851ffa0f25e859d263ed">+1/-0</a> </td> </tr> <tr> <td><strong>m20250930_000001_create_pipeline_last_errors_table.rs</strong><dd><code>Create pipeline_last_errors table and index</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-173fe20fccfdcfa68563a13f9d69c2e6cb0901ac257d43386962bbac90f296de">+169/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Expose pipeline_errors DB module</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-b7e3bf7f0ac23dd084c0c817a310a4d5e7a64ff532746d182986ef940fa03fd0">+1/-0</a> </td> </tr> <tr> <td><strong>pipeline_errors.rs</strong><dd><code>CRUD and batch upsert for pipeline errors</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-627b6bb9ca334984b8f08f1405a67e5110c238788f165e30abda39b03f7ab68f">+331/-0</a> </td> </tr> <tr> <td><strong>queues.rs</strong><dd><code>Batch upsert pipeline errors during ingest</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-ed15a56d4d3becc2dfb3d05af2dac7f92962ec3091199728fa953e6aed7ed767">+45/-5</a> </td> </tr> <tr> <td><strong>PipelinesList.vue</strong><dd><code>Show pipeline-level last error indicator</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-85e3ef322f3eea0fc6d74d89431ba338a1153cb82ee06bef0f7c5f439c04267d">+27/-0</a> </td> </tr> <tr> <td><strong>CustomNode.vue</strong><dd><code>Show node-level error badge and navigation</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-b9d83cd503b6d3470b238accaaea0b4decf567add8ad4727c63c9e583725f408">+98/-2</a> </td> </tr> </table></details></td></tr><tr><td><strong>Bug fix</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>mod.rs</strong><dd><code>Return sanitized VRL error messages</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-7c7b5bca85f0ced652965cae66540c96f56dfcca4f4c16b77bf7b45aac203d1b">+12/-8</a> </td> </tr> </table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>mod.rs</strong><dd><code>Clarify queuing of error data</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8695/files#diff-c6255010f7a87d6acdb3ad04954fc9f2c27350ae319c53a1857b120aa06408a3">+2/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
b220f55435 |
fix: handle LLM-specific errors (#8690)
### **User description**
Enterprise code now returns error when raised by LLM API. These errors
are handled in this commit.
___
### **PR Type**
Bug fix
___
### **Description**
- Map rate limit errors to 429 responses
- Normalize other AI errors to 500
- Improve error logging messages consistency
- Audit reporting updated for error paths
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["AI service call"] --> B{"Error?"}
B -- "No" --> C["200 OK with response"]
B -- "Yes" --> D{"Rate limit (429)?"}
D -- "Yes" --> E["Return 429 Too Many Requests"]
D -- "No" --> F["Return 500 Internal Error"]
E -- "Audit report" --> G["Audit trail updated"]
F -- "Audit report" --> G
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>chat.rs</strong><dd><code>Standardize AI chat error
handling and 429 pass-through</code> </dd></summary>
<hr>
src/handler/http/request/ai/chat.rs
<ul><li>Log errors using extracted message string<br> <li> Return 429
JSON on rate limit errors<br> <li> Convert other AI errors to 500
internal errors<br> <li> Align stream path with audit reporting and
responses</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8690/files#diff-12a78cbb31b313cb3a0ca50f25c177470cf49b02708f179fe138ed3d66a2926b">+40/-6</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
a5507e9dc0 |
feat (AI): add context support to chat requests and improve type safety
- Add context parameter to PromptRequest for passing additional data - Update AiServerRequest initialization to include context across chat endpoints - Change PromptResponse role field from String to Role enum for type safety - Add Serialize trait to DashboardRequestBody for serialization support |
||
|
|
55004257f3 | feat: impl broadcast join for enrichment table (#8672) | ||
|
|
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>
|
||
|
|
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 |
||
|
|
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>
|
||
|
|
24bc37a80e | feat: remove grpc call for get result cache also improve RW logic (#8246) | ||
|
|
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> ___ |
||
|
|
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>
|
||
|
|
c2e8d73e65 | feat: implement broadcast join (#8506) |