Commit Graph
2214 Commits
Author SHA1 Message Date
Bhargav ae011ace69 fix: Issue 10602 main (#10614) 2026-02-24 12:11:32 +05:30
Abhay Padamani 02327edb79 fix: visualization select * query issue on load (#10621) 2026-02-23 18:32:52 +05:30
25c0fe6382 feat: query builder support on logs page (#10305)
- #10446 



Design at :
https://github.com/openobserve/designs/tree/main/auto-query-builder-on-logs-page


# Logs Query Builder - Behavior Guide

What happens in different scenarios when using the Build tab.

---

## Switching to Build Tab - Scenarios

### Scenario 1: No Query, SQL Mode OFF

**Starting state:**
- Query editor is empty
- SQL Mode is OFF
- Stream "default" is selected

**What happens when you click Build:**
1. SQL Mode turns ON automatically
2. Query is generated: `SELECT * FROM "default"`
3. Quick Mode turns ON (if enabled in config)
4. Build tab opens in **Custom SQL Mode** 
5. Chart type: **Table** (with dynamic columns = true)

---

### Scenario 2: No Query, SQL Mode ON

**Starting state:**
- Query editor is empty
- SQL Mode is ON
- Stream "default" is selected

**What happens when you click Build:**
1. Query is generated: `SELECT * FROM "default"`
2. Build tab opens in **Builder Mode**
3. Chart type: **Line** (default)

---

### Scenario 3: Simple SELECT * Query

**Starting state:**
- Query: `SELECT * FROM "logs"`
- SQL Mode is ON

**What happens when you click Build:**
1. Query is parsed but no explicit fields found (`*` = all columns)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
4. Quick Mode turns ON (SELECT * pattern detected)
5. Query editor is **editable**

---

### Scenario 4: Histogram Query (Time Series)

**Starting state:**
- Query: `SELECT histogram(_timestamp) as time, count(*) as count FROM
"logs" GROUP BY time`
- SQL Mode is ON

**What happens when you click Build:**
1. Query is parsed successfully
2. Build tab opens in **Builder Mode**
3. Chart type: **Bar** (default chart type)
4. Fields populated: X-axis = histogram, Y-axis = count

---

### Scenario 5: Count Only Query (No Grouping)

**Starting state:**
- Query: `SELECT count(*) as total FROM "logs"`
- SQL Mode is ON

**What happens when you click Build:**
1. Query is parsed successfully
2. Build tab opens in **Builder Mode**
3. Chart type: **Metric** (big number display - only Y-axis, no X-axis)

---

### Scenario 6: Query with 3+ GROUP BY Fields

**Starting state:**
- Query: `SELECT status, method, host, count(*) FROM "logs" GROUP BY
status, method, host`
- SQL Mode is ON

**What happens when you click Build:**
1. Query is parsed successfully
2. Build tab opens in **Builder Mode**
3. Chart type: **Table** (too many grouping fields for chart)

---

### Scenario 7: Simple JOIN Query

**Starting state:**
- Query: `SELECT a.field, b.field FROM "stream1" a JOIN "stream2" b ON
a.id = b.id`
- SQL Mode is ON

**What happens when you click Build:**
1. Query is parsed successfully
2. Build tab opens in **Builder Mode**
3. Chart type: **Bar** (default)
4. JOIN is recognized and shown in builder

---

### Scenario 8: Nested JOIN Query

**Starting state:**
- Query: `SELECT * FROM "a" JOIN ("b" JOIN "c" ON b.x = c.x) ON a.y =
b.y`
- SQL Mode is ON

**What happens when you click Build:**
1. **Complex pattern detected** (nested JOIN with parentheses)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
4. Query editor is **editable**
5. Field selectors are **hidden**

---

### Scenario 9: CTE Query (WITH clause)

**Starting state:**
- Query: `WITH recent AS (SELECT * FROM "logs" WHERE _timestamp > now()
- interval '1 hour') SELECT * FROM recent`
- SQL Mode is ON

**What happens when you click Build:**
1. **Complex pattern detected** (CTE)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
4. Query editor is **editable**

---

### Scenario 10: Subquery

**Starting state:**
- Query: `SELECT * FROM (SELECT status, count(*) FROM "logs" GROUP BY
status) subq`
- SQL Mode is ON

**What happens when you click Build:**
1. **Complex pattern detected** (subquery)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)

---

### Scenario 11: UNION Query

**Starting state:**
- Query: `SELECT * FROM "logs1" UNION SELECT * FROM "logs2"`
- SQL Mode is ON

**What happens when you click Build:**
1. **Complex pattern detected** (UNION)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)

---

### Scenario 12: Window Function Query

**Starting state:**
- Query: `SELECT *, ROW_NUMBER() OVER (PARTITION BY status ORDER BY
_timestamp) FROM "logs"`
- SQL Mode is ON

**What happens when you click Build:**
1. **Complex pattern detected** (window function)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)

---

### Scenario 13: Nested Function Query

**Starting state:**
- Query: `SELECT ceil(count(*)) as rounded_count FROM "logs"`
- SQL Mode is ON

**What happens when you click Build:**
1. **Complex pattern detected** (nested function - function inside
function)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)

---

### Scenario 14: JSON Operations Query

**Starting state:**
- Query: `SELECT data->>'name' as name FROM "logs"`
- SQL Mode is ON

**What happens when you click Build:**
1. **Complex pattern detected** (JSON operator)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)

---

### Scenario 15: CASE/WHEN Query

**Starting state:**
- Query: `SELECT CASE WHEN status >= 500 THEN 'error' ELSE 'ok' END as
status_type, count(*) FROM "logs" GROUP BY status_type`
- SQL Mode is ON

**What happens when you click Build:**
1. Query is parsed successfully (CASE/WHEN is supported)
2. Build tab opens in **Builder Mode**
3. Chart type: **Bar** (default)
4. CASE/WHEN shown as "raw" field type

---

### Scenario 16: Multiple JOINs (Flat)

**Starting state:**
- Query: `SELECT a.field as "field1", b.field as "field2" FROM "a" INNER
JOIN "b" AS stream_0 ON a.x = b.x INNER JOIN "c" AS stream_1 ON b.y =
c.y GROUP BY field1, field2 ORDER BY field1 ASC`
- SQL Mode is ON

**What happens when you click Build:**
1. Query is parsed successfully (flat JOINs are supported)
2. Build tab opens in **Builder Mode**
3. Chart type: **Bar** (default)

