mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-06 00:09:22 +00:00
f31304597d942cfc8b263c2fa91e5de2dc47d3a2
1675
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f31304597d |
fix: unit test cases added (#8133)
### **PR Type** Tests, Enhancement ___ ### **Description** - Add extensive unit tests across modules - Expose internal methods for testability - Extend props for query component metadata - Minor query and ingestion component updates ___ ### Diagram Walkthrough ```mermaid flowchart LR ImportPipelineSpec["ImportPipeline.spec.ts (new tests)"] RunningQueriesSpec["RunningQueries.spec.ts (new tests)"] RunningQueriesListSpec["RunningQueriesList.spec.ts (new tests)"] PlansSpec["Billing plans.spec.ts (new tests)"] OtelLogsSpec["Logs OtelConfig.spec.ts (new tests)"] ImportPipelineVue["ImportPipeline.vue (expose internals)"] QueryListVue["QueryList.vue (add metaData prop)"] ImportPipelineSpec -- tests --> ImportPipelineVue RunningQueriesSpec -- tests --> RunningQueriesVue["RunningQueries.vue (updated)"] RunningQueriesListSpec -- tests --> RunningQueriesListVue["RunningQueriesList.vue"] PlansSpec -- tests --> BillingServices["Billing services"] OtelLogsSpec -- tests --> OtelLogsVue["OtelConfig.vue (logs)"] QueryListSpec["QueryList.spec.ts (new tests)"] -- tests --> QueryListVue ``` <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>11 files</summary><table> <tr> <td><strong>ImportPipeline.spec.ts</strong><dd><code>Add thorough unit tests for ImportPipeline</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-228ad64e4e9ffc0096add762a2619f4531b1fdd638a18b02d031f98bda0f76fd">+1083/-0</a></td> </tr> <tr> <td><strong>RunningQueries.spec.ts</strong><dd><code>Add comprehensive tests for RunningQueries view</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-b73fab81a4d70291bca59d1f0f408f872705829fadad6b8b6fe1165d8f022490">+680/-0</a> </td> </tr> <tr> <td><strong>RunningQueriesList.spec.ts</strong><dd><code>Add unit tests for RunningQueriesList table</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-b80dbf8f275c5bbdae8c5b1b336a67d3dbc6aa8e6f27dd4b8be548c1e6eafae3">+664/-0</a> </td> </tr> <tr> <td><strong>plans.spec.ts</strong><dd><code>Add unit tests for billing plans component</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-4398fd7c1bd0322c6a964f63b59dd79a190c2f089792460ec43dfa1cd9a8063f">+664/-0</a> </td> </tr> <tr> <td><strong>OtelConfig.spec.ts</strong><dd><code>Add unit tests for logs OtelConfig generator</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-46fbf1ab0a2ead705ff5593e115166853ebdfc66e463f893b7e8934bb50bacde">+340/-0</a> </td> </tr> <tr> <td><strong>invoiceTable.spec.ts</strong><dd><code>Add unit tests for invoice table</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-a95d419747ed8c8f054d4633d524261b34d709e091af3b0ee656f1bb0c01599c">+655/-0</a> </td> </tr> <tr> <td><strong>OtelConfig.spec.ts</strong><dd><code>Add tests for recommended OtelConfig</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-f6c9086bfb3685c0483782e995b01687f40fc0d68d752fe70222512c735c79be">+529/-0</a> </td> </tr> <tr> <td><strong>SummaryList.spec.ts</strong><dd><code>Add tests for queries summary list</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-b29217e2817d222ee871ba8a205c2e89a832e59a02f0964a85a118c321f41772">+392/-0</a> </td> </tr> <tr> <td><strong>invoiceHistory.spec.ts</strong><dd><code>Add tests for invoice history component</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-0a63edfe6e4c010c3f80c7afe0f22a394e666591702c376d89e4cc3d0f1f499b">+381/-0</a> </td> </tr> <tr> <td><strong>QueryList.spec.ts</strong><dd><code>Add tests for QueryList component</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-e08f882439ac0d15ee00d96205df02345821408ab81bade0267f780b66b956e2">+345/-0</a> </td> </tr> <tr> <td><strong>enterprisePlan.spec.ts</strong><dd><code>Add tests for enterprise plan component</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-afe194ebfc98f24482cc388a5e8482174dd48e74c302d24c00b2c9b309b0a2d1">+271/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>4 files</summary><table> <tr> <td><strong>ImportPipeline.vue</strong><dd><code>Expose internal methods via setup return</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-d57fa41169daa44551a181f21ca33882004b29ab74e3040e4c56a8c849078670">+16/-0</a> </td> </tr> <tr> <td><strong>QueryList.vue</strong><dd><code>Support additional metaData prop</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-3daa87342834ae1e5bc6d74cb6dbd640b5b5fbb8df15c3cfe43b74c84f872d5d">+1/-0</a> </td> </tr> <tr> <td><strong>RunningQueries.vue</strong><dd><code>Update logic to align with new tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-6f0e18626a986d934c08c368ac383179c56bfcd914a27619ba748f43629c926b">+14/-0</a> </td> </tr> <tr> <td><strong>OtelConfig.vue</strong><dd><code>Minor updates to support tested behavior</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8133/files#diff-f5f5b0e070bcd827d74339487f2dd8353be1e9095fc4edf6c8c59b6b4dd56ea2">+8/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
6484335345 |
feat: added oracle database page under datasource (#8140)
### **PR Type**
Enhancement, Documentation
___
### **Description**
- Add Oracle ingestion route and page
- Include Oracle in database tabs and i18n
- Link Oracle docs in ingestion helper
___
### Diagram Walkthrough
```mermaid
flowchart LR
Routes["Ingestion routes"] -- add --> OracleRoute["/ingestion/database/oracle"]
DatabaseTabs["Database.vue tabs"] -- show --> OracleTab["Oracle tab"]
OracleTab -- loads --> OracleComponent["Oracle.vue"]
IngestionHelper["useIngestion.ts"] -- adds doc URL --> OracleDocs["Oracle documentation link"]
i18n["en.json"] -- adds key --> OracleLabel["ingestion.oracle"]
```
<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>useIngestionRoutes.ts</strong><dd><code>Add Oracle
ingestion route</code>
</dd></summary>
<hr>
web/src/composables/shared/useIngestionRoutes.ts
<ul><li>Import <code>Oracle.vue</code> component.<br> <li> Register
<code>oracle</code> child route with <code>routeGuard</code>.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8140/files#diff-29b1f8a3bf25d16999da323aefcd8cd0eff4647a0c0d737abd355a008492b2ae">+9/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>Database.vue</strong><dd><code>Add Oracle tab in
database list</code>
</dd></summary>
<hr>
web/src/components/ingestion/Database.vue
- Add Oracle tab entry with icon, label, and route.
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8140/files#diff-9f043be1b81e96e163d333d8fac934fbd8cf9009076eeaaf2bd8ee360a3e913c">+12/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>Oracle.vue</strong><dd><code>Create Oracle ingestion
component</code>
</dd></summary>
<hr>
web/src/components/ingestion/databases/Oracle.vue
<ul><li>New Oracle ingestion component with copyable content.<br> <li>
Links to Oracle documentation via composable.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8140/files#diff-7b4b75f7f33025d817df39548bd9209f634f26b7c494c868a3fe1c17eca75765">+37/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>useIngestion.ts</strong><dd><code>Include Oracle docs
URL</code>
</dd></summary>
<hr>
web/src/composables/useIngestion.ts
- Add `oracle` docs URL to `databaseDocURLs`.
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8140/files#diff-3691717c742137402219c92e4bb4a5943d2676e058e2320bd009faa40ee2ce6a">+1/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>en.json</strong><dd><code>Add i18n label for
Oracle</code>
</dd></summary>
<hr>
web/src/locales/languages/en.json
- Add `ingestion.oracle` label.
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8140/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+1/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
e9204d8bbc |
fix: added spacing between box (#8149)
### **PR Type**
Enhancement
___
### **Description**
- Add right margin to home cards
- Improve spacing between dashboard boxes
- Visual polish on HomeView layout
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["HomeView.vue"] -- "add q-mr-lg" --> B["Card containers"]
B -- "improved spacing" --> C["Home page layout"]
```
<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>HomeView.vue</strong><dd><code>Add right margin to
HomeView card containers</code>
</dd></summary>
<hr>
web/src/views/HomeView.vue
<ul><li>Add <code>q-mr-lg</code> to three <code>.card-container</code>
divs.<br> <li> Improves horizontal spacing between home page cards.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8149/files#diff-9af441af191d3254ef5f9db603dca75486de7638cda41a3c050e7b3c33d68280">+3/-3</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
dd0fbf147a |
fix: remove environment option from list (#8141)
### **PR Type**
Enhancement
___
### **Description**
- Split index options for environment fields
- Remove env options from default list
- Conditionally render options based on row settings
- Expose new env options in component state
___
### Diagram Walkthrough
```mermaid
flowchart LR
UI["Schema Index Select (QSelect)"]
RowCheck["isEnvironmentSettings(row)"]
DefaultOpts["streamIndexType"]
EnvOpts["streamIndexTypeEnv"]
State["Component exports"]
UI -- evaluates --> RowCheck
RowCheck -- true --> EnvOpts
RowCheck -- false --> DefaultOpts
EnvOpts -- provided as :options --> UI
DefaultOpts -- provided as :options --> UI
EnvOpts -- added to --> 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><table>
<tr>
<td>
<details>
<summary><strong>schema.vue</strong><dd><code>Split and conditionally
apply environment index options</code> </dd></summary>
<hr>
web/src/components/logstream/schema.vue
<ul><li>Add <code>streamIndexTypeEnv</code> with environment-only
options.<br> <li> Remove environment options from
<code>streamIndexType</code>.<br> <li> Conditionally set QSelect
<code>:options</code> based on
<br><code>isEnvironmentSettings(row)</code>.<br> <li> Expose
<code>streamIndexTypeEnv</code> from setup return.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8141/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+7/-3</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
15c019fe93 |
fix: regex patterns introduce search as well (#8134)
### **User description**
1. we are now support both redaction or dropping of matched regex field
during search time and ingestion time
___
### **PR Type**
Enhancement, Bug fix
___
### **Description**
- Add confirmation dialog before removing pattern
- Support deselecting apply_at with safe revert
- Generalize redact/drop copy beyond ingestion
- Track dialog state and handlers
___
### Diagram Walkthrough
```mermaid
flowchart LR
UI["AssociatedRegexPatterns.vue"]
Dialog["ConfirmDialog component"]
State["showWarningDialogToRemovePattern state"]
Logic["apply_at change handler"]
Revert["transformApplyAtValue + cancel handler"]
Actions["handleAddOrRemovePattern"]
UI -- "imports & registers" --> Dialog
UI -- "manages" --> State
Logic -- "empty selection triggers" --> State
State -- "cancel" --> Revert
State -- "ok" --> Actions
Revert -- "restore previous apply_at" --> UI
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>AssociatedRegexPatterns.vue</strong><dd><code>Confirmation
and apply_at handling improvements</code>
</dd></summary>
<hr>
web/src/components/logstream/AssociatedRegexPatterns.vue
<ul><li>Add ConfirmDialog to confirm pattern removal.<br> <li> Introduce
state and handlers for removal flow.<br> <li> Allow empty apply_at to
trigger confirmation; revert on cancel.<br> <li> Simplify redact/drop
help text; remove hardcoded ingestion fallback.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8134/files#diff-c6fce5e1c83798991b6ff19effb23c67af59f38fac0b9e56dcab7a09d139f550">+57/-11</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
952ccb7396 |
fix: indexlist field select issue fixed (#8139)
### **User description**
This PR solves the issue of field selection when user selects from side
panel
___
### **PR Type**
Bug fix
___
### **Description**
- Fix timeout reference in column update
- Prevent stale timeout and ensure clearTimeout works
- Use component-scoped `updateColumnsTimeout`
___
### Diagram Walkthrough
```mermaid
flowchart LR
UpdateSelectedColumns["updateSelectedColumns()"] --> CheckTimeout["Check this.updateColumnsTimeout"]
CheckTimeout --> ClearTimeout["clearTimeout(this.updateColumnsTimeout)"]
ClearTimeout --> SetTimeout["this.updateColumnsTimeout = setTimeout(...)"]
SetTimeout --> UpdateGrid["this.updateGridColumns()"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>Index.vue</strong><dd><code>Correct timeout scoping for
grid column updates</code>
</dd></summary>
<hr>
web/src/plugins/logs/Index.vue
<ul><li>Replace external ref with
<code>this.updateColumnsTimeout</code>.<br> <li> Clear existing timeout
via component property.<br> <li> Store new setTimeout handle on
component instance.<br> <li> Ensure grid columns update after 50ms.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8139/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+3/-3</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
0a63a10032 |
fix; UI unit test case v7.2 (#8132)
### **PR Type** Tests, Enhancement ___ ### **Description** - Add comprehensive settings unit tests - Introduce regex patterns test suite - Expand MSW handlers for settings APIs - Add mock data for regex patterns ___ ### Diagram Walkthrough ```mermaid flowchart LR Specs["New settings/regex spec files"] -- "use" --> MSW["MSW rest handlers"] MSW -- "serve" --> Mocks["Regex patterns mock data"] Specs -- "mount" --> Components["Settings components"] ``` <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>6 files</summary><table> <tr> <td><strong>AddRegexPattern.spec.ts</strong><dd><code>Add end-to-end unit tests for AddRegexPattern</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8132/files#diff-8010ecaba14a295a81248da3901421fe133feb14b178512a4690d2c76eabde03">+626/-0</a> </td> </tr> <tr> <td><strong>CipherKeys.spec.ts</strong><dd><code>Add full unit tests for Cipher Keys page</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8132/files#diff-017c69ca1a10dd456e41c8fd188539c6b8c57c0437351710a177358ae3db1fef">+787/-0</a> </td> </tr> <tr> <td><strong>General.spec.ts</strong><dd><code>Add unit tests for General settings and branding</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8132/files#diff-f3b556321cf5c1b7cfcc36507d050f70ea355971d718ddb6bafa6faf2dc6d298">+851/-0</a> </td> </tr> <tr> <td><strong>NoRegexPatterns.spec.ts</strong><dd><code>Add unit tests for empty Regex Patterns state</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8132/files#diff-92a31474de14534958fdf8056a7e6ab9334493c92740fe1ed738fabf01de18cd">+361/-0</a> </td> </tr> <tr> <td><strong>index.spec.ts</strong><dd><code>Add unit tests for Settings index navigation and tabs</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8132/files#diff-7c2e13b69b48077a1e82e767fa048995d42d4bef03362f19ad0897f7e2a4dfb3">+543/-0</a> </td> </tr> <tr> <td><strong>regexPatterns.ts</strong><dd><code>Add mock data for regex patterns and results</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8132/files#diff-c7324fdbffcb15b12d0597c7235234970331a4e4819611e1241a00b1b936f570">+41/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>handlers.ts</strong><dd><code>Extend MSW handlers for settings and regex APIs</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8132/files#diff-fa72375a2848d474b311c07cf6aef7d6117b1f4d88f56a74c9207f39df72333c">+96/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
91265a75ab |
fix: Parsing nested "WITH" query to extract stream names (#8062) (#8076)
### **PR Type**
Bug fix, Enhancement
___
### **Description**
- Robust nested WITH table extraction
- Prevent visualize with invalid states
- Improve VRL editor visualize warning UX
- Minor UI formatting and accessibility tweaks
___
### Diagram Walkthrough
```mermaid
flowchart LR
SQLParser["SQL parser in useLogs.ts"] -- "extract nested tables" --> Streams["Selected streams list"]
Toggle["Visualize toggle handler"] -- "validate state & query" --> Errors["User notifications"]
Editor["VRL editor in SearchBar.vue"] -- "read-only + banner on visualize" --> UX["Improved UX feedback"]
```
<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>useLogs.ts</strong><dd><code>Robust nested WITH tables
extraction</code>
</dd></summary>
<hr>
web/src/composables/useLogs.ts
<ul><li>Add recursive extraction for WITH tables<br> <li> Protect
recursion with depth limit<br> <li> Prevent circular refs via
WeakSet<br> <li> Handle FROM, WHERE, SELECT subqueries</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8076/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+49/-6</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>SearchBar.vue</strong><dd><code>Visualize validations
and VRL editor UX</code>
</dd></summary>
<hr>
web/src/plugins/logs/SearchBar.vue
<ul><li>Validate visualize toggle states and queries<br> <li> Make VRL
editor read-only with warning in visualize<br> <li> Safe access to
selectedStreamFields<br> <li> UI/formatting and tooltip consistency</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8076/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+134/-75</a></td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
e92ed4bcc2 |
fix: Traces Component Testing (#7877)
### **PR Type** Tests, Enhancement, Bug fix ___ ### **Description** - Extensive unit tests for TraceDetailsSidebar and TraceTree - Add data-test attributes across trace components - Handle zero duration in formatTimeWithSuffix - Fix highlightSearch quoting and JSON formatting ___ <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody></tr></tbody></table> </details> ___ |
||
|
|
4963bd648d |
fix: parse cte query to extract stream name (#8102) (#8116)
### **User description** - #8080 - #8098 ___ ### **PR Type** Bug fix, Enhancement ___ ### **Description** - Fix stream selection for CTE queries - Add robust stream extraction utility - Make query updates async-aware - Adjust watchers to trigger reliably ___ ### Diagram Walkthrough ```mermaid flowchart LR SQL["SQL query (incl. CTE)"] -- parse --> Extract["getStreamNameFromQuery()"] Extract -- returns stream --> Panel["useDashboardPanel: updateQueryValue()"] Panel -- set --> StreamField["currentQuery.fields.stream"] Watcher["Vue watch hooks"] -- trigger on changes --> Panel ``` <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>FieldList.vue</strong><dd><code>Stabilize watcher for stream type changes</code> </dd></summary> <hr> web/src/components/dashboards/addPanel/FieldList.vue <ul><li>Change watcher source to array form.<br> <li> Ensure stream list reloads on type changes.</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/8116/files#diff-a071c06e3e26629cb4ae4751450acc39c61fa49b07a1cc4be3711697829668d4">+5/-3</a> </td> </tr> <tr> <td> <details> <summary><strong>sqlUtils.ts</strong><dd><code>Add robust stream extractor for SQL/CTE queries</code> </dd></summary> <hr> web/src/utils/query/sqlUtils.ts <ul><li>Add <code>getStreamNameFromQuery</code> to parse SQL/CTE.<br> <li> Safeguard recursion and circular refs with WeakSet.<br> <li> Handle FROM, WHERE, SELECT subqueries.<br> <li> Gracefully handle parser errors.</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/8116/files#diff-dde40e8fcb5c37b06c011ede08922c44a3c025682fbc341aee97ba046b73a0e3">+76/-0</a> </td> </tr> </table></td></tr><tr><td><strong>Bug fix</strong></td><td><table> <tr> <td> <details> <summary><strong>useDashboardPanel.ts</strong><dd><code>Async query parsing and CTE-aware stream resolution</code> </dd></summary> <hr> web/src/composables/useDashboardPanel.ts <ul><li>Import <code>getStreamNameFromQuery</code>.<br> <li> Make <code>updateQueryValue</code> async and await in watcher.<br> <li> Use stream name from parser for selection, including CTE.<br> <li> Remove redundant parsing branch; minor bug introduced in logs flag.</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/8116/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+15/-23</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
8e9fe66e92 |
fix: config sync on logs to visualization toggle main (#8115)
### **User description**
Steps:
1. Go to logs page.
2. Select stream and render logs.
3. Toggle to visualization
4. modify chart type or chart configs.
5. Go back to logs page.
6. Again switch to visualization.(config should be synced and default
chart type will be automatically selected).
- Share visualization will always sync config and chart type both.
___
### **PR Type**
Bug fix, Enhancement
___
### **Description**
- Restore visualization config from URL reliably
- Preserve chart type on first toggle
- Prevent re-trigger during URL restoration
- Persist visualization_data across routes
___
### Diagram Walkthrough
```mermaid
flowchart LR
LogsPage["Logs page toggle"] -- "to visualize" --> RestoreURL["Restore config from URL"]
RestoreURL -- "preserve config + maybe type" --> ExtractFields["Extract fields (auto-select?)"]
ExtractFields -- "build data" --> VizData["visualizeChartData"]
VizData -- "update" --> URLSync["updateUrlQueryParams"]
URLSync -- "persist visualization_data" --> RouterQuery["Router query params"]
```
<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>Index.vue</strong><dd><code>Robust restore, preserve,
and sync visualization state</code> </dd></summary>
<hr>
web/src/plugins/logs/Index.vue
<ul><li>Add flags <code>isRestoringFromUrl</code>,
<code>isFirstVisualizationToggle</code>.<br> <li> Always decode URL
<code>visualization_data</code>; preserve config and first-toggle
<br>type.<br> <li> Conditional auto-chart selection via
<code>extractVisualizationFields</code>.<br> <li> Build
histogram/queries safely; fix dateTime assignment condition.<br> <li>
Restore preserved config post-extraction; update URL after switch.<br>
<li> Skip type watcher while restoring; minor refactors and safety
checks.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8115/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+106/-60</a></td>
</tr>
<tr>
<td>
<details>
<summary><strong>useLogs.ts</strong><dd><code>URL persistence and scoped
visualization config encoding</code> </dd></summary>
<hr>
web/src/composables/useLogs.ts
<ul><li>Narrow <code>getVisualizationConfig</code> to
<code>config</code> and <code>type</code>.<br> <li> Persist
<code>visualization_data</code> in URL across modes.<br> <li>
Encode/decode flow refined; remove eager restore on init.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8115/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+19/-20</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
ebe5c0e73e |
feat: search time patterns (#8104)
### **PR Type** Enhancement, Tests, Documentation ___ ### **Description** - Apply regex patterns at search time - Map projections to source columns - Integrate enterprise pattern manager - Add tests for projection extraction ___ ### Diagram Walkthrough ```mermaid flowchart LR SearchReq["Search request"] -- "execute query" --> DatafusionPlan["DataFusion logical plan"] DatafusionPlan -- "extract projection mappings" --> ProjMap["ProjectionColumnMapping"] SearchReq -- "fetch hits" --> Hits["Search results (hits)"] ProjMap -- "guide field processing" --> PatternMgr["Pattern manager (enterprise)"] Hits -- "apply regex patterns" --> Hits2["Transformed results"] ``` <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>6 files</summary><table> <tr> <td><strong>mod.rs</strong><dd><code>Expose projections module in meta</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8104/files#diff-bab79e8da2d0d9f903cb1a6187d922c6de63d3e4561e8ce633660b664b4e859f">+1/-0</a> </td> </tr> <tr> <td><strong>projections.rs</strong><dd><code>Add ProjectionColumnMapping structure</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8104/files#diff-2432b13a92a92cdbd1aa1ee0fbdde05827a67c37081e7f0ecc127a4effbe3101">+26/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Post-process hits with regex patterns</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8104/files#diff-f07bfacc0501b9c234e64b16c1dd8eb0ae8fcbe231f90c81fed72bcc94946f74">+61/-2</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Register regex_projections planner module</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8104/files#diff-70bb941c2eef1365e5ead1a59b65c5397457b9197a4e22596e18d17db7eaf922">+1/-0</a> </td> </tr> <tr> <td><strong>cache.rs</strong><dd><code>Apply regex patterns to cached responses</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8104/files#diff-55769b7cb67b550daf45363c6d7d569b39d4a6235f6a68c091beb40f16b6511e">+10/-0</a> </td> </tr> <tr> <td><strong>execution.rs</strong><dd><code>Apply regex patterns in streaming paths</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8104/files#diff-75d432351865224f0b00d7cc819554c2ad5fa1f777e9c645d91a3fd5c1113bc0">+35/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>regex_projections.rs</strong><dd><code>Extract projection source columns with tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8104/files#diff-b329e80dfa025fabb0ef51b6dc25285aaadc00ab7862157deb0eb7b0b01bb494">+500/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>AssociatedRegexPatterns.vue</strong><dd><code>Enable UI section for detect-at choice</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8104/files#diff-c6fce5e1c83798991b6ff19effb23c67af59f38fac0b9e56dcab7a09d139f550">+1/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
c5bc2f97c2 |
fix: made fn editor by default false (#8000)
This PR fixes the issue #7960 |
||
|
|
4c03ed1a43 |
fix: normalize the limit to 100 by default (#8075) (#8078)
### **User description**
1. This PR changes the user limits to 100 by default while validating
the query so it will solve the issue of larger limit
2. we dont change the original query but instead while sending for the
validation we replace the limit if it is greater than 100 to 100
3. it will also detect limit in the entire query so multiple limit is
possible in ctes , sub queries so handled that as well
4. if no limit then we will simply return it
___
### **PR Type**
Bug fix, Enhancement
___
### **Description**
- Normalize SQL LIMIT during validation
- Cap LIMIT to 100 across query parts
- Preserve original user query intact
- Handle multiple LIMIT/OFFSET safely
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["User SQL"] -- "pass to validation" --> B["normalizeLimit(sql, 100)"]
B -- "replace LIMIT > 100" --> C["Capped SQL for validation"]
B -- "no LIMIT found" --> D["Original SQL for validation"]
```
<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>Query.vue</strong><dd><code>Add SQL LIMIT normalization
for validation path</code>
</dd></summary>
<hr>
web/src/components/pipeline/NodeForm/Query.vue
<ul><li>Use normalizeLimit before assigning query SQL for
validation.<br> <li> Implement normalizeLimit to cap LIMIT to maxLimit
(default 100).<br> <li> Support multiple LIMIT/OFFSET occurrences via
regex replacement.<br> <li> Add error handling and comments; keep
original query unchanged.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8078/files#diff-6247cbd506bcf963372f2e429507fc579af95f003df246889b478da11326a657">+36/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
f78f5d79c8 |
fix: added unit test cases (#8121)
### **User description** with this PR the coverage is -----------------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -----------------------------------------------|---------|----------|---------|---------|------------------------------------------------------------------------------------- All files | 48.05 | 82.25 | 50.81 | 48.05 | ___ ### **PR Type** Enhancement, Tests, Bug fix ___ ### **Description** - Add comprehensive unit tests across modules - Expose component internals for testability - Safely access org identifier with optional chaining - Minor exports to composables for testing ___ ### Diagram Walkthrough ```mermaid flowchart LR components["Vue components"] expose["Expose methods/refs via defineExpose"] specs["New/expanded unit tests"] fixOrg["Optional chaining for org identifier"] composables["Composables export additions"] components -- "defineExpose, returns additions" --> expose expose -- "enables" --> specs components -- "query params use ?.identifier" --> fixOrg composables -- "export more helpers" --> specs ``` <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>1 files</summary><table> <tr> <td><strong>index.vue</strong><dd><code>Use optional chaining for org identifier in routes</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-699c63979f851c48ad440a078e93282fd797a18fc065e5331b2e41122ddb8b69">+15/-13</a> </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>39 files</summary><table> <tr> <td><strong>Stream.vue</strong><dd><code>Expose stream form methods and state for tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1a17ced9dc89022502cab0a6f9b97b413c2a2c4f8219733d063fc0180d361739">+33/-0</a> </td> </tr> <tr> <td><strong>RealTimeAlert.vue</strong><dd><code>Expose alert editor methods/data for tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c3ae6b47832eb33f9ca877cc7165d079de14850e5c5d43a227102ba40326b9d8">+19/-0</a> </td> </tr> <tr> <td><strong>ExternalDestination.vue</strong><dd><code>Expose destination form functions and state</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-7ed6a9ef676d7d6db5440d4157512f731bad58716c351ca39015125a8a9d2df5">+22/-0</a> </td> </tr> <tr> <td><strong>PerformanceSummary.vue</strong><dd><code>Export additional helpers and imports for tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-fdf59594c111c1af03772c9deef4ba07cf2c2d00c9609737a0ea3e3c76fb1c1b">+3/-1</a> </td> </tr> <tr> <td><strong>StreamFieldInputs.vue</strong><dd><code>Expose field input handlers and state</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c8173413939f320f197b0f8790e619da18666f79009345f72b3325e89bbb7566">+17/-0</a> </td> </tr> <tr> <td><strong>FilterGroup.vue</strong><dd><code>Expose group manipulation helpers for testing</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-8d5a73bea3aa0b5c86d48cda4a61ee3e30f27797ac2a5add1ee8bd66c75bef23">+17/-0</a> </td> </tr> <tr> <td><strong>ImportDestination.vue</strong><dd><code>Expose validation and helper functions</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-814b8ef1dbb4eebca9dfab72452d9a90d5f3fa5886dea8e82ac0bde44f66b445">+7/-0</a> </td> </tr> <tr> <td><strong>PipelinesDestinationList.vue</strong><dd><code>Expose list helper functions and selectedPerPage</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-088c66f5a34e73a5350a794a772e5d905262277337c937dd36f4295072203ebf">+6/-0</a> </td> </tr> <tr> <td><strong>SearchBar.vue</strong><dd><code>Expose additional editor and action handlers</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+11/-0</a> </td> </tr> <tr> <td><strong>ImportTemplate.vue</strong><dd><code>Expose template validation and helpers</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-d22684c5142a49b8925a9dba1ef67631128caa95de66e71ba2a5b8120a0b91c6">+6/-0</a> </td> </tr> <tr> <td><strong>IndexList.vue</strong><dd><code>Expose websocket/search helper functions</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+11/-0</a> </td> </tr> <tr> <td><strong>ImportAlert.vue</strong><dd><code>Expose alert validation helpers</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-0f40dbf2757672e39ad16b86dddc59b568ca2e6ca36850420cd7be617da12d38">+4/-0</a> </td> </tr> <tr> <td><strong>AlertsDestinationList.vue</strong><dd><code>Expose destination list helpers for tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-e9d05ba6c071c0e2f5d9ef7acdef757f79910abd6897b29e27b069a10d4ba8de">+7/-0</a> </td> </tr> <tr> <td><strong>SysLog.vue</strong><dd><code>Expose syslog route helpers and state</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-2f538c29fd1d51aa470edad915666faca1deade7413645f033f2a67354b3726c">+9/-0</a> </td> </tr> <tr> <td><strong>TelegrafConfig.vue</strong><dd><code>Expose ingestionURL in setup for tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f934fcfd5f71fff85e099f5ddf133a1cdd2a02aa3ade339dee73d54474480acf">+2/-0</a> </td> </tr> <tr> <td><strong>schema.vue</strong><dd><code>Expose schema helpers and formatters</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+7/-0</a> </td> </tr> <tr> <td><strong>AssociatedRegexPatterns.vue</strong><dd><code>Expose pattern state/check helpers</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c6fce5e1c83798991b6ff19effb23c67af59f38fac0b9e56dcab7a09d139f550">+6/-1</a> </td> </tr> <tr> <td><strong>AddFolder.vue</strong><dd><code>Return defaultValue for tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-41d2f8fac44084c004d8386ea4cc32e9c5d3e33266c4009cc855e57fb00a41af">+1/-0</a> </td> </tr> <tr> <td><strong>ImportRegexPattern.vue</strong><dd><code>Expose regex pattern validation and helpers</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-e8e1bcb5a02311504d7d571090eab27a270aaa71cae185ad2703023e2e70a31e">+4/-0</a> </td> </tr> <tr> <td><strong>SearchSchedulersList.vue</strong><dd><code>Expose date helpers and router</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-0c0a4097c53f07712d35562b1336602bf24faddedab77a9f5717f5582dcac2f1">+5/-0</a> </td> </tr> <tr> <td><strong>MoveAcrossFolders.vue</strong><dd><code>Expose getModuleName from setup</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-3826ffbf7e4cbae5b621527c9df856e1bd3b349b78d4a6c514b6967636d04237">+1/-0</a> </td> </tr> <tr> <td><strong>SearchResult.vue</strong><dd><code>Expose row/partition helpers and column sizes</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-5e65533aa4754bb6d0074fda18ffc1ecacded3b9ca6bc28a161c3f6b12f20195">+5/-0</a> </td> </tr> <tr> <td><strong>AddUpdateTicket.vue</strong><dd><code>Expose validation/upload methods via expose</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-bd6f97ffe635a2127610e0bbc94b1c9fe40a6ca1dff98e72efc4a449116c59db">+2/-0</a> </td> </tr> <tr> <td><strong>usage.vue</strong><dd><code>Expose getUsage and router</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-87c1e1d75e488a25773db68ada1e49913ad50be7971fbb588939941a3ea6302b">+2/-0</a> </td> </tr> <tr> <td><strong>Databricks.vue</strong><dd><code>Expose database config state</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-2ff8f0c23b75de8b87f86d00af9de4f6c8ceb335ade6cbef227cb37f26d42ae6">+4/-0</a> </td> </tr> <tr> <td><strong>SqlServer.vue</strong><dd><code>Expose database config state</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-23653eb1e4b5fa9fc519ac44cdf06b01e645d61c86340e59fcf58eb11702008f">+5/-0</a> </td> </tr> <tr> <td><strong>JsonPreview.vue</strong><dd><code>Expose getTracesStreams function</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-3985073134d35ff074742944b114d0905524038b42e6d2ac887fef2c8436fb16">+1/-0</a> </td> </tr> <tr> <td><strong>VisualizeLogsQuery.vue</strong><dd><code>Expose hovered series and metadata</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+2/-0</a> </td> </tr> <tr> <td><strong>FrontendRumConfig.vue</strong><dd><code>Expose defaultConfig for tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a90414833508a6d5f76b245c65f2a2ff067ada5e1c5c09b1b53598a4881e2676">+1/-0</a> </td> </tr> <tr> <td><strong>OpenTelemetry.vue</strong><dd><code>Expose ingestionURL in setup</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-45be3e74a543860331e1cbb11c299a81d5f2e49030bcc3eab03dd6db09f93c5b">+1/-0</a> </td> </tr> <tr> <td><strong>Index.vue</strong><dd><code>Expose ingestRoutes for tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a8ce6281b41747a4c58b111d6c31a57f8597b2c33f79d9b236af548d5683b200">+1/-0</a> </td> </tr> <tr> <td><strong>PipelineFlow.vue</strong><dd><code>Expose store and setViewport</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9c7475a54f0c895dd49eb0c5b53fe0a76ceff0520f667a9cb065b364557ced50">+2/-0</a> </td> </tr> <tr> <td><strong>MessageQueues.vue</strong><dd><code>Expose messageQueueTabs</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-ab520bb9b203fc532d2544ba60b140600cbc0efb9773e000c1867076275780bc">+1/-0</a> </td> </tr> <tr> <td><strong>Database.vue</strong><dd><code>Expose databaseTabs</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9f043be1b81e96e163d333d8fac934fbd8cf9009076eeaaf2bd8ee360a3e913c">+1/-0</a> </td> </tr> <tr> <td><strong>Languages.vue</strong><dd><code>Expose languagesTabs</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-5ac446e8fed967883b402dfe4ff686717138a76f0333c2416a6b6f955a0086fc">+1/-0</a> </td> </tr> <tr> <td><strong>Networking.vue</strong><dd><code>Expose networkingTabs</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-ca61b8331afde2b46c0a193e0cc31e2b6b8a915aad1841fbbda229450af02726">+1/-0</a> </td> </tr> <tr> <td><strong>Recommended.vue</strong><dd><code>Expose recommendedTabs</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-d52f7f52bf8f6d3d639e5d0a550bed82223cd4fbd3eee3c257b7f80e0b8ee6d2">+1/-0</a> </td> </tr> <tr> <td><strong>SearchBar.spec.ts</strong><dd><code>Rewrite and expand SearchBar unit tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-63ac75d3fe278dad233e7dd7c51b3b33076d54a776b89ae05190d8522130c78b">+1058/-1118</a></td> </tr> <tr> <td><strong>GCPConfig.spec.ts</strong><dd><code>Add unit tests for GCP config logic</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-76e896e96fdae254b7b569e0d3afdea55b05c7777d6eda2da0374fe782d74457">+533/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>usePromqlSuggestions.ts</strong><dd><code>Export additional suggestion helpers/state</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-250bf4b2d8cb3845005f72188d73ab954359f841e15c4f217708beac1493e83a">+4/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>101 files</summary><table> <tr> <td><strong>App.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-e5d10660c09127e3b4234cd8fe18303e53db38e43a1c5a6edb13032afbebe28f">+291/-0</a> </td> </tr> <tr> <td><strong>AutoRefreshInterval.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-4fae96431d981a4338e96dd393820e3497ed56382adc77fab6024f6efd15bd4c">+320/-0</a> </td> </tr> <tr> <td><strong>ConfirmDialog.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-16ffba01e15b66513827b99a68c002b567e65bd1124f9bcf7c4db8db5795df8a">+61/-0</a> </td> </tr> <tr> <td><strong>CopyContent.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a09160ad7355806c5f4f5b0194a6026ed7c24a77f3de0bce58ffa67c4e97de4d">+348/-0</a> </td> </tr> <tr> <td><strong>CustomDateTimePicker.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f3c4dc21e87d485ae2d167b1f4e993ffc00b941b207a664ea504468842f4d428">+338/-0</a> </td> </tr> <tr> <td><strong>DateTime.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-ee6ae1a77af32afb0b0410cbe812d546c8639815748908e716d48a189695d8ec">+543/-0</a> </td> </tr> <tr> <td><strong>MenuLink.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-bd04ff500fc31583a430993830eed36cdf6254c2ce1a52b8a58a07b89bb9f825">+56/-4</a> </td> </tr> <tr> <td><strong>PendingSubscriptionWarning.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a38d050077b70a4e16ed3fa89df6978e0d15284b824fc1840ed3d0f10403f9f8">+301/-0</a> </td> </tr> <tr> <td><strong>ResumePipelineDialog.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-ca982d78b8c120585dcf75837fbc09426c3fa2dd7e0f3a8d6cdbf9954aee6027">+136/-0</a> </td> </tr> <tr> <td><strong>RouteTabs.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f4940a707bb9a1790b34d87c2588bb957876214edbfaf0072b2519afe230d077">+400/-0</a> </td> </tr> <tr> <td><strong>SanitizedHtmlRenderer.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-b45de775a1fc42af052b7af7b5c0b40512fab530db228a548e5bbe0510e774de">+350/-0</a> </td> </tr> <tr> <td><strong>FileItem.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-189b4998b9446d2b44aa820117eb54f555e15fb5d12dbd5bf61b4722fbc85b4e">+395/-0</a> </td> </tr> <tr> <td><strong>ScriptEditor.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-7989b3c2125f44e258f2e1e12dbb6e0608c2cfd6165619815501c8a4548b641c">+408/-0</a> </td> </tr> <tr> <td><strong>ScriptToolbar.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-5057edcc2e7f7f2bd115d1ad3b00bb668607662edee60131ba04fd078e41eaef">+412/-0</a> </td> </tr> <tr> <td><strong>AddAlert.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-84362398fea8abd9acf30f4f40ba8d4cf27348677454017bd4e6f568d5176ac6">+5/-3</a> </td> </tr> <tr> <td><strong>AlertsDestinationList.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-796a77635e67bca70cc19a671e1862438f78a9391ede0e936763e2204bd7a876">+709/-0</a> </td> </tr> <tr> <td><strong>FilterCondition.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-d09ca687da324598f7c1f17610406dda5c47faba21b1eba5dd606ce8f5a2671e">+463/-0</a> </td> </tr> <tr> <td><strong>FilterGroup.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1628547d4b6650b1e87817989b84ffb25895c64ad789457b094860fcd7f13447">+1405/-0</a></td> </tr> <tr> <td><strong>ImportAlert.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-553f61b4cb949550d09d7016031a29361e4aaa22ad86f20781787bc4ccf43272">+951/-0</a> </td> </tr> <tr> <td><strong>ImportDestination.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-cf334a840c66788867f54f726f5d9431f8e1197637c641469a34e63facfcb180">+815/-0</a> </td> </tr> <tr> <td><strong>ImportTemplate.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1a14d1b5cdc535c0fd982bcb6c02af07b647d5013922084df5d208c673eefaff">+875/-0</a> </td> </tr> <tr> <td><strong>PipelinesDestinationList.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f749b2cdb5476b289a38418201bf27c69a7e9ab01237f6ffefc7b23392c3ff71">+529/-0</a> </td> </tr> <tr> <td><strong>RealTimeAlert.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-3b33541be3d07c04f1afd3b0a716e683b804b4f8adcba09b4fc5f3ddd0c14ef6">+693/-0</a> </td> </tr> <tr> <td><strong>ScheduledAlert.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c85c209fe2d6eb3e8a223ddc1124e713f21ce3bbddf657be931cf8726f2e2934">+1197/-0</a></td> </tr> <tr> <td><strong>VariablesInput.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1c6c211f8e8e49e12619c73ac450cfdc6f92f5ffc533bf09716477fa37154786">+353/-0</a> </td> </tr> <tr> <td><strong>AddCipherKey.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1ae71f00dfb6f9424d2443856ca3a419aaf2ee0c08900f7ef2ca44e41c1982e9">+507/-467</a></td> </tr> <tr> <td><strong>AppDialog.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-28cde24b3e035186bbdf389f3c7560ba087588fd52d377c5615d50a6b5ad3dc7">+443/-0</a> </td> </tr> <tr> <td><strong>AppTabs.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1a762da82b05a89aaea5cfac75315972be2fcc622d8dcabd9bb6e10a091a2e9d">+132/-0</a> </td> </tr> <tr> <td><strong>JsonEditor.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-be62ee12fe0b191ed850f0d8c6be49abc52596a06bfd10ac037ecc8f758d2660">+107/-0</a> </td> </tr> <tr> <td><strong>LoadingProgress.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-6096c465ac03fdbe599251405ff150d38ffc2f42be501d93723a6cc9f8eeae52">+153/-0</a> </td> </tr> <tr> <td><strong>RelativeTime.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1ab920651a73975c32a1e00c0c6c0596866bf65b6aeec005e0d17f5084fddfef">+75/-0</a> </td> </tr> <tr> <td><strong>AddFolder.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c47fb42fd03cf2b19f7c1da98ec484699730d00d2a5ae348002df727c6f009b4">+545/-0</a> </td> </tr> <tr> <td><strong>FieldList.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-b32e6b73a1268169f32fcd0a092350e543c3d4ffb00eef685aed4ba8c36ac6a1">+907/-0</a> </td> </tr> <tr> <td><strong>MoveAcrossFolders.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-4bce3286733956ade6e6f93cc65f471314a07e610b7e3f57a95050f683fc688a">+1385/-0</a></td> </tr> <tr> <td><strong>AddFunction.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-5bf8cf7b136d01ade73a969358f28642eca484ee1f93008f2787405bc928c0df">+883/-0</a> </td> </tr> <tr> <td><strong>EnrichmentSchema.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-020714ac53ba9e0397b5f0d7fa40bbb54638a30858d2e85693e117e3616c03d1">+394/-0</a> </td> </tr> <tr> <td><strong>FullViewContainer.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-498a7631461da0b1acbb272f4e1be20f999a28cdbf66f3e2f86b2f59b82841fd">+503/-0</a> </td> </tr> <tr> <td><strong>FunctionList.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-555eb5d72b94d73c66cc303b1e3cece61564b622f7b1010219a23761c21f4c55">+0/-618</a> </td> </tr> <tr> <td><strong>TestFunction.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c1b26d908f381d548650300e436d7b2e22410ef4e3d6508287c951add6633f3c">+598/-0</a> </td> </tr> <tr> <td><strong>ServiceAccountsList.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-7b77b3425b30af8671b95b2c74702c89cf374669c2dc67a0b49ec182d30bedcd">+415/-99</a></td> </tr> <tr> <td><strong>AscSort.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-afc2d5fea4960d77d9f0487a89139f5409c9f55e34c3a58aedc8664cb9465c36">+200/-0</a> </td> </tr> <tr> <td><strong>DescSort.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f6c074687e3f02ec34f0c398f64a100f5511baf1789e5dd280d48f999dfd8505">+231/-0</a> </td> </tr> <tr> <td><strong>FunctionIcon.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-5ce858f61f52bf2fdad1dc34d3ecdd852f38c66e329b6f71a4eb25f745530ada">+313/-0</a> </td> </tr> <tr> <td><strong>PipelineIcon.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-28fb2dcadc48a4bf7407fe99d2dddcd4993b430fe8398db23c786abd9cdad427">+340/-0</a> </td> </tr> <tr> <td><strong>Custom.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-75fb68bb0e3ab0416c7a6840bd615a0432026c0675b7b8db80cedd8a29f07d0f">+941/-0</a> </td> </tr> <tr> <td><strong>Database.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-890a9b5f5bde73f36522a300d5ada6f14fae2a94bdb3f061ac3e7d1d0cb9cd8e">+775/-0</a> </td> </tr> <tr> <td><strong>DevOps.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-8dbbccb5f29f0766ead95f3aea538f5f5b85ec3b2ff8fbedbaff50f0c5771ab4">+331/-0</a> </td> </tr> <tr> <td><strong>Languages.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-34642bc2e6238f98a78fe2185eadd4995749ae336204bfb6095620369268e7d1">+753/-0</a> </td> </tr> <tr> <td><strong>MessageQueues.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-eee646fcdd254e0be152dfb3f2c6749b1710b6ec6be272b8c5f865b83d2853df">+526/-0</a> </td> </tr> <tr> <td><strong>Networking.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-aff8de29d05af2b04cc0b83ab292896c79a6d68cfb3649c10ec517679b73e97e">+659/-0</a> </td> </tr> <tr> <td><strong>Others.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-56f4544b83413f5b8d87c5fec280204b75388a0686c388445b3eceaef523f10e">+493/-0</a> </td> </tr> <tr> <td><strong>Recommended.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-86de7fab5e678188cf1b96d463809fa645abd8d1a19d86cd3f2214b12fac3c43">+557/-0</a> </td> </tr> <tr> <td><strong>Security.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-952301dec9efb69bbdc3b82753e8a7c86d64a67e3cd544fcc50f118fcd1d017e">+623/-0</a> </td> </tr> <tr> <td><strong>Server.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-80a46b98c8aef2059b9d25de464c3450aa3310c02d1a4bbfcd32a706b5d0334c">+667/-0</a> </td> </tr> <tr> <td><strong>Databricks.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-0cc6f4230b08c6d1f888bae4c5d9f11169714506be5f3be77b371ced9d084936">+350/-0</a> </td> </tr> <tr> <td><strong>Postgres.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-046ae7ca570ff9960c83ec5fca8a95110a5158ceafda48549bdf47ccc5c71b71">+498/-0</a> </td> </tr> <tr> <td><strong>SqlServer.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-33abd49e96a5a6ecb0e07f76f3b55cb53a12674ddd450890ec185eb85e33fae3">+313/-0</a> </td> </tr> <tr> <td><strong>Curl.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-755d02153c11d74b259e12605ae3ad203b01507c4f778347616ed4c1ba542024">+374/-24</a></td> </tr> <tr> <td><strong>FileBeat.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-d4f433b57979c49407559afd1b9a35131cf823a29596882f46aca6aa8789a777">+389/-0</a> </td> </tr> <tr> <td><strong>FluentBit.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9bb84df5402b65026cdf6fe4ead0937f825f129538f4e7e6291492a9b9ade289">+362/-27</a></td> </tr> <tr> <td><strong>Fluentd.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-b0d737e6ac8536493791c38acde3b0b339bae519b8ce58fb780f794bc31f62d1">+382/-23</a></td> </tr> <tr> <td><strong>LogstashDatasource.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-2cd019295a25886a037e6ede5cad795b52851a377f48beb46f3897bc6d64a20b">+522/-0</a> </td> </tr> <tr> <td><strong>SysLog.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-98526471b0f8a5a7547c205c9da6f8b4e62f20c6ee728b687225d4ee1c564758">+966/-0</a> </td> </tr> <tr> <td><strong>SyslogNg.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c1afe13c4d7ccf6c9e360c4beff423e785f52c05b58340acf5d0e11fbc77bfc3">+787/-0</a> </td> </tr> <tr> <td><strong>Vector.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-35a48d805d8ded5b793d07c4dbb85cfafb759d073e597758cb999ed28eaf3f31">+571/-26</a></td> </tr> <tr> <td><strong>ingestionIndex.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-aa6c7d67f4885ef49f587f3dde7760ba3eabea6478e776aede5f86ab4ca76e75">+570/-0</a> </td> </tr> <tr> <td><strong>CloudWatchMetrics.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-d2e18e89f6400e04f77e4dff297030ffdf6306038d7cfe08315e0736cd0520f4">+615/-0</a> </td> </tr> <tr> <td><strong>PrometheusConfig.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9026aa740243dc87d7be703fad5ad83e8ebdbb907b20b0f75a653ea3514dd6b4">+416/-0</a> </td> </tr> <tr> <td><strong>TelegrafConfig.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9de7588766a4cc480d9b053d4c6dd34bad93c4e85c6580c2d8f04073f8f0fa25">+350/-0</a> </td> </tr> <tr> <td><strong>AWSConfig.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a40ad271f4e88e42c4e746b5ce54ef0dceca122bedf3f9fa1f0571765001c680">+500/-0</a> </td> </tr> <tr> <td><strong>FrontendRumConfig.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-28bda2968dbbe401bacf2ce4a95e566d4672d59dafdf309d9a66dd567734af9a">+945/-0</a> </td> </tr> <tr> <td><strong>OpenTelemetry.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-489085e78e204c6e2b6dfdf21f1e48fef86d4bc4dd6f36869f9a2164027b3b7b">+554/-0</a> </td> </tr> <tr> <td><strong>Login.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-746b43968d685362866c3f97bf2b5e0846bac7463fe1ecb080c1c7d962cb855b">+994/-0</a> </td> </tr> <tr> <td><strong>AssociatedRegexPatterns.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-4ca41bf14fd6a3c79a3877324a7c7520a25d1d33f97fe947b2f6dd4bbf6ca5b4">+1384/-0</a></td> </tr> <tr> <td><strong>Schema.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-27aac0c27d14c76ae7d02277822392d29777f07fb588bc4a19d93cc0379a25e6">+593/-677</a></td> </tr> <tr> <td><strong>StreamFieldInputs.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a421936485eb26fe8b6c1a89cd0b40de202936fd57b49957e8ac1521a4641f57">+469/-0</a> </td> </tr> <tr> <td><strong>ExternalDestination.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-716d02dd388d827ba64d21320834f07a281242627dbce78a9d29fa84e2727a42">+0/-584</a> </td> </tr> <tr> <td><strong>ExternalDestination.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a404d8244c3beb0122fbd403d2b8b410a934aacd3e498c73499204db85bc790e">+1029/-0</a></td> </tr> <tr> <td><strong>Query.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-28606cc9e509c3f1c132551ed29c46ef168444b4425cf5e81e0eff65302a9d16">+950/-0</a> </td> </tr> <tr> <td><strong>Stream.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f0e36c3bdbe8da79becc97e236de086bec117c4272ef4a7691a3330835993e40">+232/-5</a> </td> </tr> <tr> <td><strong>PipelineView.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f78a1273b1fb7f5696f364f509b6bd13a1536a160b4fd98260cc8e61750e96f9">+600/-0</a> </td> </tr> <tr> <td><strong>PipelinesList.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-afcaf75b1dd20ccf66bd61334ba262512135a3f85593310890a774421d50265e">+712/-0</a> </td> </tr> <tr> <td><strong>pipelineCommonValidation.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-820d4f4f076840724bd6f0e7b5a9da1cbacea4d074249f07c957120b6601ac38">+311/-0</a> </td> </tr> <tr> <td><strong>pipelineCommonValidation.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-b2c4c50027aace8991d17030333e880b7d4808ab04d96e9c372d82d424235ef5">+1/-1</a> </td> </tr> <tr> <td><strong>CreateReport.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-8a0f39751d08a258c4997c5e68edaf167ea01477528beee2295dd9f992310cc6">+0/-1854</a></td> </tr> <tr> <td><strong>PerformanceOverview.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c37f87d6d7205b9688af8c24fa6d7847c77bf35c51d4d7d1e08e6f10f3af2942">[link]</a> </td> </tr> <tr> <td><strong>PerformanceSummary.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a2a97a13f8d5caa69d38d883576678dacecd8728386886f76d105e376879d60e">+1582/-0</a></td> </tr> <tr> <td><strong>ImportRegexPattern.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1111ec8ccc0c9b62d4791101f69855ac22baa856dedd54827970f993147c3aed">+811/-0</a> </td> </tr> <tr> <td><strong>RegexPatternList.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-df942239cac609f116dcb4aa61405a60fc718219c77af46258c34e8e86e44080">+1005/-0</a></td> </tr> <tr> <td><strong>settingsIndex.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-fc96fd3ae93a42ba09577ee2c27416e9e729f2729146f88e146e4a9473626da2">+774/-0</a> </td> </tr> <tr> <td><strong>FilterCreatorPopup.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-4167cd3f9eec0c9df78517b7514c39dcc2c0234810010d93e311879971bd552e">+439/-0</a> </td> </tr> <tr> <td><strong>NoData.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-e7f5be4faf7164f86bdfea69049db3aae0509a8d33b037bfcf799347b3a0ab0d">+335/-0</a> </td> </tr> <tr> <td><strong>NoOrganizationSelected.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1338e495c82b9d07995c13a6b245c919588012974c0f08096c7b93b5e143606c">+88/-0</a> </td> </tr> <tr> <td><strong>Pagination.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-8846923daf3fe7a897ab5956098564aeb6d1748db90f637fc39f4ac8a30e1234">+110/-0</a> </td> </tr> <tr> <td><strong>AddUpdateTicket.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-8f7eb6b61a8dfdab68d5e2f73e1d2bc9580e03290d287bcfb35802331165d118">+531/-0</a> </td> </tr> <tr> <td><strong>usePermissions.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-83e050b2b1753f98e357db0e2f8a6a353b24857640c3a522a73d0d2609a0bced">+513/-0</a> </td> </tr> <tr> <td><strong>useActions.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1bd297e5011b31dca1cb4edb6ff63a705e582dfe392e34b2e781c8051be5ee5e">+158/-0</a> </td> </tr> <tr> <td><strong>useIngestion.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-495d1e7e830eecd3e430e987a7056298d67df84282b31869bb27973aec8e4f06">+606/-0</a> </td> </tr> <tr> <td><strong>useIsMetaOrg.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-635f3965352f56c275b1309753a9f1421ffb0e8bd985b1286a012217df33eab5">+123/-0</a> </td> </tr> <tr> <td><strong>useLogs.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1e4dd9056495ae6a0c1cf2b8c9e803d7372c2c1426918d848bb903b424103875">+2/-2</a> </td> </tr> <tr> <td><strong>Additional files not shown</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/8121/files#diff-2f328e4cd8dbe3ad193e49d92bcf045f47a6b72b1e9487d366f6b8288589b4ca"></a></td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
3960871ad2 |
fix: added test cases for iam groups (#8105)
### **PR Type**
Tests
___
### **Description**
- Add comprehensive IAM groups unit tests
- Cover create, list, edit flows
- Include roles, users, service accounts
- Verify notifications and error handling
___
### Diagram Walkthrough
```mermaid
flowchart LR
AddGroupSpec["AddGroup.spec: create group tests"]
AppGroupsSpec["AppGroups.spec: list/delete groups tests"]
EditGroupSpec["EditGroup.spec: edit group tests"]
GroupRolesSpec["GroupRoles.spec: manage roles tests"]
GroupUsersSpec["GroupUsers.spec: manage users tests"]
GroupSActionsSpec["GroupServiceAccounts.spec: manage service accounts tests"]
AddGroupSpec -- "emit, validate, notify" --> AppGroupsSpec
AppGroupsSpec -- "edit/delete navigation" --> EditGroupSpec
EditGroupSpec -- "tabs and updates" --> GroupRolesSpec
EditGroupSpec -- "tabs and updates" --> GroupUsersSpec
EditGroupSpec -- "tabs and updates" --> GroupSActionsSpec
```
<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>AddGroup.spec.ts</strong><dd><code>Tests for AddGroup
dialog behaviors</code>
</dd></summary>
<hr>
web/src/components/iam/groups/AddGroup.spec.ts
<ul><li>Add unit tests for AddGroup dialog<br> <li> Validate input rules
and trimming<br> <li> Mock IAM createGroup and notifications<br> <li>
Test success and error scenarios</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-2bf9c9935bbd22db8608e9b5e12c1f85ad8afcb9a4eacb5cee672e69e544a79e">+340/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>AppGroups.spec.ts</strong><dd><code>Tests for Groups
list and actions</code>
</dd></summary>
<hr>
web/src/components/iam/groups/AppGroups.spec.ts
<ul><li>Add tests for groups listing table<br> <li> Cover search, add
dialog, actions<br> <li> Mock permissions, router, and services<br> <li>
Test delete flow with notifications</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-cfe60bc2c1440c6b2a41eb2db9901f922afa6adcd09ae263d4444556a1d1ac12">+486/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>EditGroup.spec.ts</strong><dd><code>Tests for EditGroup
flows and tabs</code>
</dd></summary>
<hr>
web/src/components/iam/groups/EditGroup.spec.ts
<ul><li>Add tests for editing group details<br> <li> Cover tabs, data
fetch, save payload<br> <li> Validate notifications and navigation<br>
<li> Mock child components and services</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-7683afda02004afab5d91e031b8ae82d614ecae38c926f6b6af2d3cf9528b725">+561/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>GroupRoles.spec.ts</strong><dd><code>Tests for group
roles selection</code>
</dd></summary>
<hr>
web/src/components/iam/groups/GroupRoles.spec.ts
<ul><li>Add tests for role selection table<br> <li> Cover filtering,
search, and selection sets<br> <li> Mock getRoles and permissions
state<br> <li> Verify rows/columns and edge cases</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-0833bc337b21487c4ef1deffcac799a91dbaf35241374284deb328e6482c11d9">+533/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>GroupServiceAccounts.spec.ts</strong><dd><code>Tests
for service accounts management</code>
</dd></summary>
<hr>
web/src/components/iam/groups/GroupServiceAccounts.spec.ts
<ul><li>Add tests for service accounts selection<br> <li> Cover data
fetch, filter, search<br> <li> Validate add/remove selection logic<br>
<li> Note existing bug in removedUsers logic</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-ef96f03e5a8237d18edf3b51dcf65f33d6f2938859a9a55d10eaf0f502954589">+572/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>GroupUsers.spec.ts</strong><dd><code>Tests for group
users management and org filters</code>
</dd></summary>
<hr>
web/src/components/iam/groups/GroupUsers.spec.ts
<ul><li>Add extensive tests for users selection<br> <li> Cover org
filtering, meta org, search<br> <li> Validate selection add/remove
sets<br> <li> Theme and accessibility checks included</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-7a9c6922e6c8a7d2c052f7f74ceba652af41bc123aa127a05276696278d792d8">+894/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
9a422cb34d |
feat: dashboard unique colors to the table column automatically. (#8051)
### **PR Type**
Enhancement
___
### **Description**
- Add unique value auto-color for tables
- Introduce typed override config schema
- Update popup UI for new config types
- Pass color mode through table pipeline
___
### Diagram Walkthrough
```mermaid
flowchart LR
Schema["Dashboard v5 Config enum"]
Popup["OverrideConfigPopup UI logic"]
Convert["convertTableData column metadata"]
Renderer["TableRenderer cell style"]
Palette["colorPalette getColorForTable"]
Schema -- "new type 'unique_value_color'" --> Popup
Popup -- "persist {type, autoColor|value}" --> Convert
Convert -- "set col.colorMode='auto'" --> Renderer
Renderer -- "map unique values to colors" --> Palette
```
<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>mod.rs</strong><dd><code>Typed dashboard Config with
color variant</code>
</dd></summary>
<hr>
src/config/src/meta/dashboards/v5/mod.rs
<ul><li>Replace <code>Config</code> struct with tagged enum.<br> <li>
Add variants: <code>Unit{value?}</code> and
<code>UniqueValueColor{auto_color}</code>.<br> <li> Adjust serde to use
<code>type</code> tag and camelCase.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-da49585bbcb02bf0f737bb68739ebc248edd15c7ad9427c0e68f7728bb4a8c17">+13/-8</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>OverrideConfigPopup.vue</strong><dd><code>Popup
supports unit and auto color overrides</code>
</dd></summary>
<hr>
web/src/components/dashboards/OverrideConfigPopup.vue
<ul><li>Redesign popup to choose config type.<br> <li> Support unit
config and unique value color (auto).<br> <li> Normalize, transform, and
save typed configs.<br> <li> UI tweaks: width, layout, and
handlers.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-f1512a15069c23bcc71ac88db5b0ab882031bf6ec9d53a84de2fcd8adb6dec2c">+155/-62</a></td>
</tr>
<tr>
<td>
<details>
<summary><strong>OverrideConfig.vue</strong><dd><code>Adapt prop shape
for typed overrides</code>
</dd></summary>
<hr>
web/src/components/dashboards/addPanel/OverrideConfig.vue
<ul><li>Pass override configs via <code>{ overrideConfigs }</code>
shape.<br> <li> Simplify dialog prop wiring.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-54a6038f5c684ade27b88e3c6a134874b51501904441fa7849a532d10aa7d533">+3/-5</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>TableRenderer.vue</strong><dd><code>Table cells
auto-colored by unique values</code>
</dd></summary>
<hr>
web/src/components/dashboards/panels/TableRenderer.vue
<ul><li>Add auto-color rendering path for columns.<br> <li> Use
<code>getColorForTable</code> palette and per-column cache.<br> <li>
Fallback to value-mapping color.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+24/-1</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>colorPalette.ts</strong><dd><code>Add table color
palette export</code>
</dd></summary>
<hr>
web/src/utils/dashboard/colorPalette.ts
<ul><li>Export <code>getColorForTable</code> palette for tables.<br>
<li> Provide light pastel color list.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-30ac812743f2388c4061647fac5e9f413bfe561f1fc5d4f6f7be82fce73f2840">+27/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>convertTableData.ts</strong><dd><code>Pipe override
color/unit configs to table</code>
</dd></summary>
<hr>
web/src/utils/dashboard/convertTableData.ts
<ul><li>Parse typed override configs to maps.<br> <li> Set
<code>colorMode: 'auto'</code> on columns when enabled.<br> <li> Use
unit config map for formatting.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-a672094c46e697ee7b7a3949a901cc1f7f88ec06cddaf67370474b508d5b0960">+32/-8</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Loakesh Indiran <66478092+Loaki07@users.noreply.github.com>
|
||
|
|
d48e35fa05 |
fix: added test cases for cipher keys (#8101)
### **PR Type**
Tests
___
### **Description**
Add comprehensive unit tests for cipher keys
Cover Akeyless provider form behaviors
Test encryption mechanism selection logic
Validate OpenObserve local secret workflows
___
### Diagram Walkthrough
```mermaid
flowchart LR
AddCipherKeySpec["AddCipherKey.spec.ts"] -- "mount, navigation, submit" --> AddCipherKeyVue["AddCipherKey.vue"]
AddCipherKeySpec -- "stubs, mocks" --> ServicesMocks["cipher_keys service"]
AkeylessSpec["AddAkeylessType.spec.ts"] -- "fields, validation, update mode" --> AddAkeylessTypeVue["AddAkeylessType.vue"]
OpenobserveSpec["AddOpenobserveType.spec.ts"] -- "local secret, update mode" --> AddOpenobserveTypeVue["AddOpenobserveType.vue"]
MechanismSpec["AddEncryptionMechanism.spec.ts"] -- "provider, algorithm" --> AddEncryptionMechanismVue["AddEncryptionMechanism.vue"]
```
<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>AddAkeylessType.spec.ts</strong><dd><code>Tests for
Akeyless provider form behavior</code>
</dd></summary>
<hr>
web/src/components/cipherkeys/AddAkeylessType.spec.ts
<ul><li>Add unit tests for Akeyless form fields<br> <li> Validate URL,
access ID, and HTML sanitization<br> <li> Test auth types (access_key,
ldap) conditional UI<br> <li> Test secret types (static_secret, dfc)
conditional UI and update mode</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8101/files#diff-394b98b49b31d82146024ad8d9ad900a69afd49cb33d913514bb61058c7a2649">+324/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>AddCipherKey.spec.ts</strong><dd><code>Comprehensive
tests for AddCipherKey flow</code>
</dd></summary>
<hr>
web/src/components/cipherkeys/AddCipherKey.spec.ts
<ul><li>Add end-to-end component tests with mocks/stubs<br> <li> Cover
create/update workflows and validations<br> <li> Test dynamic child
rendering and step navigation<br> <li> Verify helpers, state management,
and error handling</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8101/files#diff-1ae71f00dfb6f9424d2443856ca3a419aaf2ee0c08900f7ef2ca44e41c1982e9">+616/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>AddEncryptionMechanism.spec.ts</strong><dd><code>Tests
for encryption mechanism selection</code>
</dd></summary>
<hr>
web/src/components/cipherkeys/AddEncryptionMechanism.spec.ts
<ul><li>Add tests for provider type and algorithm options<br> <li>
Validate conditional rendering for simple provider<br> <li> Verify
bindings, validation, and accessibility props<br> <li> Include robust
stubs for Quasar selects</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8101/files#diff-041335605ede2ba506406e550ba3c7663f4a8155f8c548f9e18b95ddfea4a51e">+402/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>AddOpenobserveType.spec.ts</strong><dd><code>Tests for
OpenObserve local secret form</code>
</dd></summary>
<hr>
web/src/components/cipherkeys/AddOpenobserveType.spec.ts
<ul><li>Add tests for local secret input behavior<br> <li> Validate
required rules and data binding<br> <li> Cover update mode toggle and
buttons<br> <li> Verify field properties and structure</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8101/files#diff-d4c9e84859e41b57861e8ec93d08f28111c13c5ca1143c0613f9e3f55051a2f2">+675/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
86362dc372 |
fix: useLogs test cases added (#8071)
### **PR Type**
Tests
___
### **Description**
Add unit tests for initialization functions
Add stream management tests with API mocks
Add SQL parsing and search build tests
Improve error handling coverage in tests
___
### Diagram Walkthrough
```mermaid
flowchart LR
Init["Initialization tests"] -- clear/reset --> SearchObj["searchObj defaults"]
Streams["Stream management tests"] -- getStreamList/getStream --> API["Mocked services"]
SQL["SQL parse/build tests"] -- fnParsedSQL/fnUnparsedSQL --> Parser["Mocked parser"]
SQL -- buildSearch --> QueryReq["Query request assertions"]
Init -- initialLogsState --> Store["Mocked store"]
```
<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>useLogs.spec.ts</strong><dd><code>Comprehensive tests
for useLogs initialization, streams, SQL</code></dd></summary>
<hr>
web/src/plugins/logs/useLogs.spec.ts
<ul><li>Add tests for clearSearchObj and resetSearchObj<br> <li> Add
initialLogsState behavior and error tests<br> <li> Add
getStreamList/loadStreamFields tests with mocks<br> <li> Add
fnParsedSQL/fnUnparsedSQL and buildSearch tests</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8071/files#diff-842307ae8db03aa51891ddde98cfdbbabc712db1e1614c9eee99a59add395f70">+582/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
a6285cfd3e |
fix: dashboard editor getting overlap for custom chart (#8083)
### **PR Type**
Bug fix
___
### **Description**
Prevent dashboard editor panel overlap
Wrap errors component in fixed-width container
Adjust layout with non-shrinking sidebar div
Improve panel/side content separation
___
### Diagram Walkthrough
```mermaid
flowchart LR
Layout["AddPanel layout"] -- "add fixed-width div" --> Errors["DashboardErrorsComponent container"]
Errors -- "prevent flex shrink" --> NoOverlap["No overlap in editor"]
```
<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>AddPanel.vue</strong><dd><code>Prevent errors panel
from shrinking and overlapping</code>
</dd></summary>
<hr>
web/src/views/Dashboards/addPanel/AddPanel.vue
<ul><li>Added closing div for splitter section.<br> <li> Introduced
wrapper div with class <code>col-auto</code> and <code>flex-shrink:
0</code>.<br> <li> Ensured <code>DashboardErrorsComponent</code> sits in
non-shrinking column.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8083/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+2/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
f8956f30c1 |
fix: dashboard stream fields not found (#8087)
### **PR Type**
Bug fix
___
### **Description**
Handle missing or empty stream schemas
Fetch schema when absent or zero-length
Default to empty schema to avoid errors
Improve robustness of dashboard field loading
___
### Diagram Walkthrough
```mermaid
flowchart LR
UI["FieldList.vue"]
Check["Check stream.schema present and non-empty"]
Fetch["Fetch schema via loadStreamFields(name)"]
Validate["Validate schema not null/empty"]
Assign["Assign settings and schema"]
DefaultEmpty["Set stream.schema = [] and return"]
UI -- "iterate streams" --> Check
Check -- "missing or empty" --> Fetch
Fetch --> Validate
Validate -- "valid schema" --> Assign
Validate -- "invalid/empty" --> DefaultEmpty
```
<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>FieldList.vue</strong><dd><code>Robust schema presence
and fallback handling</code>
</dd></summary>
<hr>
web/src/components/dashboards/addPanel/FieldList.vue
<ul><li>Add check for empty <code>stream.schema</code> arrays<br> <li>
Fetch schema when missing or empty<br> <li> Guard against
undefined/empty fetched schema<br> <li> Default
<code>stream.schema</code> to <code>[]</code> on failure</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8087/files#diff-a071c06e3e26629cb4ae4751450acc39c61fa49b07a1cc4be3711697829668d4">+10/-2</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
75f2235d04 |
feat: create stream with field and data type (#7851)
### **User description** closes #6660 ___ ### **PR Type** Enhancement, Bug fix ___ ### **Description** - Add field data types and UDS support - Validate field names with strict regex - Store defined schema as objects, not strings - Backward-compatible parsing and UI updates ___ ### Diagram Walkthrough ```mermaid flowchart LR API["API: Stream settings/schema"] --> Parse["Parse defined_schema_fields (strings|objects)"] Parse -- "normalize to DataField{name,type}" --> Settings["StreamSettings.defined_schema_fields: DataField[]"] Settings -- "new stream" --> SchemaAdd["Add fields to Arrow schema with types"] Settings -- "existing + UDS" --> UDSUpdate["Add new fields to UDS + persist"] Types["DataType enum (Utf8, Int64, Uint64, Float64, Boolean)"] --> Arrow["Arrow DataType mapping"] Validate["Regex field name validation"] --> Save["save/update settings endpoints"] UI["UI: Add/Edit stream fields"] --> ObjectFmt["Send/handle {name,type} objects"] ObjectFmt -- "compat" --> Compat["Store original + derive string list for display"] ``` <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>10 files</summary><table> <tr> <td><strong>stream.rs</strong><dd><code>Rename stream property field to raw type key</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7851/files#diff-6f5ee19bbcc9cc7fb699fc1c0f43fc96d42698ae1168a2827b5c65f7948d5dbc">+5/-6</a> </td> </tr> <tr> <td><strong>stream.rs</strong><dd><code>Introduce DataType and DataField; settings parsing</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7851/files#diff-2438d04c3fe97bc5452e5b74a303163b8723d93455cda32c95f0525435ad46bd">+99/-13</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Optimize settings fetch; adapt defined fields helpers</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7851/files#diff-386fd4fad1e48ab0a90516cab1947b1888b270b2fe912f30d2255cc38e6c519b">+13/-6</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Use DataField names when building UDS sets</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7851/files#diff-7c7b5bca85f0ced652965cae66540c96f56dfcca4f4c16b77bf7b45aac203d1b">+6/-1</a> </td> </tr> <tr> <td><strong>schema.rs</strong><dd><code>Add DataField flows; new/UDS logic and conversions</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7851/files#diff-d9596182a0c7a46a6a7ff5cee822554cdae05ceec312f86c93b538db9f73bbfd">+270/-18</a></td> </tr> <tr> <td><strong>stream.rs</strong><dd><code>Validate field names; resolve defined field types</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7851/files#diff-41452a7fb29b4634437174fd6aecf6a9050dbfdef41b9077a21d59af3d79e9ed">+126/-7</a> </td> </tr> <tr> <td><strong>AddStream.vue</strong><dd><code>Send defined fields as objects with type</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7851/files#diff-78b8c84a558e60d942bacffee365633d074042e464be465eb6984b0ee5df82b9">+6/-2</a> </td> </tr> <tr> <td><strong>StreamFieldInputs.vue</strong><dd><code>UI for field data type and UX tweaks</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7851/files#diff-c8173413939f320f197b0f8790e619da18666f79009345f72b3325e89bbb7566">+90/-27</a> </td> </tr> <tr> <td><strong>schema.vue</strong><dd><code>Support object-based defined fields; sync logic</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7851/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+119/-25</a></td> </tr> <tr> <td><strong>useStreams.ts</strong><dd><code>Compare/sync object-based defined fields</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7851/files#diff-a083369344f022cdf8d4f536719179b1d920369e33e2e26234e70dd36d151a7c">+50/-2</a> </td> </tr> </table></details></td></tr><tr><td><strong>Bug fix</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>mod.rs</strong><dd><code>Map UDS fields by object name not string</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7851/files#diff-619eafba0f0509d905b021f4a16659010aca23c62cffd9cd3e6c2bbe204ce200">+1/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com> |
||
|
|
36c2320173 |
fix: fixed failed test cases (#8054)
### **PR Type**
Tests
___
### **Description**
Stabilize unit tests with reliable mocks
Prepopulate store and transform alert data
Reduce dataset sizes to prevent timeouts
Add timeouts and window.open mock
___
### Diagram Walkthrough
```mermaid
flowchart LR
AlertsSpec["AlertList.spec.ts tests"] -- "seed store + transform data" --> AlertsData["Deterministic alert dataset"]
AlertsSpec -- "mock services with Promise.resolve" --> StableAsync["Stable async behavior"]
AlertsSpec -- "mock window.open" --> BrowserSafe["No window errors"]
DomainIntSpec["DomainManagement.integration.spec.ts"] -- "reduce loops" --> FasterRuns["Prevent timeouts"]
DomainSpec["DomainManagement.spec.ts"] -- "reduce loops + add timeout" --> FasterRuns
```
<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>AlertList.spec.ts</strong><dd><code>Stabilize AlertList
tests with seeded data and robust mocks</code></dd></summary>
<hr>
web/src/components/alerts/AlertList.spec.ts
<ul><li>Remove unused beforeAll import<br> <li> Mock window.open to
avoid browser errors<br> <li> Seed store and transform alerts for
tests<br> <li> Use Promise.resolve in service mocks<br> <li> Directly
set component data to skip API waits<br> <li> Add extra flushPromises
and test timeouts</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8054/files#diff-d905f71e43a305b4d4212d64739bac53611207318fa96d6f146928c592849762">+81/-22</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>DomainManagement.integration.spec.ts</strong><dd><code>Speed
up integration test by reducing dataset</code>
</dd></summary>
<hr>
web/src/components/settings/DomainManagement.integration.spec.ts
<ul><li>Reduce domain loop from 100 to 30<br> <li> Adjust expected count
accordingly<br> <li> Add explicit test timeout</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8054/files#diff-7713b54be0482775009fc5bec7c2d247e75e64800b4bd1bbf22372e0fbae4ac5">+4/-4</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>DomainManagement.spec.ts</strong><dd><code>Optimize
component tests to avoid timeouts</code>
</dd></summary>
<hr>
web/src/components/settings/DomainManagement.spec.ts
<ul><li>Reduce large dataset sizes (200 to 50; 100 to 30)<br> <li>
Update expected lengths to match reductions<br> <li> Add explicit test
timeouts</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8054/files#diff-6a77be0b62c2140bb0aff6f14026a082e236c891f124d05f5be6e9fcbc81e090">+8/-8</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
1ddf812acd |
chore: add unit tests (#8061)
### **PR Type**
Tests
___
### **Description**
- Add comprehensive unit tests for quantile
- Expand tests for trend and regression
- Add exhaustive resets function tests
- Add string_to_array_v2 implementation tests
___
### Diagram Walkthrough
```mermaid
flowchart LR
promql_common_tests["Add tests: quantile, trend, regression, kahan"] -- "strengthen coverage" --> promql_common_module["promql/common.rs"]
resets_tests["Add extensive resets tests"] -- "validate edge cases" --> resets_module["promql/functions/resets.rs"]
udf_tests["Add string_to_array_v2 tests"] -- "validate parsing, args" --> udf_module["search/datafusion/udf/string_to_array_v2_udf.rs"]
```
<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>common.rs</strong><dd><code>Comprehensive statistical
utilities test suite</code>
</dd></summary>
<hr>
src/service/promql/common.rs
<ul><li>Add comprehensive tests for quantile function.<br> <li> Add
tests for calculate_trend logic and edge cases.<br> <li> Add
linear_regression tests including negatives/infinities.<br> <li> Add
kahan_sum_increment precision and usage tests.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8061/files#diff-0661c489ae1b0457aa7b182590eed83315a682f4836fff734cfcb8c1afae86bc">+160/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>resets.rs</strong><dd><code>Extensive resets exec
behavior tests</code>
</dd></summary>
<hr>
src/service/promql/functions/resets.rs
<ul><li>Add unit tests covering no, single, multiple resets.<br> <li>
Test edge cases: empty, single, negatives, NaN/Infinity.<br> <li> Add
helper to build RangeValue for tests.<br> <li> Validate counter overflow
scenarios.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8061/files#diff-96d475ef838ab215c6b259c32d7591ed5e64fb142d79d3f8647adbd57072a3eb">+143/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>string_to_array_v2_udf.rs</strong><dd><code>Broad tests
for string_to_array_v2 implementation</code>
</dd></summary>
<hr>
src/service/search/datafusion/udf/string_to_array_v2_udf.rs
<ul><li>Add tests for basic splitting and batch processing.<br> <li>
Cover edge cases: empty/null delimiter, unicode.<br> <li> Validate
multiple delimiters and empty parts handling.<br> <li> Test wrong arg
count error messaging.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8061/files#diff-1fa623e7d0c4c8485c1a16de78ad4f28e44818b66cf32553525ea189d717ba0d">+182/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
efd839f068 |
fix: traces time-range issue (#8014)
### **User description** #8015 ___ ### **PR Type** Bug fix, Enhancement ___ ### **Description** - Use microseconds to avoid precision loss - Correct trace time-range end calculation - Add ns-to-us conversion utility - Align chart math with new units ___ ### Diagram Walkthrough ```mermaid flowchart LR nsTimes["Trace times in ns"] -- "convert to us" --> usTimes["Store start/end in µs"] usTimes -- "build chart uses ms" --> chartData["Compute x0/x1 in ms"] chartData -- "fallback end uses µs diff" --> updateChart["updateChart precise range"] ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Bug fix</strong></td><td><table> <tr> <td> <details> <summary><strong>TraceDetails.vue</strong><dd><code>Use microseconds for trace bounds and fix range calc</code> </dd></summary> <hr> web/src/plugins/traces/TraceDetails.vue <ul><li>Store <code>lowestStartTime</code>/<code>highestEndTime</code> in microseconds<br> <li> Add <code>convertTimeFromNsToUs</code> helper<br> <li> Adjust chart x0/x1 calculations to mixed units safely<br> <li> Compute default <code>newEnd</code> from µs range instead of last bar</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/8014/files#diff-bc7fe6b6339ee2cde6494c0982d4b860847447e79f7431f07d598e0446df06f2">+28/-12</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
cc64d568a3 |
fix: Logs page field-list Interesting Fields improvements (#7705)
### **PR Type**
Bug fix, Enhancement
___
### **Description**
- Add toggle to show only interesting fields in quick mode
- Ensure timestamp default in interesting field list
- Implement field‐index mapping for correct ordering
- Refactor deep copies and optional chaining in schema
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Logs Page Field List"] -- "Quick mode toggle" --> B["Show Only Interesting Fields"]
B -- "Filter rows in UI" --> C["Display filtered fields"]
C -- "Update selected fields array" --> D["Adjust SQL query"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>Index.vue</strong><dd><code>Refactor schema copy and
default timestamp</code>
</dd></summary>
<hr>
web/src/plugins/logs/Index.vue
<ul><li>Use optional chaining and formatting consistency<br> <li> Deep
copy stream schema before mutation<br> <li> Push default timestamp and
all_fields_name columns<br> <li> Export new
<code>showOnlyInterestingFields</code> ref</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7705/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+22/-17</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>IndexList.vue</strong><dd><code>Add interesting fields
toggle and row filters</code>
</dd></summary>
<hr>
web/src/plugins/logs/IndexList.vue
<ul><li>Add <code>showOnlyInterestingFields</code> toggle button<br>
<li> Conditionally render rows based on interesting flag<br> <li> Insert
toggle in no-data slot for quick mode<br> <li> Update pagination and
reset icon formatting</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7705/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+183/-31</a></td>
</tr>
<tr>
<td>
<details>
<summary><strong>useLogs.ts</strong><dd><code>Support interesting fields
state and mapping</code>
</dd></summary>
<hr>
web/src/composables/useLogs.ts
<ul><li>Introduce reactive state for interesting streams<br> <li>
Populate and maintain <code>interestingFieldList</code><br> <li> Create
<code>streamSchemaFieldsIndexMapping</code> for ordering<br> <li> Deep
copy expand counts and init interesting counts</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7705/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+90/-8</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>en.json</strong><dd><code>Add translation for
interesting fields toggle</code>
</dd></summary>
<hr>
web/src/locales/languages/en.json
- Add i18n key `showOnlyInterestingFields`
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7705/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+2/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
ca99331c98 |
feat: dashboard stop unnecessary api call for config change (#7713)
### **PR Type** Enhancement, Bug fix ___ ### **Description** Add config-change detection to avoid API calls Debounce and auto-apply non-API config updates Fix metric panel field resets and builder UI Refactor panel data conversion into reusable helper ___ ### Diagram Walkthrough ```mermaid flowchart LR A["Dashboard/Logs/Metrics configs"] -- "watch changes" --> B["checkConfigChangeApiCallOrNot"] B -- "needs API" --> C["loadData() / keep state"] B -- "no API" --> D["apply local config + resize"] E["PanelSchemaRenderer"] -- "convertPanelDataCommon" --> F["panelData refresh"] ``` <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>7 files</summary><table> <tr> <td><strong>PanelSchemaRenderer.vue</strong><dd><code>Refactor data conversion and watch schema changes</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7713/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+70/-52</a> </td> </tr> <tr> <td><strong>DashboardQueryBuilder.vue</strong><dd><code>Hide X-axis controls for metric panels</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7713/files#diff-a4f9abbeaad1156ab6ba5740d59ccb869d6a9172ca1c64b89cff78f3d7783409">+3/-0</a> </td> </tr> <tr> <td><strong>Index.vue</strong><dd><code>Debounce config updates; skip API when unnecessary</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7713/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+23/-0</a> </td> </tr> <tr> <td><strong>Index.vue</strong><dd><code>Debounced config watcher with API necessity check</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7713/files#diff-a6734928ea4dcb5244e90de5a16fe6f5cafa95ccf58430ac7b548a065daf3d61">+21/-1</a> </td> </tr> <tr> <td><strong>AddPanel.vue</strong><dd><code>Outdated detection uses API-need; debounce updates</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7713/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+32/-5</a> </td> </tr> <tr> <td><strong>usePanelDataLoader.ts</strong><dd><code>Separate schema/time watchers; API-need gating</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7713/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+22/-1</a> </td> </tr> <tr> <td><strong>checkConfigChangeApiCall.ts</strong><dd><code>Add utility to detect API-required config changes</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7713/files#diff-5c85b8000a7da159a0fe523af41fa5db2cc5318b164e81a0755178f6df9e0b9d">+65/-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>useDashboardPanel.ts</strong><dd><code>Reset fields for metric type on type switch</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7713/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+43/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech> |
||
|
|
cd00d5b06c |
feat: dashboard color based on series name (#7941)
### **PR Type** Enhancement, Bug fix ___ ### **Description** - Add "Color by series" UI and schema - Apply custom series colors in charts - Emit and wire series data for config - Improve autocomplete filtering robustness ___ ### Diagram Walkthrough ```mermaid flowchart LR UI["ConfigPanel adds ColorBySeries UI"] -- "saves mappings" --> Schema["color.colorBySeries in panel schema"] Charts["PanelSchemaRenderer emits series data"] -- "series-data-update" --> Pages["Visualize/Metrics/AddPanel pages"] Pages -- "pass seriesData" --> UI Colors["applySeriesColorMappings + getSeriesColor"] -- "resolve colors" --> ECharts["ECharts series 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>13 files</summary><table> <tr> <td><strong>mod.rs</strong><dd><code>Add colorBySeries schema and struct</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-da49585bbcb02bf0f737bb68739ebc248edd15c7ad9427c0e68f7728bb4a8c17">+14/-0</a> </td> </tr> <tr> <td><strong>PanelSchemaRenderer.vue</strong><dd><code>Emit series data updates to parents</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+6/-0</a> </td> </tr> <tr> <td><strong>ColorBySeries.vue</strong><dd><code>New Color by series config entrypoint</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-2783259507b45f0b3664d9be68ca236690bbbf151472da3fa8b552d230af5b3f">+126/-0</a> </td> </tr> <tr> <td><strong>ColorBySeriesPopUp.vue</strong><dd><code>New popup to map series to colors</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-8b4dce28a203ce7e70550d6437f16e7661d5a4ecaf336de3450a8dc7fbe5e27a">+385/-0</a> </td> </tr> <tr> <td><strong>ConfigPanel.vue</strong><dd><code>Integrate ColorBySeries and accept panelData</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+5/-3</a> </td> </tr> <tr> <td><strong>VisualizeLogsQuery.vue</strong><dd><code>Wire series-data-update and pass to ConfigPanel</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+34/-7</a> </td> </tr> <tr> <td><strong>Index.vue</strong><dd><code>Capture series data and pass to ConfigPanel</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-a6734928ea4dcb5244e90de5a16fe6f5cafa95ccf58430ac7b548a065daf3d61">+11/-0</a> </td> </tr> <tr> <td><strong>AddPanel.vue</strong><dd><code>Capture panel series data for config</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+11/-1</a> </td> </tr> <tr> <td><strong>useDashboardPanel.ts</strong><dd><code>Add defaults for mappings and colorBySeries</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+2/-0</a> </td> </tr> <tr> <td><strong>colorPalette.ts</strong><dd><code>Prefer custom colorBySeries mapping</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-30ac812743f2388c4061647fac5e9f413bfe561f1fc5d4f6f7be82fce73f2840">+11/-0</a> </td> </tr> <tr> <td><strong>convertDataIntoUnitValue.ts</strong><dd><code>Add applySeriesColorMappings helper</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-14c6fe442ef231566ec411f9e0262cdd24ec912fc67b9154eec743282ab7211a">+82/-0</a> </td> </tr> <tr> <td><strong>convertPromQLData.ts</strong><dd><code>Apply mapped colors to PromQL charts</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+9/-0</a> </td> </tr> <tr> <td><strong>convertSQLData.ts</strong><dd><code>Apply mapped colors to SQL charts</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3">+13/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Formatting</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>CommonAutoComplete.vue</strong><dd><code>Fix watch comma and cleanup</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-35f59b61336a5ba3f5933f6803e8e2cc84ced59c3f0bea25f370bb2e3d21849b">+1/-2</a> </td> </tr> </table></details></td></tr><tr><td><strong>Bug fix</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>useSearchInputUsingRegex.ts</strong><dd><code>Guard nulls in option filtering</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7941/files#diff-f901991c2e465430e9b2434405852ac225ff94f5adfcfeb0ad0e80fdaadd0f4b">+6/-2</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
981e965a0e |
fix: blank chart issue on visualization page (#8040)
- #8010 ### **PR Type** Bug fix ___ ### **Description** Fix blank chart when returning to visualize Reset dashboard panel state on non-visualize paths Add safe optional chaining for schema cache Minor robustness in cached schema access ___ ### Diagram Walkthrough ```mermaid flowchart LR Load["Logs page load"] -- "Not visualize path" --> Reset["Reset dashboard panel data"] Load -- "Visualize path" --> Resize["Dispatch window resize"] Query["Build logs query"] -- "Check cache" --> CacheCheck["schemaCache with optional chaining"] CacheCheck -- "Hit" --> UseCache["Use cached extracted fields"] CacheCheck -- "Miss" --> FetchSchema["getResultSchema()"] ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Bug fix</strong></td><td><table> <tr> <td> <details> <summary><strong>Index.vue</strong><dd><code>Fix blank chart and harden schema cache access</code> </dd></summary> <hr> web/src/plugins/logs/Index.vue <ul><li>Reset dashboard panel data when not visualizing.<br> <li> Dispatch resize only when charts rendered.<br> <li> Use optional chaining on schema cache access.<br> <li> Improve robustness of cached schema retrieval.</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/8040/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+6/-2</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
65c29bf0bb |
fix: UI getting blocked when rendering roles of deleted entities (#8038)
### **PR Type**
Bug fix
___
### **Description**
Prevent null resource access in entity fetch
Preserve and gate 'org' permissions correctly
Minor formatting cleanup in template
Ensure permissions list always updated safely
___
### Diagram Walkthrough
```mermaid
flowchart LR
UI["EditRole.vue UI"] -- triggers --> getResourceEntities["getResourceEntities(resource)"]
getResourceEntities -- "guard: if !resource return" --> SafeReturn["Resolve(true)"]
setPermission["setPermission(...)"] -- "modify + checks" --> permissionsState["permissionsState.permissions"]
setPermission -- "skip non-meta org 'org' resource" --> GuardedPush["Conditional push"]
```
<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>EditRole.vue</strong><dd><code>Guard missing resources
and refine permission push</code>
</dd></summary>
<hr>
web/src/components/iam/roles/EditRole.vue
<ul><li>Add null-check guard in <code>getResourceEntities</code><br>
<li> Keep 'org' permission push with clearer formatting<br> <li> Ensure
conditional skip for non-meta org remains<br> <li> Minor template
formatting adjustment</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8038/files#diff-263b6bc7d29fdf8358c8437cd637f1350aa3733cc2706eae8ff00028686cc0f5">+11/-7</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
3457b14e34 |
fix: added additional unit test cases (#7926)
### **User description** This PR -----------------------------------------------|---------|----------|---------|---------|------------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -----------------------------------------------|---------|----------|---------|---------|------------------------- All files | 40.59 | 71.46 | 35.29 | 40.59 | ___ ### **PR Type** Tests, Enhancement ___ ### **Description** - Add comprehensive unit tests across modules - Expand AlertList tests with robust mocks - Add Quota internals exposure for testing - Improve mocks and utilities in specs ___ ### Diagram Walkthrough ```mermaid flowchart LR AlertsSpec["AlertList.spec.ts"] AddAlertSpec["AddAlert.spec.ts"] LogsSpec["logs/Index.spec.ts"] QuotaSpec["iam/quota/Quota.spec.js"] EditRoleSpec["iam/roles/EditRole.spec.js"] OrgSpec["iam/organizations/AddUpdateOrganization.spec.js"] QuotaVue["iam/quota/Quota.vue (expose internals)"] AlertsSpec -- "mock services, actions, filters" --> AlertList["AlertList.vue"] AddAlertSpec -- "mocks, payload/SQL generation" --> AddAlert["AddAlert.vue"] LogsSpec -- "UI behaviors, watchers, analytics" --> LogsIndex["Index.vue"] QuotaSpec -- "api/role limits flows" --> QuotaVue EditRoleSpec -- "permissions, JSON sync, tabs" --> EditRole["EditRole.vue"] OrgSpec -- "create org flows" --> Organizations["AddUpdateOrganization.vue"] QuotaVue -- "expose apiCategories, helpers" --> QuotaSpec ``` <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>1 files</summary><table> <tr> <td><strong>Quota.vue</strong><dd><code>Expose internal helpers for unit testing</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7926/files#diff-30293eb5cb924f95356d5abd4588ce0f03765ac9d4446cf5b8cbacba23c6f979">+6/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>6 files</summary><table> <tr> <td><strong>AlertList.spec.ts</strong><dd><code>Rewrite and expand AlertList unit tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7926/files#diff-d905f71e43a305b4d4212d64739bac53611207318fa96d6f146928c592849762">+693/-150</a></td> </tr> <tr> <td><strong>Index.spec.ts</strong><dd><code>Add broader Logs Index tests and setup</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7926/files#diff-a6ac1dd4a120625f1c0ed23803aa0cb63e8513b38abc975af72eefe3923b2c73">+266/-3</a> </td> </tr> <tr> <td><strong>AddAlert.spec.ts</strong><dd><code>Strengthen AddAlert tests and mocks</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7926/files#diff-84362398fea8abd9acf30f4f40ba8d4cf27348677454017bd4e6f568d5176ac6">+211/-9</a> </td> </tr> <tr> <td><strong>Quota.spec.js</strong><dd><code>New Quota page comprehensive tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7926/files#diff-98af0e50f753baa4aa42469587475b48d47f3119dba8aa8934f8ad1be7d06b1d">+511/-0</a> </td> </tr> <tr> <td><strong>EditRole.spec.js</strong><dd><code>New EditRole extensive permissions tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7926/files#diff-5948de10fa676a2f3054ae3b0868a00a3d63f2cd7ac02b5985457ed5ea2bf28a">+455/-0</a> </td> </tr> <tr> <td><strong>AddUpdateOrganization.spec.js</strong><dd><code>New Add/Update Organization flow tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7926/files#diff-a9e0d48be1f9ffab759135372ac67a381fc6330a2646325bf989a8f34e52ff28">+124/-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>O2AIChat.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7926/files#diff-d7a87348aec28e5ec4466134fbe23335149a36f3e15519b41e1e78897c5c2f87">+422/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
5dab735d3e |
fix: removed unused code and warnings while in dev mode / build (#8026)
### **User description** 1. removed defineProps , defineEmits as they are not required to import while using <script setup> because they are built in compiler macros 2. removed unused imports 3. added tbody around tr td inside table which was throwing an error ___ ### **PR Type** Bug fix, Enhancement ___ ### **Description** - Wrap table rows with tbody in DateTime - Remove unused Vue imports and emits - Clean up dead code and variables - Minor formatting and consistency fixes ___ ### Diagram Walkthrough ```mermaid flowchart LR A["Vue components"] -- "remove unused imports/defines" --> B["Cleaner scripts"] A -- "table rows wrapped with tbody" --> C["Valid HTML structure"] C -- "prevents runtime/warning errors" --> D["Stabler 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>Bug fix</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>DateTime.vue</strong><dd><code>Add tbody wrapper to table rows</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-c06c96ba750be6fc82f517a53ba809efff8aa619aba203b871d4d2aeb7f64f60">+78/-76</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>21 files</summary><table> <tr> <td><strong>FileItem.vue</strong><dd><code>Drop unused defineProps/defineEmits imports</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-ba91340f65190fae07746a2877b42357f3c4b10eb9969e7fc6fe393655bc8752">+1/-1</a> </td> </tr> <tr> <td><strong>AddDestination.vue</strong><dd><code>Remove unused Vue APIs and service import</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-61b295458e13049a538f5014124855d58dce664dfbd644b57a964a37a07b7a3f">+0/-4</a> </td> </tr> <tr> <td><strong>AddTemplate.vue</strong><dd><code>Trim unused Vue composition imports</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-2508a43827e6b35c07f3222deebd9945101ca6bc32b9dc592e6253ab99908bba">+0/-4</a> </td> </tr> <tr> <td><strong>AlertsContainer.vue</strong><dd><code>Simplify imports to only computed</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-39b487d54970cff4a1ccdfbb49a4ccb38f7131bb9d30944ce1c6e86d3f818148">+1/-1</a> </td> </tr> <tr> <td><strong>FieldsInput.vue</strong><dd><code>Remove unused defineProps from imports</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-a2dcba327fb56cd4cb52efb06fccc256a71fd8a551b826c6c94e71dad75524f5">+1/-1</a> </td> </tr> <tr> <td><strong>FilterCondition.vue</strong><dd><code>Drop unused defineProps import</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-53916e2402d0ee094fcd63f0ec0c99ceffde4fa042f9001203d2e2e1b7709e10">+1/-1</a> </td> </tr> <tr> <td><strong>VariablesInput.vue</strong><dd><code>Remove unused defineProps import line</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-23a647aa1acfc95bc726629f0daa54005e3da1ed5b16482ceccef0649f680a74">+0/-1</a> </td> </tr> <tr> <td><strong>AddCipherKey.vue</strong><dd><code>Remove unused defineEmits from imports</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-ff5ae3a9b070fe2b3650f177ced0d87e9449ae7375a0b117ee299238293df110">+1/-1</a> </td> </tr> <tr> <td><strong>AppTabs.vue</strong><dd><code>Remove unused defineProps from import</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-f69ae88c0f2018ea808724a0eaee5bd008fd1608c52f7ca20215fc6033f00573">+1/-1</a> </td> </tr> <tr> <td><strong>FunctionsToolbar.vue</strong><dd><code>Prune unused composition API imports</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-8283d2ff9c4a66b4b59eac306672aca2d54655a462e2ddb88e14e039d79dcdaf">+0/-4</a> </td> </tr> <tr> <td><strong>EntityPermissionTable.vue</strong><dd><code>Remove unused defineEmits/defineProps imports</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-07b373cc19e7893c8a8a29f5e6d10b8c74d15d6ad3a4d04f5c06b55d0d8de395">+1/-2</a> </td> </tr> <tr> <td><strong>PermissionsTable.vue</strong><dd><code>Remove unused defineEmits import</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-609d4d7245b7309cf30cc45c22c996c6b068ebc042a9673e75ee3bbd2aa00a2a">+0/-1</a> </td> </tr> <tr> <td><strong>AssociateFunction.vue</strong><dd><code>Remove unused emits and lifecycle imports</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-24a5b2df69327a6477227ea674939dea19dd6d393b4bfcf807089d71e6391152">+0/-2</a> </td> </tr> <tr> <td><strong>ExternalDestination.vue</strong><dd><code>Remove unused Vue/imports and reactive</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-7ed6a9ef676d7d6db5440d4157512f731bad58716c351ca39015125a8a9d2df5">+0/-3</a> </td> </tr> <tr> <td><strong>Stream.vue</strong><dd><code>Drop unused imports and services</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-1a17ced9dc89022502cab0a6f9b97b413c2a2c4f8219733d063fc0180d361739">+1/-2</a> </td> </tr> <tr> <td><strong>PipelineEditor.vue</strong><dd><code>Remove unused defineEmits import</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-68c21f647336067eb79737ce9aca2d49632f2fa1c0878bcfdae55607e3473a15">+0/-1</a> </td> </tr> <tr> <td><strong>StreamSelection.vue</strong><dd><code>Remove unused defineEmits import</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-461440be35cc15b6b78700c8a61747ea9fb601a750af5292fa2d04b6fc96d595">+1/-1</a> </td> </tr> <tr> <td><strong>TenstackTable.vue</strong><dd><code>Remove unused defineEmits import</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-bc3c669f5ab65a42ae378df1f7d6b35014c9c220790bdcc72b47f55d1385dc22">+0/-1</a> </td> </tr> <tr> <td><strong>CellActions.vue</strong><dd><code>Remove unused imports and helpers</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-de54e5b8cd9503c53f3f802ac7bc7e3d25846f1657c77cd99534d9f60673992e">+1/-2</a> </td> </tr> <tr> <td><strong>CustomNode.vue</strong><dd><code>Remove unused refs and image vars</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-b9d83cd503b6d3470b238accaaea0b4decf567add8ad4727c63c9e583725f408">+1/-5</a> </td> </tr> <tr> <td><strong>AdvancedValuesFilter.vue</strong><dd><code>Remove unused defineEmits import</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8026/files#diff-19f84276e3e0eebf0af0707cc9480e2dd7434c8e77be13456a1c0607860af3b2">+1/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
0709ca9e9d |
fix: added more unit test cases (#8025)
### **PR Type** Tests, Enhancement ___ ### **Description** - Add extensive LogStream component tests - Introduce service unit tests coverage - Improve test mocks and handlers - Fix brittle UI tests and stubs ___ ### Diagram Walkthrough ```mermaid flowchart LR LogStreamSpec["LogStream.spec.ts"] -- adds comprehensive component tests --> VueApp["Vue components"] ServiceSpecs["tickets/billings/organizations.spec.ts"] -- mock http and assert endpoints --> HTTP["HTTP layer"] UtilsSpec["convertDataIntoUnitValue.spec.ts"] -- validate formatting and conversions --> DashboardUtils["Dashboard utils"] TestInfra["handlers.ts + stubs"] -- stabilize mocks --> TestRunner["Vitest env"] UIFixes["User/AddUser/Reports specs"] -- adjust stubs and expectations --> UIComponents["UI components"] ``` <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>14 files</summary><table> <tr> <td><strong>LogStream.spec.ts</strong><dd><code>Rewrite and greatly expand LogStream tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-5d1ec597d0896fc4768515852054db8c919e048d2e8f6013bfbc4c42fa7503da">+1197/-82</a></td> </tr> <tr> <td><strong>tickets.spec.ts</strong><dd><code>Add full CRUD tests for tickets service</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-6326b5fdbd0493710b156bfb06237d5906fc493de034e872a879b9d59245d483">+565/-0</a> </td> </tr> <tr> <td><strong>billings.spec.ts</strong><dd><code>Add billing workflows and error tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-8152eb5ae97615b253cd61eedea9147bf255cf444eefea25e1a4e954ffc7ee65">+547/-0</a> </td> </tr> <tr> <td><strong>convertDataIntoUnitValue.spec.ts</strong><dd><code>Test data unit conversion and formatting utils</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-e9d8a984ed78af13e4d4424c605a3a55fe6ad2a3f7e403fad156ce17ffdc3bdd">+452/-0</a> </td> </tr> <tr> <td><strong>organizations.spec.ts</strong><dd><code>Cover organizations service endpoints and flows</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-d891fff7a737f937ff3cad0710f07a99479d7160e31928259d1aec4ebfaf367d">+519/-0</a> </td> </tr> <tr> <td><strong>AddAlert.spec.ts</strong><dd><code>Add missing composable/service mocks for alerts</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-84362398fea8abd9acf30f4f40ba8d4cf27348677454017bd4e6f568d5176ac6">+47/-0</a> </td> </tr> <tr> <td><strong>User.spec.js</strong><dd><code>Stabilize user tests and adjust stubs</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-f792c36cfff4d60265030596a1316a3fe207a1bcafc53cd0223a4873f9daf25b">+8/-20</a> </td> </tr> <tr> <td><strong>users.spec.ts</strong><dd><code>Add users service tests (CRUD, roles)</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-1e0367915c28073772fd91455c185fa522f17453fc868207b030f606fb7c0dee">+425/-0</a> </td> </tr> <tr> <td><strong>common.spec.ts</strong><dd><code>Add common utilities unit tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-37bf940c4e06c75c7443e4342a8e2896adbb8cff23fad8f7227e4cd58537e6fb">+395/-0</a> </td> </tr> <tr> <td><strong>useStreams.spec.ts</strong><dd><code>Add tests for useStreams composable pagination</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-513e2d53c46c553904a054e9c2cd12d33e800afc54fe5b4192c9782382ecd79b">+285/-0</a> </td> </tr> <tr> <td><strong>auth.spec.ts</strong><dd><code>Add authentication service tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-ff84b903292a1f76994704e04dc9a7aaf6788497f8b561b7f693f6146a93b140">+199/-0</a> </td> </tr> <tr> <td><strong>AddUser.spec.js</strong><dd><code>Update and fix AddUser tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-9f6b815996dc8497b76604e29e7495042466714655abc8b5010430959007f3d0">+62/-1</a> </td> </tr> <tr> <td><strong>ReportList.spec.js</strong><dd><code>Fix failing report list tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-c3de3f1590ac7b4401cf5570a52f0dcf6471898e4ffc7ccbc19166ba600a181f">+46/-1</a> </td> </tr> <tr> <td><strong>CreateReport.spec.js</strong><dd><code>Fix create report test failures</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-8a0f39751d08a258c4997c5e68edaf167ea01477528beee2295dd9f992310cc6">+61/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>handlers.ts</strong><dd><code>Update MSW handlers for functions and alerts</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8025/files#diff-fa72375a2848d474b311c07cf6aef7d6117b1f4d88f56a74c9207f39df72333c">+13/-3</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ |
||
|
|
3eb271620a | refactor: try move remotescan, stream aggregate, topk from rewrite to optimize rule (#7998) | ||
|
|
1d0490875b |
fix: is_multi_stream_search and enable_align_histogram (#8003)
### **User description** Fixes: - https://github.com/openobserve/openobserve/issues/7986 ### **PR Type** Enhancement, Bug fix ___ ### **Description** - Add multi-stream search histogram support - Gate histogram alignment via query flag - Remove unused search_type plumbing - Propagate multi-stream flag through services ___ ### Diagram Walkthrough ```mermaid flowchart LR HTTP["HTTP handlers"] GRPC["gRPC handlers"] Utils["HTTP query utils"] SQL["SQL utils: histogram eligibility"] Hist["SQL: histogram query builder"] Svc["Search service"] Cache["Search cache"] Stream["Streaming pipeline"] Utils -- "parse is_multi_stream_search / enable_align_histogram" --> HTTP Utils -- "parse flags" --> GRPC HTTP -- "pass flags" --> Svc GRPC -- "pass flags" --> Svc Svc -- "eligibility check (multi/unified)" --> SQL Svc -- "partitioning uses align flag" --> Svc Svc -- "search() with multi-stream flag" --> Cache Cache -- "eligibility(query, multi)" --> SQL HTTP -- "convert_to_histogram_query(..., multi)" --> Hist Stream -- "do_search(..., multi)" --> Cache Hist -- "build single/multi-stream histogram query" --> Svc ``` <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>15 files</summary><table> <tr> <td><strong>http.rs</strong><dd><code>Parse multi-stream and align histogram flags</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-3b50a69c1ec2f63f8eebb5f9880e17826463a586768aed3e3e15242833609d6b">+20/-0</a> </td> </tr> <tr> <td><strong>search.rs</strong><dd><code>Remove SearchPartitionRequest.search_type field</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+0/-3</a> </td> </tr> <tr> <td><strong>sql.rs</strong><dd><code>Add multi-stream histogram eligibility (UNION ALL)</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-a0a09c66a20d878ec7683ae222c919fbe092b8001871ade7f455b89573ce0911">+134/-38</a></td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Pass multi-stream flag into search service</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-8dcdb10340635be8bb58d45a815569026877f6fdbb3b69a773a30698b91674b0">+3/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Wire flags; histogram conversion uses multi-stream</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6">+11/-7</a> </td> </tr> <tr> <td><strong>multi_streams.rs</strong><dd><code>Partition multi: add align flag; remove search_type</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-c3233cdf1e68cb2455f91457719b9c2f477e735ee16546fdfe111e76768bd054">+10/-9</a> </td> </tr> <tr> <td><strong>search_inspector.rs</strong><dd><code>Pass multi-stream flag in search profile</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f818db4ca10b411c3559cc2a2659c49a59a45ecde0e4a22f9ef023da0bf4a009">+1/-0</a> </td> </tr> <tr> <td><strong>search_stream.rs</strong><dd><code>Stream API supports multi-stream histogram and flag</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-642de43ff6b19ae41087a9f1efc02d8b0b873809e0c92cbddfac1a30ef3f1184">+9/-3</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Propagate multi-stream flag in traces search</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-64694c886c809b6efe449e6eba9fbb33d31ce5a3c49cea1a30006fc1d9522665">+2/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Cache search considers multi-stream eligibility</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f07bfacc0501b9c234e64b16c1dd8eb0ae8fcbe231f90c81fed72bcc94946f74">+2/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Align partitions via flag; multi partition API updates</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-c3b85ea662a885fbd39797968928b291cb59a58f53a03f7b7dfd7ba8b6a7985a">+22/-12</a> </td> </tr> <tr> <td><strong>histogram.rs</strong><dd><code>Build histogram for multi-stream queries (UNION ALL)</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-a5fc4cd11b3ec569b4cedf278ef0b14f540504abfbb23e29eb896d5b2a6cc2b2">+64/-8</a> </td> </tr> <tr> <td><strong>cache.rs</strong><dd><code>Streaming cache handles multi-stream flag</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-55769b7cb67b550daf45363c6d7d569b39d4a6235f6a68c091beb40f16b6511e">+3/-0</a> </td> </tr> <tr> <td><strong>execution.rs</strong><dd><code>Execution path passes multi-stream flag to searches</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-75d432351865224f0b00d7cc819554c2ad5fa1f777e9c645d91a3fd5c1113bc0">+25/-4</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Stream request processing threads multi-stream flag</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f236c6c880ed80233fd264e657d5ab658c16c7368bdc70e20f123862b7214374">+4/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ ___ ### **PR Type** Enhancement, Bug fix ___ ### **Description** - Add multi-stream histogram query support - Align histogram via query flag - Remove search_type plumbing in partitions - Propagate multi-stream flag end-to-end ___ ### Diagram Walkthrough ```mermaid flowchart LR Http["HTTP handlers"] Grpc["gRPC handlers"] Utils["HTTP query utils"] Front["Web client"] Service["Search service"] Cache["Search cache"] SQLU["SQL utils: histogram eligibility"] Hist["Histogram query builder"] Front -- "is_multi_stream, align flag" --> Http Utils -- "parse is_multi_stream/align" --> Http Http -- "enable_align_histogram" --> Service Http -- "is_multi_stream_search" --> Cache Grpc -- "flags default false" --> Service Cache -- "eligibility(sql, multi)" --> SQLU Http -- "convert_to_histogram_query(..., multi)" --> Hist Service -- "partition(gen interval if enabled)" --> Service ``` <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>19 files</summary><table> <tr> <td><strong>http.rs</strong><dd><code>Parse multi-stream and align-histogram flags</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-3b50a69c1ec2f63f8eebb5f9880e17826463a586768aed3e3e15242833609d6b">+20/-0</a> </td> </tr> <tr> <td><strong>search.rs</strong><dd><code>Remove search_type from partition request</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+0/-4</a> </td> </tr> <tr> <td><strong>sql.rs</strong><dd><code>Histogram eligibility with multi-stream UNION ALL</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-a0a09c66a20d878ec7683ae222c919fbe092b8001871ade7f455b89573ce0911">+134/-38</a></td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Pass default multi-stream flag to service</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-8dcdb10340635be8bb58d45a815569026877f6fdbb3b69a773a30698b91674b0">+3/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Add flags to HTTP search; align histogram handling</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6">+11/-7</a> </td> </tr> <tr> <td><strong>multi_streams.rs</strong><dd><code>Partition multi endpoint supports align flag</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-c3233cdf1e68cb2455f91457719b9c2f477e735ee16546fdfe111e76768bd054">+10/-9</a> </td> </tr> <tr> <td><strong>search_inspector.rs</strong><dd><code>Forward multi-stream flag in inspector search</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f818db4ca10b411c3559cc2a2659c49a59a45ecde0e4a22f9ef023da0bf4a009">+1/-0</a> </td> </tr> <tr> <td><strong>search_stream.rs</strong><dd><code>Streaming search supports multi-stream histogram</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-642de43ff6b19ae41087a9f1efc02d8b0b873809e0c92cbddfac1a30ef3f1184">+9/-3</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Forward multi-stream flag in traces helpers</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-64694c886c809b6efe449e6eba9fbb33d31ce5a3c49cea1a30006fc1d9522665">+2/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Eligibility check aware of multi-stream</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f07bfacc0501b9c234e64b16c1dd8eb0ae8fcbe231f90c81fed72bcc94946f74">+2/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Align histogram in partition; multi aggregate</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-c3b85ea662a885fbd39797968928b291cb59a58f53a03f7b7dfd7ba8b6a7985a">+22/-12</a> </td> </tr> <tr> <td><strong>histogram.rs</strong><dd><code>Build single/multi-stream histogram SQL</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-a5fc4cd11b3ec569b4cedf278ef0b14f540504abfbb23e29eb896d5b2a6cc2b2">+64/-8</a> </td> </tr> <tr> <td><strong>cache.rs</strong><dd><code>Propagate multi-stream flag in streaming cache</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-55769b7cb67b550daf45363c6d7d569b39d4a6235f6a68c091beb40f16b6511e">+3/-0</a> </td> </tr> <tr> <td><strong>execution.rs</strong><dd><code>Pass multi flag through streaming execution</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-75d432351865224f0b00d7cc819554c2ad5fa1f777e9c645d91a3fd5c1113bc0">+25/-4</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Wire multi-stream flag across streaming path</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f236c6c880ed80233fd264e657d5ab658c16c7368bdc70e20f123862b7214374">+4/-0</a> </td> </tr> <tr> <td><strong>IndexList.vue</strong><dd><code>Use align flag in partition requests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+1/-1</a> </td> </tr> <tr> <td><strong>usePanelDataLoader.ts</strong><dd><code>Toggle align histogram for dashboards</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+3/-1</a> </td> </tr> <tr> <td><strong>useLogs.ts</strong><dd><code>Multi-stream histogram flow and params</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+3/-2</a> </td> </tr> <tr> <td><strong>search.ts</strong><dd><code>API params for is_multi_stream and align flag</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8003/files#diff-885ab872dbc6e7b20264df815e3ef4727f0abc86ce90d2fb47e4aff572814c75">+7/-5</a> </td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: Bhargav <BJP232004@GMAIL.COM> Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> Co-authored-by: omkark06 <omkar@zinclabs.io> Co-authored-by: ktx-akshay <akshay.patil@kiara.tech> |
||
|
|
3d44ec8fef |
fix: show error for threshold while user provides invalid input (#7990)
### **User description**
1. This PR fixes the issue in add alert page when user tries to provide
invalid input for threshold it was showing under the input , it should
show below the input
___
### **PR Type**
Bug fix
___
### **Description**
- Fix threshold error message positioning
- Treat empty silence input as invalid
- Standardize undefined/null checks with strict equality
- Remove absolute positioning from threshold error
___
### Diagram Walkthrough
```mermaid
flowchart LR
RT["RealTimeAlert.vue validation"] -- add '' check --> RTERR["Show 'Field is required!'"]
SA1["ScheduledAlert.vue threshold error"] -- remove absolute --> SAERR["Inline error display"]
SA2["ScheduledAlert.vue silence validation"] -- strict null/undef + '' --> SAERR2["Consistent required error"]
```
<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>RealTimeAlert.vue</strong><dd><code>Add empty-string
check to silence validation</code>
</dd></summary>
<hr>
web/src/components/alerts/RealTimeAlert.vue
<ul><li>Validate <code>silence</code> also for empty string<br> <li>
Ensure required error shows when input blank</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7990/files#diff-c3ae6b47832eb33f9ca877cc7165d079de14850e5c5d43a227102ba40326b9d8">+1/-1</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>ScheduledAlert.vue</strong><dd><code>Improve threshold
and silence error handling</code>
</dd></summary>
<hr>
web/src/components/alerts/ScheduledAlert.vue
<ul><li>Remove absolute class from threshold error<br> <li> Add null
check in silence validation<br> <li> Use strict equality for
undefined/null checks<br> <li> Keep empty-string invalid for
silence</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7990/files#diff-5e143a17ab0fa5d7817f6d9301667fb5597236f27184248c7a71728e85b8d999">+2/-2</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
748cca3ecb |
feat: visualization enhancement (#7456)
### **User description**
### Which query will be used?
- If query is empty will use histogram query
- Else query will be available:
- If query has group by clause :- will use same query
- Else will use histogram query
___
### **PR Type**
Enhancement, Tests, Bug fix
___
### **Description**
- Add server API to extract result schema
- Implement DataFusion plan visitor for projections
- Integrate visualization flow with schema and histogram
- Numerous UI fixes and UX improvements
___
### Diagram Walkthrough
```mermaid
flowchart LR
DF["DataFusion Plan Visitor (Rust)"]
API["HTTP API /result_schema (Rust)"]
FE["Logs Visualize UI (Vue)"]
Loader["Panel Data Loader (TS)"]
Cache["Histogram Handler & Cache (Rust)"]
DF -- "extract projections/group_by/timeseries" --> API
API -- "JSON ResultSchemaResponse" --> FE
FE -- "build config, set fields, decide histogram" --> Loader
Loader -- "inject searchResponse / is_ui_histogram" --> FE
Cache -- "normalize histogram()" --> DF
```
<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>projections.rs</strong><dd><code>Add DataFusion logical plan
visitor to extract schema</code> </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-7a0420d3649da44b80be36d7f1043d6ff81d88395c961266882c3c700f7edff7">+651/-0</a>
</td>
</tr>
<tr>
<td><strong>mod.rs</strong><dd><code>Add /result_schema endpoint and
wire parsing/security</code> </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6">+224/-2</a>
</td>
</tr>
<tr>
<td><strong>cacher.rs</strong><dd><code>Improve histogram() handling and
make public</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-8c387b22b2c0a282600ee41ca702b3db60f5a284d507c0feb7418608ff062c6c">+22/-11</a>
</td>
</tr>
<tr>
<td><strong>mod.rs</strong><dd><code>Export projections
module</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-70bb941c2eef1365e5ead1a59b65c5397457b9197a4e22596e18d17db7eaf922">+1/-0</a>
</td>
</tr>
<tr>
<td><strong>Index.vue</strong><dd><code>Integrate visualization with
schema API and histogram</code> </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+564/-154</a></td>
</tr>
<tr>
<td><strong>VisualizeLogsQuery.vue</strong><dd><code>Field list UX,
props for searchResponse/histogram</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+236/-174</a></td>
</tr>
<tr>
<td><strong>SearchBar.vue</strong><dd><code>Visualize toggle gating,
SQL/VRL disabled states</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+102/-52</a></td>
</tr>
<tr>
<td><strong>FieldList.vue</strong><dd><code>Readonly/visibility options
for logs visualize</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-a071c06e3e26629cb4ae4751450acc39c61fa49b07a1cc4be3711697829668d4">+13/-1</a>
</td>
</tr>
<tr>
<td><strong>TransformSelector.vue</strong><dd><code>Disable transform
controls in visualize mode</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-0037d8dd9cfbacc26309b26e98ae953e7ccbd0891ac2fd01c6314ebd7eed9d2c">+11/-4</a>
</td>
</tr>
<tr>
<td><strong>ChartSelection.vue</strong><dd><code>Allow restricting
selectable chart types</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-384ce178717731e2c85f1312f12a54b42ceabd0b86f7e2befb0e421ef568a6a3">+14/-11</a>
</td>
</tr>
<tr>
<td><strong>PanelSchemaRenderer.vue</strong><dd><code>Accept
searchResponse and is_ui_histogram props</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+13/-0</a>
</td>
</tr>
<tr>
<td><strong>usePanelDataLoader.ts</strong><dd><code>Support injected
searchResponse and ui histogram</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+30/-5</a>
</td>
</tr>
<tr>
<td><strong>visualizationUtils.ts</strong><dd><code>Add SQL alias
validator for visualization</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-c2c391afcaa0b44c33d3f4fa531a4f31f044ae036f0baa182c8c88e83de066c5">+80/-0</a>
</td>
</tr>
<tr>
<td><strong>query.ts</strong><dd><code>Extend response metadata for
visualization</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-12dd5b3bb9741bbeaa348c0efbbd745d0a582899678738159c6927d34a35191d">+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>mod.rs</strong><dd><code>Add test for compact delete value
check</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-b7e3bf7f0ac23dd084c0c817a310a4d5e7a64ff532746d182986ef940fa03fd0">+17/-0</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>2 files</summary><table>
<tr>
<td><strong>auth.rs</strong><dd><code>Allow auth bypass for
result_schema route</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-9bc2b1841504a435f66ad094f72ddbe7b7fa75e5e1557b8adbfe36f7f0592e1b">+3/-0</a>
</td>
</tr>
<tr>
<td><strong>mod.rs</strong><dd><code>Register result_schema HTTP
route</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/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>search.rs</strong><dd><code>Add ResultSchemaResponse
contract</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+7/-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>TableRenderer.vue</strong><dd><code>Render null/undefined as
empty string</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+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>sqlUtils.ts</strong><dd><code>Minor formatting
fix</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-dde40e8fcb5c37b06c011ede08922c44a3c025682fbc341aee97ba046b73a0e3">+1/-1</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>11 files</summary><table>
<tr>
<td><strong>playwright.yml</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+1/-1</a>
</td>
</tr>
<tr>
<td><strong>visualise.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-c14ac1db3e4aa86190d7525e8e38c410bcbbae7f46b01890e74937cc11be67e6">+1/-5</a>
</td>
</tr>
<tr>
<td><strong>logsPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59">+2/-2</a>
</td>
</tr>
<tr>
<td><strong>visualize.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-d144f23552ec150db375c89e52c3a53ede9ff3fa5dcd6092694fbe0a308d22ec">+225/-183</a></td>
</tr>
<tr>
<td><strong>useDashboardPanel.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+420/-6</a>
</td>
</tr>
<tr>
<td><strong>useLogs.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+151/-19</a></td>
</tr>
<tr>
<td><strong>useNotifications.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-32ff5072df9badfebc0a72c401fe337de3324f76b186a52d202eb6cc2fa71e3a">+25/-0</a>
</td>
</tr>
<tr>
<td><strong>en.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+2/-0</a>
</td>
</tr>
<tr>
<td><strong>search.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-885ab872dbc6e7b20264df815e3ef4727f0abc86ce90d2fb47e4aff572814c75">+43/-0</a>
</td>
</tr>
<tr>
<td><strong>logs.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-637857fa918f47ffb02ebfc8a35b124001ef4f65fd180c467f0f153382d2dc76">+1/-0</a>
</td>
</tr>
<tr>
<td><strong>convertDataIntoUnitValue.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-14c6fe442ef231566ec411f9e0262cdd24ec912fc67b9154eec743282ab7211a">+120/-29</a></td>
</tr>
</table></details></td></tr></tr></tbody></table>
</details>
___
---------
Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: omkark06 <omkar@zinclabs.io>
Co-authored-by: loaki07 <rustyloaki@gmail.com>
Co-authored-by: Loakesh Indiran <66478092+Loaki07@users.noreply.github.com>
Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
Co-authored-by: ktx-vaidehi <134508096+ktx-vaidehi@users.noreply.github.com>
Co-authored-by: Yashodhan Joshi <yashodhan@openobserve.ai>
|
||
|
|
a77846247d | fix: commented query with sql mode (#7975) | ||
|
|
7f34f87b22 | fix: stack trace styling in dark mode (#7838) | ||
|
|
059e2296ca | fix: minor bugs and duplicates | ||
|
|
e46f6d5b82 |
feat: custom histogram interval & aligned partitions (#7909)
- `is_ui_histogram` query param for search api, the backend will convert the sql to histogram query and respond accordingly - `search_type` for search partition query, and if search type is `ui` only then we generate partitions with mini partition that is aligned with histogram interval ### **PR Type** Enhancement, Bug fix, Tests, Documentation ___ ### **Description** - Add UI histogram query conversion and flag - Align partitions to histogram with mini - Stream empty metadata+hints consistently - Expose histogram eligibility and interval ___ ### Diagram Walkthrough ```mermaid flowchart LR FE["Web UI logs & services"] -- "is_ui_histogram, searchType" --> HTTP["HTTP search endpoints"] HTTP -- "convert to histogram SQL\n(resolve streams, eligibility)" --> SQL["Histogram SQL converter"] HTTP -- "pass search_type, flags" --> SVC["Search service"] SVC -- "is_eligible, gen interval" --> PART["PartitionGenerator"] PART -- "aligned partitions\n(+mini optional)" --> STREAM["Streaming execution"] STREAM -- "SearchResponse + metadata\n(empty hits emitted)" --> FE SVC -- "Response: histogram_interval, is_histogram_eligible, converted_query" --> FE ``` <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>16 files</summary><table> <tr> <td><strong>partition.rs</strong><dd><code>Histogram-aligned partitions with optional mini support</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-348fa23375d0cea3e5fb039cc6b381d79aa1d5121e6b9792acc048d3fd02e37c">+798/-269</a></td> </tr> <tr> <td><strong>execution.rs</strong><dd><code>Always emit responses; accumulate and metadata tweaks</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-75d432351865224f0b00d7cc819554c2ad5fa1f777e9c645d91a3fd5c1113bc0">+148/-152</a></td> </tr> <tr> <td><strong>search_stream.rs</strong><dd><code>HTTP2 stream: UI histogram conversion and interval handling</code></dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-642de43ff6b19ae41087a9f1efc02d8b0b873809e0c92cbddfac1a30ef3f1184">+149/-69</a></td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Partition API: histogram eligibility, interval, UI paths</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-c3b85ea662a885fbd39797968928b291cb59a58f53a03f7b7dfd7ba8b6a7985a">+71/-5</a> </td> </tr> <tr> <td><strong>histogram.rs</strong><dd><code>Convert original SQL to histogram-safe query</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-a5fc4cd11b3ec569b4cedf278ef0b14f540504abfbb23e29eb896d5b2a6cc2b2">+140/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>HTTP search: UI histogram conversion and response enrichment</code></dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6">+38/-3</a> </td> </tr> <tr> <td><strong>search.rs</strong><dd><code>Response/request fields for histogram meta and streaming chunks</code></dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+45/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>New error: SearchHistogramNotAvailable</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-90c725d0e77a6e7d4bcc130cf5783848a5cf0efdb304b351cd63cacf8775fc36">+7/-0</a> </td> </tr> <tr> <td><strong>multi_streams.rs</strong><dd><code>Multi-stream partition search accepts search_type</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-c3233cdf1e68cb2455f91457719b9c2f477e735ee16546fdfe111e76768bd054">+16/-4</a> </td> </tr> <tr> <td><strong>sql.rs</strong><dd><code>Detect histogram-eligible queries and subqueries</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-a0a09c66a20d878ec7683ae222c919fbe092b8001871ade7f455b89573ce0911">+27/-0</a> </td> </tr> <tr> <td><strong>http.rs</strong><dd><code>Add query flag parser for is_ui_histogram</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-3b50a69c1ec2f63f8eebb5f9880e17826463a586768aed3e3e15242833609d6b">+8/-0</a> </td> </tr> <tr> <td><strong>Index.vue</strong><dd><code>UI: histogram streaming flow, timeouts cleanup</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+45/-12</a> </td> </tr> <tr> <td><strong>IndexList.vue</strong><dd><code>Pass searchType=ui to partition API</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+1/-0</a> </td> </tr> <tr> <td><strong>search.ts</strong><dd><code>API: support is_ui_histogram, searchType plumbed</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-885ab872dbc6e7b20264df815e3ef4727f0abc86ce90d2fb47e4aff572814c75">+7/-2</a> </td> </tr> <tr> <td><strong>useStreamingSearch.ts</strong><dd><code>Include is_ui_histogram in streaming URL</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-8fce3e25a161cd458e734bd9b1f98aadefe3482da7b6529a5b1f4fa20ec115e2">+1/-0</a> </td> </tr> <tr> <td><strong>usePanelDataLoader.ts</strong><dd><code>Dashboard partition calls pass searchType</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+2/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>3 files</summary><table> <tr> <td><strong>cacher.rs</strong><dd><code>Adjust tests for new response fields</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-8c387b22b2c0a282600ee41ca702b3db60f5a284d507c0feb7418608ff062c6c">+6/-0</a> </td> </tr> <tr> <td><strong>SearchResult.spec.ts</strong><dd><code>Skip flaky resetPlotChart unit test</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-8ff7d14fc3cdac80eeec5550ecd89a77f015b4ebe928da9d4a76a9585d64d788">+1/-1</a> </td> </tr> <tr> <td><strong>useLogs.spec.ts</strong><dd><code>Skip failing query partitions test</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-842307ae8db03aa51891ddde98cfdbbabc712db1e1614c9eee99a59add395f70">+1/-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>error_utils.rs</strong><dd><code>Map histogram unavailability to 400 with code</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-d4de63bc9275a19c868f6967de0f7835bd2d7bda74ff55ce97b8fb3f9af54da9">+3/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Miscellaneous</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>mod.rs</strong><dd><code>Export histogram SQL module</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-dc0ab53d0ff551cf3cd12027c73d0da5e66680c0bf2d1830778639a33bac3464">+1/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Bug fix</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>SearchResult.vue</strong><dd><code>UI: robust empty-histogram handling and reset watcher</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-5e65533aa4754bb6d0074fda18ffc1ecacded3b9ca6bc28a161c3f6b12f20195">+17/-15</a> </td> </tr> <tr> <td><strong>SearchBar.vue</strong><dd><code>Cancel running query before applying saved view</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+2/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>query.ts</strong><dd><code>Types: histogram interval and eligibility fields</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-12dd5b3bb9741bbeaa348c0efbbd745d0a582899678738159c6927d34a35191d">+2/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>2 files</summary><table> <tr> <td><strong>fga.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-e7c99f37f3abbb5e0507d2760bbf67df010d9218704b38dce84c5477acecd22e">+0/-2</a> </td> </tr> <tr> <td><strong>useLogs.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7909/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+154/-168</a></td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> |
||
|
|
741f671902 | fix: trace log url_query #6363 (#7935) | ||
|
|
1bd1caa10a |
fix: limit, hist_alignment by factors of 24 hrs, order_by (#7895)
### **User description** Fixes: - `total` count when limit is reached for limit queries in http2 streaming - Search response to return an array of `order_by` ``` eg: [["x_axis", "asc"], ["y_axis", "asc"]] ``` - Check and validate the histogram interval provided either as a query payload or the histogram query, to generate partitions in aligned 24 hr manner to avoid duplicate. ___ ### **PR Type** Enhancement, Bug fix, Tests ___ ### **Description** - Add `order_by_metadata` to search responses - Validate histogram intervals as 24h factors - Fix total count after results truncation - Implement frontend sorting with metadata ___ ### Diagram Walkthrough ```mermaid flowchart LR SQL["SQL generation"] -- "validate hist interval" --> R["Response (order_by metadata)"] R -- "merge response" --> C["Cache module"] R -- "set result" --> H["HTTP handler"] H -- "streaming data" --> S["Streaming exec"] S -- "apply sort metadata" --> U["Frontend UI"] ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody></tr></tbody></table> </details> ___ --------- Co-authored-by: Bhargav <BJP232004@GMAIL.COM> |
||
|
|
ac71a76a2f |
fix: fix for equal and other operator used it adds unwanted space. (#… (#7911)
### **User description** …7639) https://github.com/openobserve/openobserve/issues/7640 ___ ### **PR Type** Other ___ ### **Description** - Remove unnecessary blank lines in addSpacesToOperators - Improve whitespace consistency in while loop - No functional changes made ___ <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Formatting</strong></td><td><table> <tr> <td> <details> <summary><strong>zincutils.ts</strong><dd><code>Whitespace cleanup in zincutils.ts</code> </dd></summary> <hr> web/src/utils/zincutils.ts <ul><li>Removed extraneous blank lines before and after comment blocks<br> <li> Collapsed spacing within the while loop for readability<br> <li> Preserved existing operator-spacing logic</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7911/files#diff-d3d59688cccdcc6c84ebe88b698c6910030abecc3125f4c0ef81b0df023699ba">+0/-7</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
a019caf985 |
fix: added json download feature to main (#7784)
### **PR Type**
Enhancement
___
### **Description**
- Add CSV/JSON dropdown in logs download menu
- Support JSON format and size validation
- Introduce file-type selector in custom download dialog
- Refactor CSV conversion with dynamic headers
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Download Button"] --> B["Show Download Menu"]
B -- "Select CSV/JSON" --> C["downloadLogs(data, format)"]
C --> D{"format == 'csv'?"}
D -- yes --> E["jsonToCsv → Blob(text/csv)"]
D -- no --> F["JSON.stringify → Blob(application/json)"]
E & F --> G["Create File and Trigger Download"]
```
<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>SearchBar.vue</strong><dd><code>Extend download
functionality with JSON option</code>
</dd></summary>
<hr>
web/src/plugins/logs/SearchBar.vue
<ul><li>Replace single download item with CSV/JSON menu<br> <li> Add
arrow icon and menu toggle state<br> <li> Extend downloadLogs to accept
format and validate size<br> <li> Refactor jsonToCsv for dynamic header
generation<br> <li> Add file-type button group in custom download
dialog</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7784/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+154/-10</a></td>
</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>en.json</strong><dd><code>Add download option
translations</code>
</dd></summary>
<hr>
web/src/locales/languages/en.json
<ul><li>Add translations for downloadCSV and downloadJSON<br> <li> Add
translation for fileType label</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7784/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+4/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
4da7bf82dc |
fix: added more unit test cases (#7903)
### **User description** added unit test cases 1. enrichment module 2. functions module 3. added additional test cases for indexlist 4. search history 5. search scheduler list ___ ### **PR Type** Enhancement, Tests ___ ### **Description** - Expose `handleSearchResponse` and `handleSearchReset` in `IndexList.vue` - Expose `getTimeRange` in `EnrichmentTableList.vue` - Add extensive unit tests for `IndexList` search and field flows - Extend specs for enrichment, function, scheduler, and utility tests ___ ### Diagram Walkthrough ```mermaid flowchart LR A["IndexList.vue"] -- "expose handlers" --> B["UnitTests"] C["EnrichmentTableList.vue"] -- "expose getTimeRange" --> B D["AddEnrichmentTable.vue"] -- "enhance error tests" --> B E["OtherComponents"] -- "add comprehensive specs" --> B ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody></tr></tbody></table> </details> ___ |
||
|
|
625395c122 |
fix: enrichment table issues #7815 (#7836)
### **User description** This PR fixes the issues that are there in #7815 ___ ### **PR Type** Bug fix ___ ### **Description** - Frontend restricts enrichment file uploads to CSV. - Retains add/update form on page refresh. ___ ### Diagram Walkthrough ```mermaid flowchart LR A["AddEnrichmentTable: accept .csv"] B["EnrichmentTableList: onMounted check action"] B -- "action=add" --> C["Show add form"] B -- "action=update" --> D["Show update form"] ``` <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>AddEnrichmentTable.vue</strong><dd><code>Restrict file uploader to CSV</code> </dd></summary> <hr> web/src/components/functions/AddEnrichmentTable.vue <ul><li>Added <code>accept=".csv"</code> attribute to file uploader.<br> <li> Enforces CSV-only uploads for enrichment tables.</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7836/files#diff-9aad551dbc051edfdb3994a664506ed6d5e27dcb64f9c2fa917b02e51a35d86e">+1/-0</a> </td> </tr> <tr> <td> <details> <summary><strong>EnrichmentTableList.vue</strong><dd><code>Persist add/update view on refresh</code> </dd></summary> <hr> web/src/components/functions/EnrichmentTableList.vue <ul><li>Imported <code>onMounted</code> hook from Vue.<br> <li> Added mount logic for <code>action</code> query.<br> <li> Displays add/update form on page refresh.</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7836/files#diff-6a29e253f59405d3c0f756dba36afd7483f10ad86927cbbc3348ede6372c3077">+20/-1</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
e017ec2271 |
fix: use json2csv package for conversion (#7881)
### **User description** This PR fixes the issue in #7870 ___ ### **PR Type** Bug fix ___ ### **Description** - Replace custom CSV converter with `json2csv` library - Handle commas inside fields correctly - Add error handling and user notification - Update dependencies with `json-2-csv` ___ ### Diagram Walkthrough ```mermaid flowchart LR A["downloadLogs(data)"] --> B["json2csv(data)"] B --> C["Create CSV file & download"] B -- "error" --> D["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><table> <tr> <td> <details> <summary><strong>SearchBar.vue</strong><dd><code>Use json2csv for CSV export</code> </dd></summary> <hr> web/src/plugins/logs/SearchBar.vue <ul><li>Imported <code>json2csv</code> from <code>json-2-csv</code><br> <li> Removed custom <code>jsonToCsv</code> function<br> <li> Updated <code>downloadLogs</code> to async/await using <code>json2csv</code><br> <li> Added try/catch with <code>$q.notify</code> on error</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7881/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+29/-28</a> </td> </tr> </table></td></tr><tr><td><strong>Dependencies</strong></td><td><table> <tr> <td> <details> <summary><strong>package.json</strong><dd><code>Add json-2-csv dependency</code> </dd></summary> <hr> web/package.json - Added `"json-2-csv": "^5.5.9"` dependency </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7881/files#diff-b861012a5dd72b8a9f3281b7cf09f5a779c98569d040b1bbc1db50f1b15e7cce">+1/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
5453920b9a |
fix: unit test cases for reports module (#7882)
### **User description**
This PR adds unit test cases for reports module and the coverage as of
now
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-----------------------------------------------|---------|----------|---------|---------|----------------------------------------------------------
All files | 34.41 | 70.18 | 29.47 | 34.41 |
___
### **PR Type**
Tests
___
### **Description**
- Add comprehensive CreateReport tests
- Add comprehensive ReportList tests
- Mock services and dependencies
- Validate form flows 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><table>
<tr>
<td>
<details>
<summary><strong>CreateReport.spec.js</strong><dd><code>Add CreateReport
component tests</code>
</dd></summary>
<hr>
web/src/components/reports/CreateReport.spec.js
<ul><li>Mock dashboardService and reports service<br> <li> Test
component initialization and rendering<br> <li> Test form navigation and
validation steps<br> <li> Test report creation, editing, and
cancellation</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7882/files#diff-8a0f39751d08a258c4997c5e68edaf167ea01477528beee2295dd9f992310cc6">+1793/-0</a></td>
</tr>
<tr>
<td>
<details>
<summary><strong>ReportList.spec.js</strong><dd><code>Add ReportList
component tests</code>
</dd></summary>
<hr>
web/src/components/reports/ReportList.spec.js
<ul><li>Mock reports service and router<br> <li> Test listing,
pagination, and filtering<br> <li> Test report state toggle and
deletion<br> <li> Test navigation to create and edit pages</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7882/files#diff-c3de3f1590ac7b4401cf5570a52f0dcf6471898e4ffc7ccbc19166ba600a181f">+633/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
0782ca45d8 |
fix: dashboard time conversion (#7869) (#7872)
### **User description** - #7864 ___ ### **PR Type** Bug fix ___ ### **Description** - Removed outdated timestamp converter function - Introduced inline microsecond timestamp parsing - Unified ISO string and Date handling - Formatted dates using timezone consistently ___ ### Diagram Walkthrough ```mermaid flowchart LR A["val (any)"] --> B{"16-digit micro?"} B -- yes --> C["timestamp = parseInt(val)/1000"] B -- no --> D{"string ISO?"} D -- yes --> E["timestamp = `${val}Z`"] D -- no --> F["timestamp = new Date(val).getTime()/1000"] C --> G["formatDate(toZonedTime(timestamp, timezone))"] E --> G F --> G ``` <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>convertDataIntoUnitValue.ts</strong><dd><code>Remove convert16DigitTimestamp utility</code> </dd></summary> <hr> web/src/utils/dashboard/convertDataIntoUnitValue.ts <ul><li>Removed <code>convert16DigitTimestamp</code> function<br> <li> Deleted associated JSDoc comments</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7872/files#diff-14c6fe442ef231566ec411f9e0262cdd24ec912fc67b9154eec743282ab7211a">+0/-28</a> </td> </tr> <tr> <td> <details> <summary><strong>convertTableData.ts</strong><dd><code>Inline unified timestamp conversion</code> </dd></summary> <hr> web/src/utils/dashboard/convertTableData.ts <ul><li>Dropped <code>convert16DigitTimestamp</code> import<br> <li> Added inline timestamp handling in data conversion<br> <li> Branches for microseconds, ISO strings, Date objects</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7872/files#diff-a672094c46e697ee7b7a3949a901cc1f7f88ec06cddaf67370474b508d5b0960">+42/-29</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |