mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-06 08:09:24 +00:00
c64197b2afa9d61bbc063daf6e440bcbca709eec
429
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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> |
||
|
|
3e915042e0 |
fix: RUM auto refresh on selecting time-range through charts (#10101)
### **PR Type** Bug fix, Enhancement, Tests ___ ### **Description** - Fix undefined errors with optional chaining - Improve table virtualization and index mapping - Enhance RUM filters and multi-select queries - Standardize formatting and styling ___ <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>1 files</summary><table> <tr> <td><strong>SearchBar.spec.ts</strong><dd><code>Skip specific tests and adjust string formatting</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10101/files#diff-12619581fdac90b37d81453dc0d18c77a5b9d61f882cc75fc3fe344c392a36f7">+38/-12</a> </td> </tr> </table></details></td></tr><tr><td><strong>Bug fix</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>PerformanceSummary.vue</strong><dd><code>Add optional chaining to prevent undefined errors</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10101/files#diff-fdf59594c111c1af03772c9deef4ba07cf2c2d00c9609737a0ea3e3c76fb1c1b">+5/-2</a> </td> </tr> <tr> <td><strong>IndexList.vue</strong><dd><code>Refactor clear filter logic and style attributes</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10101/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+37/-27</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>3 files</summary><table> <tr> <td><strong>TenstackTable.vue</strong><dd><code>Improve virtualization overscan and index calculations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10101/files#diff-bc3c669f5ab65a42ae378df1f7d6b35014c9c220790bdcc72b47f55d1385dc22">+51/-16</a> </td> </tr> <tr> <td><strong>AppPerformance.vue</strong><dd><code>Enhance refresh button UI and handle data zoom</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10101/files#diff-c58834a470a751414b76861fc61e03433319a135976ed38de80d036c4da4ff4b">+56/-2</a> </td> </tr> <tr> <td><strong>AppSessions.vue</strong><dd><code>Add null-safe frustration count and SQL logic</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10101/files#diff-08359708ae507d81dcdc60e3c05ba4f56a40f4a61718074cd6019bf2ceb87575">+13/-6</a> </td> </tr> </table></details></td></tr><tr><td><strong>Formatting</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>tenstack-table.scss</strong><dd><code>Comment CSS performance hints for content visibility</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10101/files#diff-0175daf538e52ff95480cb40fadf8e26564474f15e39c5fe2d628f2d7e72aa78">+5/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Configuration changes</strong></td><td><details><summary>4 files</summary><table> <tr> <td><strong>api.json</strong><dd><code>Support multi-select clauses in SQL queries</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10101/files#diff-e69ec55ce96256b60a0169f2e4c2e8c9989b83b8eddd6273328ee99a1aef56b4">+12/-6</a> </td> </tr> <tr> <td><strong>errors.json</strong><dd><code>Apply multi-select variables in error panels</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10101/files#diff-23bd1f63bdb19c45ea53ff3330bc164f45d172b6a484ca3c1998f64fd0f8356e">+13/-7</a> </td> </tr> <tr> <td><strong>overview.json</strong><dd><code>Update overview queries for multi-select filters</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10101/files#diff-92692b084688fa09692837dd0608e6fb648a9b0224d218fd17c1b98c51790a10">+16/-10</a> </td> </tr> <tr> <td><strong>web_vitals.json</strong><dd><code>Enable multi-select in web vitals variables</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10101/files#diff-6dd630a36b4bf3a840ca4cc875209148fbbcb4c51db3d5b1997e2eabb7cf4b60">+27/-21</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
d8d362f211 |
fix: histogram interval issue for dashboard viewpanel (#10133)
### **PR Type**
Enhancement, Tests
___
### **Description**
- Introduce regex-based histogram interval replacer.
- Add comprehensive unit tests covering SQL scenarios.
- Replace AST parsing in ViewPanel.vue with replacer.
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["histogramIntervalReplacer.ts"] --> B["ViewPanel.vue"]
C["histogramIntervalReplacer.spec.ts"] --> A
```
<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>histogramIntervalReplacer.spec.ts</strong><dd><code>Add
unit tests for histogram replacer</code>
</dd></summary>
<hr>
web/src/utils/dashboard/histogramIntervalReplacer.spec.ts
<ul><li>Add unit tests for basic interval replacement<br> <li> Cover
whitespace, field, and case variations<br> <li> Include complex SQL and
edge case scenarios</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10133/files#diff-6f69332f209c616ca342743baefeb5a6c2dc6956677b062bb5609c0c32af505a">+424/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>histogramIntervalReplacer.ts</strong><dd><code>Implement
regex histogram interval replacement</code>
</dd></summary>
<hr>
web/src/utils/dashboard/histogramIntervalReplacer.ts
<ul><li>Implement replaceHistogramInterval using regex<br> <li> Support
adding and removing intervals<br> <li> Preserve original query
formatting and whitespace</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10133/files#diff-be10dd10d2ebb4bee577aa834243012bc20306dea32ebc7083f72ef27a8d95f2">+67/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>ViewPanel.vue</strong><dd><code>Integrate histogram
replacer in ViewPanel</code>
</dd></summary>
<hr>
web/src/components/dashboards/viewPanel/ViewPanel.vue
<ul><li>Import replaceHistogramInterval util<br> <li> Replace AST-based
logic with replacer<br> <li> Update queries only when changed</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10133/files#diff-e7b26fbbfe7ae57f50377c0f002155df17109ea54708b0f134dd2005356b2930">+7/-45</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
e419449ddb |
feat: implement prebuilt alert destination (Backend) (#10074)
Design at : observability/alert-prebuilt-destinations/alert-prebuilt-destinations-plan.md ## 🤖 Auto-Implementation (Backend) **Feature:** implement prebuilt alert destination **Source Issue:** openobserve#10055 ## Changes - ✅ Backend code (Rust) - ✅ Unit + integration tests - ✅ All quality gates passed ## Related PRs Frontend PR: #FRONTEND_PR_NUMBER (to be linked) Closes openobserve#10055 --- 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> --------- Co-authored-by: claude-code-bot <claude-code-bot@openobserve.ai> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
80c5d97cb9 |
fix: dashboard promql query results warning (#10093)
### **PR Type** Bug fix, Tests, Enhancement ___ ### **Description** - Fix PromQL warning only when series limit hit - Add tests for streaming warning logic - Remove `confine` from chart and SQL tooltips ___ <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>1 files</summary><table> <tr> <td><strong>convertPromQLData.spec.ts</strong><dd><code>Add tests for streaming series warning logic</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10093/files#diff-2769044ec488ef4070c2e1a28ce23ec36b945e46c903b870f8b340cbd6b05211">+95/-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>convertPromQLData.ts</strong><dd><code>Refine PromQL warning condition for series limit</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10093/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+3/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Configuration changes</strong></td><td><details><summary>6 files</summary><table> <tr> <td><strong>convertSQLData.ts</strong><dd><code>Remove `confine` property from SQL tooltip</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10093/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3">+0/-1</a> </td> </tr> <tr> <td><strong>convertPromQLGaugeChart.ts</strong><dd><code>Remove `confine` from gauge chart tooltip</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10093/files#diff-91706cfd8de0e4dd864bd1efe1fbd6dc220690963c278a8c3ac46aec51d974d6">+0/-1</a> </td> </tr> <tr> <td><strong>convertPromQLGeoChart.ts</strong><dd><code>Remove `confine` from geo chart tooltip</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10093/files#diff-6eb91a67a23394322bc5577c8750a91c19b3e53f54c088afd2dcb017acccfb03">+0/-1</a> </td> </tr> <tr> <td><strong>convertPromQLHeatmapChart.ts</strong><dd><code>Remove `confine` from heatmap chart tooltip</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10093/files#diff-be005732a54fbe2914c68c052407adde3c35b11a81b914ae602e322b4bd63302">+0/-1</a> </td> </tr> <tr> <td><strong>convertPromQLMapsChart.ts</strong><dd><code>Remove `confine` from maps chart tooltip</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10093/files#diff-8961325d132fe026290bbb3a1de46f058b68e41b4033b0549cdeac5d030a2094">+0/-1</a> </td> </tr> <tr> <td><strong>axisBuilder.ts</strong><dd><code>Remove `confine` from built tooltip</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/10093/files#diff-2806b132f6ff85d110f34517e7f9dc86566f784fe85593ca2ce5f51bf2cc68df">+0/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
84625fdb0e |
fix: ensure variables structure exists for dashboards without variables (#10066)
### **PR Type**
Bug fix
___
### **Description**
- Ensure `dashboardJson.variables` always initialized
- Default `showDynamicFilters: false` and empty `list`
- Handle missing `variables.list` by setting empty array
- Apply initialization both before and after re-fetch
___
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Error
handling</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>commons.ts</strong><dd><code>Initialize missing
dashboard variables</code>
</dd></summary>
<hr>
web/src/utils/commons.ts
<ul><li>Add guard to initialize <code>dashboardJson.variables</code> if
missing<br> <li> Set default <code>showDynamicFilters</code> and empty
<code>list</code><br> <li> Ensure <code>variables.list</code> exists
when undefined<br> <li> Apply the same initialization after re-fetching
dashboard</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10066/files#diff-17cb74f8142984fc46bbfecdeaacccc118fd5d4ab7f040a55695caaa309d104f">+20/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
628d012a18 |
fix: dashboard table chart time (#9942)
- #9855 - #9987 ### **PR Type** Bug fix ___ ### **Description** - Skip already formatted date strings - Enhance ISO timestamp detection and conversion - Standardize numeric and Date object timestamp handling - Apply fixes in both table formatter sections ___ <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>convertTableData.ts</strong><dd><code>Improve date formatting logic</code> </dd></summary> <hr> web/src/utils/dashboard/convertTableData.ts <ul><li>Skip date strings already formatted with spaces<br> <li> Detect ISO strings and append missing Z<br> <li> Convert 16-digit microsecond strings correctly<br> <li> Use <code>new Date(val).getTime()</code> uniformly</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9942/files#diff-a672094c46e697ee7b7a3949a901cc1f7f88ec06cddaf67370474b508d5b0960">+38/-8</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: ktx-riya <riya.kukadiya@kiara.tech> |
||
|
|
62f5def1be | feat: add MCP category annotations to API endpoints (#9937) | ||
|
|
44e203bf5e |
fix: improve service graph peer service extraction and add latency visualization
Backend changes: - Remove server_address from peer attribute candidates to reduce cardinality - Use only peer_service, db_name, and db_system for peer identification - Skip streams without peer attributes instead of using fallback - Filter out empty client/server names in SQL queries - Remove 'internal' fallback for INTERNAL spans Frontend changes: - Add P50/P95/P99 latency metrics to edge tooltips - Add latency-based color coding (errors priority, then latency thresholds) - Display formatted latency values (auto-converts ns to ms/s) - Preserve stream dropdown options when switching between streams |
||
|
|
c9f15496e4 | perf: metrics chart rendering with large number of series optimization (#9889) | ||
|
|
f8c4abd3be |
fix: use vite keyword for env to maintain consistency (#9935)
### **PR Type**
Bug fix
___
### **Description**
- Update env variable name to use VITE prefix
- Reflect change in comment priority order
___
<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>vite.config.ts</strong><dd><code>Rename
BUILD_COMMIT_HASH to VITE_BUILD_COMMIT_HASH</code>
</dd></summary>
<hr>
web/vite.config.ts
<ul><li>Updated priority comment to VITE_BUILD_COMMIT_HASH<br> <li>
Changed process.env key to VITE_BUILD_COMMIT_HASH</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9935/files#diff-9430906049744cbbfe5d0b382b2466843a42cfebf755ff86fec850b0712258ef">+3/-3</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
296a2bc992 |
feat: dashboard variable handling for tabs and panels (#9693)
### **User description** - https://github.com/openobserve/openobserve/issues/6505 - https://github.com/openobserve/openobserve/issues/9196 Design at: https://github.com/openobserve/designs/blob/main/dashboards/variable-scoping/variable-scoping-design.md ___ ### **PR Type** Enhancement, Tests ___ ### **Description** - Introduce `useVariablesManager` for scoped variables - Manages global, tab, panel scopes with lazy loading - Builds and validates dependency graph, detects cycles - Commits live changes on refresh, syncs with URL - Extend `variablesDependencyUtils.ts` with scoped graph - Export `buildScopedDependencyGraph`, `detectCyclesInScopedGraph` - Make `extractVariableNames` optional filter - Update PanelContainer tests - Mock services, test refresh/delete/move/duplicate logic - Cover view-only, theme, error, emission scenarios - Enhance VariablesValueSelector tests - Wait for async init, test multi-select, search, streaming handlers - Add manager mode, add-button, edge-case scenarios ___ ### Diagram Walkthrough ```mermaid flowchart LR A["Variable Config"] --> B["expandVariablesForScopes"] B --> C["buildScopedDependencyGraph"] C --> D["initialize state (global/tabs/panels)"] D --> E["lazy load on visibility & dependency"] E --> F["commitAll on Refresh"] F --> G["Panels consume committed state"] ``` <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>2 files</summary><table> <tr> <td><strong>useVariablesManager.ts</strong><dd><code>Add variables manager composable for scoped loading</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-95f6bdeb96f8454bdff53bb60cafe6851b0cda450591813dd4dfb2038c4f3d50">+1124/-0</a></td> </tr> <tr> <td><strong>variablesDependencyUtils.ts</strong><dd><code>Implement scoped dependency graph & cycle detection</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-58a77094b6971705fb63bde853a79e17b4e2e85240694c4017aada1d01cf1fb4">+280/-4</a> </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>3 files</summary><table> <tr> <td><strong>PanelContainer.spec.ts</strong><dd><code>Extend PanelContainer tests for panel actions</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-d74ba5293a041ca029d5e9b8fec08d187e51a099451ab0372747d3ec175559a9">+925/-10</a></td> </tr> <tr> <td><strong>VariablesValueSelector.spec.ts</strong><dd><code>Enhance VariablesValueSelector async & streaming tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-9f234d5a15777d62cf8cd6cc9f0d68fbc0419a87ef58fbdb11de8c46ed6d17cb">+716/-26</a></td> </tr> <tr> <td><strong>usePanelDataLoader.spec.ts</strong><dd><code>Ensure variable readiness in panel data loader tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-f8306bde2ca2b3902674ef12091f2867c7e8b13d4d59d39d4d4152704326c09a">+53/-3</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>68 files</summary><table> <tr> <td><strong>playwright.yml</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+15/-2</a> </td> </tr> <tr> <td><strong>mod.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+6/-0</a> </td> </tr> <tr> <td><strong>dashboard-panel-actions.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-d29713fdcc11cbc93bda29da5261da389226cd718e4292a1c2cd96629f573a80">+2/-2</a> </td> </tr> <tr> <td><strong>dashboard-settings.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-1a07f3f14dacb06180bc02437804d175886aeacda98f5b0ef507a274e5ddd485">+51/-11</a> </td> </tr> <tr> <td><strong>dashboard-variables-scoped.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-86abb9f90fabd982dedfdd9a21a052a47b6984edc7bd29a51ee104c8c473aec4">+682/-0</a> </td> </tr> <tr> <td><strong>dashboard-variables.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-67d38d39bb67f4a0cbfa473ee81ad50b1fffebc40c635417e58905f3c865a6e2">+1/-1</a> </td> </tr> <tr> <td><strong>page-manager.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-565eab8b3c767ae50c9d05e591621d14f66b81af84d6b5ea6efe136c1c3933df">+2/-0</a> </td> </tr> <tr> <td><strong>custom-charts.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-e67e40336061645d2e29d009538f198c4afb5d674a63ed0bff66530caa3eae95">[link]</a> </td> </tr> <tr> <td><strong>dashbaord-tableJson</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-fe87bf86d1d91df383be2c8c118169e2a18b976ddb4bbff5fb2cc70c76381662">[link]</a> </td> </tr> <tr> <td><strong>dashboard-chartJson.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-187b68c3a07b9fe52b36379098172a4a8445f46a2da054af62c8c2deb372b590">[link]</a> </td> </tr> <tr> <td><strong>dashboard-filter.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-0b36e0f7bb97e53ba43466ae6666f04e2b3015f5760243493a058ad3df6fbef9">[link]</a> </td> </tr> <tr> <td><strong>dashboard-folder.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-808be84f3e76f1a69eb26e1acfc7c0bbc504445dc2dcf83475d474d0cad47ff2">[link]</a> </td> </tr> <tr> <td><strong>dashboard-general-setting.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-60a678bb3767da174e18e3453190d5b526687094a1c34144c59b5b3797edde56">[link]</a> </td> </tr> <tr> <td><strong>dashboard-geoMap.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-37446976600456902ad3287acddef8dd8cb0e6819606a423b6711145d08cded0">[link]</a> </td> </tr> <tr> <td><strong>dashboard-html-chart.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-5b258fd2098659bd4445a432b9aaca79b1e1295bc45f20e82408498cf2b4696a">[link]</a> </td> </tr> <tr> <td><strong>dashboard-import.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-19a69660b4842f0e2872aaefcb2a539ed25761b42daa804cfb8426d5a7cda567">[link]</a> </td> </tr> <tr> <td><strong>dashboard-maps.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-18dc153e8132b3c446cdbf5bac7140ecb7629029d021f006d5d76a0e966eacfe">[link]</a> </td> </tr> <tr> <td><strong>dashboard-multi-y-axis.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-2c0ab4d43c3e915a4e00f2a729234e7c1c975a7a8bc9483fff2ba0a4660f0f83">[link]</a> </td> </tr> <tr> <td><strong>dashboard-streaming.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-7181101483e2bb5a3d086f87546287e47debe10a4b4343707c3feaf95bbb255d">[link]</a> </td> </tr> <tr> <td><strong>dashboard-tabs-setting.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-188e3e1e0adfb6431a70ca6f26e6a5db58be330d3de15b9c559e390cbf601147">[link]</a> </td> </tr> <tr> <td><strong>dashboard-transpose.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-6b7619b9de4f7daa67bd35028c25f13ad3620635538a7203f1095b35ddf013d1">[link]</a> </td> </tr> <tr> <td><strong>dashboard-variables-creation-scopes.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-878775b83972fb1f04f1d4df7bc0bbec364fbcbacda6fbd081423673e4ea4b05">+958/-0</a> </td> </tr> <tr> <td><strong>dashboard-variables-dependency.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-ad5a7685fbf4477a81657949b7dd4aa4ada6e66a4576d0c61bacb388095d0b52">+590/-0</a> </td> </tr> <tr> <td><strong>dashboard-variables-global.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-f3750bde6fb0d471ec65d81b9d5a5a5b15d79ca900782959a0ff856a5156f5be">+600/-0</a> </td> </tr> <tr> <td><strong>dashboard-variables-null-handling.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-e42ab503059a687ceb4fa2edeed0888a47591e0a61680c10448eaf68b4e6bbd8">+133/-0</a> </td> </tr> <tr> <td><strong>dashboard-variables-panel-level.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-a4f3068a8d69478dafa0bc1bfb7f51cf98a6980ecc62ae78ba46a617f8e227fd">+712/-0</a> </td> </tr> <tr> <td><strong>dashboard-variables-refresh.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-8e82d40d2eda995a2915569d16456a9fd7d605017ed5868a28ee409e53646027">+605/-0</a> </td> </tr> <tr> <td><strong>dashboard-variables-setting.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-1c6dd312b59d03b6cef1e15784451e5a5ffb3ed4682dec017e9834de8094fbdd">+3/-3</a> </td> </tr> <tr> <td><strong>dashboard-variables-tab-level.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-b1f20469fa2e12dc68ede8ae381f60e2717489947ca693dd8a519fc03f195d48">+684/-0</a> </td> </tr> <tr> <td><strong>dashboard-variables-url-sync.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-709abba02dfd42b1be6d3838b162b544a2b97ba204dd179c37d462f0921ff14b">+599/-0</a> </td> </tr> <tr> <td><strong>dashboard.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-1403f96be575d5ae4215674b2b1c53c2503ddb1b35a3f4e0aefcf391b1cea1be">[link]</a> </td> </tr> <tr> <td><strong>dashboard2.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-657bb65c00477679ef10c9f79582468cf4f632589469e2c1da7da13979d71f8e">[link]</a> </td> </tr> <tr> <td><strong>dashboardtype.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-1827c80e7bf807fa4be90c240ee9546392558c98d8785f3a39a889adced4241a">[link]</a> </td> </tr> <tr> <td><strong>maxquery.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-68ad92cdbe3b024f7146090b46fb3fca0d91e5864afe490a12f807ddefa29726">[link]</a> </td> </tr> <tr> <td><strong>dashCreation.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-0f865c438e06691b660a9d4a2448c7c94e6f5172c6a0615eb2a905fa276db575">[link]</a> </td> </tr> <tr> <td><strong>dashIngestion.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-f324562b6f8143a8f780b29edc21e7cf969ff3ccc043e4f73aa4c32e48f7d06b">[link]</a> </td> </tr> <tr> <td><strong>dashLogin.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-ba1d380a34ddae6c351de0f325d26ed3e0715c33c88d9e2f39177b696f3b66ef">[link]</a> </td> </tr> <tr> <td><strong>visualization-vrl.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-935ba0de56260b2b735a350ada52a9d07cff34b79f0b137a384ed47cf80075d6">[link]</a> </td> </tr> <tr> <td><strong>visualize.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-28874b05126e014a74c04029ea47a8797f936827a0b7196bd543b91f7389d0c1">[link]</a> </td> </tr> <tr> <td><strong>variable-helpers.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-2e2771d2582ab60dfcbaeef480226887677e58b881edbb244e0ffa4396ffbb5c">+427/-0</a> </td> </tr> <tr> <td><strong>PanelContainer.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d">+35/-7</a> </td> </tr> <tr> <td><strong>PanelSchemaRenderer.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+11/-2</a> </td> </tr> <tr> <td><strong>VariablesValueSelector.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-5c6e3bcb87cb64f25bf8157a541604b7a4904c1282acf662cab5d76a5be6bd56">+844/-193</a></td> </tr> <tr> <td><strong>CustomHTMLEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-66cb3b43f79787a9b8d99b8c1d0f2f89aacd82055ff9ddbd4a4e5c96ec6b61ca">+10/-0</a> </td> </tr> <tr> <td><strong>CustomMarkdownEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-6f1e425e1dc7a287070fbad1713679c729dc7ee61fa3b31781ed6b285ae3d279">+10/-0</a> </td> </tr> <tr> <td><strong>DrilldownPopUp.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-9fdb8c9d3953179dbd311c7e4d2250683af9b51e7706122a505c5c6a708c2a55">+45/-7</a> </td> </tr> <tr> <td><strong>HTMLRenderer.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-128fd699e9ae1552077c27185db37871b57e0002558f89377ec64b4e29e1d7f7">+6/-5</a> </td> </tr> <tr> <td><strong>HTMLRenderer.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-9184ad98d56a2466a3cd9917dc2a15238023df9eafb2ca6d1b7488877ff47194">+13/-1</a> </td> </tr> <tr> <td><strong>MarkdownRenderer.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-63eed3fbb6882be90c70e833f9f64e9e8c6511e4c40162aa5c1a7662fc79469d">+6/-5</a> </td> </tr> <tr> <td><strong>MarkdownRenderer.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-8a4f13edce033462affe8585dd8f128ab333a52a0a59e097ce7db949e042b56b">+13/-1</a> </td> </tr> <tr> <td><strong>AddSettingVariable.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-e622f54c1f7629ee67d29ed2fc87008d07eb9246767a05435cc42c3c17ce459a">+560/-80</a></td> </tr> <tr> <td><strong>VariableCustomValueSelector.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-ecfbb27a97242a9fd854f63f83f7af07bb4ddaaf1f465542ad7f74ec6b1f327e">+20/-1</a> </td> </tr> <tr> <td><strong>VariableQueryValueSelector.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-7e096d825438fc75baab2ef87cb4a04ae7ac1206e5021b71ce42cedd0984e064">+11/-1</a> </td> </tr> <tr> <td><strong>VariableQueryValueSelector.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-2cca760c14e835bd1845485fb5517a60f71a6dc23626a6381c8559b82476f5f4">+39/-10</a> </td> </tr> <tr> <td><strong>VariableSettings.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-3d55b5c7a758c836df096cb320a0ac3ba4586bc025d9e69c180e6a0b668ed940">+132/-9</a> </td> </tr> <tr> <td><strong>ViewPanel.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-e7b26fbbfe7ae57f50377c0f002155df17109ea54708b0f134dd2005356b2930">+82/-3</a> </td> </tr> <tr> <td><strong>usePanelDataLoader.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+61/-11</a> </td> </tr> <tr> <td><strong>useVariablesManager.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-a8440d3f1bc2c5d8a96a4ce8bc5fe8f5a14872fdab4ad5037674f55f07d6d2ae">+633/-0</a> </td> </tr> <tr> <td><strong>commons.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-17cb74f8142984fc46bbfecdeaacccc118fd5d4ab7f040a55695caaa309d104f">+40/-0</a> </td> </tr> <tr> <td><strong>variablesScopeUtils.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-51e0200d0cd001418ab2708878120830d849b912a3b16a7da37dea1432a12407">+33/-0</a> </td> </tr> <tr> <td><strong>variablesUtils.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-769aea99ac476a78b01cb3bb4221b0a0f0d5fa99f3dbc8c77022088ed8024f1b">+3/-2</a> </td> </tr> <tr> <td><strong>variablesUtils.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-64086381f002e7ab774bf802bda51a31c14a0f2ff890b02df2037962345f78ae">+176/-40</a></td> </tr> <tr> <td><strong>RenderDashboardCharts.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-313f7c69102161242c893c863c50f1f1cd1fc19b68b5c99bf840b4b5c72f0f2e">+357/-61</a></td> </tr> <tr> <td><strong>ViewDashboard.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-052badb6758aff09ceaf1645869b9ba96125e6a0ea21abb01a8ee0a40d6467f3">+187/-62</a></td> </tr> <tr> <td><strong>AddPanel.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-5565bef51b35f1e9c8167eab0a22dc61c1d697dca45fe31f46cc8e5e9020ca74">+8/-8</a> </td> </tr> <tr> <td><strong>AddPanel.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+609/-54</a></td> </tr> <tr> <td><strong>DashboardFiltersOption.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-d3e73ec3d32f9068b22b3697ba8a23e3100285b7c92cc86f7d7e88477bb29bba">+26/-12</a> </td> </tr> <tr> <td><strong>DashboardFiltersOption.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9693/files#diff-1309de92cc43f54536fef3d92db8c11cc666ef63bc40d4d9ca3fdaed85a94d92">+36/-2</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: Kirtan Thakkar <kirtan@kiara.tech> Co-authored-by: ktx-riya <riya.kukadiya@kiara.tech> |
||
|
|
5ac09c5018 |
fix: notify users when stale build (#9849)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
238bc56af4 |
fix: add axis label rotation and truncation options in latency insights dashboard (#9834)
### **PR Type**
Enhancement
___
### **Description**
- Add axis label rotation option
- Add axis label truncation width option
___
<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>useLatencyInsightsDashboard.ts</strong><dd><code>Add
axis label rotation & truncation</code>
</dd></summary>
<hr>
web/src/composables/useLatencyInsightsDashboard.ts
<ul><li>Added <code>axis_label_rotate</code> property to chart
config<br> <li> Added <code>axis_label_truncate_width</code> property to
chart config</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9834/files#diff-960dec4a653d7c079157499a2473d0e87bd8b61463e1c3f633e7682ba763a4b1">+2/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
85a952f4eb |
feat: add dynamic axis label rotation and truncation support in dashboard charts (#9808)
### **User description** Design at: https://github.com/openobserve/designs/blob/main/dashboards/axis-label-rotation/design.md ### **PR Type** Enhancement ___ ### **Description** - Add dynamic axis label rotation support - Add label truncation with dynamic width handling - Calculate dynamic nameGap and bottom spacing - Provide UI fields for configuring rotation/truncation ___ ### Diagram Walkthrough ```mermaid flowchart LR A["Panel Config\naxis_label_rotate\naxis_label_truncate_width"] B["calculateDynamicNameGap\ncalculateRotatedLabelBottomSpace"] C["Adjust grid.bottom spacing"] D["Set axisLabel.rotate/overflow/width/margin"] E["Set xAxis/yAxis nameGap\nand nameTextStyle"] A -- "pass config" --> B B -- "compute extra space" --> C B -- "compute gap/margins" --> D B -- "compute nameGap" --> E ``` <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>convertPromQLData.ts</strong><dd><code>Add dynamic label spacing and rotation logic</code> </dd></summary> <hr> web/src/utils/dashboard/convertPromQLData.ts <ul><li>Introduce <code>calculateDynamicNameGap</code> and <code>calculateRotatedLabelBottomSpace</code><br> <li> Compute <code>additionalBottomSpace</code> for grid.bottom<br> <li> Set xAxis <code>name</code>, <code>nameGap</code>, <code>nameTextStyle</code><br> <li> Apply <code>axisLabel.rotate</code>, <code>overflow</code>, <code>width</code>, <code>margin</code></ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+125/-8</a> </td> </tr> <tr> <td> <details> <summary><strong>convertSQLData.ts</strong><dd><code>Implement dynamic axis label rotation and spacing</code> </dd></summary> <hr> web/src/utils/dashboard/convertSQLData.ts <ul><li>Add <code>calculateDynamicNameGap</code> & <code>calculateRotatedLabelBottomSpace</code><br> <li> Update grid.bottom calculation with extra spacing<br> <li> Adjust axisLabel properties (rotate, width, overflow, margin)<br> <li> Apply dynamic <code>nameGap</code> across chart types</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3">+208/-25</a></td> </tr> <tr> <td> <details> <summary><strong>ConfigPanel.vue</strong><dd><code>Add UI controls for label rotation and truncation</code> </dd></summary> <hr> web/src/components/dashboards/addPanel/ConfigPanel.vue <ul><li>Add inputs for <code>axis_label_rotate</code> and <code>axis_label_truncate_width</code><br> <li> Conditionally render controls by chart type<br> <li> Bind new config fields to panel data model</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+66/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ ___ ### **PR Type** Enhancement, Tests ___ ### **Description** - Add axis label rotation and truncate configs - Compute dynamic nameGap and bottom spacing - Integrate rotation/truncate in data converters - Update ConfigPanel UI and unit tests ___ ### Diagram Walkthrough ```mermaid flowchart LR A["Panel Config axis_label_rotate & axis_label_truncate_width"] B["calculateDynamicNameGap"] C["calculateRotatedLabelBottomSpace"] D["convertPromQLData / convertSQLData"] E["chart grid.bottom & xAxis nameGap settings"] A --> B A --> C B -- "nameGap" --> D C -- "bottom space" --> D D -- "apply spacing & truncation" --> E ``` <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>useDashboardPanel.ts</strong><dd><code>Add new axis label rotate/truncate defaults</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+2/-0</a> </td> </tr> <tr> <td><strong>convertDataIntoUnitValue.ts</strong><dd><code>Introduce dynamic nameGap and bottom space functions</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-14c6fe442ef231566ec411f9e0262cdd24ec912fc67b9154eec743282ab7211a">+88/-0</a> </td> </tr> <tr> <td><strong>convertPromQLData.ts</strong><dd><code>Integrate rotation/truncate logic into PromQL converter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+57/-8</a> </td> </tr> <tr> <td><strong>convertSQLData.ts</strong><dd><code>Apply dynamic spacing and truncation in SQL converter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3">+180/-29</a></td> </tr> <tr> <td><strong>ConfigPanel.vue</strong><dd><code>Add UI inputs and tooltips for rotate/truncate</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+127/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>convertPromQLData.spec.ts</strong><dd><code>Mock new spacing utilities in PromQL tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-2769044ec488ef4070c2e1a28ce23ec36b945e46c903b870f8b340cbd6b05211">+2/-0</a> </td> </tr> <tr> <td><strong>convertSQLData.spec.ts</strong><dd><code>Mock new spacing utilities in SQL tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-1dc85f7550b15820974ad93fa461de48d24bc5cbed621bffddb27250211fa88d">+2/-0</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>Add schema fields for axis rotate/truncate</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9808/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+6/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: ktx-riya <riya.kukadiya@kiara.tech> |
||
|
|
76f33b38c7 |
fix: remove http_url from service graph peer attributes (#9817)
## Summary - Removes `http_url` from peer attribute candidates to fix massive node cardinality - Fixes API to respect configured time range instead of hardcoded 60 minutes - Fixes tree view to display all nodes including disconnected components - Changes default visualization to graph view ## Problems Fixed ### 1. Node Explosion from URL Variations Service graph was creating separate nodes for every URL variation with different query parameters or path parameters: - `/api/products/1YMWWN1N4O`, `/api/products/9SIQT8TOJO`, etc. - `?contextKeys=books`, `?contextKeys=travel`, etc. This caused hundreds of nodes instead of a clean service topology. ### 2. API Ignoring Configuration API hardcoded 60-minute query window, ignoring the configured `service_graph.query_time_range_minutes` setting. ### 3. Tree View Missing Nodes Tree view only showed nodes reachable from root nodes (no incoming edges), hiding services in cycles or disconnected components. ## Solutions ### 1. Use server_address Instead of http_url Now uses `server_address` attribute (hostname only) following OpenTelemetry HTTP semantic conventions for service identification. ### 2. Respect Configured Time Range API now uses same configured time window as processor for consistency. ### 3. Virtual Root for Tree View Creates invisible virtual root node to display all disconnected service trees in ECharts. ### 4. Better Default UX Graph view is now the default with reordered buttons (Graph View first). |
||
|
|
67707c98d6 |
feat: Updated RUM Web Vitals (#9610)
#9611 Design at: rum |
||
|
|
4c551f839b |
fix: added unit test file ignore list and added test case files (#9807)
### **PR Type**
Tests
___
### **Description**
- Add unit tests for useSearchHistogramManager composable
- Add unit tests for useSearchPagination composable
- Add unit tests for useSearchResponseHandler composable
- Update vitest.config.ts ignore patterns
___
<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>useSearchHistogramManager.spec.ts</strong><dd><code>Add
tests for histogram manager composable</code>
</dd></summary>
<hr>
web/src/composables/useLogs/useSearchHistogramManager.spec.ts
<ul><li>New test suite for useSearchHistogramManager composable<br> <li>
Tests isHistogramDataMissing and shouldShowHistogram<br> <li> Tests
histogram result handling and socket requests<br> <li> Mocks
dependencies like searchState and useHistogram</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9807/files#diff-e6d61868c245bf89523007ecd98716bb6debf967f0ce42cc19d96d018ae0358e">+481/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>useSearchPagination.spec.ts</strong><dd><code>Add tests
for search pagination composable</code>
</dd></summary>
<hr>
web/src/composables/useLogs/useSearchPagination.spec.ts
<ul><li>New test suite for useSearchPagination composable<br> <li> Tests
pagination helpers: refresh, calculate, reset<br> <li> Tests page count
logic and chunked append<br> <li> Covers updateResult and
handlePageCountResponse</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9807/files#diff-058ee3497dc3701ca618b64984900058c85591ccf2d1e519566bd3e36989fe7e">+644/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>useSearchResponseHandler.spec.ts</strong><dd><code>Add
tests for search response handler composable</code>
</dd></summary>
<hr>
web/src/composables/useLogs/useSearchResponseHandler.spec.ts
<ul><li>New test suite for useSearchResponseHandler composable<br> <li>
Tests error message construction and error handling<br> <li> Tests
search and histogram response flows<br> <li> Mocks notifications,
pagination, histogram, and utils</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9807/files#diff-aa5427a219e00993bc6fc99dd731c4cb601b5b0390bd9dd3d25f1a533bb1c4f4">+661/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>vitest.config.ts</strong><dd><code>Update vitest config
ignore patterns</code>
</dd></summary>
<hr>
web/vitest.config.ts
<ul><li>Extend test ignore patterns in vitest config<br> <li> Ignore
locale JSON, chart templates, type definitions<br> <li> Ignore re-export
index and mixin files<br> <li> Ignore AWS exports and constants
modules</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9807/files#diff-c3fc010b682e68f2ed0b7b1485b8aa513443a66d500903b8dff1d65908d02aae">+24/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
cb178787f2 |
chore: incidents as separate tabs (#9819)
### **PR Type**
Enhancement, Tests
___
### **Description**
- Replace icon tabs with reusable app-tabs component
- Introduce Alerts/Incidents viewMode switching logic
- Add extensive UI tests for new tab functionality
- Update getPath logic and dev script configuration
___
### Diagram Walkthrough
```mermaid
flowchart LR
TabsComp["app-tabs component"] --> ViewState["viewMode state"]
ViewState --> AlertsView["Alerts view UI"]
ViewState --> IncidentsView["Incidents view UI"]
Tests["UI tests"] --> TabsComp
```
<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>zincutils.ts</strong><dd><code>Refine getPath base URL
logic</code>
</dd></summary>
<hr>
web/src/utils/zincutils.ts
<ul><li>refine getPath logic for web base path<br> <li> conditionally
prepend "/web/" on localhost</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9819/files#diff-d3d59688cccdcc6c84ebe88b698c6910030abecc3125f4c0ef81b0df023699ba">+1/-1</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>AlertList.vue</strong><dd><code>Replace custom tabs
with app-tabs</code>
</dd></summary>
<hr>
web/src/components/alerts/AlertList.vue
<ul><li>remove custom icon-only view tabs<br> <li> integrate
<code>app-tabs</code> for view switching<br> <li> add
<code>viewTabs</code> computed property<br> <li> update related SCSS
styling</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9819/files#diff-be3e41b823e163b226ffc270d95cc4981e59c600851e4e0d10ee5e4ee994ac8e">+35/-92</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>alertsPage.js</strong><dd><code>Add view mode tab
methods and locators</code>
</dd></summary>
<hr>
tests/ui-testing/pages/alertsPages/alertsPage.js
<ul><li>add locators for alert and incident tabs<br> <li> implement
click and expect methods for tabs<br> <li> add search methods for both
views</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9819/files#diff-79ee01d6d7f145f19207b93b87143b545a1188cfc6a82bc8c45fecfbf68f8a1d">+113/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>alertsIncidentsTabs.spec.js</strong><dd><code>Add E2E
tests for alerts/incidents tabs</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Alerts/alertsIncidentsTabs.spec.js
<ul><li>add E2E tests for tabs visibility and switching<br> <li> cover
functional and edge-case scenarios</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9819/files#diff-3776665660a181de2d08e4d3bccc481191e7ac88f4e4b0943c869ffa4eb12ffd">+347/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>package.json</strong><dd><code>Add base path to dev
script</code>
</dd></summary>
<hr>
web/package.json
- update `dev` script to include base `/web/`
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9819/files#diff-b861012a5dd72b8a9f3281b7cf09f5a779c98569d040b1bbc1db50f1b15e7cce">+1/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
e53a1b3a12 |
fix: dashboard query editor edit panel query not loading (#9761)
### **PR Type**
Enhancement, Bug fix
___
### **Description**
- Add debug logging across dashboard panel composable
- Improve editor setup/update logic with logs
- Fix customQuery flag on custom_chart panels
___
<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 debug logs
in dashboard panel composable</code>
</dd></summary>
<hr>
web/src/composables/useDashboardPanel.ts
<ul><li>Insert detailed console.log in resetAggregationFunction<br> <li>
Add watcher logs for query & customQuery changes<br> <li> Log branch
decisions and final query state</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9761/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+12/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>CodeQueryEditor.vue</strong><dd><code>Instrument code
editor with debug logs</code>
</dd></summary>
<hr>
web/src/components/CodeQueryEditor.vue
<ul><li>Add console.log in setupEditor/onMounted/onActivated<br> <li>
Enhance editor recreation logic to update value/readOnly<br> <li> Log
editor creation and watcher events</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9761/files#diff-52a36bf2d64e590036ed1c1f89b07a4a6b971a84e4fae9b4272cbc69d63f9bef">+73/-2</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>AddPanel.vue</strong><dd><code>Fix and log custom_chart
query initialization</code>
</dd></summary>
<hr>
web/src/views/Dashboards/addPanel/AddPanel.vue
<ul><li>Insert logs around getPanel, Object.assign, nextTick,
loadDashboard<br> <li> Ensure <code>customQuery=true</code> for
custom_chart panels</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9761/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+29/-2</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
|
||
|
|
1cb57a32b7 |
fix: upgrade batch 7 npm packages (#9768)
### **User description**
- cron-parser: 4.9.0 → 5.4.0
- vue-tsc: 2.2.0 → 3.2.1
Type check and unit tests passed successfully.
___
### **PR Type**
Enhancement
___
### **Description**
- Upgrade `cron-parser` to ^5.4.0
- Upgrade `vue-tsc` to ^3.2.1
___
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Dependencies</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>package.json</strong><dd><code>Bump cron-parser and
vue-tsc versions</code>
</dd></summary>
<hr>
web/package.json
<ul><li>Upgraded <code>cron-parser</code> from ^4.9.0 to ^5.4.0<br> <li>
Upgraded <code>vue-tsc</code> from ^2.2.0 to ^3.2.1</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9768/files#diff-b861012a5dd72b8a9f3281b7cf09f5a779c98569d040b1bbc1db50f1b15e7cce">+2/-2</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
c9f7ead7cc |
fix: Metrics revamp UI fixes (#9749)
### **PR Type** Enhancement ___ ### **Description** - Add `query_type` param for PromQL range/instant - Support streaming in `useStreamingSearch` & backend - Revamp query mode selector UI: SQL, builder, custom, PromQL - Enhance `convertPromQLData`: instant vectors & styling ___ ### Diagram Walkthrough ```mermaid flowchart LR UI["Query mode selector UI"] -- "sets query_type" --> Loader["Panel data loader"] Loader -- "adds query_type" --> Stream["Streaming search URL builder"] Stream -- "routes instant/range" --> Backend["HTTP handler"] Backend -- "streams or search" --> Converter["PromQL data converter"] Converter -- "apply transformations" --> Chart["Chart rendering"] ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>8 files</summary><table> <tr> <td><strong>usePanelDataLoader.ts</strong><dd><code>Add `query_type` field to PromQL payload</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+1/-0</a> </td> </tr> <tr> <td><strong>useDashboardPanel.ts</strong><dd><code>Toggle off VRL and skip resets in PromQL mode</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+15/-0</a> </td> </tr> <tr> <td><strong>useStreamingSearch.ts</strong><dd><code>Route PromQL streaming URL by query_type</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-8fce3e25a161cd458e734bd9b1f98aadefe3482da7b6529a5b1f4fa20ec115e2">+15/-2</a> </td> </tr> <tr> <td><strong>convertPromQLData.ts</strong><dd><code>Support instant vectors and series styling</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+69/-10</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Add `use_streaming` flag to RequestQuery</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-82a5de6222f38aad3e2cf41c251400cec789c6ab9fbb0d92cbb5cbaabb21c030">+2/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Route to streaming or standard search</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-0ad5729a1fbce00ff53076728c51822400c13af9918e1d8554f41be56d060fa0">+10/-2</a> </td> </tr> <tr> <td><strong>QueryTypeSelector.vue</strong><dd><code>Revamp query mode buttons: SQL, PromQL, builder, custom</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-0dfd7075714453289e8f65d7f085ff9314148c02ca64fb591d0b8d8cbe1ef0b3">+212/-158</a></td> </tr> <tr> <td><strong>PromQLBuilderOptions.vue</strong><dd><code>Add query_type select (range/instant) in builder</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-0118a096d9bd174a3fbe091f62af6f94d6fc6f51c10ad00a1c8660bd5a14f2e9">+62/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>11 files</summary><table> <tr> <td><strong>de.json</strong><dd><code>Add SQL, builder, custom translation keys</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264">+5/-1</a> </td> </tr> <tr> <td><strong>en.json</strong><dd><code>Update labels for SQL, builder, custom modes</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+5/-3</a> </td> </tr> <tr> <td><strong>es.json</strong><dd><code>Add new translation keys for query modes</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778">+5/-1</a> </td> </tr> <tr> <td><strong>fr.json</strong><dd><code>Update locale with SQL and builder keys</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2">+5/-1</a> </td> </tr> <tr> <td><strong>it.json</strong><dd><code>Add custom and builder translations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d">+5/-1</a> </td> </tr> <tr> <td><strong>ja.json</strong><dd><code>Include SQL/builder/custom in Japanese locale</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3">+5/-1</a> </td> </tr> <tr> <td><strong>ko.json</strong><dd><code>Add SQL and builder keys in Korean</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48">+5/-1</a> </td> </tr> <tr> <td><strong>nl.json</strong><dd><code>Update Dutch locale for query modes</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906">+5/-1</a> </td> </tr> <tr> <td><strong>pt.json</strong><dd><code>Add Portuguese labels for SQL and builder</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815">+5/-1</a> </td> </tr> <tr> <td><strong>tr.json</strong><dd><code>Update Turkish locale with new keys</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818">+5/-1</a> </td> </tr> <tr> <td><strong>zh.json</strong><dd><code>Add SQL/custom/builder translations in Chinese</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9749/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e">+5/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
8ba4abd716 |
fix: dashboard promql chart type issues (#9756)
### **PR Type** Enhancement, Tests ___ ### **Description** - Enhance chart tooltip overflow styling - Format heatmap x-axis as HH:MM:SS - Refactor tooltip formatter logic - Add legends button and dialog in dashboards ___ <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>12 files</summary><table> <tr> <td><strong>convertPromQLGaugeChart.ts</strong><dd><code>Add confine and scrollable CSS to gauge tooltip</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-91706cfd8de0e4dd864bd1efe1fbd6dc220690963c278a8c3ac46aec51d974d6">+2/-0</a> </td> </tr> <tr> <td><strong>convertPromQLGeoChart.ts</strong><dd><code>Add confine and scrollable CSS to geo tooltip</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-6eb91a67a23394322bc5577c8750a91c19b3e53f54c088afd2dcb017acccfb03">+2/-0</a> </td> </tr> <tr> <td><strong>convertPromQLMapsChart.ts</strong><dd><code>Add confine and scrollable CSS to maps tooltip</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-8961325d132fe026290bbb3a1de46f058b68e41b4033b0549cdeac5d030a2094">+2/-0</a> </td> </tr> <tr> <td><strong>axisBuilder.ts</strong><dd><code>Add confine and overflow CSS in axis tooltip builder</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-2806b132f6ff85d110f34517e7f9dc86566f784fe85593ca2ce5f51bf2cc68df">+6/-4</a> </td> </tr> <tr> <td><strong>convertPromQLHeatmapChart.ts</strong><dd><code>Format heatmap timestamps and style tooltip overflow</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-be005732a54fbe2914c68c052407adde3c35b11a81b914ae602e322b4bd63302">+31/-13</a> </td> </tr> <tr> <td><strong>PreviewAlert.vue</strong><dd><code>Remove disabled legends button prop</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-760f5f0a261910f17eb167f81802e8a52477b99a83d2d7fc1aeefc7185801795">+0/-1</a> </td> </tr> <tr> <td><strong>PanelContainer.vue</strong><dd><code>Enable legends button on panel renderer</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d">+1/-0</a> </td> </tr> <tr> <td><strong>ConfigPanel.vue</strong><dd><code>Conditionally show legend input for non-maps</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+4/-2</a> </td> </tr> <tr> <td><strong>ViewPanel.vue</strong><dd><code>Add legends dialog and async popup component</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-e7b26fbbfe7ae57f50377c0f002155df17109ea54708b0f134dd2005356b2930">+28/-0</a> </td> </tr> <tr> <td><strong>VisualizeLogsQuery.vue</strong><dd><code>Integrate legends dialog in logs visualization</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+29/-0</a> </td> </tr> <tr> <td><strong>Index.vue</strong><dd><code>Add legends button and dialog in metrics UI</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-a6734928ea4dcb5244e90de5a16fe6f5cafa95ccf58430ac7b548a065daf3d61">+30/-0</a> </td> </tr> <tr> <td><strong>AddPanel.vue</strong><dd><code>Enable legends button in add-panel view</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+2/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>convertPromQLHeatmapChart.spec.ts</strong><dd><code>Update heatmap test to expect HH:MM:SS timestamps</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-3aac0e61459f2fdff750789339a83ff07ff9d602d350abf12d598416140aec5f">+2/-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>PanelSchemaRenderer.vue</strong><dd><code>Default legends button prop to false</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+1/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Formatting</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>OverrideConfig.vue</strong><dd><code>Remove debug console.log statements</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9756/files#diff-54a6038f5c684ade27b88e3c6a134874b51501904441fa7849a532d10aa7d533">+0/-8</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: Kirtan Thakkar <kirtan@kiara.tech> |
||
|
|
62d7770222 |
fix: dashboard promql chart issue (#9733)
### **PR Type** Tests ___ ### **Description** - Add comprehensive PromQL chart converter tests - Cover table, bar, geo, metric chart conversions - Validate aggregation, mapping, and overrides - Ensure default behaviors and error handling ___ <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>4 files</summary><table> <tr> <td><strong>convertPromQLTableChart.spec.ts</strong><dd><code>Add tests for TableConverter features</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-d52e55c66a6477167350f8eb6f7c23f8fbd2a4f341ef4adb4400e56a42215c36">+1369/-0</a></td> </tr> <tr> <td><strong>convertPromQLBarChart.spec.ts</strong><dd><code>Add tests for BarConverter features</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-64074278af1e252bdac8e0ba89a48556bb48d90f8ca49ec07816044d0fd1b0ed">+1167/-0</a></td> </tr> <tr> <td><strong>convertPromQLGeoChart.spec.ts</strong><dd><code>Add tests for GeoConverter functionality</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-74f29901edd046272b70021c56c59dbc2c105f11595c85c84e739114ba919297">+1194/-0</a></td> </tr> <tr> <td><strong>convertPromQLMetricChart.spec.ts</strong><dd><code>Add tests for MetricConverter functionality</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-8faf206e981fd29d3ccd022218612e0fca5ba0d1e0f8cc0c3be5288361fc49d3">+779/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>19 files</summary><table> <tr> <td><strong>PROMQL_CHART_EXTENSION_DESIGN_SPEC.md</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-c28f23229dbc72f164b9986421cd37311a9df8b2c0fe63ad87e8c518a8b61163">+0/-2126</a></td> </tr> <tr> <td><strong>PreviewAlert.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-760f5f0a261910f17eb167f81802e8a52477b99a83d2d7fc1aeefc7185801795">+1/-0</a> </td> </tr> <tr> <td><strong>PanelSchemaRenderer.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+16/-1</a> </td> </tr> <tr> <td><strong>CommonAutoComplete.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-35f59b61336a5ba3f5933f6803e8e2cc84ced59c3f0bea25f370bb2e3d21849b">+9/-1</a> </td> </tr> <tr> <td><strong>ConfigPanel.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+1/-0</a> </td> </tr> <tr> <td><strong>OverrideConfig.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-54a6038f5c684ade27b88e3c6a134874b51501904441fa7849a532d10aa7d533">+83/-38</a> </td> </tr> <tr> <td><strong>PromQLChartConfig.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-305fcbfc89618c91ca0ee6c8c52cfa596169ca2dced6778eea6cd3c89f071573">+4/-6</a> </td> </tr> <tr> <td><strong>PromQLTableChart.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-9c39051461b6f7deae94e8847f91443c4c68541f52137a423bb54b6ab5cd3317">+8/-8</a> </td> </tr> <tr> <td><strong>TableRenderer.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+3/-1</a> </td> </tr> <tr> <td><strong>convertPromQLBarChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-15ade277873baedc98e922520bed7e9d9095ecb3ab24ea69f342cdae6c1e7458">+8/-0</a> </td> </tr> <tr> <td><strong>convertPromQLChartData.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-49b51f790650ffbf1b0921ff6b69971191180a5397e690f6547be12b4062d1e7">+747/-0</a> </td> </tr> <tr> <td><strong>convertPromQLGaugeChart.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-ec3d6a800bb549faddeb575b64d681b90e6eb600219e1982619fd30c86d919a4">+697/-0</a> </td> </tr> <tr> <td><strong>convertPromQLHeatmapChart.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-3aac0e61459f2fdff750789339a83ff07ff9d602d350abf12d598416140aec5f">+999/-0</a> </td> </tr> <tr> <td><strong>convertPromQLHeatmapChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-be005732a54fbe2914c68c052407adde3c35b11a81b914ae602e322b4bd63302">+61/-69</a> </td> </tr> <tr> <td><strong>convertPromQLMapsChart.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-c779976a0e1fc9b0296b1fde9fffdb91bfcb02dfbe528d7ca400b4ee4fed7370">+1086/-0</a></td> </tr> <tr> <td><strong>convertPromQLPieChart.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-0e0734eb6264d4f70f75a6fd31b0037850df029515c34cc554a86f34efdd982d">+945/-0</a> </td> </tr> <tr> <td><strong>convertPromQLTableChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-94123beacdf1e10ef812b4a6fda870004aa30f65eeb9e5ef6662f907dc50092d">+20/-4</a> </td> </tr> <tr> <td><strong>convertPromQLTimeSeriesChart.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-6f4b63645182c6b41f416433facb1eec4588e224d5b1825f1499b31f99ee393f">+732/-0</a> </td> </tr> <tr> <td><strong>axisBuilder.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9733/files#diff-50a65f282f4829c9e139867c3b6f7d066a5c3f062333b00a66d43265531faac7">+867/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
488a6915be |
feat: dashboard promql support for other charts (#9696)
### **User description** Design at : dashboards ### **PR Type** Enhancement ___ ### **Description** - Introduce modular PromQL chart conversion system - Add data processor and shared utilities - Implement converters for pie, table, heatmap, etc. - Update UI to configure new PromQL chart types ___ ### Diagram Walkthrough ```mermaid flowchart LR A["PromQL Responses"] -- "processPromQLData" --> B["Processed Data"] B -- "convertPromQLChartData" --> C["Converter Registry"] C -- "select converter" --> D["Chart-specific Converter"] D -- "output options & extras" --> E["ECharts Options"] ``` <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>20 files</summary><table> <tr> <td><strong>dataProcessor.ts</strong><dd><code>Common data preprocessing for PromQL responses</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-363d102e4c9cc1beceb56816113bae703cde4c104e915770f918b16688c602d1">+248/-0</a> </td> </tr> <tr> <td><strong>convertPromQLChartData.ts</strong><dd><code>Main router for PromQL chart conversion</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-7a96651b77954f37d362daf6441ac4f8caff47f0827941ef4618a25774490642">+225/-0</a> </td> </tr> <tr> <td><strong>convertPromQLTimeSeriesChart.ts</strong><dd><code>Add time-series chart converter class</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-c04ec8aaa18dbda0d66caba0a05d06529872dbf7e0628a4ee6ffca56210b45e4">+254/-0</a> </td> </tr> <tr> <td><strong>convertPromQLPieChart.ts</strong><dd><code>Implement pie and donut chart converter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-9f433d0f746e3c8f07eb27be45b17dad91518720833c0f58b86c85d491eadfeb">+119/-0</a> </td> </tr> <tr> <td><strong>convertPromQLTableChart.ts</strong><dd><code>Implement table chart converter logic</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-94123beacdf1e10ef812b4a6fda870004aa30f65eeb9e5ef6662f907dc50092d">+192/-0</a> </td> </tr> <tr> <td><strong>convertPromQLGaugeChart.ts</strong><dd><code>Add gauge chart converter support</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-91706cfd8de0e4dd864bd1efe1fbd6dc220690963c278a8c3ac46aec51d974d6">+205/-0</a> </td> </tr> <tr> <td><strong>convertPromQLMetricChart.ts</strong><dd><code>Implement single-value metric converter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-d99617406e007e2185e0552465f456d5f60646e893fa6c45235cf12d0ca055b6">+97/-0</a> </td> </tr> <tr> <td><strong>convertPromQLHeatmapChart.ts</strong><dd><code>Add heatmap chart converter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-be005732a54fbe2914c68c052407adde3c35b11a81b914ae602e322b4bd63302">+120/-0</a> </td> </tr> <tr> <td><strong>convertPromQLBarChart.ts</strong><dd><code>Support bar and horizon-bar converters</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-15ade277873baedc98e922520bed7e9d9095ecb3ab24ea69f342cdae6c1e7458">+133/-0</a> </td> </tr> <tr> <td><strong>convertPromQLGeoChart.ts</strong><dd><code>Add geographic map chart converter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-6eb91a67a23394322bc5577c8750a91c19b3e53f54c088afd2dcb017acccfb03">+147/-0</a> </td> </tr> <tr> <td><strong>convertPromQLSankeyChart.ts</strong><dd><code>Implement Sankey diagram converter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-4790b82ec6453ffad790f22d8f2c2a9747db1b1cf5b397c7ef4e53991a5301dc">+137/-0</a> </td> </tr> <tr> <td><strong>types.ts</strong><dd><code>Define PromQL types and conversion interfaces</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-395705e34877a642f353dcdd90733ac4a9e1a2188304a79dd2b5bb322fde77a8">+138/-0</a> </td> </tr> <tr> <td><strong>axisBuilder.ts</strong><dd><code>Build axis configurations for ECharts</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-2806b132f6ff85d110f34517e7f9dc86566f784fe85593ca2ce5f51bf2cc68df">+162/-0</a> </td> </tr> <tr> <td><strong>legendBuilder.ts</strong><dd><code>Add legend name templating utility</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-e66fbf5127520890aa3e3e8fa82362dc69aa84acd3ba6b639814d250787eb47f">+69/-0</a> </td> </tr> <tr> <td><strong>convertPromQLData.ts</strong><dd><code>Integrate new modular PromQL converter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+72/-0</a> </td> </tr> <tr> <td><strong>convertPanelData.ts</strong><dd><code>Route table panel by promql queryType</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-15264039050c04ff085ea42722654dfef0ef537b7bef1e9cea59e1c1bb0ce748">+21/-4</a> </td> </tr> <tr> <td><strong>PromQLChartConfig.vue</strong><dd><code>Add UI config for PromQL chart types</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-305fcbfc89618c91ca0ee6c8c52cfa596169ca2dced6778eea6cd3c89f071573">+571/-0</a> </td> </tr> <tr> <td><strong>ChartSelection.vue</strong><dd><code>Include new chart types in selection</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-384ce178717731e2c85f1312f12a54b42ceabd0b86f7e2befb0e421ef568a6a3">+9/-0</a> </td> </tr> <tr> <td><strong>PanelSchemaRenderer.vue</strong><dd><code>Compute and log tableRendererData for PromQL</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+44/-5</a> </td> </tr> <tr> <td><strong>TableRenderer.vue</strong><dd><code>Add debug logging for table data changes</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+16/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>6 files</summary><table> <tr> <td><strong>PROMQL_CHART_EXTENSION_DESIGN_SPEC.md</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-c28f23229dbc72f164b9986421cd37311a9df8b2c0fe63ad87e8c518a8b61163">+1905/-0</a></td> </tr> <tr> <td><strong>ConfigPanel.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+10/-0</a> </td> </tr> <tr> <td><strong>PromQLTableChart.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-9c39051461b6f7deae94e8847f91443c4c68541f52137a423bb54b6ab5cd3317">+263/-0</a> </td> </tr> <tr> <td><strong>en.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+16/-0</a> </td> </tr> <tr> <td><strong>convertDataIntoUnitValue.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-14c6fe442ef231566ec411f9e0262cdd24ec912fc67b9154eec743282ab7211a">+9/-0</a> </td> </tr> <tr> <td><strong>index.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-bb77f007e906b4ef04c9a4d73dd94adc0e9fb9910a48b872d4587ab37cf3a51e">+65/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ ___ ### **PR Type** Enhancement, Tests ___ ### **Description** - Add PromQL label & operation schema in backend - Define PromQL operations for query builder - Introduce country code mapping util for map charts - Extend useDashboardPanel with PromQL label fetching - Update TableRenderer and add queryModeller tests ___ <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>mod.rs</strong><dd><code>Add PromQL filter & operation schema to dashboard meta</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+52/-0</a> </td> </tr> <tr> <td><strong>convertMapsData.ts</strong><dd><code>Replace inline country list with shared mapper</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-5f61730637542ed11dfb6ef6e4bc72480289b16636243c98d1b628a97cbdfa55">+1/-227</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>3 files</summary><table> <tr> <td><strong>index.ts</strong><dd><code>Define full set of PromQL operation definitions</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-962f834d1d04c23122d5226deb40f08aa67f41937d70105f2d644b8c15d3dceb">+832/-0</a> </td> </tr> <tr> <td><strong>countryMappings.ts</strong><dd><code>Add ISO country code to name mapping util</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-0c9975df0349e4b2c425b5568f9559537dc40052805c9b4475b9f73bd8752798">+255/-0</a> </td> </tr> <tr> <td><strong>useDashboardPanel.ts</strong><dd><code>Extend dashboard panel composable for PromQL support</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+144/-29</a></td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>TableRenderer.spec.ts</strong><dd><code>Reformat and extend table renderer unit tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-550a0a669838c47473442a7d37407fead8b7cb2a05121880dd2c0522022c8c3f">+127/-91</a></td> </tr> <tr> <td><strong>queryModeller.spec.ts</strong><dd><code>Add comprehensive PromQL queryModeller tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-1037f836d59596dcc1c3e65b19b5a740e2dfdba9fa813feb8044bc139b1d30e0">+624/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>63 files</summary><table> <tr> <td><strong>PROMQL_CHART_EXTENSION_DESIGN_SPEC.md</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-c28f23229dbc72f164b9986421cd37311a9df8b2c0fe63ad87e8c518a8b61163">+2126/-0</a></td> </tr> <tr> <td><strong>PanelSchemaRenderer.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+45/-2</a> </td> </tr> <tr> <td><strong>ChartSelection.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-384ce178717731e2c85f1312f12a54b42ceabd0b86f7e2befb0e421ef568a6a3">+9/-0</a> </td> </tr> <tr> <td><strong>ConfigPanel.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+119/-49</a></td> </tr> <tr> <td><strong>DashboardQueryBuilder.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-a4f9abbeaad1156ab6ba5740d59ccb869d6a9172ca1c64b89cff78f3d7783409">+123/-0</a> </td> </tr> <tr> <td><strong>DashboardQueryEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-68bf1b319223d103f1b99e0b681764e4eb76942399397779c81c2cd18f6485ff">+29/-14</a> </td> </tr> <tr> <td><strong>FieldList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-a071c06e3e26629cb4ae4751450acc39c61fa49b07a1cc4be3711697829668d4">+7/-0</a> </td> </tr> <tr> <td><strong>OverrideConfig.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-e05709bd1fededda3d3ed90a47d9fddb8ae171e87c7f25d07ecca1e6a8ab33ee">+19/-3</a> </td> </tr> <tr> <td><strong>OverrideConfig.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-54a6038f5c684ade27b88e3c6a134874b51501904441fa7849a532d10aa7d533">+45/-4</a> </td> </tr> <tr> <td><strong>PromQLChartConfig.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-305fcbfc89618c91ca0ee6c8c52cfa596169ca2dced6778eea6cd3c89f071573">+879/-0</a> </td> </tr> <tr> <td><strong>QueryTypeSelector.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-3094340ad57af51f1bcbad3b63a8ab860a46905ab79997289b89b601553934fd">+1/-1</a> </td> </tr> <tr> <td><strong>QueryTypeSelector.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-0dfd7075714453289e8f65d7f085ff9314148c02ca64fb591d0b8d8cbe1ef0b3">+63/-18</a> </td> </tr> <tr> <td><strong>PromQLTableChart.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-9c39051461b6f7deae94e8847f91443c4c68541f52137a423bb54b6ab5cd3317">+307/-0</a> </td> </tr> <tr> <td><strong>TableRenderer.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+24/-7</a> </td> </tr> <tr> <td><strong>LabelFilterEditor.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-a7753ad2d6fe4a1878d454dff2b4cb353afca8eabfdc7e131104fa8d2eaf8ef1">+354/-0</a> </td> </tr> <tr> <td><strong>LabelFilterEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-6f8f873d354390719997b0a63051445658997aafab2d36b268e20a1c07b2f845">+327/-0</a> </td> </tr> <tr> <td><strong>MetricSelector.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-2129c149ce2ebddb6a9a17a8a63104057cd138ad6656ce0ccef7e56d25ba1a83">+488/-0</a> </td> </tr> <tr> <td><strong>MetricSelector.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-8c2adc3e91f44534029c70c61cab50e193882fd1d11bb6c75e3a7f0641101238">+172/-0</a> </td> </tr> <tr> <td><strong>OperationsList.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-21e51d0ccdf0744ac3702582d77f4342fc0af0bd916cd953d53be24b9c4dcd13">+448/-0</a> </td> </tr> <tr> <td><strong>OperationsList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-0aeab8d5b16334d3a11d9071ed3b799e866fa0ba2e9b9318f39c3b0c92b5f7e8">+361/-0</a> </td> </tr> <tr> <td><strong>PromQLBuilderOptions.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-0f591de06f0b72c4035885b0c11234c01f8920ea9e6f98336202f7a51e46db58">+462/-0</a> </td> </tr> <tr> <td><strong>PromQLBuilderOptions.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-0118a096d9bd174a3fbe091f62af6f94d6fc6f51c10ad00a1c8660bd5a14f2e9">+236/-0</a> </td> </tr> <tr> <td><strong>queryModeller.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-677776e7803f48b130926c3929a0e9e764b0a57aa4501d0ff5e25123f7b712e1">+246/-0</a> </td> </tr> <tr> <td><strong>index.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-94d2a6c3a1e12028714c8f9e287f562f92d911d04ea1bf375d8535be5d7ab1e8">+197/-0</a> </td> </tr> <tr> <td><strong>usePanelDataLoader.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+2/-1</a> </td> </tr> <tr> <td><strong>router.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-a1827956e5a817edc7efb5f4516e7cc4d453e15ea9e9d970aafb8360b09fc78e">+13/-0</a> </td> </tr> <tr> <td><strong>de.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264">+29/-2</a> </td> </tr> <tr> <td><strong>en.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+29/-2</a> </td> </tr> <tr> <td><strong>es.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778">+29/-2</a> </td> </tr> <tr> <td><strong>fr.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2">+29/-2</a> </td> </tr> <tr> <td><strong>it.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d">+29/-2</a> </td> </tr> <tr> <td><strong>ja.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3">+29/-2</a> </td> </tr> <tr> <td><strong>ko.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48">+29/-2</a> </td> </tr> <tr> <td><strong>nl.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906">+29/-2</a> </td> </tr> <tr> <td><strong>pt.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815">+29/-2</a> </td> </tr> <tr> <td><strong>tr.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818">+29/-2</a> </td> </tr> <tr> <td><strong>zh.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e">+29/-2</a> </td> </tr> <tr> <td><strong>Index.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-a6734928ea4dcb5244e90de5a16fe6f5cafa95ccf58430ac7b548a065daf3d61">+1/-1</a> </td> </tr> <tr> <td><strong>convertDataIntoUnitValue.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-e9d8a984ed78af13e4d4424c605a3a55fe6ad2a3f7e403fad156ce17ffdc3bdd">+0/-1</a> </td> </tr> <tr> <td><strong>convertDataIntoUnitValue.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-14c6fe442ef231566ec411f9e0262cdd24ec912fc67b9154eec743282ab7211a">+11/-2</a> </td> </tr> <tr> <td><strong>convertPanelData.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-15264039050c04ff085ea42722654dfef0ef537b7bef1e9cea59e1c1bb0ce748">+63/-12</a> </td> </tr> <tr> <td><strong>convertPromQLData.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+49/-0</a> </td> </tr> <tr> <td><strong>convertPromQLBarChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-15ade277873baedc98e922520bed7e9d9095ecb3ab24ea69f342cdae6c1e7458">+241/-0</a> </td> </tr> <tr> <td><strong>convertPromQLChartData.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-7a96651b77954f37d362daf6441ac4f8caff47f0827941ef4618a25774490642">+247/-0</a> </td> </tr> <tr> <td><strong>convertPromQLGaugeChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-91706cfd8de0e4dd864bd1efe1fbd6dc220690963c278a8c3ac46aec51d974d6">+206/-0</a> </td> </tr> <tr> <td><strong>convertPromQLGeoChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-6eb91a67a23394322bc5577c8750a91c19b3e53f54c088afd2dcb017acccfb03">+208/-0</a> </td> </tr> <tr> <td><strong>convertPromQLHeatmapChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-be005732a54fbe2914c68c052407adde3c35b11a81b914ae602e322b4bd63302">+168/-0</a> </td> </tr> <tr> <td><strong>convertPromQLMapsChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-8961325d132fe026290bbb3a1de46f058b68e41b4033b0549cdeac5d030a2094">+171/-0</a> </td> </tr> <tr> <td><strong>convertPromQLMetricChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-d99617406e007e2185e0552465f456d5f60646e893fa6c45235cf12d0ca055b6">+98/-0</a> </td> </tr> <tr> <td><strong>convertPromQLPieChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-9f433d0f746e3c8f07eb27be45b17dad91518720833c0f58b86c85d491eadfeb">+177/-0</a> </td> </tr> <tr> <td><strong>convertPromQLTableChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-94123beacdf1e10ef812b4a6fda870004aa30f65eeb9e5ef6662f907dc50092d">+453/-0</a> </td> </tr> <tr> <td><strong>convertPromQLTimeSeriesChart.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-c04ec8aaa18dbda0d66caba0a05d06529872dbf7e0628a4ee6ffca56210b45e4">+241/-0</a> </td> </tr> <tr> <td><strong>index.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-bb77f007e906b4ef04c9a4d73dd94adc0e9fb9910a48b872d4587ab37cf3a51e">+65/-0</a> </td> </tr> <tr> <td><strong>axisBuilder.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-2806b132f6ff85d110f34517e7f9dc86566f784fe85593ca2ce5f51bf2cc68df">+292/-0</a> </td> </tr> <tr> <td><strong>dataProcessor.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-ae46ef8d3c0c85add59609034907f8788d5a41964f492d1c0638f805566d9822">+632/-0</a> </td> </tr> <tr> <td><strong>dataProcessor.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-363d102e4c9cc1beceb56816113bae703cde4c104e915770f918b16688c602d1">+245/-0</a> </td> </tr> <tr> <td><strong>gridBuilder.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-0c4241a8c8473bb69f9eeeefcfdde6fd71c12556c54b73567407136f22825eb3">+690/-0</a> </td> </tr> <tr> <td><strong>gridBuilder.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-1b8f609ff2cd6a36ba25f8bf58f8977c16480da0f92ac1071a06c4751e6c3a4d">+244/-0</a> </td> </tr> <tr> <td><strong>legendBuilder.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-f3f0d6e2c05b75076a68df34e18bb53b2f73d22762205c8013a4fd101688f838">+257/-0</a> </td> </tr> <tr> <td><strong>legendBuilder.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-e66fbf5127520890aa3e3e8fa82362dc69aa84acd3ba6b639814d250787eb47f">+69/-0</a> </td> </tr> <tr> <td><strong>types.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-5af785b1b9d835b13ec80fff7372a9dedb3f5f7612e86afa926f1d8735cdc7fc">+535/-0</a> </td> </tr> <tr> <td><strong>types.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-395705e34877a642f353dcdd90733ac4a9e1a2188304a79dd2b5bb322fde77a8">+148/-0</a> </td> </tr> <tr> <td><strong>QueryBuilder.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9696/files#diff-4d2c58124ad5c6c376c0e07e5ca8f16c1c0f0f0859baf55c8c73b1350c6e8123">+199/-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> Co-authored-by: Kirtan Thakkar <kirtan@kiara.tech> Co-authored-by: omkark06 <omkar@zinclabs.io> Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech> |
||
|
|
384aa5ba62 |
fix: issue 9355 (#9706)
### **User description** This PR fixes the issue in #9355 Alert doesn't get triggered if the field seleceted in a non uds field ___ ### **PR Type** Bug fix, Enhancement ___ ### **Description** - Enforce UDS fields in alerts and pipelines UIs - Filter stream fields by defined_schema_fields - Always include timestamp and _all fields - Add `validate` flag to search API calls - Backend search utils: error on non-UDS fields - New alert UI validation: `validateConditionsAgainstUDS` ___ ### Diagram Walkthrough ```mermaid flowchart LR A["Select stream"] --> B["Fetch schema & settings"] B -- "Apply UDS filter" --> C["Available fields list"] C --> D["Build alert conditions"] D --> E["validateConditionsAgainstUDS"] E -- valid --> F["Submit alert"] E -- invalid --> G["Show error notification"] ``` <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><details><summary>4 files</summary><table> <tr> <td><strong>utils.rs</strong><dd><code>Return error on non-UDS search fields</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9706/files#diff-96bb9f4a8f547c821f26c957e8505d0437095b08d2b36687531f71565d287bd6">+1/-2</a> </td> </tr> <tr> <td><strong>alertValidation.ts</strong><dd><code>Always pass `validate:true` in alert SQL validation</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9706/files#diff-3164a4a58c1865cfcbbba084ac339664c99564545be4d57504dd406d59d8ad4a">+1/-0</a> </td> </tr> <tr> <td><strong>QueryEditorDialog.vue</strong><dd><code>Include `validate:true` in query trigger search</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9706/files#diff-6c524f609ed374aa29e075e8d046ac06be0edda7bfa1914b0a2bbc24d255e5eb">+1/-0</a> </td> </tr> <tr> <td><strong>Query.vue</strong><dd><code>Deep copy routing data and validate SQL</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9706/files#diff-6247cbd506bcf963372f2e429507fc579af95f003df246889b478da11326a657">+20/-10</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>5 files</summary><table> <tr> <td><strong>search.ts</strong><dd><code>Add `validate` flag to search URL builder</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9706/files#diff-885ab872dbc6e7b20264df815e3ef4727f0abc86ce90d2fb47e4aff572814c75">+4/-0</a> </td> </tr> <tr> <td><strong>AddAlert.vue</strong><dd><code>Filter and validate conditions against UDS</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9706/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+187/-0</a> </td> </tr> <tr> <td><strong>FilterCondition.vue</strong><dd><code>Add column-exists validation rule per module</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9706/files#diff-53916e2402d0ee094fcd63f0ec0c99ceffde4fa042f9001203d2e2e1b7709e10">+28/-1</a> </td> </tr> <tr> <td><strong>FilterGroup.vue</strong><dd><code>Propagate `module` prop to nested filter groups</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9706/files#diff-8d5a73bea3aa0b5c86d48cda4a61ee3e30f27797ac2a5add1ee8bd66c75bef23">+8/-0</a> </td> </tr> <tr> <td><strong>ScheduledPipeline.vue</strong><dd><code>Adjust submit handler and add UDS filter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9706/files#diff-63d8f838bb880356e7804b4a57fd9223d4f2c189de7aadc7cf33cba723b29aaf">+4/-4</a> </td> </tr> </table></details></td></tr><tr><td><strong>Configuration changes</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>QueryConfig.vue</strong><dd><code>Tag QueryConfig with `module="alerts"`</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/9706/files#diff-7273c8de49b8ebf706d7bee5b275c75818c0493f41c73f00c55efe667cbd00d9">+1/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>Condition.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/9706/files#diff-4c3e624233c9e0355c7ded3b26dc74971b867be63e24f92a5e639284f60639dd">+37/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: loaki07 <rustyloaki@gmail.com> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
60678aade5 |
fix: dashboard maps query builder issue (#9701)
### **PR Type**
Bug fix
___
### **Description**
- Removed `requiredFields` parameter and validation
- Cleaned up docs to omit `requiredFields`
- Updated `mapChart` call to drop `requiredFields`
___
<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>dashboardAutoQueryBuilder.ts</strong><dd><code>Remove
requiredFields validation logic</code>
</dd></summary>
<hr>
web/src/utils/dashboard/dashboardAutoQueryBuilder.ts
<ul><li>Removed <code>requiredFields</code> param from
<code>buildChartQuery</code> signature<br> <li> Deleted validation loop
with <code>console.warn</code> for required fields<br> <li> Updated
<code>mapChart</code> invocation to no longer pass
<code>requiredFields</code><br> <li> Cleaned up JSDoc to remove
<code>requiredFields</code> mention</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9701/files#diff-0374009fc6d1371055d806f3458025162b218fd605253095f680df3b9c33379f">+0/-15</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
27704a0d4c |
fix: add alert revamp v2 (#9694)
### **PR Type**
Enhancement, Tests
___
### **Description**
- Introduce `generate_sql` API endpoint for alerts
- Implement request/response models & service linkage
- Register route & update OpenAPI documentation
- Add extensive front-end tests for alert wizard
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["POST /v2/{org_id}/alerts/generate_sql"] -- "validate & check perms" --> B["build_sql service"]
B -- "return generated SQL & metadata" --> C["GenerateSqlResponseBody"]
```
<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>4
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Add `generate_sql` alert API
endpoint</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-83431801d27626ef27482e67b62661f900043544a45ddf958bd027cf2fa3bd8d">+150/-6</a>
</td>
</tr>
<tr>
<td><strong>responses.rs</strong><dd><code>Add `GenerateSqlResponseBody`
and metadata</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-224027f90893122eea28e35778467acf1a4b5572ce612fc9bc9ec44ca8ebd9fb">+25/-0</a>
</td>
</tr>
<tr>
<td><strong>requests.rs</strong><dd><code>Add `GenerateSqlRequestBody`
request model</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-412f11e06c0e901e2292aab80536cb36edebcc4796dec52923389c3aaa32b25a">+16/-1</a>
</td>
</tr>
<tr>
<td><strong>mod.rs</strong><dd><code>Make `build_sql` function
public</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-ba9b65130898444f7815fd6068bdb0dc590612f74cc893f79d91b0afc44cc851">+1/-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>mod.rs</strong><dd><code>Register `generate_sql` service
route</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/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>openapi.rs</strong><dd><code>Include `generate_sql` in
OpenAPI spec</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-edb8ce232c0cd08366879f642788a75d99f6bab64b4c0e77391281fdb9241e90">+1/-0</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>3
files</summary><table>
<tr>
<td><strong>AlertSettings.spec.ts</strong><dd><code>Add comprehensive
unit tests for AlertSettings</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-4ca37593c11ef263e0b9a9e1733678e2b81f01c8da5f4a8d729306c176802356">+1363/-0</a></td>
</tr>
<tr>
<td><strong>AddAlert.spec.ts</strong><dd><code>Extend AddAlert tests for
SQL & wizard flows</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-84362398fea8abd9acf30f4f40ba8d4cf27348677454017bd4e6f568d5176ac6">+808/-56</a></td>
</tr>
<tr>
<td><strong>CompareWithPast.spec.ts</strong><dd><code>Add tests for
CompareWithPast component</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-5718f3c114808926e2cced290580cb8ae1610338042eebad001e9a7d5429ee77">+596/-0</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>45 files</summary><table>
<tr>
<td><strong>AddAlert.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+1295/-409</a></td>
</tr>
<tr>
<td><strong>AlertList.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-be3e41b823e163b226ffc270d95cc4981e59c600851e4e0d10ee5e4ee994ac8e">+58/-63</a>
</td>
</tr>
<tr>
<td><strong>AlertSummary.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-c22aa1c5934b763f1d4a5a61a7e810b6bcb1d60b76b64c61cb3ce89dc0a04499">+169/-0</a>
</td>
</tr>
<tr>
<td><strong>AlertWizardRightColumn.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-eb14abefd15bc1d3db947347b49899fe264138b7aea63729feae27ad7abed606">+851/-0</a>
</td>
</tr>
<tr>
<td><strong>AlertWizardRightColumn.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-f599a1960d1ac37e352854ad368d23e080b3cec2b217df22f40d0e15a4db6986">+291/-0</a>
</td>
</tr>
<tr>
<td><strong>CustomConfirmDialog.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-0fa5a1da2050cbab522801af8ade04a0e4c27e87933d21f6c32a82603c77a0a3">+179/-0</a>
</td>
</tr>
<tr>
<td><strong>DeduplicationConfig.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-63eb39111409780e4dc064ea80056dfe096038ee76b389cdd8e9d14c0ae29a32">+3/-2</a>
</td>
</tr>
<tr>
<td><strong>FilterGroup.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-8d5a73bea3aa0b5c86d48cda4a61ee3e30f27797ac2a5add1ee8bd66c75bef23">+39/-39</a>
</td>
</tr>
<tr>
<td><strong>HorizontalStepper.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-ccca09440e61bf97621fe06ca606ade4f7fc7c1df8f8a3742cafa4c352f2c23a">+370/-0</a>
</td>
</tr>
<tr>
<td><strong>OrganizationDeduplicationSettings.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-f526d40b50f1e96f025973c6fc251f7a50f698c641c7749b32e6bb90b9ba032f">+19/-21</a>
</td>
</tr>
<tr>
<td><strong>PreviewAlert.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-6d5bfc82662dd55768e258ab92676c2559c054d235ef0e48beb4bd90f31ca60b">+795/-0</a>
</td>
</tr>
<tr>
<td><strong>PreviewAlert.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-760f5f0a261910f17eb167f81802e8a52477b99a83d2d7fc1aeefc7185801795">+41/-16</a>
</td>
</tr>
<tr>
<td><strong>QueryEditorDialog.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-6c524f609ed374aa29e075e8d046ac06be0edda7bfa1914b0a2bbc24d255e5eb">+981/-0</a>
</td>
</tr>
<tr>
<td><strong>RealTimeAlert.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-c3ae6b47832eb33f9ca877cc7165d079de14850e5c5d43a227102ba40326b9d8">+43/-24</a>
</td>
</tr>
<tr>
<td><strong>ScheduledAlert.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-5e143a17ab0fa5d7817f6d9301667fb5597236f27184248c7a71728e85b8d999">+304/-270</a></td>
</tr>
<tr>
<td><strong>Advanced.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-6dacd8b2947f53e7c39a54e990ee26ff6d63478b3a68897ab3afbc937c65c647">+683/-0</a>
</td>
</tr>
<tr>
<td><strong>Advanced.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-eae849f0bf6c8868f5640ce1d74862284d8e8a5330e5046c0c437e6672f4f676">+376/-0</a>
</td>
</tr>
<tr>
<td><strong>AlertSettings.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-1d5bfd6a1ea672884193649b1271d751d6f3b8ec84af759071c9bfd169a8ab28">+1441/-0</a></td>
</tr>
<tr>
<td><strong>AlertSetup.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-ed5a1c54e5fb03ce1d8121223d40606c74419b998b6c071667037347a2debde9">+878/-0</a>
</td>
</tr>
<tr>
<td><strong>AlertSetup.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-4f89438c74f329de730b0e7451d4a8d7df3bab52cdeaded776e8ae18d94294eb">+290/-0</a>
</td>
</tr>
<tr>
<td><strong>CompareWithPast.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-6606848e30caef2cda13d65cb30d6590205556259e7e6daf39cada825502d55b">+416/-0</a>
</td>
</tr>
<tr>
<td><strong>Deduplication.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-d3281cd7632a0fa7ce5c5054e80efafb2aa8d272bb2c586d723436b644565ba4">+591/-0</a>
</td>
</tr>
<tr>
<td><strong>Deduplication.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-f8d256bcec370851c9799c13ffa2b7571c07ca27af1b5a74c335e7084157c9b1">+204/-0</a>
</td>
</tr>
<tr>
<td><strong>QueryConfig.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-5a3ac3e9d93e87bc95c87a20f08c9972158a5882d66ecfb658d38255fe1d8f71">+1000/-0</a></td>
</tr>
<tr>
<td><strong>QueryConfig.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-7273c8de49b8ebf706d7bee5b275c75818c0493f41c73f00c55efe667cbd00d9">+594/-0</a>
</td>
</tr>
<tr>
<td><strong>de.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264">+70/-0</a>
</td>
</tr>
<tr>
<td><strong>en.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+89/-15</a>
</td>
</tr>
<tr>
<td><strong>es.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778">+70/-0</a>
</td>
</tr>
<tr>
<td><strong>fr.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2">+70/-0</a>
</td>
</tr>
<tr>
<td><strong>it.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d">+70/-0</a>
</td>
</tr>
<tr>
<td><strong>ja.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3">+70/-0</a>
</td>
</tr>
<tr>
<td><strong>ko.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48">+70/-0</a>
</td>
</tr>
<tr>
<td><strong>nl.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906">+70/-0</a>
</td>
</tr>
<tr>
<td><strong>pt.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815">+70/-0</a>
</td>
</tr>
<tr>
<td><strong>tr.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818">+70/-0</a>
</td>
</tr>
<tr>
<td><strong>zh.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e">+70/-0</a>
</td>
</tr>
<tr>
<td><strong>alerts.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-7a62782cceacac92b787e058219b3c53ea7406d4be5780def899943a01f500c1">+9/-0</a>
</td>
</tr>
<tr>
<td><strong>app.scss</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-5703d12504b0395cbfbbfad02a592bc391496026e5f03743102ce06c210ea05f">+7/-0</a>
</td>
</tr>
<tr>
<td><strong>alertQueryBuilder.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-5c829ce5fd3ad2f5ef359df5976e6adfc52eaa6b5f249f594c8b8a588acf8b3e">+10/-49</a>
</td>
</tr>
<tr>
<td><strong>alertSummaryGenerator.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-a4464ad7df3ac3afdca4e6fc583122d701bace10e3a2daf083cb6c902565b20f">+393/-0</a>
</td>
</tr>
<tr>
<td><strong>alertValidation.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-3164a4a58c1865cfcbbba084ac339664c99564545be4d57504dd406d59d8ad4a">+8/-8</a>
</td>
</tr>
<tr>
<td><strong>conditionsFormatter.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-12eb070ce171e81117000fefaf2a1037af4c337423344f280c21c77e1836f5e3">+237/-0</a>
</td>
</tr>
<tr>
<td><strong>conditionsFormatter.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-d5df71a7ab2451925cd220828fc3776039e56c206a07ac7b72d4ce5e282c257c">+460/-0</a>
</td>
</tr>
<tr>
<td><strong>focusManager.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-987334b24e56735ac755d8e1add737ffcd35fe11612e31586c21824cbea88c36">+179/-0</a>
</td>
</tr>
<tr>
<td><strong>zincutils.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9694/files#diff-d3d59688cccdcc6c84ebe88b698c6910030abecc3125f4c0ef81b0df023699ba">+11/-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>
Co-authored-by: Ashish Kolhe <ashish.j.kolhe@gmail.com>
Co-authored-by: Uddhav Dave <uddhav@openobserve.ai>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
|
||
|
|
ac60e181dd |
feat: dashboard join support for auto sql (#9343)
# Nested Functions and Joins - User Guide ## Overview This guide covers two powerful features that enable sophisticated data analysis in OpenObserve: - **Nested Functions**: Combine multiple functions together to create complex calculations - **Joins**: Merge data from multiple streams (data sources) based on common fields These features work in the **Auto SQL** mode of dashboard panels, allowing you to write advanced queries without deep SQL knowledge. --- ## What's New ### Why These Features? **Before:** - Limited function composition - you could only use basic, single-level functions - No way to combine data from multiple streams in one query - Complex analytics required exporting data and manual processing **Now:** - Compose unlimited nested functions with full DataFusion support - Join multiple streams directly in the dashboard panel editor - Create sophisticated analytics queries with a visual interface ### Key Benefits ✓ Calculate complex metrics (error rates, percentiles, conditional aggregations) ✓ Build advanced dashboards without custom code ✓ Support for all DataFusion aggregate and scalar functions --- ## Nested Functions ### What Are Nested Functions? Nested functions let you combine multiple functions together - using the output of one function as input to another. Think of it like a cooking recipe where each step builds on the previous one. **Simple Example:** - Basic: `AVG(response_time)` - calculates average response time - Nested: `ROUND(AVG(response_time), 2)` - calculates average AND rounds it to 2 decimal places ### Supported Functions OpenObserve supports **all DataFusion functions**, giving you powerful analytics capabilities: **Aggregate Functions** (work across multiple rows): - `count`, `sum`, `avg`, `min`, `max` - basic aggregations - `median`, `stddev`, `variance` - statistical functions - `percentile_cont` - calculate percentiles (e.g., p95, p99) - `string_agg` - combine text values **Mathematical Functions**: - `round`, `ceil`, `floor` - rounding operations - `abs`, `power`, `sqrt` - mathematical operations - `log`, `log10`, `log2` - logarithmic functions - `sin`, `cos`, `tan` - trigonometric functions **String Functions**: - `concat`, `upper`, `lower`, `trim` - `substring`, `length`, `replace` **Conditional Functions**: - `CASE WHEN ... THEN ... ELSE ... END` - conditional logic - `COALESCE` - return first non-null value 📖 **Full Reference**: [DataFusion Aggregate Functions](https://datafusion.apache.org/user-guide/sql/aggregate_functions.html) | [DataFusion Scalar Functions](https://datafusion.apache.org/user-guide/sql/scalar_functions.html) --- ### Using Nested Functions (Step-by-Step) #### Step 1: Create or Edit a Dashboard Panel Open your dashboard and create a new panel or edit an existing one. Make sure you're in **Auto SQL** mode (not Custom SQL). #### Step 2: Select a Function In the Y-Axis or column configuration, click **Select Function** to choose your base function. <img width="795" alt="Nested Function - Adding Layers" src="https://github.com/user-attachments/assets/0b6b134e-59b8-48b1-a4ae-52fb4800d772" /> In this example, we're using the `Concat` function to combine multiple fields (namespace and pod name). #### Step 3: Add Nested Layers Click the function icon to add another function layer. You can nest functions multiple times. <img width="793" alt="Nested Function - Select Base Function" src="https://github.com/user-attachments/assets/4bd9e03e-1104-4e82-b2ec-a34e6bb64870" /> Here we're building a nested function: - Inner layer: `Avg(severity)` - calculates average severity - Outer layer: `Ceil()` - rounds up the average to the nearest integer #### Step 4: Build Complex Expressions For advanced analytics, you can combine nested functions with conditional logic using `CASE WHEN` statements. <img width="1340" alt="Complex Nested Function with CASE WHEN" src="https://github.com/user-attachments/assets/4c3e3623-bfad-44c4-a760-e10cc94d4a95" /> This example shows a sophisticated calculation: ```sql ROUND(100.0 * SUM(CASE WHEN COALESCE(severity, 0) >= 4 THEN 1 ELSE 0 END) / COUNT(_timestamp), 2) ``` **What this does:** 1. `COALESCE(severity, 0)` - replaces null severity with 0 2. `CASE WHEN severity >= 4 THEN 1 ELSE 0` - returns 1 for high severity, 0 otherwise 3. `SUM(...)` - counts high severity events 4. Divide by `COUNT(_timestamp)` - calculates percentage 5. Multiply by `100.0` - converts to percentage 6. `ROUND(..., 2)` - rounds to 2 decimal places **Result**: Percentage of high-severity events, rounded to 2 decimals #### Step 5: View the Generated SQL Switch to the **Raw** tab to see the complete SQL query that was generated from your nested function configuration. <img width="1388" alt="View Generated SQL" src="https://github.com/user-attachments/assets/d7f6111a-26c6-4dd0-9e9f-e26092fe6368" /> You can review the auto-generated SQL in the Query section at the bottom of the panel editor. The chart visualization updates in real-time as you build your nested functions. --- ## Joins ### What Are Joins? Joins allow you to combine data from two or more different streams (data sources) based on common fields between them. **Example:** **employee_data_join** stream: ```json [ {"employee_id": 1, "name": "Alice", "department_id": 1}, {"employee_id": 2, "name": "Bob", "department_id": 2}, {"employee_id": 3, "name": "Charlie", "department_id": null}, {"employee_id": 4, "name": "David", "department_id": 1}, {"employee_id": 5, "name": "Eve", "department_id": 3} ] ``` **dept_data_join** stream: ```json [ {"department_id": 1, "department_name": "HR"}, {"department_id": 2, "department_name": "Engineering"}, {"department_id": 3, "department_name": "Sales"}, {"department_id": 4, "department_name": "Marketing"} ] ``` A join lets you combine these streams to see the department name alongside each employee, matched by `department_id`. ### Types of Joins OpenObserve supports three types of joins: | Join Type | Description | When to Use | |-----------|-------------|-------------| | **INNER JOIN** | Returns only records with matches in both streams | When you need data that exists in both sources | | **LEFT JOIN** | Returns all records from left stream + matching records from right | When you want all data from your primary source, with supplemental info where available | | **RIGHT JOIN** | Returns all records from right stream + matching records from left | When you want all data from your secondary source, with supplemental info where available | > **Note:** UNION and CROSS joins are not currently supported. --- ### Using Joins (Step-by-Step) #### Step 1: Access the Joins Section In your dashboard panel editor, locate the **Joins** section. Click the **+** button to add a join. <img width="1725" alt="Access Joins Interface" src="https://github.com/user-attachments/assets/35db4f28-c526-43a2-bdd1-470e188f53d7" /> In this example: - **Primary stream**: `employee_data_join` (contains employee names) - We'll join it with `dept_data_join` (contains department information) - The interface shows available fields from both streams in the left panel #### Step 2: Configure the Join Click on the **Joins** dropdown and select the stream you want to join. Then configure: 1. **Joining Stream**: Select the stream to join (e.g., `employee_data_join`) 2. **Join Type**: Choose from LEFT, INNER, or RIGHT using the visual toggle 3. **On Stream**: Select the target stream (e.g., `dept_data_join`) <img width="1725" alt="Configure Join Type" src="https://github.com/user-attachments/assets/35db4f28-c526-43a2-bdd1-470e188f53d7" /> The interface displays: **"Performing a Left Join between employee_data_join and dept_data_join"** Notice the visual toggle showing three join types: - **Left** (selected in this example) - **Inner** - **Right** #### Step 3: Define the Joining Clause Set up the join condition by specifying which fields to match between the two streams: **Clause 1:** - **Select Field** (Left): Choose a field from the first stream (e.g., `department_id`) - **Select Operator**: Choose comparison operator (usually `=`) - **Select Field** (Right): Choose the matching field from the second stream (e.g., `department_id`) You can add multiple clauses using the **+** button for complex join conditions (e.g., joining on multiple fields or adding additional filters). #### Step 4: View the Results After configuring the join, the data table will show combined results from both streams. <img width="1724" alt="Join Results" src="https://github.com/user-attachments/assets/94ca9f33-6cfa-4ad1-9b84-bee9db34f912" /> In this example: - **Name** column from `employee_data_join` (Alice, Bob, Charlie, David, Eve) - **Department Name** column from `dept_data_join` (HR, Engineering, HR, Sales) - Data successfully joined on `department_id` #### Step 5: Review the Generated SQL Check the **Query** section at the bottom to see the generated SQL: ```sql SELECT employee_data_join.name as "x_axis_1", stream_0.department_name as "x_axis_2" FROM "employee_data_join" LEFT JOIN "dept_data_join" AS stream_0 ON employee_data_join.department_id = stream_0.department_id ``` The SQL query shows exactly how OpenObserve is combining your data streams. --- --- ## Examples ### Example 1: String Concatenation with Nested Functions **Use Case**: Combine multiple fields into a single display value ```sql Concat(k8s_namespace_name, '-', k8s_pod_name) ``` This joins namespace and pod names with a hyphen separator. ### Example 2: Statistical Analysis with Nested Math Functions **Use Case**: Calculate rounded average of a metric ```sql Ceil(Avg(severity)) ``` This calculates the average severity level and rounds up to the nearest whole number. ### Example 3: Conditional Percentage Calculation **Use Case**: Calculate percentage of high-severity events ```sql ROUND(100.0 * SUM(CASE WHEN COALESCE(severity, 0) >= 4 THEN 1 ELSE 0 END) / COUNT(_timestamp), 2) ``` **Breakdown:** - Handles null values with `COALESCE` - Counts events where severity >= 4 - Calculates percentage of total events - Rounds to 2 decimal places ### Example 4: Employee-Department Join **Use Case**: Show employee names with their department information ```sql SELECT employee_data_join.name as "Name", dept_data_join.department_name as "Department Name" FROM employee_data_join LEFT JOIN dept_data_join ON employee_data_join.department_id = dept_data_join.department_id ``` This displays all employees with their department names, showing null for employees without a department assignment. ### Example 5: Complex Analytics - Joins + Nested Functions **Use Case**: Calculate error rate per service with deployment information ```sql SELECT logs.service_name, deployments.version, COUNT(*) as total_requests, ROUND((COUNT(CASE WHEN logs.status_code >= 500 THEN 1 END) * 100.0 / COUNT(*)), 2) as error_rate_percent FROM service_logs as logs LEFT JOIN deployments ON logs.service_name = deployments.service_name GROUP BY logs.service_name, deployments.version ORDER BY error_rate_percent DESC ``` This combines: - Join between service logs and deployment data - Nested functions for conditional counting and percentage calculation - Grouping and sorting for analysis --- ## Tips and Best Practices ### Nested Functions Best Practices ✅ **Start Simple**: Build your function one layer at a time - Begin with inner function: `AVG(response_time)` - Add outer layers: `ROUND(AVG(response_time), 2)` ✅ **Test Each Layer**: Verify results before adding complexity - Test the inner function first - Add one layer at a time and check output ✅ **Handle Null Values**: Use `COALESCE` to avoid unexpected nulls ```sql COALESCE(AVG(response_time), 0) ``` ✅ **Use Clear Aliases**: Name your calculated fields descriptively ```sql ROUND(AVG(response_time), 2) as avg_response_ms ``` ✅ **Check for Division by Zero**: Protect against zero denominators ```sql CASE WHEN COUNT(*) > 0 THEN (SUM(errors) * 100.0 / COUNT(*)) ELSE 0 END as error_rate ``` ### Joins Best Practices ✅ **Choose the Right Join Type**: - **INNER JOIN**: Both streams must have matching data - **LEFT JOIN**: Keep all records from primary stream - **RIGHT JOIN**: Keep all records from secondary stream ✅ **Verify Field Compatibility**: - Match data types (don't join string to number) - Ensure field names are correct - Check that values actually match between streams ✅ **Consider Performance**: - Join on indexed fields when possible - Test with limited data first --- ## FAQ ### Q: Can I nest more than 2 functions? **A**: Yes! You can nest as many functions as needed. Example: ```sql ROUND(CEIL(AVG(COALESCE(response_time, 0))), 2) ``` ### Q: What's the difference between LEFT and RIGHT joins? **A**: - **LEFT JOIN**: Keeps all records from the first (left) stream - **RIGHT JOIN**: Keeps all records from the second (right) stream - Choose based on which dataset you want to preserve completely ### Q: Can I join more than 2 streams? **A**: Yes! Click the **+** button in the Joins section to add additional joins. You can chain multiple joins together. ### Q: Do nested functions impact performance? **A**: Complex nested functions may take longer to compute, especially on large datasets. Test with small time ranges first and optimize your expressions. ### Q: Can I use Custom SQL instead of Auto SQL? **A**: Yes! If you prefer writing raw SQL, switch to **Custom SQL** mode. However, Auto SQL provides a visual interface that's easier for building queries. --- ## Additional Resources 📚 **DataFusion Documentation**: - [Aggregate Functions](https://datafusion.apache.org/user-guide/sql/aggregate_functions.html) - COUNT, SUM, AVG, etc. - [Scalar Functions](https://datafusion.apache.org/user-guide/sql/scalar_functions.html) - ROUND, CONCAT, CASE, etc. 🔗 **OpenObserve Resources**: - [GitHub Repository](https://github.com/openobserve/openobserve) - [PR #9343 - Feature Implementation](https://github.com/openobserve/openobserve/pull/9343) - [OpenObserve Documentation](https://openobserve.ai/docs/) 💬 **Get Help**: - [GitHub Issues](https://github.com/openobserve/openobserve/issues) - Report bugs or request features - [Community Discussions](https://github.com/openobserve/openobserve/discussions) - Ask questions and share ideas --- Design at: https://github.com/openobserve/designs/tree/main/joins --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
06df3fb784 |
feat: Issue 9646 promql streaming (#9648)
### **User description**
Design at: dashboard
___
### **PR Type**
Enhancement
___
### **Description**
- Enable HTTP/2 streaming for PromQL queries
- Extend streaming search util with PromQL support
- Add PromQL streaming endpoints in service layer
- Define TypeScript interfaces for PromQL streaming
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Dashboard Loader"] -- "calls stream" --> B["fetchQueryDataWithHttpStream"]
B -- "chunk data" --> C["handlePromQLResponse"]
B -- "error" --> D["handlePromQLError"]
B -- "complete" --> E["handlePromQLComplete"]
C --> F["state.data update"]
D --> G["state.errorDetail update"]
E --> H["final loading false"]
```
<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>usePanelDataLoader.ts</strong><dd><code>Implement
PromQL streaming in data loader</code>
</dd></summary>
<hr>
web/src/composables/dashboard/usePanelDataLoader.ts
<ul><li>Remove non-streaming PromQL calls<br> <li> Initialize state for
streaming queries<br> <li> Process each query via
fetchQueryDataWithHttpStream<br> <li> Handle streaming chunks, errors,
completion</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9648/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+193/-73</a></td>
</tr>
<tr>
<td>
<details>
<summary><strong>useStreamingSearch.ts</strong><dd><code>Add PromQL
streaming to HTTP streaming hook</code>
</dd></summary>
<hr>
web/src/composables/useStreamingSearch.ts
<ul><li>Extend StreamResponseType with <code>promql_response</code><br>
<li> Support <code>promql</code> type in fetch/initiate functions<br>
<li> Build GET URL for PromQL streaming endpoint<br> <li> Map
<code>promql_response</code> via convertToPromQLResponse</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9648/files#diff-8fce3e25a161cd458e734bd9b1f98aadefe3482da7b6529a5b1f4fa20ec115e2">+51/-16</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>streaming_search.ts</strong><dd><code>Add PromQL
streaming endpoints to service</code>
</dd></summary>
<hr>
web/src/services/streaming_search.ts
<ul><li>Add <code>promqlQueryRangeStreamUrl</code> endpoint builder<br>
<li> Add <code>promqlQueryRange</code> streaming request method<br> <li>
Include query, time window and metadata params</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9648/files#diff-6a8e19a226bbf9e7e04903d5818c8fb5c9005a48988419f94d3e63a61ade7c57">+78/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>query.ts</strong><dd><code>Define PromQL streaming
TypeScript interfaces</code>
</dd></summary>
<hr>
web/src/ts/interfaces/query.ts
<ul><li>Introduce <code>PromQLStreamingPayload</code> and
<code>PromQLQueryPayload</code><br> <li> Add
<code>PromQLStreamingResponse</code> interface</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9648/files#diff-12dd5b3bb9741bbeaa348c0efbbd745d0a582899678738159c6927d34a35191d">+21/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
Co-authored-by: Huaijin <haohuaijin@gmail.com>
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
|
||
|
|
e182903382 |
feat: enhancement of dashboard custom chart with examples (#9606)
- https://github.com/openobserve/openobserve/issues/9091 Design at: https://github.com/openobserve/designs/tree/main/customcharts --------- Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech> Co-authored-by: ktx-kirtan <124270523+ktx-kirtan@users.noreply.github.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com> |
||
|
|
e52d000217 |
feat: add incident correlation system (#9507)
## Summary Introduces comprehensive incident management system to reduce alert fatigue through intelligent correlation and AI-powered root cause analysis. **Design at:** https://github.com/openobserve/designs/tree/main/alert-correlation --- ## Incident Correlation **3-Tier Correlation Priority:** 1. **Trace-based**: Groups alerts from same distributed trace (cross-service) 2. **Service Discovery**: Uses semantic service matching with normalization 3. **Dimension-based**: Blake3 hash from stable alert dimensions (fallback) **Features:** - Automatic alert grouping into incidents - Real-time incident status tracking (open/acknowledged/resolved/suppressed) - Topology enrichment via Service Graph integration - Cross-environment correlation prevention via dimension matching ## Incident Analysis (RCA) **Automated Analysis:** - Background job queries open incidents and triggers AI agent - Periodic analysis via configurable interval - Results displayed in incident detail view with markdown support **On-Demand Analysis:** - Manual trigger via API: `POST /api/v2/{org}/alerts/incidents/{id}/rca` - Real-time results with loading indicators - One-click "Analyze" button in UI ## SRE Chat Assistant **Conversational AI for Alerts:** - Generic `/api/{org}/agent/chat` endpoint with history support - Context-aware assistance for alerts and incidents - Sparkle icons on alert/incident rows for quick access - Persistent chat history via IndexedDB - Includes RCA analysis in conversation context --- ## Configuration ```bash # Incident Management O2_INCIDENTS_AUTO_RESOLVE_AFTER_MINUTES=-1 # -1=disabled (default), >0=auto-resolve # RCA Agent Integration O2_INCIDENTS_RCA_ENABLED=true O2_INCIDENTS_RCA_AGENT_URL=http://localhost:8000 O2_INCIDENTS_RCA_INTERVAL_SECS=600 ``` ## API Endpoints - `GET /api/v2/{org}/alerts/incidents` - List incidents with pagination - `GET /api/v2/{org}/alerts/incidents/{id}` - Get incident details - `PATCH /api/v2/{org}/alerts/incidents/{id}` - Update incident status - `GET /api/v2/{org}/alerts/incidents/stats` - Get incident statistics - `POST /api/v2/{org}/alerts/incidents/{id}/rca` - Trigger RCA analysis - `POST /api/{org}/agent/chat` - Generic agent chat endpoint - `POST /api/{org}/agent/chat/stream` - Streaming agent chat ## Database - **New tables**: `alert_incidents`, `alert_incident_alerts` - **Migration**: `m20251204_000001_create_alert_incidents_table` - **ORM**: SeaORM entities with full CRUD support ## UI Components - **IncidentList.vue**: Status filtering, pagination, statistics dashboard - **IncidentDetailDrawer.vue**: Full incident view with triggers/alerts/analysis - **SREChat.vue**: AI assistant panel with markdown rendering - Incidents tab in AlertList with unified view - AI sparkle icons for contextual chat access --- ## Enterprise Feature This is an **enterprise-only** feature with OSS stubs for compilation compatibility. - Non-enterprise builds: Handlers return `403 Forbidden` - Enterprise builds: Full functionality enabled ## Test Plan - [x] Build passes without `--features enterprise` - [x] Build passes with `--features enterprise` - [x] Create alerts that fire and verify incidents are created - [x] Verify incident list/detail APIs work correctly - [x] Verify status updates (open → acknowledged → resolved) - [x] Verify correlation logic (trace-based, service discovery, dimension-based) - [x] Verify RCA analysis triggers and displays correctly - [x] Verify SRE chat integration with alert/incident context --------- Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> |
||
|
|
34939d0769 |
fix: fqn co relation user settings (#9536)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
9056a2c92d |
feat: revamp Conditions in alerts and pipelines (#9267)
Co-authored-by: Uddhav Dave <uddhav@MacBook-Pro.local> Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
384e8a07bc | fix: changed trace precision from milliseconds to microseconds (#9230) | ||
|
|
1353ea653b |
feat: service discovery (#9469)
Design at: streams-corelation/SERVICE_CORRELATION_ARCHITECTURE.md --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> |
||
|
|
975bca13c9 | feat: dashboard table chart show data as json (#9327) | ||
|
|
14212b7064 |
fix: schema-based peer attribute detection for service graph
- Check schema for peer attributes before querying - COALESCE priority: peer_service > server_address > db_name > db_system > http_url - Fallback to 'internal' if no peer attributes - Support INTERNAL spans with exclude config - Improved UI empty state with troubleshooting |
||
|
|
26625e7b8f |
fix: convert severity to integer before checking for status color (#9438)
1. converting severity to integer before checking status 2. match for exact word instead of shortforms to match the color |