---

### Scenario 17: Opening Shared Link (First Time)

**Starting state:**
- URL contains `build_data` parameter with chart type "bar"
- Query in URL: `SELECT status, count(*) FROM "logs" GROUP BY status`

**What happens:**
1. Build tab opens
2. Query is parsed successfully
3. Chart type: **Bar** (restored from URL - first toggle)
4. Build tab opens in **Builder Mode**

---

### Scenario 18: Switching Back to Build Tab (After First Time)

**Starting state:**
- Previously visited Build tab
- URL still has `build_data` with chart type "bar"
- Query: `SELECT count(*) FROM "logs"` (metric query)

**What happens:**
1. Build tab opens
2. Query is parsed successfully
3. Chart type: **Metric** (auto-selected, URL ignored on subsequent
toggles)

---

### Scenario 19: Invalid SQL Syntax

**Starting state:**
- Query: `SELEC * FORM "logs"` (typos)
- SQL Mode is ON

**What happens when you click Build:**
1. **Parse error** (invalid SQL)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
4. Query editor is **editable** (so user can fix the query)

---

### Scenario 20: Query with WHERE Filters

**Starting state:**
- Query: `SELECT histogram(_timestamp), count(*) FROM "logs" WHERE
status = 500 AND method = 'GET' GROUP BY 1`
- SQL Mode is ON

**What happens when you click Build:**
1. Query is parsed successfully
2. Build tab opens in **Builder Mode**
3. Chart type: **Bar** (default)
4. Filters populated in filter section

---

## Summary Table

| Query Type | Mode | Chart Type |
|------------|------|------------|
| SELECT * | **Custom** | **Table** |
| Histogram + count | Builder | Bar |
| Count only (no GROUP BY) | Builder | Metric |
| 1-2 GROUP BY fields | Builder | Bar |
| 3+ GROUP BY fields | Builder | Table |
| Simple JOIN | Builder | Bar |
| CASE/WHEN | Builder | Bar |
| Multiple flat JOINs | Builder | Bar |
| CTE (WITH clause) | **Custom** | **Table** |
| Subquery | **Custom** | **Table** |
| Nested JOIN | **Custom** | **Table** |
| UNION/INTERSECT/EXCEPT | **Custom** | **Table** |
| Window functions | **Custom** | **Table** |
| Nested functions | **Custom** | **Table** |
| JSON operations | **Custom** | **Table** |
| Invalid SQL | **Custom** | **Table** |

---

## Quick Mode Auto-Enable

Quick Mode is automatically enabled when switching to Build tab if:

| Condition | Quick Mode |
|-----------|------------|
| SQL Mode was OFF | ✅ Enabled |
| Query is `SELECT * FROM ...` | ✅ Enabled |
| Complex aggregation query | ❌ Not changed |

**Requires:** `quick_mode_enabled = true` in config

---

## SQL Mode Auto-Enable

| Starting State | After Clicking Build |
|----------------|---------------------|
| SQL Mode OFF | SQL Mode **ON** |
| SQL Mode ON | SQL Mode ON (no change) |

**Build tab always requires SQL Mode to be ON.**

---

## Chart Type Priority

When auto-selecting chart type:

1. **Custom Mode?** → Table
2. **3+ GROUP BY fields?** → Table
3. **Only Y-axis (no X, no breakdown)?** → Metric
4. **Everything else** → Bar (default)

**Exception:** First visit with shared link uses chart type from URL.

---

## Builder Mode vs Custom Mode

