mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-06 08:09:24 +00:00
283a5f3041d4e393a0259febd819269eefa85bbb
467
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
663ab7bacc | fix: In traces prevent duplicate filter when same field condition is reapplied (#10894) | ||
|
|
fdd3d91016 | fix: service graph v2 UI (#10889) | ||
|
|
d2861433fa | fix: search inspector UI (#10749) | ||
|
|
54d00d5e78 | fix: Traces span kind mapping (#10838) | ||
|
|
b7ab4f4377 |
fix: dashboard series color for multi window (#10846)
- #10847 |
||
|
|
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> |
||
|
|
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> |
||
|
|
26bc1c4b13 | fix: traces table llm keys formatting (#10787) | ||
|
|
66d68ce9fb | fix: 10744 add metric grouping in metrics correlation tab infra network others (#10767) | ||
|
|
108cc3b2e1 | refactor: dashboard long files (#10680) | ||
|
|
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> |
||
|
|
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 . |
||
|
|
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> |
||
|
|
877ffa3926 | feat: add notification support for incidents (#10715) | ||
|
|
d1190b1549 |
fix: traces color generation (#10693)
Co-authored-by: Bhargav <BJP232004@GMAIL.COM> |
||
|
|
72b90a93e3 | fix: Feat nlp mode (#10638) | ||
|
|
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 |
||
|
|
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)
|
||
|
|
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> </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> </td> </tr> <tr> <td> <details> <summary><strong>mod.rs</strong><dd><code>Extend PanelConfig with time fields</code> </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> </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> </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> |
||
|
|
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> </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> </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> </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> </td> </tr> <tr> <td> <details> <summary><strong>VariablesValueSelector.vue</strong><dd><code>Resolve stream/field variables before querying</code> </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> </td> </tr> <tr> <td> <details> <summary><strong>AddSettingVariable.vue</strong><dd><code>Allow variable-based stream and field selection</code> </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> |
||
|
|
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> |
||
|
|
4a18f01d2c | fix: improve ingestion check in route guard (#10427) | ||
|
|
0332a055d0 | fix: Ignore external RUM errors (#10489) | ||
|
|
584edc34d9 | fix: validate vrl with encoded value (#10607) | ||
|
|
299138967a |
fix: Email-id filtering in RUM Sessions (#10490)
#9926 #10465 |
||
|
|
21aae60f6c | fix: sanitized exception stack trace (#10565) | ||
|
|
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 |
||
|
|
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) |
||
|
|
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 |
||
|
|
69e7dca5e6 | feat: service graph edge metrics fix, connection_type removal, and side panel latency display | ||
|
|
9a260f8efb |
fix: Trace Details UI improvements (#10550)
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> |
||
|
|
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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-28cd591383f0560fc2b37219eeedbc80b667989c030984a8618594329848bde8">+391/-0</a> </td> </tr> <tr> <td><strong>ingestionSearchIndex.ts</strong><dd><code>Add cross-tab ingestion search index utility</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-d9a547e4c64ac12bc06a95d788a2e4368c41d9dd1f22bc8705724f077b0eade3">+105/-0</a> </td> </tr> <tr> <td><strong>azureIntegrations.ts</strong><dd><code>Add Azure integrations catalog and dashboard URL helper</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-d187fe67343b508f89aec6b7e520f1971aec9849fd070831534b1de202833b60">+207/-0</a> </td> </tr> <tr> <td><strong>index.ts</strong><dd><code>Add Vuex cache for GitHub dashboard gallery</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-955a15c7ee060f1545e82be22911dd0c14307dee5a70071a394e9fd583bd2c55">+29/-0</a> </td> </tr> <tr> <td><strong>AWSIntegrationTile.vue</strong><dd><code>Add AWS integration tile with source/dashboard actions</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-34515c48d3727cb3facedf8f05a351733567e919da4cd60bef79e1d486054f6a">+648/-0</a> </td> </tr> <tr> <td><strong>AddDashboardFromGitHub.vue</strong><dd><code>Implement GitHub dashboard gallery selection and import</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-37970cb4aec33b981b09e86f70f1b5565123d451f6438eadf874b33c201355a8">+557/-0</a> </td> </tr> <tr> <td><strong>AzureQuickSetup.vue</strong><dd><code>Add Azure Function quick setup and O365 dashboard</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-2d6a495b3f5a485e0f1d11b9a5b57e9bc1e13a94e4346bebabd287ece643032f">+420/-0</a> </td> </tr> <tr> <td><strong>KubernetesConfig.vue</strong><dd><code>Add Kubernetes quick install and parameterized commands</code> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-e9d4a14ebc9a1b239523d8f94996e6002369969f6df78cb1051e0d1f807e108f">+93/-94</a> </td> </tr> <tr> <td><strong>Recommended.vue</strong><dd><code>Remove recommended tab search/filtering UI</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-d52f7f52bf8f6d3d639e5d0a550bed82223cd4fbd3eee3c257b7f80e0b8ee6d2">+1/-26</a> </td> </tr> <tr> <td><strong>AWSQuickSetup.vue</strong><dd><code>Add AWS quick setup onboarding view</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-91dd9fc2d50c5dd716d42b908660208082cd7f513cb8990b3d8e851ac5acc767">+381/-0</a> </td> </tr> <tr> <td><strong>AzureIntegrationTile.vue</strong><dd><code>Add Azure integration tile component for services</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-40a88b76dfbb75f55b54468527f0d83da862b22f69f3eed96eea2215ec145f21">+223/-0</a> </td> </tr> <tr> <td><strong>AWSIndividualServices.vue</strong><dd><code>Add AWS individual services list and search</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-5ba31c962ffdff7d38a95dc6608e9eaf68093f15ef1e4961c4dc87f5f336dff4">+162/-0</a> </td> </tr> <tr> <td><strong>AWSIntegrationGrid.vue</strong><dd><code>Add grid layout for AWS integration tiles</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-da23909bedefc9696907a26858c4c90489d54006c65137c73288230af1e39c26">+162/-0</a> </td> </tr> <tr> <td><strong>AzureIndividualServices.vue</strong><dd><code>Add Azure individual services list and search</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-befd207c228eb542159696859b04b530c82797cf06d9d993eabf0446856d3610">+137/-0</a> </td> </tr> <tr> <td><strong>Ingestion.vue</strong><dd><code>Integrate ingestion global search/navigation updates</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-97b8e8ed2a1260a39442563c7447d4f6d4830a37d47258920d6f94a292cd2d77">+102/-1</a> </td> </tr> <tr> <td><strong>Dashboards.vue</strong><dd><code>Hook GitHub gallery import into dashboards view</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-8da3187db8ce3d795d0f196ede6b2290221ffa3e27b15dcc2b645e44dd196213">+33/-5</a> </td> </tr> <tr> <td><strong>AzureConfig.vue</strong><dd><code>Refresh Azure ingestion page for new quick setup</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-64b4a0743d67556bf2e34fb4be69af8e1a2e8be66e3ff18c3f3e61d211f70292">+22/-16</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10331/files#diff-a40ad271f4e88e42c4e746b5ce54ef0dceca122bedf3f9fa1f0571765001c680">+49/-98</a> </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> |
||
|
|
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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10470/files#diff-a4464ad7df3ac3afdca4e6fc583122d701bace10e3a2daf083cb6c902565b20f">+28/-12</a> </td> </tr> <tr> <td><strong>convertSQLData.ts</strong><dd><code>Merge per-panel custom chart options</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10470/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3">+23/-0</a> </td> </tr> <tr> <td><strong>projections.rs</strong><dd><code>Extract top-level HAVING as structured tree</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10470/files#diff-7a0420d3649da44b80be36d7f1043d6ff81d88395c961266882c3c700f7edff7">+570/-3</a> </td> </tr> <tr> <td><strong>search.rs</strong><dd><code>Add `HavingNode` and `LogicalOperator` schema</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10470/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+26/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Expose HAVING schema and preview config</code> </dd></td> <td><a href=""></a></td> </tr> <tr> <td><strong>AlertSettings.vue</strong><dd><code>Schema-aware threshold UI and i18n tooltips</code> </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> </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> </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> </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> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10470/files#diff-c22aa1c5934b763f1d4a5a61a7e810b6bcb1d60b76b64c61cb3ce89dc0a04499">+5/-5</a> </td> </tr> <tr> <td><strong>AlertHistory.vue</strong><dd><code>Alert history view updates to new drawer flow</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10470/files#diff-1efacbab3b15dacfc79063c799c30b04bf3b75415055f892203e8cf1cb414450">+1/-1</a> </td> </tr> <tr> <td><strong>FilterGroup.vue</strong><dd><code>Filter builder tweaks supporting alert wizard changes</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10470/files#diff-8d5a73bea3aa0b5c86d48cda4a61ee3e30f27797ac2a5add1ee8bd66c75bef23">+7/-5</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10470/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+6/-0</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10470/files#diff-ba9b65130898444f7815fd6068bdb0dc590612f74cc893f79d91b0afc44cc851">+29/-23</a> </td> </tr> <tr> <td><strong>alert.rs</strong><dd><code>Remove custom aggregation auto-threshold override</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10470/files#diff-574be3504bf4d855c65fd3d7a10797a970237ff552edac4962b474b3983e094e">+1/-7</a> </td> </tr> <tr> <td><strong>AlertWizardRightColumn.vue</strong><dd><code>Wizard right column rerender/placement adjustments</code> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> |
||
|
|
ba2329b27e | fix: removed console log statements (#10499) | ||
|
|
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>
</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>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
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> |
||
|
|
c2c756613f | fix: servie graph v2 (#10410) | ||
|
|
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> </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> </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> </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> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-9db7fe6fba32c64dabbf0dd05ec6df9a1ddfc89ff4774d0e627d657e016e7674">+551/-0</a> </td> </tr> <tr> <td><strong>TableRenderer.spec.ts</strong><dd><code>Add pagination behavior unit tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-550a0a669838c47473442a7d37407fead8b7cb2a05121880dd2c0522022c8c3f">+180/-0</a> </td> </tr> <tr> <td><strong>ConfigPanel.spec.ts</strong><dd><code>Test table pagination config UI</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-a4e717cd660ad6fa369629f8de524f4d57bf4f71b11d3244ce41b9ed9f0379d2">+203/-0</a> </td> </tr> <tr> <td><strong>useDashboardPanel.spec.ts</strong><dd><code>Assert default pagination config initialization</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-5dbd79fdde0cbbb7db569095fa062931286463da0b5e72b1fbe99f56116fa5e2">+24/-0</a> </td> </tr> <tr> <td><strong>dashboard-table-pagination.spec.js</strong><dd><code>Add E2E coverage for table pagination</code> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+2/-0</a> </td> </tr> <tr> <td><strong>constants.ts</strong><dd><code>Add default rows-per-page constant</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-a5e1b14a291a4b42368faa0160f555b19bdc1a542624d4f89ea6e3ed7c4a664d">+2/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Persist pagination fields in `PanelConfig`</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+4/-0</a> </td> </tr> <tr> <td><strong>TableRenderer.vue</strong><dd><code>Implement pagination state and default footer</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+89/-9</a> </td> </tr> <tr> <td><strong>PromQLTableChart.vue</strong><dd><code>Add pagination props and legend footer controls</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-9c39051461b6f7deae94e8847f91443c4c68541f52137a423bb54b6ab5cd3317">+29/-10</a> </td> </tr> <tr> <td><strong>TablePaginationControls.vue</strong><dd><code>New reusable pagination footer component</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-b5e9d5740f8c581bb17133e249e81174ea0842b4d46b5c06fa0efa2f336a15d7">+146/-0</a> </td> </tr> <tr> <td><strong>ConfigPanel.vue</strong><dd><code>Add pagination toggle and rows-per-page input</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+59/-0</a> </td> </tr> <tr> <td><strong>PanelSchemaRenderer.vue</strong><dd><code>Pass pagination props into `TableRenderer`</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+2/-0</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818">+4/-1</a> </td> </tr> <tr> <td><strong>ja.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3">+4/-1</a> </td> </tr> <tr> <td><strong>de.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264">+4/-1</a> </td> </tr> <tr> <td><strong>fr.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2">+4/-1</a> </td> </tr> <tr> <td><strong>it.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d">+4/-1</a> </td> </tr> <tr> <td><strong>hi.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-1e7b52b5c4e762db2c923d0d3efb6d693702825ed3a1a112d3069f26b0d5f605">+4/-1</a> </td> </tr> <tr> <td><strong>ko.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48">+4/-1</a> </td> </tr> <tr> <td><strong>nl.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906">+4/-1</a> </td> </tr> <tr> <td><strong>es.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778">+4/-1</a> </td> </tr> <tr> <td><strong>pt.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815">+4/-1</a> </td> </tr> <tr> <td><strong>en.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+4/-1</a> </td> </tr> <tr> <td><strong>zh.json</strong><dd><code>Add pagination strings and rename key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e">+4/-1</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10285/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+7/-1</a> </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> |
||
|
|
c64197b2af | fix: O2A title and tool call improvements (#10385) | ||
|
|
21155591fd | feat: map otel field to openobserve field (#10213) | ||
|
|
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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-d301f514502d418578addfb8a9332f18193ec77414fe2de5f86584eaccf89a43">+88/-0</a> </td> </tr> <tr> <td><strong>LogsHighLighting.vue</strong><dd><code>Import highlighting stylesheet via scoped SCSS</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-4ef4ac0444004add270de4da30fa39bafd95bd7f1c408d28cf6737655fc152eb">+4/-2</a> </td> </tr> <tr> <td><strong>EventDetailDrawerContent.vue</strong><dd><code>Redesign drawer with tabs, copy, network</code> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-eb9d64194e4354ce8babdb843029087b4d0813100046f6de6fd2605816eede58">+67/-0</a> </td> </tr> <tr> <td><strong>EventTypeBadge.vue</strong><dd><code>Add reusable event type badge component</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-78d3b36f54018d0cc31a0ed96800588bacb5b3f6e608803f32e704e576d89001">+49/-0</a> </td> </tr> <tr> <td><strong>KeyValueRow.vue</strong><dd><code>Add reusable labeled key-value row component</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-978f05f4c50530f6d772579c54478e1aef10b7f7b066f2769e9d34c62c488895">+53/-0</a> </td> </tr> <tr> <td><strong>PerformanceMetrics.vue</strong><dd><code>Add wrapper component for performance metrics</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-7c9e28cabc9dd4189346dadc26dcb4def95a9265557144e99128a9f3b951c21e">+60/-0</a> </td> </tr> <tr> <td><strong>ActionPerformanceMetrics.vue</strong><dd><code>Add action performance metric cards and statuses</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-cd6683a885104c9e5074ab1c2b97bed5275cffa688da905f539bef98efdb4ec8">+98/-0</a> </td> </tr> <tr> <td><strong>ErrorPerformanceMetrics.vue</strong><dd><code>Add error performance metric cards and statuses</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-1fc102647ba527cfd553f4c0fd723f1b72fabbd85bad7518e0a826a09d858442">+76/-0</a> </td> </tr> <tr> <td><strong>MetricCard.vue</strong><dd><code>Add generic metric card with formatting</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-3666ababe7e5a472c88da967ba6e5e632dfd907abb8555a6bb4baeabc0215e32">+168/-0</a> </td> </tr> <tr> <td><strong>ResourcePerformanceMetrics.vue</strong><dd><code>Add resource timing breakdown metric cards</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-9dfcf79c8b3c1b1c0e43bc8e65c90a6cd6b75c84b7de8250f18ba985ef36ad55">+128/-0</a> </td> </tr> <tr> <td><strong>ViewPerformanceMetrics.vue</strong><dd><code>Add web vitals and view metric cards</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-0ddb74b6ef8bdb8656c47fb4065e4add8ba853f5834fbf3e59087623b054aa2b">+172/-0</a> </td> </tr> <tr> <td><strong>ErrorsDashboard.vue</strong><dd><code>Emit zoom events to update time range</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-46138c05241c5e0911a0feba39a21dbb8452453c0e26a1d00c3493cc579f07b2">+8/-0</a> </td> </tr> <tr> <td><strong>WebVitalsDashboard.vue</strong><dd><code>Emit zoom events and support dateTime updates</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-bbb15649f6ecf4b2968a8173091ef8b2a21bfe39bff8e08f91566bca189cca09">+9/-1</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-d3d59688cccdcc6c84ebe88b698c6910030abecc3125f4c0ef81b0df023699ba">+26/-14</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-a7d04eb87cd7588ba4811d79c6d32696a58d737a24931258329be4f96cee7610">+39/-10</a> </td> </tr> <tr> <td><strong>SessionViewer.vue</strong><dd><code>Guard session email access with optional chaining</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10329/files#diff-9f7a183be1e2cfcb3c3c852c059f66003dd4f3f586421b012e1b835724929ca1">+1/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>incidents.rs</strong><dd><code>Limit temporal topology
edges to nearest alerts</code>
</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>
</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>
</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>
</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>
|
||
|
|
41d0c591a6 | fix: if stream size is NaN, show 0 MB instead of showing NaN on UI (#10239) | ||
|
|
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>
</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>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>QueryInspector.vue</strong><dd><code>Redesign
QueryInspector UI and logic</code>
</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>
|
||
|
|
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>
</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>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-f7068d6fc979cc1fbc6e2bc562be53f5453fc874b367c1688adf70c0896aac62">+41/-45</a>
</td>
</tr>
<tr>
<td><strong>email.ts</strong><dd><code>Rename email template and remove
CC/subject</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-3e756aefde39bd7c780066f6ee6e22df1f2846f5e0013fd6ec568a98dd54f64b">+18/-16</a>
</td>
</tr>
<tr>
<td><strong>servicenow.ts</strong><dd><code>Rename ServiceNow template
to `prebuilt_servicenow`</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-3790cdccf9f6221cf55c86664b4cbfb65d20f3da9db719167898b8b76b698a2f">+2/-2</a>
</td>
</tr>
<tr>
<td><strong>alert_templates.ts</strong><dd><code>Add
`get_system_templates` API call</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-fd8c4260abc3df601e4331d36b0c211eca568ee70139ad90c87247bc552fe4e2">+3/-0</a>
</td>
</tr>
<tr>
<td><strong>prebuilt_loader.rs</strong><dd><code>Add
get_prebuilt_template and fallback loader</code>
</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>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-c06292c108cc15b585a0e3318fd15d3e86c1f1a0f001ab84fff85facefd3c4d3">+420/-1</a>
</td>
</tr>
<tr>
<td><strong>templates.rs</strong><dd><code>Add ensure_system_templates
initialization</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-975d7665f1439ca49810c28554f85e513ff3a4c8b849f2bb1966536230951464">+86/-0</a>
</td>
</tr>
<tr>
<td><strong>templates.rs</strong><dd><code>Expose GET system prebuilt
templates endpoint</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-b08e274a64cc935b0cec402a04271a872b1586027a77dc0ccb84c597c3960f61">+54/-0</a>
</td>
</tr>
<tr>
<td><strong>AddDestination.vue</strong><dd><code>Update form logic for
prebuilt vs custom</code>
</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>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-1fa17c0e52becd683dec1bbee12aab6823b28c1bbedca0d5039d688527f826e5">+29/-2</a>
</td>
</tr>
<tr>
<td><strong>AlertsDestinationList.vue</strong><dd><code>Add custom
destination label logic</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-e9d05ba6c071c0e2f5d9ef7acdef757f79910abd6897b29e27b069a10d4ba8de">+15/-2</a>
</td>
</tr>
<tr>
<td><strong>PrebuiltDestinationForm.vue</strong><dd><code>Comment out
unsupported email fields</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-606eb6f7e6e43518cc9b1f3194097c52acf3df0df9ab5945274196d7221035a0">+3/-2</a>
</td>
</tr>
<tr>
<td><strong>pagerduty.ts</strong><dd><code>Rename PagerDuty template to
`prebuilt_pagerduty`</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-a216d76143343db3aec8efe02596be53b438813aa2aa8af2fb1080e17f5540aa">+2/-2</a>
</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>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-262b3003a3045192e0aaccddebe76bdb29fcd68655e8bacfd486e50575a14801">+9/-9</a>
</td>
</tr>
<tr>
<td><strong>types.spec.ts</strong><dd><code>Adjust PrebuiltConfig tests
for new prefix</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-67fc167ebe4d6a433579ba9850a6d7ce3a83d97bebe410521f85775a948595fc">+4/-4</a>
</td>
</tr>
<tr>
<td><strong>alertDestinationsPage.js</strong><dd><code>Update selector
for test result element</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-57e5c53b4ef998b3d8708149620ff94dcc46807927f1a3a9e9f28ed3ebe25b0a">+3/-1</a>
</td>
</tr>
<tr>
<td><strong>alerts-destinations-prebuilt.spec.js</strong><dd><code>Add
random name for Slack destination test</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-0295825c868c1d1ed5cc194ba04843a7d5f4e58decff2593c7d9bd5b29ec33a4">+1/-0</a>
</td>
</tr>
<tr>
<td><strong>discord.spec.ts</strong><dd><code>Update Discord tests for
new prefix</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-21a02fd01b42452d1f13140715e5f81146b7a62d61d4b899deea4f30be06284e">+2/-2</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Route for system prebuilt templates
API</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+1/-0</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>en.json</strong><dd><code>Add custom destination translation
keys</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10301/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+5/-1</a>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</td>
</tr>
</table></details></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
|
||
|
|
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) |
||
|
|
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. |
||
|
|
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> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10257/files#diff-80552b5d25fa6cef9fbbe430b1865d761c4b132284c2d2175afceea8cbabc8c7">+2/-1</a> </td> </tr> <tr> <td><strong>IndexList.vue</strong><dd><code>Use $el to query and reset scroll container</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10257/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+2/-1</a> </td> </tr> <tr> <td><strong>streamWorker.js</strong><dd><code>Implement message deduplication and abort logic</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10257/files#diff-8534facfcca68c16701832f43a501abcdb92847115c46fced5d69792e5594dd9">+63/-1</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10257/files#diff-8fce3e25a161cd458e734bd9b1f98aadefe3482da7b6529a5b1f4fa20ec115e2">+10/-1</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10257/files#diff-6954119ee8e2fb2791a6172bcd6a36925853fabc776e662f53bfcec8bf12fdc0">+11/-0</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10257/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+4/-3</a> </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> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> |
||
|
|
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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10210/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+2/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Extend PanelConfig with new ordering fields</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10210/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+4/-0</a> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10210/files#diff-94123beacdf1e10ef812b4a6fda870004aa30f65eeb9e5ef6662f907dc50092d">+35/-3</a> </td> </tr> <tr> <td><strong>ColumnOrderPopUp.vue</strong><dd><code>Add drag-drop popup for column ordering</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10210/files#diff-e3f75c0798bebeefd7bffc7e3529daca6c128fc3fe655a15684105b78de3f50e">+349/-0</a> </td> </tr> <tr> <td><strong>PromQLChartConfig.vue</strong><dd><code>Integrate column order controls in config UI</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10210/files#diff-305fcbfc89618c91ca0ee6c8c52cfa596169ca2dced6778eea6cd3c89f071573">+124/-0</a> </td> </tr> <tr> <td><strong>TableRenderer.vue</strong><dd><code>Apply sticky styling and ordering in table renderer</code> </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> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10210/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+1/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
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> |