Commit Graph
467 Commits
Author SHA1 Message Date
Omkar Kesarkhane 663ab7bacc fix: In traces prevent duplicate filter when same field condition is reapplied (#10894) 2026-03-13 21:38:06 +08:00
Sai Nikhil fdd3d91016 fix: service graph v2 UI (#10889) 2026-03-13 13:58:58 +05:30
Sai Nikhil d2861433fa fix: search inspector UI (#10749) 2026-03-13 09:57:29 +08:00
Omkar Kesarkhane 54d00d5e78 fix: Traces span kind mapping (#10838) 2026-03-11 23:07:42 +05:30
ktx-vaidehi b7ab4f4377 fix: dashboard series color for multi window (#10846)
- #10847
2026-03-11 12:42:55 +05:30
ae988c7219 feat: Search on all spans in Traces (#10826)
Design at: Traces

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Omkar Kesarkhane <undefined@users.noreply.github.com>
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2026-03-10 22:34:50 +05:30
a5533226be feat: Traces list UI improvements (#10735)
Design at : traces

1. Added Pagination
2. Add support to sort traces by duration and timestamp

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Omkar Kesarkhane <undefined@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 11:46:52 +05:30
Omkar Kesarkhane 26bc1c4b13 fix: traces table llm keys formatting (#10787) 2026-03-07 17:42:06 +05:30
Bhargav 66d68ce9fb fix: 10744 add metric grouping in metrics correlation tab infra network others (#10767) 2026-03-06 11:10:06 +05:30
ktx-vaidehi 108cc3b2e1 refactor: dashboard long files (#10680) 2026-03-05 19:37:14 +05:30
e9c39a4295 feat: cross linking support for dashboards and logs page (#10652)
Design at:
https://github.com/openobserve/designs/tree/main/cross-linking

---------

Co-authored-by: loaki07 <rustyloaki@gmail.com>
Co-authored-by: Loakesh Indiran <66478092+Loaki07@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-05 16:17:31 +05:30
Sai Nikhil 4a8a769232 fix: dual encoding of vrl while saving alert (#10734)
1. This PR fixes the issue which is when saving alert we are encoding
the vrl function 2 times which is not correct and should only be 1 time
.
2026-03-05 00:19:28 +05:30
418ccaa01e fix: llm evaluations (#10612)
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 17:55:01 +05:30
ByteBaker 877ffa3926 feat: add notification support for incidents (#10715) 2026-03-02 19:46:48 +08:00
Omkar KesarkhaneandBhargav d1190b1549 fix: traces color generation (#10693)
Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
2026-02-28 05:31:56 +05:30
Bhargav 72b90a93e3 fix: Feat nlp mode (#10638) 2026-02-27 18:26:36 +08:00
ByteBaker 57d8f58a41 feat(service-graph): prev-slot baseline latency for edge coloring
Backend:
- Add `baseline_p50/p95/p99_latency_ns: Option<u64>` to `ServiceEdge`; omitted when None
- `get_current_topology` queries the previous time slot (same duration, one slot older)
  serially after the current-window query, aggregates per-edge weighted-average latency,
  and attaches the result as baseline fields on each edge
- `aggregate_baselines` computes `SUM(pXX * requests) / SUM(requests)` per client→server pair
- `EdgeTrendResponse` drops `p50_avg/p95_avg/p99_avg`; history endpoint now returns raw data points only
- Update `build_topology` signature and all call sites (incidents.rs) to accept baselines map
- Reduce duplicate topology API calls on page load by adding a loading guard

Frontend:
- Populate `edgeBaselines` from topology response `baseline_p95_latency_ns` instead of from history endpoint
- Edge color in graph and tree modes uses baseline ratio (>2× = light red, >1.5× = orange, within = green),
  falling back to absolute p95 thresholds when no baseline is available
- Edge color is now latency-only; error rate coloring is for nodes only
2026-02-26 17:07:34 +05:30
ByteBaker 75a56bf496 feat: service graph edge latency trend & interaction overhaul
Backend:
- New enterprise-only endpoint: GET /{org_id}/traces/service_graph/edge/history
- Returns time-series P50/P95/P99 latency with request-count-weighted baselines
- OSS returns 403; empty result returned gracefully if stream doesn't exist

Frontend — Interaction Model:
- Click-to-panel replaced with hover tooltip for edge interactions
- Tooltip shows compact stats (request count, error rate, latencies) on hover
- "Show trend" button fetches and renders a live P50/P95/P99 sparkline inline
- Tooltip stays open when moused-over; results cached per edge key
- Edge panel component retained, now includes its own latency trend chart section

Frontend — Edge Coloring:
- Edges now colored relative to 24h weighted-average P95 baseline when available
- Falls back to absolute threshold coloring when no baseline data exists

Frontend — Chart Rendering:
- Switched to SVG render mode for sharper output
- devicePixelRatio passed to chart init to fix blurry Retina display rendering
- View type switch no longer recreates chart (no chartKey increment); prevents replay of expand animation
- Tooltip handlers re-registered after every view switch for both tree and graph modes

Tests:
- Updated to reflect removed edge panel flow
- chartKey stability on view switch now asserted (was: increment expected)
2026-02-26 17:07:34 +05:30
0ee7535da7 feat: dashboard time range available at panel level (#10288)
Design at:
https://github.com/openobserve/designs/blob/main/dashboards/panel-level-time-range/design.md

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


___

### **Description**
- Add defaults for panel-level time settings in front-end

- Extend backend PanelConfig with time range fields

- Provide a comprehensive implementation guide document


___



<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>useDashboardPanel.ts</strong><dd><code>Add default
panel time settings fields</code>&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/useDashboardPanel.ts

<ul><li>Added <code>allow_panel_time</code> default (false)<br> <li>
Introduced <code>panel_time_mode</code> default ("individual")<br> <li>
Initialized <code>panel_time_range</code> to null</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Extend PanelConfig with time
fields</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>

src/config/src/meta/dashboards/v8/mod.rs

<ul><li>Added <code>allow_panel_time: Option<bool></code> to
PanelConfig<br> <li> Added <code>panel_time_mode: Option<String></code>
field<br> <li> Added <code>panel_time_range:
Option<DateTimeOptions></code> field</ul>


</details>


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

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

<summary><strong>PANEL_TIME_RANGE_IMPLEMENTATION.md</strong><dd><code>Add
panel time range implementation guide</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PANEL_TIME_RANGE_IMPLEMENTATION.md

<ul><li>Added detailed implementation guide (v3.0)<br> <li> Outlined
requirements, UI, URL sync, testing<br> <li> Documented data flow, edge
cases, and timeline</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10288/files#diff-39b68cc51ce3089b41061b75e18c45448659cab57702dd39b01a9aad63598345">+2718/-0</a></td>

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

</details>

___

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2026-02-26 00:58:02 +05:30
ktx-vaidehiandYashodhan Joshi ae6d73e815 feat: dashboard stream and field support from variables (#10454)
Design at:
https://github.com/openobserve/designs/blob/main/dashboards/variables-stream-field-support/design.md
### **PR Type**
Enhancement, Tests


___

### **Description**
- Add stream/field variable dependency parsing

- Deduplicate and validate dependency graph edges

- Resolve stream/field variables at runtime

- Update variable UI with autocomplete


___

### Diagram Walkthrough


```mermaid
flowchart LR
  ui["AddSettingVariable.vue (configure stream/field)"]
  runtime["VariablesValueSelector.vue (resolve & query)"]
  deps["variablesDependencyUtils.ts (dependency graphs)"]
  tests["variablesDependencyUtils.spec.ts (new coverage)"]

  ui -- "allows $var in stream/field" --> runtime
  ui -- "cycle detection messaging" --> deps
  runtime -- "uses resolved stream/field" --> deps
  tests -- "asserts stream/field deps & cycles" --> deps
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>variablesDependencyUtils.spec.ts</strong><dd><code>Add
tests for stream/field dependencies</code>&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/variables/variablesDependencyUtils.spec.ts

<ul><li>Add cases for <code>query_data.stream</code> dependencies<br>
<li> Add cases for <code>query_data.field</code> dependencies<br> <li>
Validate deduping and embedded variables<br> <li> Add cycle detection
scenarios via stream/field</ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>variablesDependencyUtils.ts</strong><dd><code>Expand
dependency detection to stream/field</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/utils/dashboard/variables/variablesDependencyUtils.ts

<ul><li>Collect deps from stream, field, filters<br> <li> Use
<code>Set</code> to prevent duplicate parents<br> <li> Extend
<code>query_data</code> typing with
<code>stream</code>/<code>field</code><br> <li> Update scoped graph with
deduped edges</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10454/files#diff-58a77094b6971705fb63bde853a79e17b4e2e85240694c4017aada1d01cf1fb4">+78/-31</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>VariablesValueSelector.vue</strong><dd><code>Resolve
stream/field variables before querying</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/VariablesValueSelector.vue

<ul><li>Add <code>resolveVariableValue()</code> for <code>$var</code>
substitution<br> <li> Resolve
<code>stream_name</code>/<code>fields</code> in request payload<br> <li>
Match response hits using resolved field name<br> <li> Add debug/error
console logging for resolution</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>AddSettingVariable.vue</strong><dd><code>Allow
variable-based stream and field selection</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/settings/AddSettingVariable.vue

<ul><li>Replace stream/field <code>q-select</code> with
<code>CommonAutoComplete</code><br> <li> Merge variable options into
stream/field option lists<br> <li> Skip schema fetch when stream
contains <code>$</code><br> <li> Improve cycle error message and
styling</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10454/files#diff-e622f54c1f7629ee67d29ed2fc87008d07eb9246767a05435cc42c3c17ce459a">+208/-52</a></td>

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

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2026-02-25 23:49:40 +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
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
Omkar Kesarkhane 299138967a fix: Email-id filtering in RUM Sessions (#10490)
#9926 
#10465
2026-02-20 10:40:55 +05:30
Omkar Kesarkhane 21aae60f6c fix: sanitized exception stack trace (#10565) 2026-02-19 16:40:48 +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 69e7dca5e6 feat: service graph edge metrics fix, connection_type removal, and side panel latency display 2026-02-18 22:45:33 +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
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
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
Bhargav ba2329b27e fix: removed console log statements (#10499) 2026-02-13 10:43:30 +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
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
Sai Nikhil c2c756613f fix: servie graph v2 (#10410) 2026-02-10 12:04:40 +05:30
ecaed3b89f feat: dashboard table chart pagination (#10285)
### **User description**
Design at:
https://github.com/openobserve/designs/blob/main/dashboards/table-chart-pagination/design.md
### **PR Type**
Enhancement


___

### **Description**
- Add pagination flags to dashboard panels

- Initialize pagination defaults in frontend

- Extend backend PanelConfig with pagination


___



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>useDashboardPanel.ts</strong><dd><code>Initialize
pagination settings in panel</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useDashboardPanel.ts

<ul><li>Added <code>show_pagination</code> default false<br> <li> Added
<code>rows_per_page</code> default 10</ul>


</details>


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

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Extend PanelConfig with
pagination fields</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/config/src/meta/dashboards/v8/mod.rs

<ul><li>Added <code>show_pagination</code> Option<bool> field<br> <li>
Added <code>rows_per_page</code> Option<i64> field</ul>


</details>


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

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

</details>

___


___

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


___

### **Description**
- Add table pagination config and defaults

- Implement reusable table pagination controls

- Wire pagination into SQL/PromQL tables

- Add unit and Playwright coverage


___

### Diagram Walkthrough


```mermaid
flowchart LR
  cfgUI["ConfigPanel: pagination toggle + rows input"]
  panelDefaults["useDashboardPanel: default pagination config"]
  tableRenderer["TableRenderer: pagination state + bottom slot"]
  controls["TablePaginationControls: dropdown + nav + count"]
  promql["PromQLTableChart: legend footer + pagination controls"]
  schema["PanelSchemaRenderer: pass pagination props"]
  backend["Backend PanelConfig: persist pagination fields"]
  tests["Unit + Playwright tests"]

  cfgUI -- "writes config" --> panelDefaults
  panelDefaults -- "panel config values" --> schema
  schema -- "props showPagination/rowsPerPage" --> tableRenderer
  tableRenderer -- "renders" --> controls
  promql -- "uses slot scope" --> controls
  backend -- "stores config" --> panelDefaults
  tests -- "verifies behavior" --> tableRenderer
```



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

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>5
files</summary><table>
<tr>
<td><strong>PromQLTableChart.spec.ts</strong><dd><code>Add unit coverage
for PromQL table pagination</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10285/files#diff-9db7fe6fba32c64dabbf0dd05ec6df9a1ddfc89ff4774d0e627d657e016e7674">+551/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>TableRenderer.spec.ts</strong><dd><code>Add pagination
behavior unit tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10285/files#diff-550a0a669838c47473442a7d37407fead8b7cb2a05121880dd2c0522022c8c3f">+180/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ConfigPanel.spec.ts</strong><dd><code>Test table pagination
config 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; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10285/files#diff-a4e717cd660ad6fa369629f8de524f4d57bf4f71b11d3244ce41b9ed9f0379d2">+203/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>useDashboardPanel.spec.ts</strong><dd><code>Assert default
pagination config initialization</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10285/files#diff-5dbd79fdde0cbbb7db569095fa062931286463da0b5e72b1fbe99f56116fa5e2">+24/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>dashboard-table-pagination.spec.js</strong><dd><code>Add E2E
coverage for table pagination</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/10285/files#diff-ed0804a2639080ec5164324b8e7943b469204243b66b67d85ad8e91cf46bee85">+1180/-0</a></td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>8
files</summary><table>
<tr>
<td><strong>useDashboardPanel.ts</strong><dd><code>Initialize default
table pagination config fields</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10285/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>constants.ts</strong><dd><code>Add default rows-per-page
constant</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/10285/files#diff-a5e1b14a291a4b42368faa0160f555b19bdc1a542624d4f89ea6e3ed7c4a664d">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Persist pagination fields in
`PanelConfig`</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/10285/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>TableRenderer.vue</strong><dd><code>Implement pagination
state and default footer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10285/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+89/-9</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>PromQLTableChart.vue</strong><dd><code>Add pagination props
and legend footer controls</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10285/files#diff-9c39051461b6f7deae94e8847f91443c4c68541f52137a423bb54b6ab5cd3317">+29/-10</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>TablePaginationControls.vue</strong><dd><code>New reusable
pagination footer component</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/10285/files#diff-b5e9d5740f8c581bb17133e249e81174ea0842b4d46b5c06fa0efa2f336a15d7">+146/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ConfigPanel.vue</strong><dd><code>Add pagination toggle and
rows-per-page input</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10285/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+59/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>PanelSchemaRenderer.vue</strong><dd><code>Pass pagination
props into `TableRenderer`</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/10285/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>12
files</summary><table>
<tr>
<td><strong>tr.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>ja.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>de.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>fr.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>it.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>hi.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-1e7b52b5c4e762db2c923d0d3efb6d693702825ed3a1a112d3069f26b0d5f605">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>ko.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>nl.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>es.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>pt.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>en.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>zh.json</strong><dd><code>Add pagination strings and rename
key</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/10285/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e">+4/-1</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>playwright.yml</strong><dd><code>Add CI job entry for
pagination tests</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/10285/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+7/-1</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
2026-02-09 13:41:38 +05:30
udev c64197b2af fix: O2A title and tool call improvements (#10385) 2026-02-05 23:55:12 +05:30
Huaijin 21155591fd feat: map otel field to openobserve field (#10213) 2026-02-04 15:30:55 +08:00
Omkar Kesarkhane 2e4fb93291 fix: RUM session event details drawer UI improvements (#10329)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add tabbed RUM event details drawer

- Centralize RUM event formatting utilities

- Improve sidebar filtering and null safety

- Sync dashboard chart zoom to time range


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["RUM Session Viewer UI"] 
  B["Event detail drawer tabs (Overview/Network/Attributes)"]
  C["Shared formatter composable (`useEventFormatters`)"]
  D["Network resources list from related events"]
  E["Clipboard copy + JSON highlighting"]
  F["Dashboards emit `update:dateTime` on zoom"]
  G["Sidebar event type filter behavior"]
  H["Session email null-safety"]
  A -- "refactor + UX" --> B
  B -- "uses" --> C
  B -- "derives" --> D
  B -- "adds" --> E
  A -- "interactions" --> F
  A -- "filtering" --> G
  A -- "stability" --> H
```



<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>14
files</summary><table>
<tr>
<td><strong>useEventFormatters.ts</strong><dd><code>Add shared
formatting helpers for RUM events</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/10329/files#diff-d301f514502d418578addfb8a9332f18193ec77414fe2de5f86584eaccf89a43">+88/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>LogsHighLighting.vue</strong><dd><code>Import highlighting
stylesheet via scoped SCSS</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10329/files#diff-4ef4ac0444004add270de4da30fa39bafd95bd7f1c408d28cf6737655fc152eb">+4/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>EventDetailDrawerContent.vue</strong><dd><code>Redesign
drawer with tabs, copy, network</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/10329/files#diff-e31bfc4c2d218ac4beaa9110939974f0461a818a7d5d169279e2ff58dec8136c">+479/-353</a></td>

</tr>

<tr>
<td><strong>EventDetailsSection.vue</strong><dd><code>Add reusable
key-value section renderer</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/10329/files#diff-eb9d64194e4354ce8babdb843029087b4d0813100046f6de6fd2605816eede58">+67/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>EventTypeBadge.vue</strong><dd><code>Add reusable event type
badge component</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/10329/files#diff-78d3b36f54018d0cc31a0ed96800588bacb5b3f6e608803f32e704e576d89001">+49/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>KeyValueRow.vue</strong><dd><code>Add reusable labeled
key-value row component</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/10329/files#diff-978f05f4c50530f6d772579c54478e1aef10b7f7b066f2769e9d34c62c488895">+53/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>PerformanceMetrics.vue</strong><dd><code>Add wrapper
component for performance metrics</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10329/files#diff-7c9e28cabc9dd4189346dadc26dcb4def95a9265557144e99128a9f3b951c21e">+60/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ActionPerformanceMetrics.vue</strong><dd><code>Add action
performance metric cards and statuses</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10329/files#diff-cd6683a885104c9e5074ab1c2b97bed5275cffa688da905f539bef98efdb4ec8">+98/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ErrorPerformanceMetrics.vue</strong><dd><code>Add error
performance metric cards and statuses</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10329/files#diff-1fc102647ba527cfd553f4c0fd723f1b72fabbd85bad7518e0a826a09d858442">+76/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>MetricCard.vue</strong><dd><code>Add generic metric card
with formatting</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/10329/files#diff-3666ababe7e5a472c88da967ba6e5e632dfd907abb8555a6bb4baeabc0215e32">+168/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ResourcePerformanceMetrics.vue</strong><dd><code>Add
resource timing breakdown metric cards</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/10329/files#diff-9dfcf79c8b3c1b1c0e43bc8e65c90a6cd6b75c84b7de8250f18ba985ef36ad55">+128/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ViewPerformanceMetrics.vue</strong><dd><code>Add web vitals
and view metric cards</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/10329/files#diff-0ddb74b6ef8bdb8656c47fb4065e4add8ba853f5834fbf3e59087623b054aa2b">+172/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorsDashboard.vue</strong><dd><code>Emit zoom events to
update time range</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/10329/files#diff-46138c05241c5e0911a0feba39a21dbb8452453c0e26a1d00c3493cc579f07b2">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>WebVitalsDashboard.vue</strong><dd><code>Emit zoom events
and support dateTime updates</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10329/files#diff-bbb15649f6ecf4b2968a8173091ef8b2a21bfe39bff8e08f91566bca189cca09">+9/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Miscellaneous</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>zincutils.ts</strong><dd><code>Adjust formatting and utility
function style</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/10329/files#diff-d3d59688cccdcc6c84ebe88b698c6910030abecc3125f4c0ef81b0df023699ba">+26/-14</a>&nbsp;
</td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>2 files</summary><table>
<tr>
<td><strong>PlayerEventsSidebar.vue</strong><dd><code>Improve
multiselect UX and filtering logic</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/10329/files#diff-a7d04eb87cd7588ba4811d79c6d32696a58d737a24931258329be4f96cee7610">+39/-10</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SessionViewer.vue</strong><dd><code>Guard session email
access with optional chaining</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10329/files#diff-9f7a183be1e2cfcb3c3c852c059f66003dd4f3f586421b012e1b835724929ca1">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___
2026-02-03 16:35:30 +05:30
ByteBakerandsai nikhil kethe 7df19cb00a fix: incident graphs and service graphs improvements (#10318)
### **User description**
## Changes

### 1. Reduce alert graph edge explosion
- Modified temporal edge logic to prevent O(n²) growth
- Changed same-service edges to only connect to most recent previous
alert
- Changed cross-service temporal edges to connect to chronologically
closest alert
- **Impact**: 88% reduction in edges (16 instead of 136 for 17 alerts)

### 2. Improve correlation error handling
- Added fallback mechanism when service registry is empty
- Better error messages for correlation failures
- Enhanced incident detail view with clearer feedback

**Files modified:**
- `src/service/alerts/incidents.rs`
- Incident correlation handling


___

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


___

### **Description**
- Prevent alert topology edge explosion

- Add frontend fallback incident correlation

- Improve correlation tab empty/error UX

- Share time/stream state across tabs


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Incident alerts ingested"] 
  B["Topology enrichment"]
  C["Same-service temporal chain"]
  D["Cross-service edges"]
  E["ServiceGraph tab shared state"]
  F["Incident detail correlation"]
  G["FQN-priority drift detection"]
  H["Frontend fallback correlation"]
  A -- "build graph" --> B
  B -- "temporal edges" --> C
  B -- "dependency edges" --> D
  E -- "share datetime/stream" --> B
  F -- "fetch correlated streams" --> G
  G -- "if not drift" --> H
```



<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>convertTraceData.ts</strong><dd><code>Simplify
service-graph tree request metrics</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/utils/traces/convertTraceData.ts

<ul><li>Use incoming edge metrics for non-root<br> <li> Root sums
outgoing edge request counts<br> <li> Default root error rate to
zero<br> <li> Keep connection count as in+out</ul>


</details>


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

</tr>

<tr>
  <td>
    <details>
<summary><strong>incidents.rs</strong><dd><code>Limit temporal topology
edges to nearest alerts</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/alerts/incidents.rs

<ul><li>Same-service temporal edge targets most recent prior<br> <li>
Keep full ServiceDependency edges when SG edge exists<br> <li> For
non-dependent services, link to closest later alert<br> <li> Avoid
duplicate edges with type-specific checks</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10318/files#diff-2411d921fd8b8783c049deea11da06726ed986550d405477d486234892353ca9">+80/-47</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>IncidentDetailDrawer.vue</strong><dd><code>Add fallback
correlation and improve tab states</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/alerts/IncidentDetailDrawer.vue

<ul><li>Show refresh header only when streams exist<br> <li> Unify
error/no-data states with clearer messaging<br> <li> Detect FQN priority
changes post-incident creation<br> <li> Build frontend fallback
correlation from schema mapping</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10318/files#diff-6973d58a5f49658b07d3533d4db5d32cc6430433b51732481e7497243dadb0b0">+217/-72</a></td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>ServiceGraph.vue</strong><dd><code>Share Service Graph
time/stream with traces state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/traces/ServiceGraph.vue

<ul><li>Bind datetime picker to <code>searchObj.data.datetime</code><br>
<li> Use shared <code>searchObj.data.stream.*</code> for stream
lists<br> <li> Remove local stream/time state and duplicate stream
loading<br> <li> Simplify empty-state guidance and code styling</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10318/files#diff-da1aabfbe74e57c02db16fc5d3e00cd76dc76bf0ad9b57f9dfda7d6d9da06129">+50/-181</a></td>

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

</details>

___

---------

Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2026-02-02 20:01:34 +05:30
Subhra264 41d0c591a6 fix: if stream size is NaN, show 0 MB instead of showing NaN on UI (#10239) 2026-02-02 21:13:15 +08:00
035bbea25d refactor: redesign the query inspector with the colorize query in query-inspector (#10249)
### **PR Type**
Enhancement


___

### **Description**
- Add Monaco-based query colorization utility

- Redesign QueryInspector component UI layout

- Implement search highlighting and copy notifications

- Make colorization reactive on mount and data changes


___



<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>colorizeQuery.ts</strong><dd><code>Add query
colorization utility</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; </dd></summary>
<hr>

web/src/utils/query/colorizeQuery.ts

<ul><li>Register PromQL, VRL, and SQL languages<br> <li> Implement async
<code>colorizeQuery</code> function<br> <li> Prevent duplicate language
registrations<br> <li> Handle colorization errors gracefully</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10249/files#diff-58f1e967db31a700d3ad2387bd4c9330a14995f4e6f48bcaf0ee5074816c2c8f">+42/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>QueryInspector.vue</strong><dd><code>Redesign
QueryInspector UI and logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/QueryInspector.vue

<ul><li>Revamp UI with styled layout and search input<br> <li> Integrate
<code>colorizeQuery</code> for syntax highlighting<br> <li> Add
search-term highlighting and copy notifications<br> <li> Reactively
update colorization on mount/watch<br> <li> Include custom scrollbar
styling</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10249/files#diff-ffe50532d3e00a45f4fd570bf0e852658b382fc05982f6c0afca2a7e8940316d">+318/-73</a></td>

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

</details>

___

---------

Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2026-02-02 15:44:54 +05:30
Ashish Kolheandgithub-actions[bot] e52dacb4b2 fix: alert destinations (#10301)
### **PR Type**
Enhancement, Tests


___

### **Description**
- Support backend-managed prebuilt templates  

- Cache and fetch templates with async preview  

- Rename templates prefix to `prebuilt_`, update tests  

- Add backend ensure_system_templates & template reuse


___

### Diagram Walkthrough


```mermaid
flowchart LR
  BL["Backend load_prebuilt_config & builtins"]
  Endpoint["GET /api/{org}/alerts/templates/system/prebuilt"]
  FE["Frontend fetchSystemTemplates()"]
  Cache["systemTemplatesCache in memory"]
  Generate["generatePreview/testDestination"]
  UI["UI preview/test buttons"]
  BL -- "provides templates" --> Endpoint
  Endpoint -- "called by" --> FE
  FE -- "stores in" --> Cache
  Cache -- "used by" --> Generate
  Generate -- "triggers" --> 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><details><summary>14
files</summary><table>
<tr>
<td><strong>usePrebuiltDestinations.ts</strong><dd><code>Implement
fetchSystemTemplates and caching logic</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-2c90b706aae7486541bbee80d2c67c9de18504b90e1d9618ba130e017d0a5246">+195/-28</a></td>

</tr>

<tr>
<td><strong>slack.ts</strong><dd><code>Rename slack template to
`prebuilt_slack`</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/10301/files#diff-f7068d6fc979cc1fbc6e2bc562be53f5453fc874b367c1688adf70c0896aac62">+41/-45</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>email.ts</strong><dd><code>Rename email template and remove
CC/subject</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/10301/files#diff-3e756aefde39bd7c780066f6ee6e22df1f2846f5e0013fd6ec568a98dd54f64b">+18/-16</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>servicenow.ts</strong><dd><code>Rename ServiceNow template
to `prebuilt_servicenow`</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-3790cdccf9f6221cf55c86664b4cbfb65d20f3da9db719167898b8b76b698a2f">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>alert_templates.ts</strong><dd><code>Add
`get_system_templates` API call</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/10301/files#diff-fd8c4260abc3df601e4331d36b0c211eca568ee70139ad90c87247bc552fe4e2">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>prebuilt_loader.rs</strong><dd><code>Add
get_prebuilt_template and fallback loader</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-d75e85b239701cb3c9e85c15a8a5cd8d23120a4b5ba0a61003c0df1f4854b74d">+345/-10</a></td>

</tr>

<tr>
<td><strong>destinations.rs</strong><dd><code>Implement
ensure_prebuilt_template & reuse logic</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-c06292c108cc15b585a0e3318fd15d3e86c1f1a0f001ab84fff85facefd3c4d3">+420/-1</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>templates.rs</strong><dd><code>Add ensure_system_templates
initialization</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/10301/files#diff-975d7665f1439ca49810c28554f85e513ff3a4c8b849f2bb1966536230951464">+86/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>templates.rs</strong><dd><code>Expose GET system prebuilt
templates endpoint</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-b08e274a64cc935b0cec402a04271a872b1586027a77dc0ccb84c597c3960f61">+54/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AddDestination.vue</strong><dd><code>Update form logic for
prebuilt vs custom</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/10301/files#diff-61b295458e13049a538f5014124855d58dce664dfbd644b57a964a37a07b7a3f">+123/-66</a></td>

</tr>

<tr>
<td><strong>DestinationTestResult.vue</strong><dd><code>Improve test
error message handling</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/10301/files#diff-1fa17c0e52becd683dec1bbee12aab6823b28c1bbedca0d5039d688527f826e5">+29/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AlertsDestinationList.vue</strong><dd><code>Add custom
destination label logic</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/10301/files#diff-e9d05ba6c071c0e2f5d9ef7acdef757f79910abd6897b29e27b069a10d4ba8de">+15/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>PrebuiltDestinationForm.vue</strong><dd><code>Comment out
unsupported email fields</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/10301/files#diff-606eb6f7e6e43518cc9b1f3194097c52acf3df0df9ab5945274196d7221035a0">+3/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>pagerduty.ts</strong><dd><code>Rename PagerDuty template to
`prebuilt_pagerduty`</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-a216d76143343db3aec8efe02596be53b438813aa2aa8af2fb1080e17f5540aa">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>5
files</summary><table>
<tr>
<td><strong>templates.spec.ts</strong><dd><code>Update tests to use
`prebuilt_` prefix</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-262b3003a3045192e0aaccddebe76bdb29fcd68655e8bacfd486e50575a14801">+9/-9</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>types.spec.ts</strong><dd><code>Adjust PrebuiltConfig tests
for new prefix</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/10301/files#diff-67fc167ebe4d6a433579ba9850a6d7ce3a83d97bebe410521f85775a948595fc">+4/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>alertDestinationsPage.js</strong><dd><code>Update selector
for test result element</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/10301/files#diff-57e5c53b4ef998b3d8708149620ff94dcc46807927f1a3a9e9f28ed3ebe25b0a">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>alerts-destinations-prebuilt.spec.js</strong><dd><code>Add
random name for Slack destination test</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/10301/files#diff-0295825c868c1d1ed5cc194ba04843a7d5f4e58decff2593c7d9bd5b29ec33a4">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>discord.spec.ts</strong><dd><code>Update Discord tests for
new prefix</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/10301/files#diff-21a02fd01b42452d1f13140715e5f81146b7a62d61d4b899deea4f30be06284e">+2/-2</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>mod.rs</strong><dd><code>Route for system prebuilt templates
API</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/10301/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+1/-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>en.json</strong><dd><code>Add custom destination translation
keys</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/10301/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+5/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>25 files</summary><table>
<tr>
  <td><strong>auth.rs</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-9bc2b1841504a435f66ad094f72ddbe7b7fa75e5e1557b8adbfe36f7f0592e1b">+20/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>openapi.rs</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-edb8ce232c0cd08366879f642788a75d99f6bab64b4c0e77391281fdb9241e90">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

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

</tr>

<tr>
  <td><strong>main.rs</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-42cb6807ad74b3e201c5a7ca98b911c5fa08380e942be6e4ac5807f8377f87fc">+5/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>destinations.rs</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-4652ac6be3f7cf720faf5b9c4cb1d5dbab9e2fed608f3abbe295fb270dde54b5">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

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

</tr>

<tr>
  <td><strong>discord.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-e4703f8270d000f785a48aa220752f303d2330b6e123817310ecb8a60815fb0b">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>email.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-744915b43017fdc102b0e00d157d7deef4b1f23e0e8e5cb483c2f2c9d6af655c">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>index.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-9b9a6bc1e17f1874fda50428263ff607dca3ba94b01f95933f179ba544f6e11a">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>msteams.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-6815fa747fe74c5cd6835f9fce8f037c15489fab95e399e15199a104c0c08061">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>msteams.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-efeec26ed5ec589000448466539dcdb0d7bb918e8a4f80c9df565eaa1e522b5c">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>opsgenie.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-2560842b70b2f74eb3ef2c940e0a55500b3bd5b89a9b5b34e3c0039c57fc1361">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>opsgenie.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-9412abdf9baf6b8c0cc87fa3ea0efec50928399c0112ad695c021040d24d7c3a">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>pagerduty.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-f62fcc0b648144816cef61b1f5512ba5e2bc573237158efbd896d33e779282f2">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>servicenow.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-ada67bb0bbeaf97a2e7c6a21a741d53df941306e6c694d1a1d89cf965403ce85">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>slack.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-3fa8b2b7534ebec5c2cea1c76c54741c105b64819bb87e6a7f6d3b5a85969740">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-31 11:04:38 +05:30
ByteBaker 50e45e2ea7 fix: use triggers.length for incident alert count and sort Related Alerts
- Replace alert_count with triggers.length for accurate count display
- Rename 'Total Triggers' to 'Total Alerts' for consistency
- Show all unique alerts in Related Alerts (was showing only 2 from topology_context.nodes)
- Sort Related Alerts by trigger count (descending order)
2026-01-30 14:16:28 +05:30
ByteBaker 9ffaddb43e fix: use edge-specific metrics in service graph tree view
- Calculate tree node metrics from edges instead of global node totals
- Add Connections field to tooltips
- Reposition labels (left for horizontal, top for vertical)

Fixes bidirectional edges showing incorrect request counts.
2026-01-30 14:16:28 +05:30
Ashish KolheandClaude Sonnet 4.5 601e75d223 fix: logs large records optimisation (#10257)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Fix oversized hit handling in chunk iterator

- Implement worker-level deduplication & abort

- Stream handler cleanup and dedupe updates

- Enhance log rendering with truncation & progressive


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["ResponseChunkIterator (search.rs)"] -- "pop_front oversized hits" --> B["StreamWorker"]
  B -- "deduplicate messages & abort" --> C["useHttpStreaming"]
  C -- "handle streaming hits" --> D["useSearchResponseHandler"]
  D -- "optimize rendering" --> E["useLogsHighlighter"]
```



<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>5
files</summary><table>
<tr>
<td><strong>useSearchResponseHandler.ts</strong><dd><code>Refactor
streaming hits assignment using local variable</code>&nbsp; &nbsp;
</dd></td>
  <td><a href=""></a></td>

</tr>

<tr>
<td><strong>useLogsHighlighter.ts</strong><dd><code>Add size estimation,
truncation, and progressive rendering</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10257/files#diff-ad7744a2edc4764be1c7d67feb7fe1473536af245821898a9136256b3aeb0342">+237/-38</a></td>

</tr>

<tr>
<td><strong>DetailTable.vue</strong><dd><code>Enable disable-truncation
prop in detail view</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10257/files#diff-80552b5d25fa6cef9fbbe430b1865d761c4b132284c2d2175afceea8cbabc8c7">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>IndexList.vue</strong><dd><code>Use $el to query and reset
scroll container</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/10257/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>streamWorker.js</strong><dd><code>Implement message
deduplication and abort logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10257/files#diff-8534facfcca68c16701832f43a501abcdb92847115c46fced5d69792e5594dd9">+63/-1</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Error
handling</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>useStreamingSearch.ts</strong><dd><code>Handle abort_stream
message and cleanup listeners</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10257/files#diff-8fce3e25a161cd458e734bd9b1f98aadefe3482da7b6529a5b1f4fa20ec115e2">+10/-1</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>logsRenderingConfig.ts</strong><dd><code>Introduce logs
rendering configuration thresholds</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10257/files#diff-6954119ee8e2fb2791a6172bcd6a36925853fabc776e662f53bfcec8bf12fdc0">+11/-0</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>search.rs</strong><dd><code>Pop front oversized hits to
prevent infinite loop</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10257/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+4/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>1 files</summary><table>
<tr>
  <td><strong>useSearchResponseHandler.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10257/files#diff-7dd7d0e65e8fe028b4969c970cf027ff39621921a41153f0a696e20478f0f858">+5/-2</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 13:13:47 +05:30
ktx-vaidehiandgithub-actions[bot] d8d4708dca feat: dashboard promql table chart column ordering (#10210)
Design at:
https://github.com/openobserve/designs/blob/main/dashboards/promql-table-chart-column-order/design.md

### **PR Type**
Enhancement


___

### **Description**
- Extend panel schema with column_order & sticky_first_column

- Use applyColumnOrdering in TableConverter for ordering

- Add ColumnOrderPopUp & config UI in PromQLChartConfig

- Update TableRenderer to apply sticky & ordered columns


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["PromQLChartConfig config UI"]
  Popup["ColumnOrderPopUp"]
  Config["PanelConfig update"]
  Converter["TableConverter.applyColumnOrdering"]
  Renderer["TableRenderer sticky styles"]

  UI -- "open popup" --> Popup
  Popup -- "save order" --> Config
  Config -- "order & sticky flags" --> Converter
  Converter -- "ordered columns" --> Renderer
```



<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>useDashboardPanel.ts</strong><dd><code>Add
sticky_first_column and column_order defaults</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10210/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Extend PanelConfig with new
ordering fields</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/10210/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>4
files</summary><table>
<tr>
<td><strong>convertPromQLTableChart.ts</strong><dd><code>Implement
applyColumnOrdering and integrate ordering</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10210/files#diff-94123beacdf1e10ef812b4a6fda870004aa30f65eeb9e5ef6662f907dc50092d">+35/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ColumnOrderPopUp.vue</strong><dd><code>Add drag-drop popup
for column ordering</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/10210/files#diff-e3f75c0798bebeefd7bffc7e3529daca6c128fc3fe655a15684105b78de3f50e">+349/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>PromQLChartConfig.vue</strong><dd><code>Integrate column
order controls in config UI</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/10210/files#diff-305fcbfc89618c91ca0ee6c8c52cfa596169ca2dced6778eea6cd3c89f071573">+124/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>TableRenderer.vue</strong><dd><code>Apply sticky styling and
ordering in table renderer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10210/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+193/-59</a></td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>en.json</strong><dd><code>Add translation key for Column
Order</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/10210/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

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

</details>

___

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-27 20:34:03 +05:30
ByteBakerandsai nikhil kethe 37994fa5ac fix: service graph and incident updates (cherry-pick #10121) (#10175)
### **User description**
Enhancement, Tests, Bug fix

___

- Introduce alert flow graph replacing service topology

- Add `AlertNode`/`AlertEdge` types & serialization

- Rewrite `enrich_with_topology` incremental node/edge logic

- Update UI components and spec tests for new graph UI


___

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


___

### **Description**
- Introduce typed `AlertNode`/`AlertEdge` and serialization

- Rewrite `enrich_with_topology` to build alert flow graph

- Update UI with D3-force layout and ECharts rendering

- Add DB get/update_topology helpers and tests

---------

Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2026-01-25 14:07:44 +05:30