| Aspect | Builder Mode | Custom Mode |
|--------|--------------|-------------|
| Query Editor | Read-only | Editable |
| Field Selectors | Visible | Hidden |
| When Used | Parseable queries | Complex/unparseable queries |
| Default Chart | Bar/Metric | Table |

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2026-02-23 16:54:15 +05:30
Omkar Kesarkhane 4a18f01d2c fix: improve ingestion check in route guard (#10427) 2026-02-23 15:07:33 +08:00
Abhay Padamani ad86e6d59d feat: iframe support for html chart (#10532) 2026-02-23 11:54:10 +08:00
Omkar Kesarkhane 0332a055d0 fix: Ignore external RUM errors (#10489) 2026-02-23 11:53:10 +08:00
Sai Nikhil 584edc34d9 fix: validate vrl with encoded value (#10607) 2026-02-22 09:21:55 +05:30
Sai Nikhilandgithub-actions[bot] 734723b362 fix: search bar responsiveness (#10509)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-21 15:38:24 +05:30
Omkar Kesarkhane 80d2e57312 fix: isExpandRow key was getting added to logs table (#10597) 2026-02-21 14:41:24 +05:30
Ashish Kolhe 7647247399 fix: traces api to use streaming (#10593) 2026-02-21 09:18:22 +05:30
BhargavandClaude Sonnet 4.5 3f70e843e3 fix: Unit test case coverage (#10568)
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-20 16:01:37 +05:30
Bhargav 1e59d46090 fix: correlation settings based on service stream flag (#10584) 2026-02-20 13:46:27 +05:30
6ffe0892b2 fix: enabled wrap option on patterns tab (#10577)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Bhargav <undefined@users.noreply.github.com>
2026-02-20 11:42:04 +05:30
Omkar Kesarkhane 299138967a fix: Email-id filtering in RUM Sessions (#10490)
#9926 
#10465
2026-02-20 10:40:55 +05:30
Sai Nikhil a639292123 fix: tooltip issue and tree view lag issue (#10579) 2026-02-19 21:32:35 +05:30
Omkar Kesarkhane 21aae60f6c fix: sanitized exception stack trace (#10565) 2026-02-19 16:40:48 +05:30
bd6b654038 fix: add stringSeparated output format for remote pipeline (main) (#10555)
cherry pick https://github.com/openobserve/openobserve/pull/10540 from
v40 to main

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-19 15:20:56 +05:30
82c8b1c7f6 test: add logs regression tests for quick mode and pagination bugs (#10541)
- Add test for quick mode query being removed when selecting interesting
field
- Add test for pagination visibility with histogram and SQL disabled
- Add test for error message identifying problematic field

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
2026-02-19 13:02:08 +05:30
ByteBaker f0ce986d33 test: add comprehensive unit tests for tree tooltip system
- Extract tooltip logic into testable treeTooltipHelpers module with 7 functions
- Add 35 unit tests covering formatting, distance calculation, data lookup, and HTML generation
- Fix broken tests for removed functions (handleViewLogs, handleViewTraces)
- Update tests for new Show telemetry button (renamed from view-traces)
- Fix radial layout tests (feature removed, now defaults to orthogonal)
- Update cache invalidation test to be more robust

Coverage improvements:
- formatNumber/formatLatency edge cases (K/M notation, seconds/milliseconds)
- pointToBezierDistance for curved/straight/zero-length beziers
- Node/edge tooltip HTML generation with various data scenarios
- Incoming edge lookup with null parents, fallbacks, multiple edges
- Root node metrics aggregation from outgoing edges
2026-02-18 22:45:33 +05:30
ByteBaker 38d73786ef feat: tree view custom tooltips, inside labels, and dynamic node sizing
- Add custom tooltip system for tree edges using ZRender mousemove +
  point-to-bezier distance calculation with 12px screen-pixel hit area
- Add custom tooltip for tree nodes showing direction-aware metrics
  (incoming edge data, not aggregate) matching the tree label values
- Move tree node labels inside circles with rich text formatting,
  consistent with graph view layout
- Use dynamic node sizing (40-80px based on request volume) matching
  graph view's formula
- Maximize tree layout bounds to reduce sibling edge overlap
- Remove ECharts built-in tooltip (replaced by custom tooltip system)
2026-02-18 22:45:33 +05:30
ByteBaker 26943655e8 fix: service graph UI cleanup
- Remove All Streams option, sync stream from traces page
- Swap tab order: Tree View first, Graph View second
- Remove radial and circular layout options and related code
- Disable layout dropdown in graph mode (force-directed only)
- Move Show telemetry button to header with investigate icon
- Rename Total req/min to Requests /min
2026-02-18 22:45:33 +05:30
ByteBaker 6310097c40 feat: service graph tree view improvements and telemetry correlation
- Restore edge-specific metrics in tree view (request counts per edge)
- Add adaptive percentile-based coloring (nodes by error rate, edges by latency)
- Show P50/P95/P99 latency in tree tooltips and side panel
- Add "Show telemetry" button with correlated logs/metrics/traces dialog
- Remove connection_type (was always hardcoded to "standard")
- Make client_service optional for entry-point services
- Default to tree view layout
2026-02-18 22:45:33 +05:30
ByteBaker 69e7dca5e6 feat: service graph edge metrics fix, connection_type removal, and side panel latency display 2026-02-18 22:45:33 +05:30
udev f59382dea1 feat: navigation for o2 assistant (#10564)
- **improve dashbaord tool prompt**
- **fix: pipeline create handler to return a pipeline ID and name**
- **feat: navigation event handler, button rendering**
2026-02-18 21:46:21 +05:30
Omkar Kesarkhaneandsai nikhil kethe 9a260f8efb fix: Trace Details UI improvements (#10550)
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2026-02-18 20:25:32 +05:30
Subhra264 8cb262a865 fix: alert destination UI consistency issues (#10551)
Fixes the following two issues - 
- In alert prebuilt destination, word Slack follow theme and Custom does
not. Either both should or both should not.
- During alert destination creation, the tick mark is overlapping with
text
2026-02-18 18:59:47 +05:30
+2 7ac02698e9 fix: Large log lines main (#10533)
Co-authored-by: Subhra264 <chakrabortysubhradeep556@gmail.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
Co-authored-by: Loakesh Indiran <66478092+Loaki07@users.noreply.github.com>
Co-authored-by: Chaitanya Sistla <122406662+chaitanya-sistla@users.noreply.github.com>
Co-authored-by: mmosarafO2 <mosraf@openobserve.ai>
Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
Co-authored-by: Harsh Mahajan <115500013+007harshmahajan@users.noreply.github.com>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-18 13:02:17 +05:30
Bhargavandgithub-actions[bot] 94ade6598a fix: Correlation error message fix (#10511)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-18 11:37:35 +05:30
6fec6e2314 feat: adding 1-click data onboarding capabilities (#10331)
### **User description**
**Summary**
This PR enhances the dashboard import functionality and improves cloud
provider integration pages (AWS and Azure) by simplifying the UI, adding
dashboard management features, and improving the template import
workflow.

Design at : data-sources

**Changes**

- Dashboard Template Import - Folder Management: Added folder creation
capability in template import flow. Integrated "+" button next to folder
dropdown in "Select Destination Folder" dialog.
- Imported and integrated AddFolder component for creating new folders
during import. Added showAddFolderDialog state management.
- Implemented updateFolderList function to refresh folders and
auto-select newly created folder.
- AWS Integration Page Improvements: Enabled dashboards for 9 AWS
services: Multiple services now have hasDashboard: true and
dashboardGithubUrl configured. Removed redundant notice text from AWS
Quick Setup component. Removed "Currently includes CloudTrail, WAF, and
ALB" notice as all services are now included
- Azure Integration Page Overhaul: Simplified Azure integration to Quick
Setup only. Added Microsoft O365 Dashboard Integration.
- Added "Add Dashboard" button to deploy Microsoft O365 dashboard that
creates "Microsoft" folder automatically if it doesn't exist.

**Testing**

- Folder creation works in template import flow
- New folder is auto-selected after creation
- Button alignment is correct (aligned with dropdown input box)
- Azure dashboard successfully adds to Microsoft folder
- Duplicate detection works correctly
- Replace confirmation dialog appears on second import
- Dashboard replacement deletes old version and creates new one
- Success notifications show correct messages

<img width="1405" height="483" alt="image"
src="https://github.com/user-attachments/assets/6dc195f0-f572-4ec8-8e66-834728dd5cc2"
/>
<img width="1405" height="776" alt="image"
src="https://github.com/user-attachments/assets/aa600f38-6ed0-422b-8a3f-3c8c8ccf009e"
/>
<img width="1405" height="776" alt="image"
src="https://github.com/user-attachments/assets/2a0e41c2-071e-4d1d-856d-ba7423dd47ce"
/>
<img width="642" height="823" alt="image"
src="https://github.com/user-attachments/assets/02535e29-5fd9-4965-8e80-a211e3cb4ad6"
/>


___

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


___

### **Description**
- Add AWS one-click CloudFormation integrations UI

- Add GitHub dashboard gallery import flow

- Cache GitHub dashboards and JSON payloads

- Improve Kubernetes onboarding with quick install


___

### Diagram Walkthrough


```mermaid
flowchart LR
  ui["Ingestion UI (Recommended/AWS/Azure)"]
  awsMeta["`awsIntegrations` metadata + URL helpers"]
  azureMeta["`azureIntegrations` metadata + URL helpers"]
  awsTiles["AWS tiles/grid (Quick + Individual)"]
  cf["AWS CloudFormation console URL"]
  azFunc["Azure Function setup guide"]
  ghDlg["Add dashboard from GitHub dialog"]
  storeCache["Vuex `githubDashboardGallery` cache"]
  dashAPI["Dashboards API (folders/create/delete/list)"]

  ui -- "renders" --> awsTiles
  awsTiles -- "uses" --> awsMeta
  awsTiles -- "opens" --> cf
  ui -- "uses" --> azureMeta
  ui -- "links to" --> azFunc
  ui -- "opens" --> ghDlg
  ghDlg -- "reads/writes" --> storeCache
  ghDlg -- "imports/replaces" --> dashAPI
```



<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>18
files</summary><table>
<tr>
<td><strong>awsIntegrations.ts</strong><dd><code>Add AWS integrations
catalog and URL generators</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-28cd591383f0560fc2b37219eeedbc80b667989c030984a8618594329848bde8">+391/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ingestionSearchIndex.ts</strong><dd><code>Add cross-tab
ingestion search index utility</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/10331/files#diff-d9a547e4c64ac12bc06a95d788a2e4368c41d9dd1f22bc8705724f077b0eade3">+105/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>azureIntegrations.ts</strong><dd><code>Add Azure
integrations catalog and dashboard URL helper</code>&nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-d187fe67343b508f89aec6b7e520f1971aec9849fd070831534b1de202833b60">+207/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>index.ts</strong><dd><code>Add Vuex cache for GitHub
dashboard gallery</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/10331/files#diff-955a15c7ee060f1545e82be22911dd0c14307dee5a70071a394e9fd583bd2c55">+29/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AWSIntegrationTile.vue</strong><dd><code>Add AWS integration
tile with source/dashboard actions</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-34515c48d3727cb3facedf8f05a351733567e919da4cd60bef79e1d486054f6a">+648/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AddDashboardFromGitHub.vue</strong><dd><code>Implement
GitHub dashboard gallery selection and import</code>&nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-37970cb4aec33b981b09e86f70f1b5565123d451f6438eadf874b33c201355a8">+557/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AzureQuickSetup.vue</strong><dd><code>Add Azure Function
quick setup and O365 dashboard</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-2d6a495b3f5a485e0f1d11b9a5b57e9bc1e13a94e4346bebabd287ece643032f">+420/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>KubernetesConfig.vue</strong><dd><code>Add Kubernetes quick
install and parameterized commands</code>&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-7afbbe1e38d62a976fcbe23f28c3e33a6d3e90188d5edcb743e936f920ec7dd5">+180/-74</a></td>

</tr>

<tr>
<td><strong>AWSConfig.vue</strong><dd><code>Add AWS Quick Setup and
Individual Services tabs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-e9d4a14ebc9a1b239523d8f94996e6002369969f6df78cb1051e0d1f807e108f">+93/-94</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>Recommended.vue</strong><dd><code>Remove recommended tab
search/filtering UI</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/10331/files#diff-d52f7f52bf8f6d3d639e5d0a550bed82223cd4fbd3eee3c257b7f80e0b8ee6d2">+1/-26</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AWSQuickSetup.vue</strong><dd><code>Add AWS quick setup
onboarding view</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/10331/files#diff-91dd9fc2d50c5dd716d42b908660208082cd7f513cb8990b3d8e851ac5acc767">+381/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AzureIntegrationTile.vue</strong><dd><code>Add Azure
integration tile component for services</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-40a88b76dfbb75f55b54468527f0d83da862b22f69f3eed96eea2215ec145f21">+223/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AWSIndividualServices.vue</strong><dd><code>Add AWS
individual services list and search</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-5ba31c962ffdff7d38a95dc6608e9eaf68093f15ef1e4961c4dc87f5f336dff4">+162/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AWSIntegrationGrid.vue</strong><dd><code>Add grid layout for
AWS integration tiles</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/10331/files#diff-da23909bedefc9696907a26858c4c90489d54006c65137c73288230af1e39c26">+162/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AzureIndividualServices.vue</strong><dd><code>Add Azure
individual services list and search</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-befd207c228eb542159696859b04b530c82797cf06d9d993eabf0446856d3610">+137/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>Ingestion.vue</strong><dd><code>Integrate ingestion global
search/navigation updates</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-97b8e8ed2a1260a39442563c7447d4f6d4830a37d47258920d6f94a292cd2d77">+102/-1</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>Dashboards.vue</strong><dd><code>Hook GitHub gallery import
into dashboards view</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-8da3187db8ce3d795d0f196ede6b2290221ffa3e27b15dcc2b645e44dd196213">+33/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AzureConfig.vue</strong><dd><code>Refresh Azure ingestion
page for new quick setup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-64b4a0743d67556bf2e34fb4be69af8e1a2e8be66e3ff18c3f3e61d211f70292">+22/-16</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>AWSConfig.spec.ts</strong><dd><code>Update AWS config tests
for new 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; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10331/files#diff-a40ad271f4e88e42c4e746b5ce54ef0dceca122bedf3f9fa1f0571765001c680">+49/-98</a>&nbsp;
</td>

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

</details>

___

---------

Co-authored-by: mmosarafO2 <mosraf@openobserve.ai>
Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2026-02-17 22:22:29 +05:30
Subhra264 13d193b4aa fix: alert destination test button should call destination test api (#10529)
Currently, on the UI when the test destination button is clicked for a
prebuilt email destination, it does not do anything at all. Instead, it
should call the test destination api. Also, this destination api does
not handle email destination testing, this pr fixes this as well.
2026-02-17 18:33:38 +05:30
Ashish Kolhe e9785af1f0 fix: ai chat telemetry (#10546) 2026-02-17 17:37:59 +05:30
Subhra264 aaa544620a fix: support multiple custom roles in single org in sso claim parser (#10327)
### **PR Type**
Bug fix

- Support multiple custom roles in single org through the sso claim
parser vrl function.
- Do not allow passing organization name as the organization id in the
sso claim parser.


___

### **Description**
- Support multiple roles per organization

- Group custom roles by org reliably

- Fix tuple creation for multi-role orgs


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["SSO custom_roles claims"] --> B["Parse with split_once(\"/\")"]
  B --> C["Group into HashMap<org, Vec<role>>"]
  C -- "per org" --> D["Format roles as \"org/role\""]
  D --> E["Create role-assignment tuples"]
```



<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>jwt.rs</strong><dd><code>Group custom roles per org for
tuples</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

src/handler/http/auth/jwt.rs

<ul><li>Replace <code>HashMap<String, String></code> with
<code>HashMap<String, Vec<String>></code><br> <li> Parse
<code>custom_roles</code> via <code>split_once('/')</code> into org-role
lists<br> <li> Reuse grouped roles to build <code>"org/role"</code>
tuples<br> <li> Apply same grouping for existing users flow</ul>


</details>


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

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

</details>

___
2026-02-17 16:29:58 +05:30
dd8d3ffa14 fix: add alert revamp (#10470)
### **PR Type**
Enhancement, Bug fix, Tests


___

### **Description**
- Add HAVING tree to `result_schema` responses
  - Add extractor logic and extensive tests

- Revamp alert preview charts for SQL/PromQL

- Show schema-driven threshold labels and context

- Allow env override for preview time range


___

### Diagram Walkthrough


```mermaid
flowchart LR
  uiSettings["AlertSettings.vue threshold UI"] -->|"calls"| apiSchema["/result_schema API"]
  apiSchema -->|"returns group_by + having"| dfExtractor["DataFusion plan visitor"]
  dfExtractor -->|"builds"| havingTree["HavingNode logical tree"]
  uiPreview["PreviewAlert.vue chart + evaluation"] -->|"uses"| apiSchema
  uiPreview -->|"renders via"| panelRenderer["PanelSchemaRenderer"]
  panelRenderer -->|"options merged"| chartOptions["convertSQLData custom_chart_options"]
  envCfg["ZO_ALERT_PREVIEW_TIMERANGE_MINUTES"] -->|"drives"| uiPreview
```



<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>alertSummaryGenerator.ts</strong><dd><code>Reorder summary,
improve realtime wording</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/10470/files#diff-a4464ad7df3ac3afdca4e6fc583122d701bace10e3a2daf083cb6c902565b20f">+28/-12</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>convertSQLData.ts</strong><dd><code>Merge per-panel custom
chart options</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/10470/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3">+23/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>projections.rs</strong><dd><code>Extract top-level HAVING as
structured tree</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/10470/files#diff-7a0420d3649da44b80be36d7f1043d6ff81d88395c961266882c3c700f7edff7">+570/-3</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>search.rs</strong><dd><code>Add `HavingNode` and
`LogicalOperator` schema</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+26/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Expose HAVING schema and preview
config</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
  <td><a href=""></a></td>

</tr>

<tr>
<td><strong>AlertSettings.vue</strong><dd><code>Schema-aware threshold
UI and i18n tooltips</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/10470/files#diff-1d5bfd6a1ea672884193649b1271d751d6f3b8ec84af759071c9bfd169a8ab28">+357/-405</a></td>

</tr>

<tr>
<td><strong>PreviewAlert.vue</strong><dd><code>SQL/PromQL preview
rendering and robust evaluation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-760f5f0a261910f17eb167f81802e8a52477b99a83d2d7fc1aeefc7185801795">+684/-53</a></td>

</tr>

<tr>
<td><strong>AlertList.vue</strong><dd><code>Replace details drawer with
history dialog</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/10470/files#diff-be3e41b823e163b226ffc270d95cc4981e59c600851e4e0d10ee5e4ee994ac8e">+39/-176</a></td>

</tr>

<tr>
<td><strong>AddAlert.vue</strong><dd><code>Alert wizard integration
updates for preview</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/10470/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+148/-144</a></td>

</tr>

<tr>
<td><strong>AlertHistoryDrawer.vue</strong><dd><code>New reusable alert
details/history drawer logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-895e1bf3f8edac33d414f99c6c88bbae1098edbadf6d28e6f82a29033ed17ac0">+384/-298</a></td>

</tr>

<tr>
<td><strong>AlertSummary.vue</strong><dd><code>Align UI summary
rendering with generator output</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-c22aa1c5934b763f1d4a5a61a7e810b6bcb1d60b76b64c61cb3ce89dc0a04499">+5/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AlertHistory.vue</strong><dd><code>Alert history view
updates to new drawer flow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-1efacbab3b15dacfc79063c799c30b04bf3b75415055f892203e8cf1cb414450">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>FilterGroup.vue</strong><dd><code>Filter builder tweaks
supporting alert wizard changes</code>&nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-8d5a73bea3aa0b5c86d48cda4a61ee3e30f27797ac2a5add1ee8bd66c75bef23">+7/-5</a>&nbsp;
&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>config.rs</strong><dd><code>Add env override for preview
time range</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/10470/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>4 files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Fix PromQL evaluation using
operator semantics</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-ba9b65130898444f7815fd6068bdb0dc590612f74cc893f79d91b0afc44cc851">+29/-23</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>alert.rs</strong><dd><code>Remove custom aggregation
auto-threshold override</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-574be3504bf4d855c65fd3d7a10797a970237ff552edac4962b474b3983e094e">+1/-7</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AlertWizardRightColumn.vue</strong><dd><code>Wizard right
column rerender/placement adjustments</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-f599a1960d1ac37e352854ad368d23e080b3cec2b217df22f40d0e15a4db6986">+158/-19</a></td>

</tr>

<tr>

<td><strong>{QueryConfig.vue,CompareWithPast.vue,Advanced.vue}</strong><dd><code>Wizard
step wiring and preview refresh fixes</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
  <td><a href=""></a></td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>*.json</strong><dd><code>Add/update alert revamp translation
strings</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
  <td><a href=""></a></td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>16 files</summary><table>
<tr>
  <td><strong>mod.rs</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

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

</tr>

<tr>
  <td><strong>Advanced.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-eae849f0bf6c8868f5640ce1d74862284d8e8a5330e5046c0c437e6672f4f676">+4/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>CompareWithPast.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-6606848e30caef2cda13d65cb30d6590205556259e7e6daf39cada825502d55b">+27/-27</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>QueryConfig.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-7273c8de49b8ebf706d7bee5b275c75818c0493f41c73f00c55efe667cbd00d9">+432/-10</a></td>

</tr>

<tr>
  <td><strong>de.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264">+97/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>en.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+99/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>es.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778">+97/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>fr.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2">+97/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>it.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d">+97/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>ja.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3">+97/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>ko.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48">+97/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>nl.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906">+97/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>pt.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815">+97/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>tr.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818">+97/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>zh.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e">+97/-2</a>&nbsp;
&nbsp; </td>

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

</details>

___




### E2E Tests Added

| # | Spec File | Test Name |
|---|-----------|-----------|
| 1 | `alerts-scheduled-features.spec.js` | Alert details dialog opens
with history and action buttons work |
| 2 | `alerts-scheduled-features.spec.js` | Create scheduled alert with
aggregation via Builder |
| 3 | `alerts-scheduled-features.spec.js` | Create scheduled alert with
PromQL query |
| 4 | `alerts-scheduled-features.spec.js` | SQL mode preview renders
chart |
| 5 | `alerts-scheduled-features.spec.js` | Would Trigger indicator
displays for scheduled alerts |
| 6 | `alerts-scheduled-features.spec.js` | Aggregation toggle off
clears group-by fields |

---------

Co-authored-by: Ashish Kolhe <ashish.j.kolhe@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Subhradeep Chakraborty <chakrabortysubhradeep556@gmail.com>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 10:20:14 +05:30
Sai Nikhil c2651660e9 fix: dimensions not visible for incident detail main (#10451)
### **PR Type**
Bug fix


___

### **Description**
- Use `sortedAlertsByTriggerCount` to drive Dimensions height

- Ensure Dimensions visible when triggers absent


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["IncidentDetailDrawer layout"] --> B["Height condition logic"]
  B -- "checks" --> C["sortedAlertsByTriggerCount length"]
  C -- "sets" --> D["Dimensions panel height"]
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>IncidentDetailDrawer.vue</strong><dd><code>Correct
Dimensions panel height conditional</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/alerts/IncidentDetailDrawer.vue

<ul><li>Replace topology/triggers check with
<br><code>sortedAlertsByTriggerCount?.length</code><br> <li> Prevent
incorrect sizing hiding Dimensions panel</ul>


</details>


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

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

</details>

___
2026-02-16 13:43:24 +05:30
Sai Nikhil 7f5215744d fix: clear cache when we load the data (#10528)
This PR fixes the issue when user changes the stream on servicegraph it
should render the actual data from api not from cache
2026-02-16 12:48:28 +05:30
Bhargav 524606e4f0 fix: insight page baseline vs selected time range (#10514) 2026-02-13 19:38:07 +05:30
udev b0eac49a3a fix: [ITER 2] O2 Assistant improvements (#10473) 2026-02-13 17:53:05 +05:30
ByteBakerandgithub-actions[bot] cf98c39c81 fix: semantic groups, service graph, dedup, dashboard cleanup (#10502)
## Summary
- **Semantic Groups**: add JSON export button, fix broken JSON import
(`handleJsonUpdate` was a no-op), fix "Applied 0 changes" toast bug
- **Service Graph**: remove unused `availableStreams` from
`build_topology` return and API response, skip `_`-prefixed orgs in
processor
- **Dedup Config**: change `time_window_minutes` from `Option<i64>` to
`Option<i32>`, add `deserialize_optional_i32` for defense-in-depth,
sanitize empty/NaN values on frontend before sending
- **Dashboard**: remove dead `/export` endpoint (identical to GET,
unused by frontend)

## Test plan
- [x] Semantic groups: export downloads JSON, import with file upload
works, import shows correct change count
- [x] Service graph: topology loads, stream dropdown works (populated by
`loadTraceStreams`)
- [x] Dedup: clearing time window field and saving no longer returns 422
- [x] Dashboard: GET `/{dashboard_id}` still works, `/export` route
removed
- [x] `cargo check` clean, `cargo clippy` clean

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-13 12:42:41 +05:30
Bhargav ba2329b27e fix: removed console log statements (#10499) 2026-02-13 10:43:30 +05:30
Bhargav 85cf946426 fix: fix for switch between pattern to logs showing more logs (#10492) 2026-02-12 18:22:35 +05:30
ktx-vaidehiandClaude Sonnet 4.5 bc80d409e6 fix: dashboard support custom type variables as parents in variable dependencies (#10481)
### **User description**
When using custom type variables (custom, constant, textbox) as parent
variables for query_values variables (e.g., using custom variables for
query_values), the dependent children weren't loading on initial page
load.

Root cause:
1. Custom type variables weren't marked as pending during initialization
2. Manager didn't recognize custom types as non-API variables that load
synchronously
3. finalizeVariableLoading wasn't notifying manager on completion

Fixes:
1. Mark custom/constant/textbox variables as pending so they load and
notify the manager
2. Expand non-API type detection to include custom type variables, not
just query_values with custom/all defaults
3. Add manager notification in finalizeVariableLoading, but only on
first load to avoid triggering children on dropdown reopens
4. Pass isInitialLoad to finalizePartialVariableLoading for proper child
loading


___

### **PR Type**
Bug fix


___

### **Description**
- Mark custom-type variables as pending

- Treat non-API parents as preloaded

- Notify manager only on first load

- Pass `isInitialLoad` to partial finalize


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Variables initialization"] --> B["Mark non-API variables pending"]
  B --> C["VariablesValueSelector loads values"]
  C --> D["Finalize partial loading (initial-load aware)"]
  D --> E["Notify manager on first load"]
  E --> F["Trigger dependent children loading"]
```



<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>useVariablesManager.ts</strong><dd><code>Load non-API
variable types during initialization</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/dashboard/useVariablesManager.ts

<ul><li>Mark
<code>custom</code>/<code>constant</code>/<code>textbox</code> as
pending<br> <li> Expand “non-API parent” detection logic<br> <li>
Include <code>dynamic_filters</code> as non-API parent<br> <li> Enable
child pending when all parents non-API</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10481/files#diff-95f6bdeb96f8454bdff53bb60cafe6851b0cda450591813dd4dfb2038c4f3d50">+27/-13</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>VariablesValueSelector.vue</strong><dd><code>Gate
manager notifications to first load</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/VariablesValueSelector.vue

<ul><li>Pass <code>isInitialLoad</code> into
<code>finalizePartialVariableLoading</code><br> <li> Compute
<code>isFirstLoad</code> from partial-loaded state<br> <li> Notify
manager only on initial successful load<br> <li> Avoid triggering
children on dropdown reopen</ul>


</details>


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

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

</details>

___

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 15:31:19 +05:30
ktx-vaidehi 3c6774ce7c perf: dashboard sql data (#10482)
### **PR Type**
Enhancement


___

### **Description**
- Speed up series generation via lookup map

- Optimize heatmap z-values with composite keys

- Preserve original "first match" behavior


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["`missingValueData` / `searchQueryData[0]` rows"]
  B["Prebuilt lookup maps (`Map`)"]
  C["Series data generation (`getSeriesData`)"]
  D["Heatmap z-values matrix (`zValues`)"]
  A -- "single pass build" --> B
  B -- "O(1) row retrieval" --> C
  B -- "O(1) row retrieval" --> D
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>convertSQLData.ts</strong><dd><code>Replace nested
scans with lookup maps</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/utils/dashboard/convertSQLData.ts

<ul><li>Add <code>buildDataLookupMap()</code> for series retrieval<br>
<li> Refactor <code>getSeriesData</code> to use O(1) lookups<br> <li>
Add heatmap composite-key map for <code>zValues</code><br> <li> Keep
first-occurrence selection semantics</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10482/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3">+58/-24</a>&nbsp;
</td>

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

</details>

___
2026-02-12 14:14:11 +05:30
ktx-vaidehi 84cc45bf3c fix: dashboard table chart pagination hide for printmode (#10471)
### **PR Type**
Bug fix


___

### **Description**
- Hide table pagination in print mode

- Apply printMode checks across table panels


___

### Diagram Walkthrough


```mermaid
flowchart LR
  PM["store.state.printMode"]
  PSR["PanelSchemaRenderer.vue"]
  PQT["PromQLTableChart.vue"]
  TR["TableRenderer show-pagination"]
  TPC["TablePaginationControls show-pagination"]
  PM -- "disables pagination when true" --> TR
  PM -- "disables controls when true" --> TPC
  PSR -- "passes computed show-pagination" --> TR
  PQT -- "passes computed show-pagination" --> TR
  PQT -- "passes computed show-pagination" --> TPC
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>PanelSchemaRenderer.vue</strong><dd><code>Disable table
pagination while printing</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelSchemaRenderer.vue

<ul><li>Gate <code>show-pagination</code> with
<code>!store.state.printMode</code><br> <li> Keeps pagination
configurable outside print mode</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>PromQLTableChart.vue</strong><dd><code>Hide pagination
and controls in print mode</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/dashboards/panels/PromQLTableChart.vue

<ul><li>Gate <code>TableRenderer</code> pagination with
<code>!store.state.printMode</code><br> <li> Gate
<code>TablePaginationControls</code> visibility with print mode<br> <li>
Add Vuex <code>useStore()</code> and expose <code>store</code></ul>


</details>


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

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

</details>

___
2026-02-12 12:44:28 +05:30
Bhargav 0593644a6e fix: Issue 1208 correlation UI (#10484) 2026-02-12 11:12:02 +05:30
Sai Nikhil f9b745764b fix: use search time range for trace id (#10485)
### **PR Type**
Bug fix


___

### **Description**
- Pass time range to trace details


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Service graph side panel"] 
  B["Trace details route"] 
  C["Query params include from/to"] 
  A -- "on trace click" --> B
  B -- "adds time range" --> 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>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>ServiceGraphSidePanel.vue</strong><dd><code>Include
selected time range in trace navigation</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/traces/ServiceGraphSidePanel.vue

<ul><li>Add <code>from</code> query param from
<code>props.timeRange.startTime</code><br> <li> Add <code>to</code>
query param from <code>props.timeRange.endTime</code></ul>


</details>


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

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

</details>

___
2026-02-11 23:29:07 +05:30
9d8ad1d265 fix(incidents): widen correlation_key column, fix trace ID extraction, and clean up incident UI (#10477)
## Summary

This PR bundles several incident and log correlation fixes:

- **DB migration**: Widen `alert_incidents.correlation_key` from
`varchar(64)` to `varchar(128)` (Postgres raw SQL, MySQL SeaORM alter,
SQLite no-op) and bump `DB_SCHEMA_VERSION` to 30. Correlation keys use
prefixed formats (`SCOPE:` + 64-char hash = 70+ chars) that exceeded the
previous limit, causing `upgrade_incident_correlation` to fail.
- **Incident detail UI**: Remove the redundant refresh button/bar from
the correlated logs tab; hide search-term and dimension-filter actions
in the incident logs view since they don't apply in that context; remove
`cursor: help` from the badge overflow indicator.
- **Trace ID extraction fix**: Merge log record fields into
`availableDimensions` (in both `SearchResult.vue` and
`TraceDetailsSidebar.vue`) so trace ID extraction no longer fails when
the trace ID lives in log record fields rather than stream filters.
- **`hideSearchTermActions` prop plumbing**: Add the prop to
`JsonPreview.vue`, pass it through `TenstackTable.vue`, and enable
search-term actions in `DetailTable.vue` correlation view while hiding
them in the incident drawer.
- **Locale key rename**: Rename `rowsPerPage` to `recordsPerPage` across
all 12 language files for consistency.

## Test plan
- [ ] Migration unit tests pass for MySQL and PostgreSQL SQL generation
- [ ] Deploy to test env and verify incidents populate
`stable_dimensions` on next alert cycle
- [ ] Verify incident logs tab no longer shows the refresh bar
- [ ] Verify trace ID extraction works from log correlation in both logs
and traces views
- [ ] Verify "Records per page" label renders correctly in all locales

---------

Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
Co-authored-by: omkark06 <omkar@zinclabs.io>
Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2026-02-11 18:30:48 +05:30
Omkar Kesarkhane fe4ede3cbf fix: sort logs when response has order_by_metadata in streaming (#10459)
### **PR Type**
Bug fix

#9664 

___

### **Description**
- Sort streaming hits using `order_by_metadata`

- Add reusable `sortResponse` sorting helper

- Handle timestamp parsing for consistent ordering


___

### Diagram Walkthrough


```mermaid
flowchart LR
  ws["WebSocket streaming hits"] 
  meta["`order_by_metadata` present"] 
  sort["`sortResponse()` sort hits array"] 
  ui["Refresh pagination and render"]
  ws -- "append hits" --> meta
  meta -- "sort by fields + timestamp" --> sort
  sort -- "sorted hits" --> ui
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>usePagination.ts</strong><dd><code>Export
`sortResponse` from pagination composable</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useLogs/usePagination.ts

- Expose `sortResponse` in returned API


</details>


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

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>useSearchPagination.ts</strong><dd><code>Add
`order_by_metadata` sorting utility for hits</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useLogs/useSearchPagination.ts

<ul><li>Add types for <code>order_by_metadata</code> entries<br> <li>
Implement timestamp normalization to microseconds<br> <li> Add
<code>sortResponse()</code> multi-field comparator<br> <li> Export
<code>sortResponse</code> from composable</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10459/files#diff-534c129a0729577d1d4ead9f9041cf573243c1584621a1003fe77c1d6b118437">+76/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>useSearchResponseHandler.ts</strong><dd><code>Apply
sorting for streaming search results</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/composables/useLogs/useSearchResponseHandler.ts

<ul><li>Import <code>sortResponse</code> from
<code>useSearchPagination</code><br> <li> Sort <code>hits</code> when
<code>order_by_metadata</code> provided<br> <li> Gate sorting on
configured timestamp column</ul>


</details>


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

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

</details>

___
2026-02-11 13:38:03 +05:30
ByteBaker 48a7f15bb0 fix(incidents): use system_settings as single source of truth for semantic groups
The incident correlation code was reading semantic field groups from the
dedup config DB table (alert_config/{org}/deduplication), which held a
stale copy of 45 groups missing critical entries like service, k8s-cluster,
k8s-deployment, and k8s-namespace. Meanwhile, the UI and API read from
system_settings (/settings/v2/semantic_field_groups) which had the correct
51 groups. This mismatch caused all incidents to have empty
stable_dimensions, falling back to alert_id-based isolation with no
correlation.

Root cause: two independent storage locations for semantic groups that
were never kept in sync. The dedup config was written once and never
updated when users modified groups through the UI.

Changes:

Backend — single source of truth:
- incidents.rs: read semantic groups from system_settings, not dedup config
- deduplication.rs: same fix for alert deduplication fingerprinting
- org_config.rs: remove get_semantic_groups/initialize_semantic_groups
  (dead code that copied groups into the dedup config)
- deduplication.rs (config struct): remove semantic_field_groups field
  from GlobalDeduplicationConfig entirely; enterprise functions now take
  &[SemanticFieldGroup] as a separate parameter
- Remove duplicate SemanticFieldGroup tests from dedup module (covered
  in correlation.rs home module)

Correlation reasons — rename for clarity:
- ManualExtraction split into ScopeMatch and WorkloadMatch based on
  which dimension type drove the correlation key
- Temporal renamed to TraceBased (it correlates by trace_id, not time)
- HierarchicalUpgrade removed (was a join strategy, not a reason;
  original reason now flows through from correlate_alert)
- New AlertId reason for the fallback case (no dimensions found)

Key format — standardized [KIND]:[key]:
- SCOPE:{hash}, WORKLOAD:{hash}, SD:{hash}, TRACE:{trace_id}, ALERT:{id}
- KeyType::classify updated to parse all prefixes

Frontend:
- Badge colors: blue/teal/purple/orange/grey for the 5 reasons
- Tooltips added to each correlation reason badge explaining what it means
- TypeScript types and en.json i18n updated
2026-02-10 23:57:19 +05:30
ktx-vaidehi 838856187f fix: table chart print mode css issue (#10462)
### **PR Type**
Bug fix


___

### **Description**
- Fix table panel print overflow clipping

- Prevent table wrapper page break inside


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["TableRenderer styles"] 
  B["Add .table-wrapper sizing/positioning"] 
  C["Print media overflow/max-height rules"] 
  A -- "introduce wrapper styles" --> B
  A -- "apply print-specific constraints" --> 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>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>TableRenderer.vue</strong><dd><code>Add print-safe
styling for table wrapper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/panels/TableRenderer.vue

<ul><li>Add <code>.table-wrapper</code> full-size relative layout<br>
<li> Add <code>@media print</code> rules to hide overflow<br> <li>
Constrain print height and avoid page breaks</ul>


</details>


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

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

</details>

___
2026-02-10 22:55:38 +05:30
Omkar Kesarkhane d021db325b fix: Redirection to trace details from logs correlation (#10403)
### **PR Type**
Bug fix, Tests, Enhancement


___

### **Description**
- Preserve log stream when opening trace details

- Auto-select correlated log stream in UI

- Prevent null RUM session replay crash

- Expand TraceDetails mode/prop test coverage


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["TelemetryCorrelationDashboard (embedded trace)"]
  B["TraceDetails (embedded)"]
  C["TraceDetails route (standalone)"]
  D["TraceDetails loadLogStreams auto-select"]
  A -- "passes `correlated-log-stream`" --> B
  B -- "expand: open new window + `log_stream` query" --> C
  C -- "reads `log_stream` query" --> D
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>TraceDetails.vue</strong><dd><code>Preserve correlation
log stream on navigation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/traces/TraceDetails.vue

<ul><li>Add <code>correlatedLogStream</code> prop for correlation
context<br> <li> Auto-select <code>log_stream</code> from route
query<br> <li> Fix <code>redirectToSessionReplay</code> null session
guard<br> <li> Open expanded view via <code>router.resolve</code> +
<code>window.open</code></ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10403/files#diff-bc7fe6b6339ee2cde6494c0982d4b860847447e79f7431f07d598e0446df06f2">+135/-77</a></td>

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>

<summary><strong>TelemetryCorrelationDashboard.vue</strong><dd><code>Pass
log stream context to TraceDetails</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/correlation/TelemetryCorrelationDashboard.vue

<ul><li>Provide <code>:correlated-log-stream</code> when embedding
TraceDetails<br> <li> Include <code>log_stream</code> in trace-details
new-window URL<br> <li> Simplify tooltip to use
<code>correlation.viewInTraces</code></ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10403/files#diff-b77a766fa0094f641873071a8f13c73704933b941f387ed105e85a4e59efdb38">+23/-9</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>TraceDetails.spec.ts</strong><dd><code>Add extensive
TraceDetails prop and flow tests</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/traces/TraceDetails.spec.ts

<ul><li>Add embedded/standalone mode behavior tests<br> <li> Cover
correlation params, expand, and URL building<br> <li> Add edge-case
coverage for redirects and filtering<br> <li> Add RUM span formatting
and search navigation tests</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10403/files#diff-beb61b6b044829d77ec5f0feabdd2b5ff980cc4f2b1ba8a809617b765f086c2b">+1606/-0</a></td>

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>en.json</strong><dd><code>Remove unused correlation
tooltip translation key</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/locales/languages/en.json

- Delete `correlation.viewInTracesTooltip` string entry


</details>


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

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

</details>

___
2026-02-10 20:38:58 +05:30