Commit Graph
912 Commits
Author SHA1 Message Date
Simha GandSubhradeep Chakraborty 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>
2025-11-11 11:49:14 +05:30
Abhay PadamaniandKirtan Thakkar 098ee9d7d2 fix: dashboard panel re-position (#9016)
- #9020

---------

Co-authored-by: Kirtan Thakkar <kirtan@kiara.tech>
2025-11-10 18:54:30 +05:30
Yashodhan JoshiandYashodhan Joshi 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>
2025-11-07 14:48:53 +05:30
ByteBaker 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.
2025-11-07 01:49:57 +05:30
Loakesh Indiran c7ee02a9f1 fix: aggs cache ratio reporting (#8984)
Signed-off-by: loaki07 <rustyloaki@gmail.com>
2025-11-06 22:07:59 +05:30
Loakesh Indiran 6b76fbf785 feat: clear cache main (#8919) 2025-11-05 22:27:19 +08:00
Yashodhan JoshiandYashodhan Joshi 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>
2025-11-04 20:50:08 +05:30
ByteBaker 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
2025-11-04 17:36:23 +05:30
Simha GandBhargav 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>
2025-11-04 16:37:39 +05:30
udev ad74be0b9e fix: cloud build (#8938) 2025-11-04 14:13:58 +05:30
Ashish Kolheandomkark06 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>
2025-11-04 11:19:39 +05:30
Harsh Mahajanandsai nikhil kethe 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Register built-in patterns and
reorder routes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Export github service
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-1b15316505c31acccb26ba66d920fdb0894567d08d2bf1e3457716d128a67b83">+1/-0</a>&nbsp;
&nbsp; &nbsp; </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>&nbsp;
</td>

</tr>

<tr>
<td><strong>re_pattern.rs</strong><dd><code>Add duplicate-safe creation
with auto-suffix names</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-0cb2bf6d550d07b66db7e325c6d44c6a598f2ac8e315bf9e168f4a1d9d6e745d">+47/-17</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Add adapters module export for
pattern formats</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-3a24aa67600735383b8b94a435974dc9b2677b6bb3f5fb502fb7d617af8bdec0">+20/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>pywhat.rs</strong><dd><code>Implement generic pattern
adapter and filters</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-9ecd12df46c16fca3984bc46122a26568db208839f904e0b216185df43e13e08">+264/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>cache.rs</strong><dd><code>Introduce in-memory cache with
eviction and stats</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-09bcde8f6abf0cbf88628e1e6e7290e9fde7655c7903569902bf28742e958326">+130/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>client.rs</strong><dd><code>Add GitHub data client with
retry and caching</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-20a335d645493f38003faf7303124a6e85c3c2dfd765e148811aebee1ebfd890">+246/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>types.rs</strong><dd><code>Define service config, errors,
and cache types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-35becfa9ecfcd7711485f645f09a3fe2429231d0c351f0374f20f121225fbaae">+119/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>regex_pattern.ts</strong><dd><code>Add client method to
fetch built-in patterns</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-2a0b0828141d39ab0385e0941314ead1cdd2ec3ec7b3baf5fd0c42f8f010728a">+18/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>BuiltInPatternsTab.vue</strong><dd><code>New UI to search,
filter, preview, import patterns</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-0747e124429b322a69f6ae0117ec635044059bd48fb03e90b2328aa1f79b8b28">+451/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ImportRegexPattern.vue</strong><dd><code>Integrate built-in
tab and import flow updates</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-e8e1bcb5a02311504d7d571090eab27a270aaa71cae185ad2703023e2e70a31e">+94/-36</a>&nbsp;
</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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-90a3518cd7c8b2a8b2a2093535b64a3dc4e6ffead41e5dca7901521e0c0ba910">+39/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>.env.example</strong><dd><code>Document regex patterns
source URL env var</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-a3046da0d15a27e89f2afe639b25748a7ad4d9290af3e7b1b6c1a5533c8f0a8c">+6/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>en.json</strong><dd><code>Add i18n strings for built-in
patterns UI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8827/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+17/-1</a>&nbsp;
&nbsp; </td>

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

</details>

___

---------

Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2025-11-03 23:55:47 +05:30
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>
2025-10-31 16:38:05 +05:30
Simha Gandsai nikhil kethe 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>
2025-10-31 15:09:11 +05:30
Yashodhan JoshiandYashodhan Joshi 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>
2025-10-30 18:07:59 +05:30
ByteBaker 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
2025-10-30 17:20:21 +05:30
ByteBaker 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
2025-10-30 17:20:21 +05:30
Hengfei Yang f56b2b8f17 fix: metrics can't search parquet in wal (#8896) 2025-10-29 13:37:35 +08:00
Hengfei Yang d360151332 fix: metrics data duplicate when compact (#8888) 2025-10-29 13:37:07 +08:00
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>
2025-10-28 17:39:54 +05:30
Abhay Padamani 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-5bf716db7e1d91dfbd427a2e320ce407c4f0c92d55d68f8e636daed1b02abd56">+24/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Introduce full v6 dashboard
schema</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-4390c1715a037aea58be340f8b34c1293fd4ea8911851d17384ed700440077c3">+675/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>dashboards.rs</strong><dd><code>API models support and parse
v6</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-250eeebeec9d4ac0ac271466ed83cd33fea3f121080491b340dc95d9af287259">+11/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>dashboards.rs</strong><dd><code>Persist/load v6 dashboards
in DB</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-edd90c6ec720f676311aa31a635f954d559e63582f0b4c39cb9206bfb095737b">+12/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Variables extraction supports
v6</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-6ae9e22ced40c50675dde5348b8d696f6559655bbbded915d7e6e88bf64b71a6">+5/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>commons.ts</strong><dd><code>Default panel layout width to
96 cols</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-17cb74f8142984fc46bbfecdeaacccc118fd5d4ab7f040a55695caaa309d104f">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>convertDashboardSchemaVersion.ts</strong><dd><code>Current
schema v6 and v5→v6 migration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-b7ba5dff91b00365f729648ca24a8dfc70bd74e803300da81e5b89d29ed42c9e">+13/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>RenderDashboardCharts.vue</strong><dd><code>GridStack
columns increased to 192</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-313f7c69102161242c893c863c50f1f1cd1fc19b68b5c99bf840b4b5c72f0f2e">+1/-1</a>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-412e639b6e6e1d2a5571773c03c159462976db4f3b891fe326937779572aeec4">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Init super Dashboard with v6
None</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-997402d8930b95aa77124bc72920e3c7ff746286d605c94bf3fb7fe1aec62aa8">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Init super Dashboard with v6
None</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-84b6c5b1ecc108223434a008e1e382d4cc494668a12b6ac22ab457a72e308dd4">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Init super Dashboard with v6
None</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-63a64145239e03a59debc87c63764d425a36746d00f1bd6563ce2be1847b1213">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Init super Dashboard with v6
None</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-da49585bbcb02bf0f737bb68739ebc248edd15c7ad9427c0e68f7728bb4a8c17">+1/-0</a>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-5bf716db7e1d91dfbd427a2e320ce407c4f0c92d55d68f8e636daed1b02abd56">+24/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Initialize v6 None in root
wrapper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-412e639b6e6e1d2a5571773c03c159462976db4f3b891fe326937779572aeec4">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Initialize v6 None in root
wrapper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-997402d8930b95aa77124bc72920e3c7ff746286d605c94bf3fb7fe1aec62aa8">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Initialize v6 None in root
wrapper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-84b6c5b1ecc108223434a008e1e382d4cc494668a12b6ac22ab457a72e308dd4">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Initialize v6 None in root
wrapper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-63a64145239e03a59debc87c63764d425a36746d00f1bd6563ce2be1847b1213">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Initialize v6 None in root
wrapper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-da49585bbcb02bf0f737bb68739ebc248edd15c7ad9427c0e68f7728bb4a8c17">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Introduce dashboard schema v6
structures</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-4390c1715a037aea58be340f8b34c1293fd4ea8911851d17384ed700440077c3">+675/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>dashboards.rs</strong><dd><code>API models/routes support v6
dashboards</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-250eeebeec9d4ac0ac271466ed83cd33fea3f121080491b340dc95d9af287259">+11/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>dashboards.rs</strong><dd><code>Persist and load v6 in DB
layer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-edd90c6ec720f676311aa31a635f954d559e63582f0b4c39cb9206bfb095737b">+12/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Variable extraction supports
v6</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-6ae9e22ced40c50675dde5348b8d696f6559655bbbded915d7e6e88bf64b71a6">+5/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>commons.ts</strong><dd><code>Default new panel width and
bounds x4</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-17cb74f8142984fc46bbfecdeaacccc118fd5d4ab7f040a55695caaa309d104f">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>convertDashboardSchemaVersion.ts</strong><dd><code>FE
migration v5→v6 scale layout x4</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-b7ba5dff91b00365f729648ca24a8dfc70bd74e803300da81e5b89d29ed42c9e">+13/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>RenderDashboardCharts.vue</strong><dd><code>GridStack
columns increased to 192</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8459/files#diff-313f7c69102161242c893c863c50f1f1cd1fc19b68b5c99bf840b4b5c72f0f2e">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-10-28 14:57:40 +05:30
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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Wire enterprise-only dedup
migration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Gate deduplication module behind
enterprise feature</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-ba9b65130898444f7815fd6068bdb0dc590612f74cc893f79d91b0afc44cc851">+2/-0</a>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-45c7eaf1a764ab52f3e014fe0555c03dc59d77c5ce974684cdee4ed90463a234">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Export deduplication
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-308ddd8764236c9a75da9ba7742843ee096f34a126306a58a1e695c1ee148fe5">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Expose deduplication in HTTP Alert
model mappings</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-7937de550cb8784a6c3beca0689c8a88508c4b93ecf441280f47e08f988d2a5a">+7/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Map dedup fields to DB and
serialize config</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-238b8087501b1743c3c4608469596d431869f021e9bb30e9a058d1294229ee67">+29/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>alert_dedup_state.rs</strong><dd><code>New entity for
deduplication state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-f6ea59e731cb65769f76f5e3a092331e433d73cfb55589861c7cd4fc415744dc">+85/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>alerts.rs</strong><dd><code>Add dedup columns to alerts
entity</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-a3e9c7993f95c9f2414e5da12d12f5f60422ac927c105f32141e4854f0e7179a">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Register alert_dedup_state
entity</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-c539d7557d1425986d5c09849d8dbca42d1b309c2bc33d49db641d6a783098f6">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>

<td><strong>m20251024_000001_add_alert_deduplication.rs</strong><dd><code>Migration:
add dedup columns and state table</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-5146fa66b9b2805cd19d8a0fe363976a5966d70132400e54e576f277c23c8d34">+245/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>alert_manager.rs</strong><dd><code>Add scheduled dedup state
cleanup job</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-7e30858abad652a860186eb047347305488f52356112b1495dd53ce740316d7c">+55/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>deduplication.rs</strong><dd><code>Implement dedup logic,
fingerprinting, cleanup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-6073bba67ae904acb5f5b73104f84a81c13608f31aeb6558e9787da67efa03df">+975/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>handlers.rs</strong><dd><code>Apply deduplication before
sending alerts</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-5eca8995a88fcecb6d6b8efd3c7c4496f4a96a4b060fb4ed85593574f7cf49eb">+49/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>alert.ts</strong><dd><code>Add deduplication to Alert
interface</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-95f520d803aecbe4142e486037faf07124a5da245d504f0d11147bcb6a4c8918">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AlertsContainer.vue</strong><dd><code>UX: expand/collapse
area clickable with hover</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-39b487d54970cff4a1ccdfbb49a4ccb38f7131bb9d30944ce1c6e86d3f818148">+12/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>DeduplicationConfig.vue</strong><dd><code>New UI for
configuring alert deduplication</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-63eb39111409780e4dc064ea80056dfe096038ee76b389cdd8e9d14c0ae29a32">+401/-0</a>&nbsp;
</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>&nbsp;
&nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-ee8d9d671130757ae84ef01809003701d36e4cc90a1d1eca286d3af9a6def2ea">+183/-0</a>&nbsp;
</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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8884/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+23/-1</a>&nbsp;
&nbsp; </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>
2025-10-26 18:52:05 +05:30
ByteBaker 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'
2025-10-22 16:28:18 +05:30
Hengfei Yang 845dd1506e perf: improve get_min_ts to reduce db calls (#8861) 2025-10-22 16:06:54 +08:00
Hengfei Yang e850ea2f29 fix: read user session from db if the cache is missing (#8846) 2025-10-20 21:03:59 +08:00
ByteBaker 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
2025-10-20 17:30:02 +05:30
udevandShrinath Rao 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>
2025-10-17 17:02:08 +05:30
Loakesh Indiran 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Signed-off-by: loaki07 <rustyloaki@gmail.com>
2025-10-16 18:38:09 +05:30
Hengfei Yang 5dee87a8d5 feat: add update fields api (#8826) 2025-10-16 20:11:03 +08:00
Loakesh Indiranandktx-abhay 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8802/files#diff-a36a6683e327641569d8098ee0d4f13e894e1b9d51230dc3569abe42e87ba310">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Hide cachable function errors for
UI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8802/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6">+9/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>search_stream.rs</strong><dd><code>Filter cachable errors in
streaming UI responses</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8802/files#diff-642de43ff6b19ae41087a9f1efc02d8b0b873809e0c92cbddfac1a30ef3f1184">+15/-1</a>&nbsp;
&nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>flight.rs</strong><dd><code>Add default-limit check and
rename partition function</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8802/files#diff-dbffb1a03b65f6a9163b18c5bb1241ba2966735657be39bbe9f4d0e3260d8c1d">+12/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Over-fetch default limit by 5 to
detect cap</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8802/files#diff-3b1c9f0a84041235ca3765361e8eadfd7e9309a52319da882dee0540c826eb3d">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>execution.rs</strong><dd><code>Simplify partial error
handling logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8802/files#diff-75d432351865224f0b00d7cc819554c2ad5fa1f777e9c645d91a3fd5c1113bc0">+0/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>leader.rs</strong><dd><code>Inject default-limit partial
warning via DF path</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8802/files#diff-21a32af318adcd10e62fb0d45944993f623fb3d2d6df4bb70d882dfc8f677fdc">+10/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>utils.rs</strong><dd><code>Add limit-exceeded checks and
cachable-error helper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8802/files#diff-bfdb4ff6a6e6bebf219b885f74dcbd3058ada7d2a7aa4c306b2e604aa1471474">+80/-1</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>2 files</summary><table>
<tr>
<td><strong>http.rs</strong><dd><code>Truncate results when default
limit exceeded</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8802/files#diff-fe0a1bbec7ef6418120544b589a531e5144b28cd2650f99135ed8a70ac17ac03">+12/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>follower.rs</strong><dd><code>Use corrected partition
function name</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8802/files#diff-59e0cc386582cf8baf201977475fd9a7e479fd8ed000bbaa6746a51ecb28632f">+2/-2</a>&nbsp;
&nbsp; &nbsp; </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>
2025-10-15 17:02:11 +05:30
ByteBaker 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
2025-10-15 14:47:33 +05:30
Hengfei Yang 40bbbe7f2e fix: improve slow log detail (#8811) 2025-10-15 12:07:44 +08:00
Ashish Kolhe 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>main.rs</strong><dd><code>Conditional tracing setup and
AI exporters</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/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>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>ai_chat.ts</strong><dd><code>Propagate traceparent in
service requests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</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>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

src/service/search/datafusion/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>&nbsp;
&nbsp; &nbsp; </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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2025-10-14 17:35:17 +05:30
ByteBaker 162dd34277 fix: (openapi) deprecate duplicate operationId 2025-10-13 23:09:49 +05:30
ByteBaker abc11250fd refactor: replace manual JSON deser with web::Json extractors in handlers 2025-10-09 21:22:26 +05:30
ByteBaker c868605736 chore: add tests, fmt, clippy 2025-10-09 15:19:32 +05:30
ByteBaker da96d301ab refactor: extract reusable Headers extractor for actix-web handlers
This commit:
- Creates a new extractors.rs module with a generic Headers<T> extractor
- Implements FromRequest trait for type-safe header deserialization
- Centralizes header parsing logic to reduce code duplication across HTTP handlers
2025-10-08 14:08:36 +05:30
ByteBaker a288a0604a chore: update default dashboard version from 1 to 5
In `CreateDashboard` API, the default dashboard version when
`version` key was absent in the payload used to be 1, which
was wrong. It is now 5 (for v5).

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

This is tracked by `const LATEST_DASHBOARD_VERSION`, which is
automatically populated at compile time by counting the number
of variants of `enum DashboardRequestBody`, requiring no human
intervention beyond adding the new variant itself to the enum.
2025-10-03 20:09:49 +05:30
Ashish Kolhe d6339499f8 feat: pipeline errors on ui (#8695)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Surface last pipeline error in API

- Persist pipeline errors in new table

- Batch upsert pipeline errors from reporting

- Safer error messages in VRL failures


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Reporting["Self-reporting errors"] -- "batch_upsert" --> DB["Table: pipeline_last_errors"]
  API["GET /pipelines"] -- "join with errors" --> UIData["PipelineList.last_error"]
  UIData -- "render" --> ListUI["PipelinesList error icon"]
  UIData -- "per-node errors" --> NodeUI["CustomNode error badge"]
  Ingestion["VRL apply_vrl_fn"] -- "clean error message" --> Reporting
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><details><summary>2 files</summary><table>
<tr>
<td><strong>config.rs</strong><dd><code>Bump DB schema version to
10</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Wire migration for last errors
table</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>11
files</summary><table>
<tr>
<td><strong>pipelines.rs</strong><dd><code>Add last_error to pipeline
model</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-61bb28d7091130297c917a0530d96202fcb4b073b514410531f9fe71acfc814f">+22/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>pipeline.rs</strong><dd><code>Join pipelines with last error
data</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-c69f4f94eee97ce226caddc497b2adf89e26869f2d72b0d0206dc31ab2714daf">+26/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Register pipeline_last_errors
entity</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-c539d7557d1425986d5c09849d8dbca42d1b309c2bc33d49db641d6a783098f6">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>pipeline_last_errors.rs</strong><dd><code>Define ORM entity
for last errors</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-e4ff5af0cb9c6e6343ecaad06fbb03515ace8868be6ee6d192ff0f01ee4d3e17">+22/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>prelude.rs</strong><dd><code>Export PipelineLastErrors
entity</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-a818656b9fb01945155f28450270dd2ae20b67c8248c851ffa0f25e859d263ed">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>

<td><strong>m20250930_000001_create_pipeline_last_errors_table.rs</strong><dd><code>Create
pipeline_last_errors table and index</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-173fe20fccfdcfa68563a13f9d69c2e6cb0901ac257d43386962bbac90f296de">+169/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Expose pipeline_errors DB
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-b7e3bf7f0ac23dd084c0c817a310a4d5e7a64ff532746d182986ef940fa03fd0">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>pipeline_errors.rs</strong><dd><code>CRUD and batch upsert
for pipeline errors</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-627b6bb9ca334984b8f08f1405a67e5110c238788f165e30abda39b03f7ab68f">+331/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>queues.rs</strong><dd><code>Batch upsert pipeline errors
during ingest</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-ed15a56d4d3becc2dfb3d05af2dac7f92962ec3091199728fa953e6aed7ed767">+45/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>PipelinesList.vue</strong><dd><code>Show pipeline-level last
error indicator</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-85e3ef322f3eea0fc6d74d89431ba338a1153cb82ee06bef0f7c5f439c04267d">+27/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>CustomNode.vue</strong><dd><code>Show node-level error badge
and navigation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-b9d83cd503b6d3470b238accaaea0b4decf567add8ad4727c63c9e583725f408">+98/-2</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Return sanitized VRL error
messages</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-7c7b5bca85f0ced652965cae66540c96f56dfcca4f4c16b77bf7b45aac203d1b">+12/-8</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Clarify queuing of error
data</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8695/files#diff-c6255010f7a87d6acdb3ad04954fc9f2c27350ae319c53a1857b120aa06408a3">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

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


___

### **PR Type**
Bug fix


___

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

- Normalize other AI errors to 500

- Improve error logging messages consistency

- Audit reporting updated for error paths


___

### Diagram Walkthrough


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



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>chat.rs</strong><dd><code>Standardize AI chat error
handling and 429 pass-through</code>&nbsp; &nbsp; </dd></summary>
<hr>

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

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


</details>


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

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

</details>

___
2025-09-30 18:46:56 +05:30
ByteBaker a5507e9dc0 feat (AI): add context support to chat requests and improve type safety
- Add context parameter to PromptRequest for passing additional data
- Update AiServerRequest initialization to include context across chat endpoints
- Change PromptResponse role field from String to Role enum for type safety
- Add Serialize trait to DashboardRequestBody for serialization support
2025-09-30 16:35:54 +05:30
Huaijin 55004257f3 feat: impl broadcast join for enrichment table (#8672) 2025-09-29 11:09:07 +08:00
Yashodhan JoshiandYashodhan Joshi 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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
</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>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </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>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2025-09-26 10:47:18 +05:30
sktrpathi d0ffe710ab fix: improve dashboard API models & add field annotations (#8546)
### **User description**
- Replace separate request/response models with unified
`DashboardRequestBody/DashboardResponseBody`
- Add `#[schema(required)]` to `title` and `description` fields across
all dashboard versions (v1-v5)
- Eliminate redundant `CreateDashboard/UpdateDashboard` `GetDashboard`
model types
- Use tagged enum for version-specific dashboard deserialization instead
of manual JSON parsing.

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


___

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


___

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

- Unify dashboard request/response models

- Use tagged enum for versions

- Simplify owner assignment logic
2025-09-22 17:06:25 +05:30
51d9782e5d feat: add separate telemetry url (#8564)
### **PR Type**
Enhancement


___

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

- Introduce `ZO_KEYEVENT_TELEMETRY_URL` config

- Send both standard and keyevent telemetry

- Update handlers to use new API


___

### Diagram Walkthrough


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

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



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>telemetry.rs</strong><dd><code>Add keyevent telemetry
send method</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/common/meta/telemetry.rs

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


</details>


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

</tr>

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

src/handler/http/auth/jwt.rs

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


</details>


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

</tr>

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

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

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


</details>


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

</tr>

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

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

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


</details>


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

</tr>

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

src/job/cloud.rs

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


</details>


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

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

src/config/src/config.rs

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


</details>


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

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

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Prabhat Sharma <hi.prabhat@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2025-09-22 15:24:11 +05:30
Hengfei Yang 24bc37a80e feat: remove grpc call for get result cache also improve RW logic (#8246) 2025-09-20 20:09:17 +08:00
udev c09f2822e7 feat: custom config file path (#8464)
### **PR Type**
Enhancement

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

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

___

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

- Introduce config file path manager

- Implement auto config reload watcher

- Expose watcher interval configuration


___

### Diagram Walkthrough


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



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

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

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

</details>

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

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

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

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

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


___

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


___

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

- Introduce dashboard getter/setter macros

- Gate cipher key endpoints by feature

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


___

### **PR Type**
Enhancement


___

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

- Add bulk enable/disable for pipelines

- Introduce enterprise permission checks helper

- Update auth bypass for bulk endpoints


___

### Diagram Walkthrough


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

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



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

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

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

</tr>

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

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

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2025-09-18 12:12:16 +05:30
Huaijin c2e8d73e65 feat: implement broadcast join (#8506) 2025-09-18 12:37:44 +08:00