Subhra264
90a279134b
feat: introduce rbac for logs patterns, logs insights and cache refresh ( #10662 )
2026-03-01 16:20:10 +08:00
b2207c05e4
fix: added resource name in error message ( #10644 )
...
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Bhargav <undefined@users.noreply.github.com >
2026-02-28 23:20:39 +08:00
Bhargav and hengfeiyang
1eacfd6121
fix: added datatype icon on logs page field list ( #10697 )
...
Co-authored-by: hengfeiyang <hengfei.yang@gmail.com >
2026-02-28 16:19:55 +05:30
Bhargav
9497f99f84
fix: removed quotation mark from json keys ( #10698 )
2026-02-28 14:23:16 +05:30
Omkar Kesarkhane and Bhargav
d1190b1549
fix: traces color generation ( #10693 )
...
Co-authored-by: Bhargav <BJP232004@GMAIL.COM >
2026-02-28 05:31:56 +05:30
Bhargav and Hengfei Yang
eba3453d85
fix: 10682 logs page field values improvement ( #10689 )
...
Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com >
2026-02-27 22:02:00 +08:00
Omkar Kesarkhane
fe7d9f12a9
fix: Traces list UI improvements ( #10670 )
2026-02-27 19:32:34 +08:00
Bhargav
72b90a93e3
fix: Feat nlp mode ( #10638 )
2026-02-27 18:26:36 +08:00
3ef82654a5
fix: logs field values caching issue ( #10616 )
...
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Omkar Kesarkhane <undefined@users.noreply.github.com >
2026-02-27 09:40:01 +05:30
sai nikhil kethe
ff7625870a
fix: service graph trend chart
2026-02-26 17:07:34 +05:30
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
sai nikhil kethe
cb9bd12811
fix: cleanup
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
Bhargav
ae011ace69
fix: Issue 10602 main ( #10614 )
2026-02-24 12:11:32 +05:30
Abhay Padamani
02327edb79
fix: visualization select * query issue on load ( #10621 )
2026-02-23 18:32:52 +05:30
25c0fe6382
feat: query builder support on logs page ( #10305 )
...
- #10446
Design at :
https://github.com/openobserve/designs/tree/main/auto-query-builder-on-logs-page
# Logs Query Builder - Behavior Guide
What happens in different scenarios when using the Build tab.
---
## Switching to Build Tab - Scenarios
### Scenario 1: No Query, SQL Mode OFF
**Starting state:**
- Query editor is empty
- SQL Mode is OFF
- Stream "default" is selected
**What happens when you click Build:**
1. SQL Mode turns ON automatically
2. Query is generated: `SELECT * FROM "default"`
3. Quick Mode turns ON (if enabled in config)
4. Build tab opens in **Custom SQL Mode**
5. Chart type: **Table** (with dynamic columns = true)
---
### Scenario 2: No Query, SQL Mode ON
**Starting state:**
- Query editor is empty
- SQL Mode is ON
- Stream "default" is selected
**What happens when you click Build:**
1. Query is generated: `SELECT * FROM "default"`
2. Build tab opens in **Builder Mode**
3. Chart type: **Line** (default)
---
### Scenario 3: Simple SELECT * Query
**Starting state:**
- Query: `SELECT * FROM "logs"`
- SQL Mode is ON
**What happens when you click Build:**
1. Query is parsed but no explicit fields found (`*` = all columns)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
4. Quick Mode turns ON (SELECT * pattern detected)
5. Query editor is **editable**
---
### Scenario 4: Histogram Query (Time Series)
**Starting state:**
- Query: `SELECT histogram(_timestamp) as time, count(*) as count FROM
"logs" GROUP BY time`
- SQL Mode is ON
**What happens when you click Build:**
1. Query is parsed successfully
2. Build tab opens in **Builder Mode**
3. Chart type: **Bar** (default chart type)
4. Fields populated: X-axis = histogram, Y-axis = count
---
### Scenario 5: Count Only Query (No Grouping)
**Starting state:**
- Query: `SELECT count(*) as total FROM "logs"`
- SQL Mode is ON
**What happens when you click Build:**
1. Query is parsed successfully
2. Build tab opens in **Builder Mode**
3. Chart type: **Metric** (big number display - only Y-axis, no X-axis)
---
### Scenario 6: Query with 3+ GROUP BY Fields
**Starting state:**
- Query: `SELECT status, method, host, count(*) FROM "logs" GROUP BY
status, method, host`
- SQL Mode is ON
**What happens when you click Build:**
1. Query is parsed successfully
2. Build tab opens in **Builder Mode**
3. Chart type: **Table** (too many grouping fields for chart)
---
### Scenario 7: Simple JOIN Query
**Starting state:**
- Query: `SELECT a.field, b.field FROM "stream1" a JOIN "stream2" b ON
a.id = b.id`
- SQL Mode is ON
**What happens when you click Build:**
1. Query is parsed successfully
2. Build tab opens in **Builder Mode**
3. Chart type: **Bar** (default)
4. JOIN is recognized and shown in builder
---
### Scenario 8: Nested JOIN Query
**Starting state:**
- Query: `SELECT * FROM "a" JOIN ("b" JOIN "c" ON b.x = c.x) ON a.y =
b.y`
- SQL Mode is ON
**What happens when you click Build:**
1. **Complex pattern detected** (nested JOIN with parentheses)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
4. Query editor is **editable**
5. Field selectors are **hidden**
---
### Scenario 9: CTE Query (WITH clause)
**Starting state:**
- Query: `WITH recent AS (SELECT * FROM "logs" WHERE _timestamp > now()
- interval '1 hour') SELECT * FROM recent`
- SQL Mode is ON
**What happens when you click Build:**
1. **Complex pattern detected** (CTE)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
4. Query editor is **editable**
---
### Scenario 10: Subquery
**Starting state:**
- Query: `SELECT * FROM (SELECT status, count(*) FROM "logs" GROUP BY
status) subq`
- SQL Mode is ON
**What happens when you click Build:**
1. **Complex pattern detected** (subquery)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
---
### Scenario 11: UNION Query
**Starting state:**
- Query: `SELECT * FROM "logs1" UNION SELECT * FROM "logs2"`
- SQL Mode is ON
**What happens when you click Build:**
1. **Complex pattern detected** (UNION)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
---
### Scenario 12: Window Function Query
**Starting state:**
- Query: `SELECT *, ROW_NUMBER() OVER (PARTITION BY status ORDER BY
_timestamp) FROM "logs"`
- SQL Mode is ON
**What happens when you click Build:**
1. **Complex pattern detected** (window function)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
---
### Scenario 13: Nested Function Query
**Starting state:**
- Query: `SELECT ceil(count(*)) as rounded_count FROM "logs"`
- SQL Mode is ON
**What happens when you click Build:**
1. **Complex pattern detected** (nested function - function inside
function)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
---
### Scenario 14: JSON Operations Query
**Starting state:**
- Query: `SELECT data->>'name' as name FROM "logs"`
- SQL Mode is ON
**What happens when you click Build:**
1. **Complex pattern detected** (JSON operator)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
---
### Scenario 15: CASE/WHEN Query
**Starting state:**
- Query: `SELECT CASE WHEN status >= 500 THEN 'error' ELSE 'ok' END as
status_type, count(*) FROM "logs" GROUP BY status_type`
- SQL Mode is ON
**What happens when you click Build:**
1. Query is parsed successfully (CASE/WHEN is supported)
2. Build tab opens in **Builder Mode**
3. Chart type: **Bar** (default)
4. CASE/WHEN shown as "raw" field type
---
### Scenario 16: Multiple JOINs (Flat)
**Starting state:**
- Query: `SELECT a.field as "field1", b.field as "field2" FROM "a" INNER
JOIN "b" AS stream_0 ON a.x = b.x INNER JOIN "c" AS stream_1 ON b.y =
c.y GROUP BY field1, field2 ORDER BY field1 ASC`
- SQL Mode is ON
**What happens when you click Build:**
1. Query is parsed successfully (flat JOINs are supported)
2. Build tab opens in **Builder Mode**
3. Chart type: **Bar** (default)
---
### Scenario 17: Opening Shared Link (First Time)
**Starting state:**
- URL contains `build_data` parameter with chart type "bar"
- Query in URL: `SELECT status, count(*) FROM "logs" GROUP BY status`
**What happens:**
1. Build tab opens
2. Query is parsed successfully
3. Chart type: **Bar** (restored from URL - first toggle)
4. Build tab opens in **Builder Mode**
---
### Scenario 18: Switching Back to Build Tab (After First Time)
**Starting state:**
- Previously visited Build tab
- URL still has `build_data` with chart type "bar"
- Query: `SELECT count(*) FROM "logs"` (metric query)
**What happens:**
1. Build tab opens
2. Query is parsed successfully
3. Chart type: **Metric** (auto-selected, URL ignored on subsequent
toggles)
---
### Scenario 19: Invalid SQL Syntax
**Starting state:**
- Query: `SELEC * FORM "logs"` (typos)
- SQL Mode is ON
**What happens when you click Build:**
1. **Parse error** (invalid SQL)
2. Build tab opens in **Custom SQL Mode**
3. Chart type: **Table** (with dynamic columns)
4. Query editor is **editable** (so user can fix the query)
---
### Scenario 20: Query with WHERE Filters
**Starting state:**
- Query: `SELECT histogram(_timestamp), count(*) FROM "logs" WHERE
status = 500 AND method = 'GET' GROUP BY 1`
- SQL Mode is ON
**What happens when you click Build:**
1. Query is parsed successfully
2. Build tab opens in **Builder Mode**
3. Chart type: **Bar** (default)
4. Filters populated in filter section
---
## Summary Table
| Query Type | Mode | Chart Type |
|------------|------|------------|
| SELECT * | **Custom** | **Table** |
| Histogram + count | Builder | Bar |
| Count only (no GROUP BY) | Builder | Metric |
| 1-2 GROUP BY fields | Builder | Bar |
| 3+ GROUP BY fields | Builder | Table |
| Simple JOIN | Builder | Bar |
| CASE/WHEN | Builder | Bar |
| Multiple flat JOINs | Builder | Bar |
| CTE (WITH clause) | **Custom** | **Table** |
| Subquery | **Custom** | **Table** |
| Nested JOIN | **Custom** | **Table** |
| UNION/INTERSECT/EXCEPT | **Custom** | **Table** |
| Window functions | **Custom** | **Table** |
| Nested functions | **Custom** | **Table** |
| JSON operations | **Custom** | **Table** |
| Invalid SQL | **Custom** | **Table** |
---
## Quick Mode Auto-Enable
Quick Mode is automatically enabled when switching to Build tab if:
| Condition | Quick Mode |
|-----------|------------|
| SQL Mode was OFF | ✅ Enabled |
| Query is `SELECT * FROM ...` | ✅ Enabled |
| Complex aggregation query | ❌ Not changed |
**Requires:** `quick_mode_enabled = true` in config
---
## SQL Mode Auto-Enable
| Starting State | After Clicking Build |
|----------------|---------------------|
| SQL Mode OFF | SQL Mode **ON** |
| SQL Mode ON | SQL Mode ON (no change) |
**Build tab always requires SQL Mode to be ON.**
---
## Chart Type Priority
When auto-selecting chart type:
1. **Custom Mode?** → Table
2. **3+ GROUP BY fields?** → Table
3. **Only Y-axis (no X, no breakdown)?** → Metric
4. **Everything else** → Bar (default)
**Exception:** First visit with shared link uses chart type from URL.
---
## Builder Mode vs Custom Mode
| Aspect | Builder Mode | Custom Mode |
|--------|--------------|-------------|
| Query Editor | Read-only | Editable |
| Field Selectors | Visible | Hidden |
| When Used | Parseable queries | Complex/unparseable queries |
| Default Chart | Bar/Metric | Table |
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech >
2026-02-23 16:54:15 +05:30
Omkar Kesarkhane
0332a055d0
fix: Ignore external RUM errors ( #10489 )
2026-02-23 11:53:10 +08:00
Sai Nikhil and github-actions[bot]
734723b362
fix: search bar responsiveness ( #10509 )
...
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-21 15:38:24 +05:30
Omkar Kesarkhane
80d2e57312
fix: isExpandRow key was getting added to logs table ( #10597 )
2026-02-21 14:41:24 +05:30
Ashish Kolhe
7647247399
fix: traces api to use streaming ( #10593 )
2026-02-21 09:18:22 +05:30
6ffe0892b2
fix: enabled wrap option on patterns tab ( #10577 )
...
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Bhargav <undefined@users.noreply.github.com >
2026-02-20 11:42:04 +05:30
Sai Nikhil
a639292123
fix: tooltip issue and tree view lag issue ( #10579 )
2026-02-19 21:32:35 +05:30
Omkar Kesarkhane
21aae60f6c
fix: sanitized exception stack trace ( #10565 )
2026-02-19 16:40:48 +05:30
82c8b1c7f6
test: add logs regression tests for quick mode and pagination bugs ( #10541 )
...
- Add test for quick mode query being removed when selecting interesting
field
- Add test for pagination visibility with histogram and SQL disabled
- Add test for error message identifying problematic field
---------
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Bhargav <BJP232004@GMAIL.COM >
2026-02-19 13:02:08 +05:30
ByteBaker
f0ce986d33
test: add comprehensive unit tests for tree tooltip system
...
- Extract tooltip logic into testable treeTooltipHelpers module with 7 functions
- Add 35 unit tests covering formatting, distance calculation, data lookup, and HTML generation
- Fix broken tests for removed functions (handleViewLogs, handleViewTraces)
- Update tests for new Show telemetry button (renamed from view-traces)
- Fix radial layout tests (feature removed, now defaults to orthogonal)
- Update cache invalidation test to be more robust
Coverage improvements:
- formatNumber/formatLatency edge cases (K/M notation, seconds/milliseconds)
- pointToBezierDistance for curved/straight/zero-length beziers
- Node/edge tooltip HTML generation with various data scenarios
- Incoming edge lookup with null parents, fallbacks, multiple edges
- Root node metrics aggregation from outgoing edges
2026-02-18 22:45:33 +05:30
ByteBaker
38d73786ef
feat: tree view custom tooltips, inside labels, and dynamic node sizing
...
- Add custom tooltip system for tree edges using ZRender mousemove +
point-to-bezier distance calculation with 12px screen-pixel hit area
- Add custom tooltip for tree nodes showing direction-aware metrics
(incoming edge data, not aggregate) matching the tree label values
- Move tree node labels inside circles with rich text formatting,
consistent with graph view layout
- Use dynamic node sizing (40-80px based on request volume) matching
graph view's formula
- Maximize tree layout bounds to reduce sibling edge overlap
- Remove ECharts built-in tooltip (replaced by custom tooltip system)
2026-02-18 22:45:33 +05:30
ByteBaker
26943655e8
fix: service graph UI cleanup
...
- Remove All Streams option, sync stream from traces page
- Swap tab order: Tree View first, Graph View second
- Remove radial and circular layout options and related code
- Disable layout dropdown in graph mode (force-directed only)
- Move Show telemetry button to header with investigate icon
- Rename Total req/min to Requests /min
2026-02-18 22:45:33 +05:30
ByteBaker
6310097c40
feat: service graph tree view improvements and telemetry correlation
...
- Restore edge-specific metrics in tree view (request counts per edge)
- Add adaptive percentile-based coloring (nodes by error rate, edges by latency)
- Show P50/P95/P99 latency in tree tooltips and side panel
- Add "Show telemetry" button with correlated logs/metrics/traces dialog
- Remove connection_type (was always hardcoded to "standard")
- Make client_service optional for entry-point services
- Default to tree view layout
2026-02-18 22:45:33 +05:30
ByteBaker
69e7dca5e6
feat: service graph edge metrics fix, connection_type removal, and side panel latency display
2026-02-18 22:45:33 +05:30
udev
f59382dea1
feat: navigation for o2 assistant ( #10564 )
...
- **improve dashbaord tool prompt**
- **fix: pipeline create handler to return a pipeline ID and name**
- **feat: navigation event handler, button rendering**
2026-02-18 21:46:21 +05:30
Omkar Kesarkhane and sai 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
+2
7ac02698e9
fix: Large log lines main ( #10533 )
...
Co-authored-by: Subhra264 <chakrabortysubhradeep556@gmail.com >
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech >
Co-authored-by: Loakesh Indiran <66478092+Loaki07@users.noreply.github.com >
Co-authored-by: Chaitanya Sistla <122406662+chaitanya-sistla@users.noreply.github.com >
Co-authored-by: mmosarafO2 <mosraf@openobserve.ai >
Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech >
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai >
Co-authored-by: Harsh Mahajan <115500013+007harshmahajan@users.noreply.github.com >
Co-authored-by: Shrinath Rao <shnath@openobserve.ai >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-18 13:02:17 +05:30
Bhargav and github-actions[bot]
94ade6598a
fix: Correlation error message fix ( #10511 )
...
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-18 11:37:35 +05:30
Ashish Kolhe
e9785af1f0
fix: ai chat telemetry ( #10546 )
2026-02-17 17:37:59 +05:30
Sai Nikhil
7f5215744d
fix: clear cache when we load the data ( #10528 )
...
This PR fixes the issue when user changes the stream on servicegraph it
should render the actual data from api not from cache
2026-02-16 12:48:28 +05:30
Bhargav
524606e4f0
fix: insight page baseline vs selected time range ( #10514 )
2026-02-13 19:38:07 +05:30
ByteBaker and github-actions[bot]
cf98c39c81
fix: semantic groups, service graph, dedup, dashboard cleanup ( #10502 )
...
## Summary
- **Semantic Groups**: add JSON export button, fix broken JSON import
(`handleJsonUpdate` was a no-op), fix "Applied 0 changes" toast bug
- **Service Graph**: remove unused `availableStreams` from
`build_topology` return and API response, skip `_`-prefixed orgs in
processor
- **Dedup Config**: change `time_window_minutes` from `Option<i64>` to
`Option<i32>`, add `deserialize_optional_i32` for defense-in-depth,
sanitize empty/NaN values on frontend before sending
- **Dashboard**: remove dead `/export` endpoint (identical to GET,
unused by frontend)
## Test plan
- [x] Semantic groups: export downloads JSON, import with file upload
works, import shows correct change count
- [x] Service graph: topology loads, stream dropdown works (populated by
`loadTraceStreams`)
- [x] Dedup: clearing time window field and saving no longer returns 422
- [x] Dashboard: GET `/{dashboard_id}` still works, `/export` route
removed
- [x] `cargo check` clean, `cargo clippy` clean
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-13 12:42:41 +05:30
Bhargav
ba2329b27e
fix: removed console log statements ( #10499 )
2026-02-13 10:43:30 +05:30
Bhargav
85cf946426
fix: fix for switch between pattern to logs showing more logs ( #10492 )
2026-02-12 18:22:35 +05:30
Bhargav
0593644a6e
fix: Issue 1208 correlation UI ( #10484 )
2026-02-12 11:12:02 +05:30
Sai Nikhil
f9b745764b
fix: use search time range for trace id ( #10485 )
...
### **PR Type**
Bug fix
___
### **Description**
- Pass time range to trace details
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Service graph side panel"]
B["Trace details route"]
C["Query params include from/to"]
A -- "on trace click" --> B
B -- "adds time range" --> C
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>ServiceGraphSidePanel.vue</strong><dd><code>Include
selected time range in trace navigation</code>
</dd></summary>
<hr>
web/src/plugins/traces/ServiceGraphSidePanel.vue
<ul><li>Add <code>from</code> query param from
<code>props.timeRange.startTime</code><br> <li> Add <code>to</code>
query param from <code>props.timeRange.endTime</code></ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10485/files#diff-10bc2834e87e49bf0cd972341639fcfdcac92db60b00cc0852bcf24bdb983d4b ">+2/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2026-02-11 23:29:07 +05:30
9d8ad1d265
fix(incidents): widen correlation_key column, fix trace ID extraction, and clean up incident UI ( #10477 )
...
## Summary
This PR bundles several incident and log correlation fixes:
- **DB migration**: Widen `alert_incidents.correlation_key` from
`varchar(64)` to `varchar(128)` (Postgres raw SQL, MySQL SeaORM alter,
SQLite no-op) and bump `DB_SCHEMA_VERSION` to 30. Correlation keys use
prefixed formats (`SCOPE:` + 64-char hash = 70+ chars) that exceeded the
previous limit, causing `upgrade_incident_correlation` to fail.
- **Incident detail UI**: Remove the redundant refresh button/bar from
the correlated logs tab; hide search-term and dimension-filter actions
in the incident logs view since they don't apply in that context; remove
`cursor: help` from the badge overflow indicator.
- **Trace ID extraction fix**: Merge log record fields into
`availableDimensions` (in both `SearchResult.vue` and
`TraceDetailsSidebar.vue`) so trace ID extraction no longer fails when
the trace ID lives in log record fields rather than stream filters.
- **`hideSearchTermActions` prop plumbing**: Add the prop to
`JsonPreview.vue`, pass it through `TenstackTable.vue`, and enable
search-term actions in `DetailTable.vue` correlation view while hiding
them in the incident drawer.
- **Locale key rename**: Rename `rowsPerPage` to `recordsPerPage` across
all 12 language files for consistency.
## Test plan
- [ ] Migration unit tests pass for MySQL and PostgreSQL SQL generation
- [ ] Deploy to test env and verify incidents populate
`stable_dimensions` on next alert cycle
- [ ] Verify incident logs tab no longer shows the refresh bar
- [ ] Verify trace ID extraction works from log correlation in both logs
and traces views
- [ ] Verify "Records per page" label renders correctly in all locales
---------
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai >
Co-authored-by: omkark06 <omkar@zinclabs.io >
Co-authored-by: Bhargav <BJP232004@GMAIL.COM >
Co-authored-by: Shrinath Rao <shnath@openobserve.ai >
2026-02-11 18:30:48 +05:30
Omkar Kesarkhane
d021db325b
fix: Redirection to trace details from logs correlation ( #10403 )
...
### **PR Type**
Bug fix, Tests, Enhancement
___
### **Description**
- Preserve log stream when opening trace details
- Auto-select correlated log stream in UI
- Prevent null RUM session replay crash
- Expand TraceDetails mode/prop test coverage
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["TelemetryCorrelationDashboard (embedded trace)"]
B["TraceDetails (embedded)"]
C["TraceDetails route (standalone)"]
D["TraceDetails loadLogStreams auto-select"]
A -- "passes `correlated-log-stream`" --> B
B -- "expand: open new window + `log_stream` query" --> C
C -- "reads `log_stream` query" --> D
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>TraceDetails.vue</strong><dd><code>Preserve correlation
log stream on navigation</code>
</dd></summary>
<hr>
web/src/plugins/traces/TraceDetails.vue
<ul><li>Add <code>correlatedLogStream</code> prop for correlation
context<br> <li> Auto-select <code>log_stream</code> from route
query<br> <li> Fix <code>redirectToSessionReplay</code> null session
guard<br> <li> Open expanded view via <code>router.resolve</code> +
<code>window.open</code></ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10403/files#diff-bc7fe6b6339ee2cde6494c0982d4b860847447e79f7431f07d598e0446df06f2 ">+135/-77</a></td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>TelemetryCorrelationDashboard.vue</strong><dd><code>Pass
log stream context to TraceDetails</code>
</dd></summary>
<hr>
web/src/plugins/correlation/TelemetryCorrelationDashboard.vue
<ul><li>Provide <code>:correlated-log-stream</code> when embedding
TraceDetails<br> <li> Include <code>log_stream</code> in trace-details
new-window URL<br> <li> Simplify tooltip to use
<code>correlation.viewInTraces</code></ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10403/files#diff-b77a766fa0094f641873071a8f13c73704933b941f387ed105e85a4e59efdb38 ">+23/-9</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>TraceDetails.spec.ts</strong><dd><code>Add extensive
TraceDetails prop and flow tests</code>
</dd></summary>
<hr>
web/src/plugins/traces/TraceDetails.spec.ts
<ul><li>Add embedded/standalone mode behavior tests<br> <li> Cover
correlation params, expand, and URL building<br> <li> Add edge-case
coverage for redirects and filtering<br> <li> Add RUM span formatting
and search navigation tests</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10403/files#diff-beb61b6b044829d77ec5f0feabdd2b5ff980cc4f2b1ba8a809617b765f086c2b ">+1606/-0</a></td>
</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>en.json</strong><dd><code>Remove unused correlation
tooltip translation key</code>
</dd></summary>
<hr>
web/src/locales/languages/en.json
- Delete `correlation.viewInTracesTooltip` string entry
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10403/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824 ">+0/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2026-02-10 20:38:58 +05:30
Sai Nikhil
c2c756613f
fix: servie graph v2 ( #10410 )
2026-02-10 12:04:40 +05:30
ByteBaker and sai nikhil kethe
2075dd0fad
fix: use jsonb_exists() instead of ? operator for scope conflict SQL ( #10429 )
...
### **User description**
## Summary
- Replace PostgreSQL `?` JSONB operator with `jsonb_exists()` function
in service streams scope conflict SQL to avoid ambiguity with
parameterized query placeholders.
## Test plan
- [ ] Verify scope conflict filtering queries work correctly with
`jsonb_exists()`
- [ ] Run existing `service_streams` unit tests
___
### **PR Type**
Bug fix
___
### **Description**
- Replace JSONB `?` with `jsonb_exists()`
- Update Postgres SQL generation for filters
- Adjust unit tests for new SQL
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Scope filters input"]
B["build_scope_conflict_sql (Postgres)"]
C["SQL uses jsonb_exists() checks"]
D["Updated SQL assertions in tests"]
A -- "iterates key/value" --> B
B -- "generates conflict predicates" --> C
C -- "validated by" --> D
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>service_streams.rs</strong><dd><code>Use
`jsonb_exists()` in scope conflict SQL</code>
</dd></summary>
<hr>
src/infra/src/table/service_streams.rs
<ul><li>Generate Postgres conflict checks with
<code>jsonb_exists(dimensions::jsonb, </code><br><code>key)</code><br>
<li> Keep value mismatch logic via <code>dimensions::jsonb->>'{key}' !=
$n</code><br> <li> Update SQL string assertions in related unit
tests</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10429/files#diff-51e4848c872a89ac19b18d5d49292ea20bf23bf71498236a4a4ea147f0600a77 ">+4/-4</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai >
2026-02-09 19:34:54 +05:30
ByteBaker
35831659a9
fix: use log stream filters for correlated logs query field names
...
When navigating from traces/logs to the correlated Logs tab, the SQL
query was using trace field names (e.g., service_k8s_statefulset_name)
or semantic IDs (e.g., http-status) instead of the actual log stream
field names (e.g., k8s_statefulset_name).
Use logStreams[0].filters from the _correlate API response which
already contains the correct per-stream field names. Same pattern as
9127b6172 (incident detail page fix).
Fixed in:
- TraceDetailsSidebar.vue (traces -> correlated logs)
- SearchResult.vue (logs -> view related -> correlated logs)
2026-02-07 18:40:10 +05:30
Huaijin
b315f4ca08
feat: dag graph for llm traces ( #10388 )
2026-02-06 16:46:44 +08:00
Harsh Mahajan
e6d5b6eed5
fix: ParserError on streams with : in name ( #10394 )
2026-02-06 12:46:49 +08:00
Abhay Padamani
2ca1a05458
fix: line chart issue with vrl for visualization ( #10373 )
...
### **User description**
- #10281
___
### **PR Type**
Bug fix
___
### **Description**
- Store VRL function query as plain text
- Restrict VRL usage to table visualizations
- Clear VRL when switching off table charts
- Prevent histogram queries for table/VRL cases
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Logs visualization update flow"]
B["VRL function content"]
C["Chart type selection"]
D["VRL query stored/cleared"]
E["Histogram query decision"]
F["Visualization request"]
A -- "reads" --> B
A -- "finalizes" --> C
C -- "gates VRL support" --> D
C -- "affects" --> E
D -- "influences" --> F
E -- "selects query mode" --> F
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>Index.vue</strong><dd><code>Fix VRL persistence and
histogram selection</code>
</dd></summary>
<hr>
web/src/plugins/logs/Index.vue
<ul><li>Save <code>vrlFunctionQuery</code> without base64 encoding<br>
<li> Apply VRL only when chart type <code>table</code><br> <li> Clear
stale VRL when chart becomes non-table<br> <li> Recompute histogram
eligibility after chart selection</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10373/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62 ">+34/-14</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2026-02-05 17:33:26 +05:30
ktx-riya
71f1d085a3
refactor: add a common component for the error/warnings ( #10140 )
...
### **PR Type**
Enhancement, Bug fix
___
### **Description**
- Add shared `PanelErrorButtons` UI component
- Replace duplicated panel warning button code
- Show last refreshed and loading warnings
- Wire partial/cached state from renderer
___
### Diagram Walkthrough
```mermaid
flowchart LR
PSR["`PanelSchemaRenderer` emits state"]
VP["`ViewPanel.vue` / `AddPanel.vue` / `Index.vue` / `VisualizeLogsQuery.vue` / `PanelContainer.vue`"]
PEB["`PanelErrorButtons.vue` renders warnings + time"]
PSR -- "emits (partial/loading/cached/lastTriggeredAt)" --> VP
VP -- "passes props" --> PEB
```
<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>PanelContainer.vue</strong><dd><code>Use shared warning
buttons in container</code>
</dd></summary>
<hr>
web/src/components/dashboards/PanelContainer.vue
<ul><li>Replace inline warning/refresh UI with
<code>PanelErrorButtons</code><br> <li> Lazy-load and register
<code>PanelErrorButtons</code> component<br> <li> Pass
error/warning/refresh props to shared component</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10140/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d ">+14/-112</a></td>
</tr>
<tr>
<td>
<details>
<summary><strong>PanelErrorButtons.vue</strong><dd><code>New shared
component for panel warnings</code>
</dd></summary>
<hr>
web/src/components/dashboards/PanelErrorButtons.vue
<ul><li>Add reusable warning/error buttons with tooltips<br> <li>
Include cached/partial-data warnings and icons<br> <li> Add "Last
Refreshed At" display with <code>RelativeTime</code><br> <li> Provide
scoped styles for warning/refresh UI</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10140/files#diff-570007fb3e9612099b25a19987366be1e1bacfe614176bdc146866cb3069a38c ">+183/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>ViewPanel.vue</strong><dd><code>Centralize view panel
warning indicators</code>
</dd></summary>
<hr>
web/src/components/dashboards/viewPanel/ViewPanel.vue
<ul><li>Replace local tooltip buttons with
<code>PanelErrorButtons</code><br> <li> Listen to renderer events for
partial/loading/cached state<br> <li> Track new reactive flags and
expose to template<br> <li> Lazy-load/register
<code>PanelErrorButtons</code> component</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10140/files#diff-e7b26fbbfe7ae57f50377c0f002155df17109ea54708b0f134dd2005356b2930 ">+40/-64</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>VisualizeLogsQuery.vue</strong><dd><code>Reuse warning
buttons in logs visualize</code>
</dd></summary>
<hr>
web/src/plugins/logs/VisualizeLogsQuery.vue
<ul><li>Adjust panel layout spacing for new header height<br> <li> Add
<code>PanelErrorButtons</code> beside action buttons<br> <li> Track
<code>lastTriggeredAt</code>, partial/loading/cached flags<br> <li> Wire
additional <code>PanelSchemaRenderer</code> event handlers</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10140/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261 ">+56/-62</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>AddPanel.vue</strong><dd><code>Reuse warning buttons in
add panel view</code>
</dd></summary>
<hr>
web/src/views/Dashboards/addPanel/AddPanel.vue
<ul><li>Replace inline error/warning/refresh UI with
<code>PanelErrorButtons</code><br> <li> Add
<code>PanelErrorButtons</code> near errors sidebar area<br> <li> Track
partial/loading/cached state via renderer events<br> <li>
Lazy-load/register <code>PanelErrorButtons</code> component</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10140/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8 ">+55/-65</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>Index.vue</strong><dd><code>Unify metrics panel
warnings and refresh</code>
</dd></summary>
<hr>
web/src/plugins/metrics/Index.vue
<ul><li>Move "last refreshed" into <code>PanelErrorButtons</code><br>
<li> Add <code>PanelErrorButtons</code> to both panel layouts<br> <li>
Wire partial/loading/cached and series-limit warnings<br> <li> Adjust
panel top spacing and header positioning</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10140/files#diff-a6734928ea4dcb5244e90de5a16fe6f5cafa95ccf58430ac7b548a065daf3d61 ">+78/-12</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2026-02-05 16:26:24 +05:30