mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-06 08:09:24 +00:00
d48e35fa050cfa0a8b495368d3b810ba67d3198c
517
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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>
___
|
||
|
|
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> ___ |
||
|
|
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> ___ |
||
|
|
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> |
||
|
|
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>
|
||
|
|
7f34f87b22 | fix: stack trace styling in dark mode (#7838) | ||
|
|
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> |
||
|
|
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> ___ |
||
|
|
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> ___ |
||
|
|
b41bb71779 | feat: upgrade datafusion to v49 (#7649) | ||
|
|
ccd7b56207 |
fix: implemented unit test cases for zincutils file (#7679)
### **PR Type**
Tests
___
### **Description**
- Add comprehensive unit tests for zincutils utilities
- Mock localStorage, sessionStorage, btoa/atob, console
- Cover encoding, validation, formatting utility groups
- Test auth, config, websocket, local storage, timezone
___
<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>zincutils.spec.ts</strong><dd><code>Add zincutils unit
tests</code>
</dd></summary>
<hr>
web/src/utils/zincutils.spec.ts
<ul><li>Created test suite for all <code>zincutils</code> functions<br>
<li> Added mocks for storage, <code>btoa</code>/<code>atob</code>, and
console<br> <li> Wrote tests for encoding, validation, formatting
groups<br> <li> Covered utilities: auth, websocket, config, timezone,
etc.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7679/files#diff-225d7ad1afe0a7e6f522c267bfd9ac4928cb5c23047fc6c02a287519a34aacb7">+843/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
04149abb41 | fix: o2 ai add context button as component (#7686) | ||
|
|
e13acb7e75 |
fix: add edit and delete button for favourite saved view (#7663)
### **User description** 1. add edit and delete button for saved view list 2. delete from the local storage favourite view as soon as user deletes from the list 3. fixes the issue #7436 ___ ### **PR Type** Enhancement, Bug fix ___ ### **Description** - Add edit & delete buttons for saved views. - Clean up deleted views in localStorage. - Remove deleted view from UI lists. - Use optional chaining in function reset. ___ ### Diagram Walkthrough ```mermaid flowchart LR A["User clicks delete button"] --> B["deleteSavedViews() called"] B --> C["API deletes view"] C --> D["Remove view from localStorage"] D --> E["Update favoriteViews and localSavedViews"] ``` <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>Add edit/delete buttons and storage cleanup</code> </dd></summary> <hr> web/src/plugins/logs/SearchBar.vue <ul><li>Added edit and delete buttons in saved views UI.<br> <li> Implemented button data-test attributes.<br> <li> Cleaned up deleted views from localStorage.<br> <li> Minor bug fix with optional chaining.</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7663/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+46/-1</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ |
||
|
|
e8a514fd24 |
fix: issue 7640 match_all operator getting replaced (#7653)
### **PR Type**
Bug fix, Enhancement
___
### **Description**
- Replace regex-based operator spacing with util
- Add state-based `addSpacesToOperators` function
- Update composables and component imports
- Prevent catastrophic regex backtracking
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Raw whereClause"] -- "addSpacesToOperators" --> B["Spaced whereClause"]
B -- "used in" --> C["IndexList.vue / useLogs / useQuery"]
```
<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>IndexList.vue</strong><dd><code>Replace regex spacing
with util call</code>
</dd></summary>
<hr>
web/src/plugins/logs/IndexList.vue
<ul><li>Imported <code>addSpacesToOperators</code> util<br> <li> Removed
inline regex-based spacing<br> <li> Replaced with
<code>addSpacesToOperators(whereClause)</code></ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7653/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+2/-10</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>useLogs.ts</strong><dd><code>Use util for query
operator spacing</code>
</dd></summary>
<hr>
web/src/composables/useLogs.ts
<ul><li>Added <code>addSpacesToOperators</code> import<br> <li> Removed
chained <code>.replace</code> regex calls<br> <li> Applied
<code>addSpacesToOperators</code> for whereClause</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7653/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+4/-11</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>useQuery.ts</strong><dd><code>Replace regex in useQuery
with util</code>
</dd></summary>
<hr>
web/src/composables/useQuery.ts
<ul><li>Imported <code>addSpacesToOperators</code><br> <li> Removed
manual regex replacements<br> <li> Called
<code>addSpacesToOperators(whereClause)</code></ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7653/files#diff-fe0bf52b216893c6a31f2923aab979e0d817c742b0cfd75e524e60db75b1d3e8">+4/-11</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>zincutils.ts</strong><dd><code>Implement
addSpacesToOperators utility</code>
</dd></summary>
<hr>
web/src/utils/zincutils.ts
<ul><li>Added <code>addSpacesToOperators</code> function<br> <li>
Implements state-based spacing logic<br> <li> Handles quotes,
parentheses, two-char operators<br> <li> Avoids exponential regex
backtracking</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7653/files#diff-d3d59688cccdcc6c84ebe88b698c6910030abecc3125f4c0ef81b0df023699ba">+98/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
41f330af67 |
feat: re_patterns at ingestion (#7323)
### **User description** This PR adds support for adding and applying regexp patterns at ingestion time to redact or drop the values from fields if matched. This is an ent-only feature, and this PR contains the required table migrations, along with nats code for super cluster. This also has some additions for musl build for ent repo. There are basic crud APIs for the pattersn as well as an test api which can be used to test a specific pattern on given input. ___ ### **PR Type** Enhancement ___ ### **Description** - Add HTTP CRUD and test endpoints for regex patterns - Implement DB models, migrations for patterns associations - Integrate pattern manager into ingestion and streams - Spawn watchers and super-cluster queue for patterns ___ ### **Changes diagram** ```mermaid flowchart LR HTTP["CRUD & test HTTP handlers"] DBService["Service DB layer"] DB["re_patterns & associations tables"] Cluster["Cluster Coordinator"] PatternMgr["Pattern Manager"] Ingest["Ingestion pipeline"] Stream["Stream settings update"] HTTP -- "invoke add/update/delete/test" --> DBService DBService -- "persist & notify" --> DB DBService -- "trigger" --> Cluster Cluster -- "watch events" --> PatternMgr Ingest -- "redact at ingestion" --> PatternMgr Stream -- "update associations" --> PatternMgr ``` ___ ### **Changes walkthrough** 📝 <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>mod.rs</strong><dd><code>Add HTTP handlers for re_patterns endpoints</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-27d37a8738de89c81b540daa978e684caf2cf28803e1208d90cb4d42528ed28b">+459/-0</a> </td> </tr> <tr> <td><strong>re_pattern.rs</strong><dd><code>Implement DB service for re_patterns</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-0cb2bf6d550d07b66db7e325c6d44c6a598f2ac8e315bf9e168f4a1d9d6e745d">+384/-0</a> </td> </tr> <tr> <td><strong>re_pattern_stream_map.rs</strong><dd><code>Add pattern association table ORM</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-13798240832b9110426267b3e0ebb862bd6c2ac03a3462721f5e85b5bfa88f51">+257/-0</a> </td> </tr> <tr> <td><strong>re_pattern.rs</strong><dd><code>Add re_patterns table ORM definitions</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-f113ed92667f5e352ac7a0c1c8b5e48ea858992b92be5817c9b38f65843ef4a2">+185/-0</a> </td> </tr> <tr> <td><strong>stream.rs</strong><dd><code>Integrate pattern associations in streams</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-41452a7fb29b4634437174fd6aecf6a9050dbfdef41b9077a21d59af3d79e9ed">+62/-2</a> </td> </tr> <tr> <td><strong>re_pattern.rs</strong><dd><code>Handle super-cluster queue for patterns</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-9e64341dc2d7d50cc5acffd0340b983f37b46a9aa34c86fb5a25978f9eb761dc">+166/-0</a> </td> </tr> <tr> <td><strong>ingest.rs</strong><dd><code>Redact data via pattern manager at ingestion</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-e62118e45be183266d39ffa08491f255017954235ff0f3d6937683e314da406f">+23/-0</a> </td> </tr> <tr> <td><strong>stream.rs</strong><dd><code>Add pattern associations to Stream metadata</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-6f5ee19bbcc9cc7fb699fc1c0f43fc96d42698ae1168a2827b5c65f7948d5dbc">+4/-1</a> </td> </tr> <tr> <td><strong>stream.rs</strong><dd><code>Define PatternAssociation and settings wrapper</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-2438d04c3fe97bc5452e5b74a303163b8723d93455cda32c95f0525435ad46bd">+14/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Spawn pattern manager watchers on init</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-f2e4c29b8eef22189ec704a832633c4bd135a24444f054864c98064bd0963681">+13/-3</a> </td> </tr> <tr> <td><strong>re_pattern_stream_map.rs</strong><dd><code>Define ORM entity for stream pattern map</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-3c32b9e32bea40b63ed43542aa136cc9000132c4049ed7b6310baabadc55cd79">+38/-0</a> </td> </tr> <tr> <td><strong>re_patterns.rs</strong><dd><code>Define ORM entity for re_patterns table</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-9c4ac843741290c1b999f3101fae6f46d71d1893d7740de50c71e2c29fe1636c">+33/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Register re_pattern processor in super queue</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-6ed0f1dd36b7216fffde573232a49869f247330ecb03b50f94b2ddd723742e46">+2/-0</a> </td> </tr> <tr> <td><strong>prelude.rs</strong><dd><code>Expose re_patterns entities in prelude</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-a818656b9fb01945155f28450270dd2ae20b67c8248c851ffa0f25e859d263ed">+2/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Configuration changes</strong></td><td><details><summary>5 files</summary><table> <tr> <td><strong>m20250612_000001_create_re_pattern_table.rs</strong><dd><code>Create migration for re_patterns table</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-db969ee5510136d5b3c712cdea999c151ab04efe55f1b090670c1eed2b36bcfc">+173/-0</a> </td> </tr> <tr> <td><strong>m20250612_000002_create_re_pattern_stream_map_table.rs</strong><dd><code>Create migration for association stream map table</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-f1ec25aa2150a4fc857fdb17e45b8e43e7c31e884df77e8c91fd07636a6931ca">+168/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Register new pattern migrations</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-7ee42a714d3d56c663da0412d15514613222055aebb5b50dafbc051a656a36f6">+5/-1</a> </td> </tr> <tr> <td><strong>mod.rs</strong><dd><code>Add re_patterns services to HTTP router</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+7/-1</a> </td> </tr> <tr> <td><strong>config.rs</strong><dd><code>Bump DB schema version to support patterns</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+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>auth.rs</strong><dd><code>Add auth rules for re_patterns test endpoint</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-9bc2b1841504a435f66ad094f72ddbe7b7fa75e5e1557b8adbfe36f7f0592e1b">+11/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>23 files</summary><table> <tr> <td><strong>Cross.toml</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-3abca7e5bab5b140e44643dade038033b8a6f6e50771f76c7d48e7bd0b338815">+5/-0</a> </td> </tr> <tr> <td><strong>Dockerfile.musl</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-f47eb18f838cbf757cd4e34ed5357c767b969d4551dcea6a4ab3b64d384a5614">+16/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-a1cfd40da1ab6cd4db0181fd8664965034298047b3b7c3320c5385897a7c4aed">+2/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-c539d7557d1425986d5c09849d8dbca42d1b309c2bc33d49db641d6a783098f6">+2/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-af023301203a27a1ef34f698d5a329ad7bfced65ac65e3829b1c0905a0c74fb2">+2/-0</a> </td> </tr> <tr> <td><strong>mod.rs</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-b7e3bf7f0ac23dd084c0c817a310a4d5e7a64ff532746d182986ef940fa03fd0">+2/-0</a> </td> </tr> <tr> <td><strong>O2AIChat.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-a6a125719a7b32b31b53fcfe05c12081d82c139a401699affdda0db8e73887e3">+2/-0</a> </td> </tr> <tr> <td><strong>TemplateList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-7df66364d7d69a26cfa25cbc555d0e090c2f73e51c8386d9b0435bae4412564c">+1/-1</a> </td> </tr> <tr> <td><strong>FullViewContainer.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-c0722446274c88c250042e38b051201b81450cb5da1ee827cd5a4a927424a357">+1/-6</a> </td> </tr> <tr> <td><strong>AssociatedRegexPatterns.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-c6fce5e1c83798991b6ff19effb23c67af59f38fac0b9e56dcab7a09d139f550">+940/-0</a> </td> </tr> <tr> <td><strong>schema.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+134/-4</a> </td> </tr> <tr> <td><strong>AddRegexPattern.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-a3783cfbdd32609bfff45ecfa23542854cad7ae60c3d29fedb832312a4de03dc">+689/-0</a> </td> </tr> <tr> <td><strong>ImportRegexPattern.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-e8e1bcb5a02311504d7d571090eab27a270aaa71cae185ad2703023e2e70a31e">+771/-0</a> </td> </tr> <tr> <td><strong>NoRegexPatterns.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-279b923f20042948c87e907d2453e9d5a4c8c73672b23df951d7d7d823ff3a88">+103/-0</a> </td> </tr> <tr> <td><strong>RegexPatternList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-524927acd9f5bb07b71bfac489e747470108574e21a6dde63ea7c1f219cea853">+506/-0</a> </td> </tr> <tr> <td><strong>index.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-699c63979f851c48ad440a078e93282fd797a18fc065e5331b2e41122ddb8b69">+27/-2</a> </td> </tr> <tr> <td><strong>useManagementRoutes.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-b71a1d39b1fab0749f0668d5f16382536fbda6e2f0c92c56a972fb5d8b5835f5">+12/-0</a> </td> </tr> <tr> <td><strong>useStreams.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-a083369344f022cdf8d4f536719179b1d920369e33e2e26234e70dd36d151a7c">+42/-1</a> </td> </tr> <tr> <td><strong>MainLayout.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-91e4134141264c4624d4eb4cfa987b33ed31eb6f551e089c0b26f2610dd54362">+3/-1</a> </td> </tr> <tr> <td><strong>en.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+24/-1</a> </td> </tr> <tr> <td><strong>JsonPreview.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-3985073134d35ff074742944b114d0905524038b42e6d2ac887fef2c8436fb16">+272/-3</a> </td> </tr> <tr> <td><strong>regex_pattern.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-2a0b0828141d39ab0385e0941314ead1cdd2ec3ec7b3baf5fd0c42f8f010728a">+63/-0</a> </td> </tr> <tr> <td><strong>index.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7323/files#diff-955a15c7ee060f1545e82be22911dd0c14307dee5a70071a394e9fd583bd2c55">+9/-0</a> </td> </tr> </table></details></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> --------- Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> Co-authored-by: Subhradeep Chakraborty <chakrabortysubhradeep556@gmail.com> |
||
|
|
bfdd8fd7cf |
fix: only show o2 ai btn when ai chat is enabled (#7638)
### **User description**
show o2 ai button when ai chat is enabled
___
### **PR Type**
Bug fix
___
### **Description**
- Wrap AI chat buttons with enterprise & AI enabled checks
- Import and expose `config` and `store` in affected components
- Hide O2 AI UI when AI chat is disabled or non-enterprise
___
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>TestFunction.vue</strong><dd><code>Feature-flag AI
button in TestFunction</code>
</dd></summary>
<hr>
web/src/components/functions/TestFunction.vue
<ul><li>Wrapped AI button template with v-if feature flag<br> <li>
Imported <code>config</code> from aws-exports<br> <li> Exposed
<code>config</code> and <code>store</code> in script setup</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7638/files#diff-b9af9a2d1bf04d23422c26a13e6a763c6953c8713357a2f64ed8073ce6c926a3">+5/-2</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>DetailTable.vue</strong><dd><code>Conditional AI button
in detail table</code>
</dd></summary>
<hr>
web/src/plugins/logs/DetailTable.vue
<ul><li>Added v-if on AI chat QBtn using feature flag<br> <li> Imported
<code>config</code> and exposed in component</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7638/files#diff-80552b5d25fa6cef9fbbe430b1865d761c4b132284c2d2175afceea8cbabc8c7">+4/-1</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>JsonPreview.vue</strong><dd><code>Toggle AI chat option
in JSON preview</code>
</dd></summary>
<hr>
web/src/plugins/logs/JsonPreview.vue
<ul><li>Wrapped send-to-AI list item with v-if feature flag<br> <li>
Imported <code>config</code> and added to returned refs</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7638/files#diff-3985073134d35ff074742944b114d0905524038b42e6d2ac887fef2c8436fb16">+4/-2</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>TenstackTable.vue</strong><dd><code>Conditional AI
button in data table</code>
</dd></summary>
<hr>
web/src/plugins/logs/TenstackTable.vue
<ul><li>Added v-if feature flag on timestamp column AI QBtn<br> <li>
Imported <code>config</code> and exposed <code>store</code> in
setup</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7638/files#diff-bc3c669f5ab65a42ae378df1f7d6b35014c9c220790bdcc72b47f55d1385dc22">+6/-3</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>CellActions.vue</strong><dd><code>Feature-flag AI
action in CellActions</code>
</dd></summary>
<hr>
web/src/plugins/logs/data-table/CellActions.vue
<ul><li>Wrapped AI action QBtn with v-if feature flag<br> <li> Imported
<code>config</code> to enable enterprise check</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7638/files#diff-de54e5b8cd9503c53f3f802ac7bc7e3d25846f1657c77cd99534d9f60673992e">+2/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
afafffba27 |
fix: logs page column should re-populate in table grid from localstorage (#7632)
### **PR Type**
Bug fix
___
### **Description**
- Fix log columns repopulation condition
- Check `logFilterField` object keys instead of length
- Ensure selected fields array before spreading
- Avoid undefined filter key errors
___
<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>Improve log filter field
validation</code>
</dd></summary>
<hr>
web/src/composables/useLogs.ts
<ul><li>Replace object length check with <code>Object.keys</code> <br>
<li> Add <code>Array.isArray</code> validation for filter key <br> <li>
Spread selected fields safely when defined <br> <li> Preserve backward
compatibility for streams</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7632/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+5/-7</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
|
||
|
|
88bbe9d0e2 |
fix: stream loading issue and console error (#7585)
### **PR Type** Bug fix ___ ### **Description** - Safely handle fetch errors in LogStream.vue - Always reset loading state on fetch completion - Make isStreamExists robust with checks and catch ___ ### **Changes walkthrough** 📝 <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Error handling</strong></td><td><table> <tr> <td> <details> <summary><strong>LogStream.vue</strong><dd><code>Add final cleanup and safe error handling</code> </dd></summary> <hr> web/src/views/LogStream.vue <li>Use optional chaining for response status check<br> <li> Introduce .finally to reset loading and dismiss<br> <li> Prevent missing cleanup on fetch errors </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7585/files#diff-56f4223b74568c10bc305741cc9fc3a8830184a251b4eaa6a2649033bc6200e3">+5/-1</a> </td> </tr> <tr> <td> <details> <summary><strong>useStreams.ts</strong><dd><code>Improve isStreamExists safety and robustness</code> </dd></summary> <hr> web/src/composables/useStreams.ts <li>Wrap isStreamExists in try-catch block<br> <li> Add null checks for store and mapping<br> <li> Log warning on existence check errors </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7585/files#diff-a083369344f022cdf8d4f536719179b1d920369e33e2e26234e70dd36d151a7c">+18/-4</a> </td> </tr> </table></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> |
||
|
|
b057aeb4d0 |
fix: logs page unit test improvement (#7045)
### **User description** 1. This PR improves logs page unit test cases --> searchbar.vue , searchresult.vue to ~50% ___ ### **PR Type** Tests, Enhancement ___ ### **Description** - Remove unused handlers and refactor functions in AddAlert.vue - Add comprehensive unit tests for AddAlert component - Enhance SearchBar.vue tests with mocks and new scenarios - Introduce sanitizeStreamName utility for pipeline validation ___ ### **Changes diagram** ```mermaid flowchart LR A["AddAlert.vue: refactor handlers"] -- "covered by" --> B["AddAlert.spec.ts: new tests"] C["SearchBar.vue: expose methods"] -- "covered by" --> D["SearchBar.spec.ts: new mocks/tests"] E["pipelineCommonValidation.ts"] --> F["sanitizeStreamName utility"] ``` ___ ### **Changes walkthrough** 📝 <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>5 files</summary><table> <tr> <td><strong>AddAlert.vue</strong><dd><code>Remove unused handlers and convert to arrow</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+6/-39</a> </td> </tr> <tr> <td><strong>Index.vue</strong><dd><code>Export additional composable methods</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+4/-0</a> </td> </tr> <tr> <td><strong>SearchBar.vue</strong><dd><code>Expose getColumnNames & saved view methods</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+3/-0</a> </td> </tr> <tr> <td><strong>IndexList.vue</strong><dd><code>Expose traceId and filter expression methods</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+4/-0</a> </td> </tr> <tr> <td><strong>pipelineCommonValidation.ts</strong><dd><code>Add sanitizeStreamName validation util</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-b2c4c50027aace8991d17030333e880b7d4808ab04d96e9c372d82d424235ef5">+35/-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>RealTimeAlert.vue</strong><dd><code>Add null-safe check for destinations length</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-c3ae6b47832eb33f9ca877cc7165d079de14850e5c5d43a227102ba40326b9d8">+1/-1</a> </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>4 files</summary><table> <tr> <td><strong>AddAlert.spec.ts</strong><dd><code>Comprehensive AddAlert unit tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-84362398fea8abd9acf30f4f40ba8d4cf27348677454017bd4e6f568d5176ac6">+790/-1009</a></td> </tr> <tr> <td><strong>SearchBar.spec.ts</strong><dd><code>Extensive SearchBar component tests</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-63ac75d3fe278dad233e7dd7c51b3b33076d54a776b89ae05190d8522130c78b">+1118/-134</a></td> </tr> <tr> <td><strong>Schema.spec.ts</strong><dd><code>Skip flaky Streams spec</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-27aac0c27d14c76ae7d02277822392d29777f07fb588bc4a19d93cc0379a25e6">+4/-4</a> </td> </tr> <tr> <td><strong>QueryEditor.spec.ts</strong><dd><code>Skip Search Result spec in QueryEditor</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-cb1820565e2f5b8dd976cc486cf62ab3b756b5ceb6f73d6b203407aa6e6e1721">+2/-3</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>31 files</summary><table> <tr> <td><strong>MenuLink.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-bd04ff500fc31583a430993830eed36cdf6254c2ce1a52b8a58a07b89bb9f825">+1/-1</a> </td> </tr> <tr> <td><strong>AddDestination.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-16bb4b8d1fb19699683dd8642c648f310a05e8a455ace040aa4039dd9311b9ee">+2/-2</a> </td> </tr> <tr> <td><strong>AddTemplate.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-0f7f47a0ab1b4bb8d9ffdb003c4652a7271b78f066ebbf403ef8cbdf42541bea">+2/-2</a> </td> </tr> <tr> <td><strong>AlertList.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-d905f71e43a305b4d4212d64739bac53611207318fa96d6f146928c592849762">+2/-2</a> </td> </tr> <tr> <td><strong>DestinationList.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-c2cdc606c791127e0d90241b07e1aadcab0850f2339ca26b53e9c872841a4aa7">+2/-2</a> </td> </tr> <tr> <td><strong>TemplateList.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-83d9701e7e491fb1ac667d1e1833ec58153c04ad844560778d06d50b85bd4bc6">+1/-1</a> </td> </tr> <tr> <td><strong>AddEnrichmentTable.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-06c7adfba6364f1c25ba4a57d9e5c79edd889cb3838e01b6f531a5cf8196570e">+605/-0</a> </td> </tr> <tr> <td><strong>Curl.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-755d02153c11d74b259e12605ae3ad203b01507c4f778347616ed4c1ba542024">+1/-1</a> </td> </tr> <tr> <td><strong>FluentBit.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-9bb84df5402b65026cdf6fe4ead0937f825f129538f4e7e6291492a9b9ade289">+1/-1</a> </td> </tr> <tr> <td><strong>Fluentd.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-b0d737e6ac8536493791c38acde3b0b339bae519b8ce58fb780f794bc31f62d1">+1/-1</a> </td> </tr> <tr> <td><strong>Vector.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-35a48d805d8ded5b793d07c4dbb85cfafb759d073e597758cb999ed28eaf3f31">+1/-1</a> </td> </tr> <tr> <td><strong>pipeline.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-c8ddf1b229b97972e977aa71dc123abe61e8c640b7f7e3ee699e6d9da1b1f63f">+31/-0</a> </td> </tr> <tr> <td><strong>useFunctions.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-ecd30637c6f68d772bc088d3fd1c316053e1916dc16bdae2ce1071a3ee4f53ea">+1/-0</a> </td> </tr> <tr> <td><strong>useLogs.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+118/-12</a></td> </tr> <tr> <td><strong>useStreamingSearch.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-b6851b2d9abe6a4947f0253097943d4260e9b759630ce6a8ef5ea3a7370e1d70">+523/-0</a> </td> </tr> <tr> <td><strong>useStreamingSearch.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-8fce3e25a161cd458e734bd9b1f98aadefe3482da7b6529a5b1f4fa20ec115e2">+12/-0</a> </td> </tr> <tr> <td><strong>MainLayout.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-59def4c2a6d83249918d30d825ccfb0aa4ce9616586fe13f16a7e29b3827cdbc">+2/-3</a> </td> </tr> <tr> <td><strong>DetailTable.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-7f8692ea714584ff99e8b1efbbb923bcec50f78d3f92d63034def9a36056163d">+2/-2</a> </td> </tr> <tr> <td><strong>Index.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-a6ac1dd4a120625f1c0ed23803aa0cb63e8513b38abc975af72eefe3923b2c73">+426/-116</a></td> </tr> <tr> <td><strong>IndexList.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-9d59de71d791f74c259dc20dab5d5e98d3652b583ff8d3bf0209a3ddb0ee58c9">+327/-82</a></td> </tr> <tr> <td><strong>SearchResult.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-8ff7d14fc3cdac80eeec5550ecd89a77f015b4ebe928da9d4a76a9585d64d788">+179/-141</a></td> </tr> <tr> <td><strong>useLogs.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-842307ae8db03aa51891ddde98cfdbbabc712db1e1614c9eee99a59add395f70">+996/-0</a> </td> </tr> <tr> <td><strong>store.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-0f8dff694a1fcfaa42d432168e435b7a2aa122d075fedfd6e75e532aca3b2a73">+311/-1</a> </td> </tr> <tr> <td><strong>AppAlerts.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-7ac6d93d3aa4a91d52bd751822e423a21158e09bfe70cf96fba46f42376d2acf">+2/-2</a> </td> </tr> <tr> <td><strong>Functions.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-cd35dfb12444790fc055ce49b8a0be5f54f0d33c6cb2b3062a7d70adf773a3cc">+497/-0</a> </td> </tr> <tr> <td><strong>LogStream.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-5d1ec597d0896fc4768515852054db8c919e048d2e8f6013bfbc4c42fa7503da">+2/-2</a> </td> </tr> <tr> <td><strong>Logs.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-03d017380fe8d536199dbd83ac5e49b4460f8c7b3a35ccce699256a79a6b36ed">+2/-2</a> </td> </tr> <tr> <td><strong>MemberSubscription.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-67f834a4f793aa47d86f7fe7bc75ccb023fc83e1e227558a2d4005e97dc5d74c">+411/-0</a> </td> </tr> <tr> <td><strong>AppErrors.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-60209dd4bed3181f55104f4630ace699de398c113c04398db7cc1ba358987967">+737/-0</a> </td> </tr> <tr> <td><strong>ShortUrl.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-3838b4efef178fdab0ba9652f21468b36918b3ca9b84783c564cde2a6556ed39">+1/-1</a> </td> </tr> <tr> <td><strong>User.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7045/files#diff-1c14af61b2a316a418e1c7b79ff459ea61e1d1ac1f57b7c768421aa8cdd58cd1">+1/-1</a> </td> </tr> </table></details></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> --------- Co-authored-by: Bhargav <BJP232004@GMAIL.COM> |
||
|
|
e38b9a02cf |
fix: fix histogram issue when user redirected from streams to logs an… (#7540)
### **User description** …d clicking on logs menu again ___ ### **PR Type** Bug fix ___ ### **Description** - Enable histogram refresh after streams-to-logs navigation - Preserve existing `loadLogsData()` invocation ___ ### **Changes diagram** ```mermaid flowchart LR A["Previous route 'stream_explorer'"] --> B["Set `refreshHistogram` flag"] B --> C["Invoke `loadLogsData()`"] ``` ___ ### **Changes walkthrough** 📝 <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>Enable histogram refresh flag</code> </dd></summary> <hr> web/src/plugins/logs/Index.vue <li>Add condition for <code>refreshHistogram</code> flag<br> <li> Ensure histogram refresh on logs view </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7540/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+3/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> |
||
|
|
2909d0cb98 |
fix: fixed traces scatter chart rendering (#7526)
### **PR Type** Bug fix, Enhancement ___ ### **Description** - Hide original-data toggle for traces streams - Auto redraw scatter chart on component mount - Remove redundant v-show guard on histogram - Refactor schema UI formatting and logic ___ ### **Changes diagram** ```mermaid flowchart LR A["Stream type != \"traces\"?"] -- evaluates --> B["showStoreOriginalDataToggle"] B -- true --> C["Display \"Store Original Data\" toggle"] D["SearchResult.vue onMounted"] -- triggers --> E["reDrawChart() scatter chart"] ``` ___ ### **Changes walkthrough** 📝 <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>Schema UI toggle & formatting cleanup</code> </dd></summary> <hr> web/src/components/logstream/schema.vue <li>Added <code>showStoreOriginalDataToggle</code> computed property<br> <li> Applied <code>v-if="showStoreOriginalDataToggle"</code> to toggle<br> <li> Re-indented and reformatted tabs & icon tooltip blocks<br> <li> Cleaned up watchers and trailing commas </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7526/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+88/-69</a> </td> </tr> </table></td></tr><tr><td><strong>Formatting</strong></td><td><table> <tr> <td> <details> <summary><strong>Index.vue</strong><dd><code>Clean traces index code formatting</code> </dd></summary> <hr> web/src/plugins/traces/Index.vue <li>Removed commented-out AST parser code<br> <li> Broke long ternary expressions onto multiple lines<br> <li> Reformatted query range assignment for readability </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7526/files#diff-952e26660e4d6aadd292ea2ef7b314e139a4f516d0b3931e20d42d6394700d07">+8/-14</a> </td> </tr> </table></td></tr><tr><td><strong>Bug fix</strong></td><td><table> <tr> <td> <details> <summary><strong>SearchResult.vue</strong><dd><code>Ensure scatter chart redraw</code> </dd></summary> <hr> web/src/plugins/traces/SearchResult.vue <li>Imported <code>onMounted</code> and invoked <code>reDrawChart()</code> on mount<br> <li> Removed <code>v-show="searchObj.meta.showHistogram"</code> guard<br> <li> Ensured scatter chart always redraws after mount </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7526/files#diff-7fc8153d64d38cf0945757bad8ab5e95ceae7e1c7daaeb300edbbfb484314e50">+11/-2</a> </td> </tr> </table></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> |
||
|
|
a7bb438187 |
fix: cancelled queries before switching stream in logs (#7438)
### **PR Type** Bug fix, Enhancement ___ ### **Description** - Convert cancelQuery to asynchronous promise - Await query cancellation before stream change - Add notifications on cancel success or failure - Replace old cancelOnGoingSearchQueries call ___ ### **Changes diagram** ```mermaid flowchart LR A["onStreamChange"] -- "await cancelQuery()" --> B["cancelQuery Promise"] B -- "resolve" --> C["Reset query results"] C -- "continue" --> D["Stream reloaded"] ``` ___ ### **Changes walkthrough** 📝 <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>Use cancelQuery on unmount</code> </dd></summary> <hr> web/src/plugins/logs/Index.vue <li>Replace cancelOnGoingSearchQueries with cancelQuery<br> <li> Ensure cancellation before component unmount </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7438/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+2/-1</a> </td> </tr> </table></td></tr><tr><td><strong>Enhancement</strong></td><td><table> <tr> <td> <details> <summary><strong>useLogs.ts</strong><dd><code>Refactor cancelQuery to async promise</code> </dd></summary> <hr> web/src/composables/useLogs.ts <li>Convert cancelQuery to return Promise<br> <li> Await cancelQuery in onStreamChange<br> <li> Add success/failure notifications<br> <li> Remove old traceIds after cancel </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7438/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+55/-39</a> </td> </tr> </table></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> |
||
|
|
a782941fa0 |
fix: replace function drops "$'" while applying filter in the query (#7535)
### **PR Type** Bug fix ___ ### **Description** - Use split().join() for global replacements - Comment out deprecated replace() calls - Ensure all [WHERE_CLAUSE] placeholders replaced - Apply fix in logs, traces, composables ___ ### **Changes diagram** ```mermaid flowchart LR A["Query/Context with [WHERE_CLAUSE]"] -- "split/join replacement" --> B["Final query with WHERE clause"] ``` ___ ### **Changes walkthrough** 📝 <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>IndexList.vue</strong><dd><code>Use split.join for WHERE clause replacement</code> </dd></summary> <hr> web/src/plugins/logs/IndexList.vue <li>Comment out single replace() call<br> <li> Introduce split('[WHERE_CLAUSE]').join(...)<br> <li> Preserve node quoting logic </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7535/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+5/-4</a> </td> </tr> <tr> <td> <details> <summary><strong>BasicValuesFilter.vue</strong><dd><code>Global WHERE clause replacement in filters</code> </dd></summary> <hr> web/src/plugins/traces/fields-sidebar/BasicValuesFilter.vue <li>Comment out replace() for placeholder<br> <li> Use split().join() for global replace<br> <li> Keep Base64 encoding step </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7535/files#diff-3ec23f0cdf1bbf9075cfc995045d2597f9d9adb2a64ec55be7f3b9cf9da2e9ea">+5/-4</a> </td> </tr> <tr> <td> <details> <summary><strong>useLogs.ts</strong><dd><code>Fix global WHERE clause placeholder replacement</code> </dd></summary> <hr> web/src/composables/useLogs.ts <li>Replace replace() with split().join() on SQL<br> <li> Apply same change to histogram aggs<br> <li> Comment out old replace() code </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7535/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+12/-9</a> </td> </tr> </table></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> |
||
|
|
9444447498 |
fix: Free trial rebase (#6922)
Cherry pick of https://github.com/openobserve/openobserve/pull/6807 after cloud branch was merged into main --------- Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: Bhargav <BJP232004@GMAIL.COM> Co-authored-by: Taiming Liu <liutaiming3@gmail.com> Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com> Co-authored-by: Subhra264 <chakrabortysubhradeep556@gmail.com> Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> |
||
|
|
845753984f |
fix: o2 ai addtional info main (#7520)
### **User description** This PR fixes 1. if user clicks on ai shortcut to add a log line and user removes that and again tries to add same line it should add 2. if user have filtered columns then user should get only those columns in the input ai when clicks on shortcut ___ ### **PR Type** Enhancement ___ ### **Description** - Reset AI chat input before setting context - Include timestamp and all fields for UDS schemas - Deep copy schemas to prevent mutation - Filter rows by selected columns when sending ___ ### **Changes diagram** ```mermaid flowchart LR A["User clicks AI chat"] --> B["Reset aiChatInputContext"] B --> C["nextTick callback"] C --> D["Set aiChatInputContext"] D --> E["Dispatch enable AI chat"] ``` ___ ### **Changes walkthrough** 📝 <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>AddFunction.vue</strong><dd><code>Reset aiChatInputContext to trigger watcher</code> </dd></summary> <hr> web/src/components/functions/AddFunction.vue <li>Imported <code>nextTick</code> for async updates<br> <li> Reset <code>aiChatInputContext</code> before setting<br> <li> Used <code>nextTick</code> to trigger watcher on same value </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7520/files#diff-ebfd6c538f3cd3ecb9ab17550fd76e2e89e7a1abccc83a7505077e4af3eee110">+7/-1</a> </td> </tr> <tr> <td> <details> <summary><strong>ScheduledPipeline.vue</strong><dd><code>Add UDS timestamp and all_fields to schema</code> </dd></summary> <hr> web/src/components/pipeline/NodeForm/ScheduledPipeline.vue <li>Typed <code>userDefinedFields</code> as <code>any[]</code><br> <li> Annotated <code>payload</code> as <code>any</code><br> <li> Added UDS logic: push timestamp and all_fields </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7520/files#diff-63d8f838bb880356e7804b4a57fd9223d4f2c189de7aadc7cf33cba723b29aaf">+14/-2</a> </td> </tr> <tr> <td> <details> <summary><strong>MainLayout.vue</strong><dd><code>Reset chat context for watcher trigger</code> </dd></summary> <hr> web/src/layouts/MainLayout.vue <li>Reset <code>aiChatInputContext</code> before setting<br> <li> Wrapped setting in <code>nextTick</code> callback </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7520/files#diff-91e4134141264c4624d4eb4cfa987b33ed31eb6f551e089c0b26f2610dd54362">+6/-1</a> </td> </tr> <tr> <td> <details> <summary><strong>Index.vue</strong><dd><code>Deep copy and extend UDS schema</code> </dd></summary> <hr> web/src/plugins/logs/Index.vue <li>Imported <code>deepCopy</code> utility<br> <li> Deep-copied schema to avoid mutations<br> <li> Added timestamp and all_fields only if UDS enabled </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7520/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+20/-3</a> </td> </tr> <tr> <td> <details> <summary><strong>JsonPreview.vue</strong><dd><code>Simplify sendToAiChat parameters</code> </dd></summary> <hr> web/src/plugins/logs/JsonPreview.vue <li>Simplified <code>sendToAiChat</code> signature<br> <li> Removed unused <code>key</code> argument<br> <li> Emit only <code>value</code> to parent </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7520/files#diff-3985073134d35ff074742944b114d0905524038b42e6d2ac887fef2c8436fb16">+2/-2</a> </td> </tr> <tr> <td> <details> <summary><strong>TenstackTable.vue</strong><dd><code>Filter table row before AI chat send</code> </dd></summary> <hr> web/src/plugins/logs/TenstackTable.vue <li>Enhanced <code>sendToAiChat</code> to handle full row flag<br> <li> Filtered row based on selected columns<br> <li> Added helper functions for filtering </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7520/files#diff-bc3c669f5ab65a42ae378df1f7d6b35014c9c220790bdcc72b47f55d1385dc22">+38/-3</a> </td> </tr> </table></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> |
||
|
|
5b2148b043 | fix: remove sql_mode support for FE (#7516) | ||
|
|
bc97a5658c | fix: refactored time range updation | ||
|
|
ddea6b75e9 | fix: fixed trace details tree span-width | ||
|
|
b5dde14725 |
fix: multiselect stream share URL fix (#7457)
### **PR Type** Bug fix ___ ### **Description** - Remove `type` parameter from share URL query - Fix multiselect streams share URL navigation ___ ### **Changes walkthrough** 📝 <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>Omit `type` property in shareLink query</code> </dd></summary> <hr> web/src/plugins/logs/SearchBar.vue <li>Removed <code>type</code> property from <code>queryObj</code><br> <li> Added comment explaining removal rationale </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7457/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+3/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> |
||
|
|
2f4f567304 |
fix: fix for list item not clickable outside text (#7469)
### **PR Type** Bug fix ___ ### **Description** - Expand clickable area for list items - Move include/exclude handlers to q-item - Remove redundant label click directives - Add click.stop to addFieldToTable item ___ ### **Changes walkthrough** 📝 <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>JsonPreview.vue</strong><dd><code>Expand clickable area on list items</code> </dd></summary> <hr> web/src/plugins/logs/JsonPreview.vue <li>Moved @click.stop handlers from q-item-label to q-item<br> <li> Removed redundant v-close-popup and click directives on labels<br> <li> Added @click.stop to q-item for addFieldToTable action </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7469/files#diff-3985073134d35ff074742944b114d0905524038b42e6d2ac887fef2c8436fb16">+3/-8</a> </td> </tr> </table></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> |
||
|
|
72c1968e73 |
fix: O2 ai add info (#7451)
1. This adds additional info to the o2 ai chat Add short cut at row to send the event to O2-ai On inline expand of log row , add short cut at row to send the event to O2-ai On Side panel with details of logs line , add short cut at row to send the event to O2-ai On pipelines page send selected stream context On functions creation page send the event to O2-ai |
||
|
|
471f6ee7a0 | fix: disable search around for aggregation query (#7441) | ||
|
+1 |
79498b2c3e |
fix: UI performance optimisation (#7254) (#7415)
### **User description** - Replaced Monaco Editor with CodeMirror v6 in web/src/components/CodeQueryEditor.vue for a lighter-weight implementation - Migrated stream state management from local reactive objects to centralized Vuex store modules in web/src/stores/streams.ts - Enhanced memory management in QueryEditor with proper cleanup of editor resources - Simplified page container in web/src/layouts/MainLayout.vue by removing conditional rendering and keep-alive functionality - Added error handling to deepCopy function in web/src/utils/zincutils.ts to prevent crashes from circular references --------- ___ ### **PR Type** Enhancement, Bug fix ___ ### **Description** - Refactor Quota.vue: async components, confirm dialogs - Replace SqlQueryEditor with CodeQueryEditor - Add SQL auto-complete suggestions in query editor - Reset parser and logs init in PanelSchemaRenderer ___ ### **Changes walkthrough** 📝 <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>3 files</summary><table> <tr> <td><strong>Quota.vue</strong><dd><code>Refactor and enhance Quota component</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-30293eb5cb924f95356d5abd4588ce0f03765ac9d4446cf5b8cbacba23c6f979">+1526/-1363</a></td> </tr> <tr> <td><strong>DashboardQueryEditor.vue</strong><dd><code>Replace SqlQueryEditor with CodeQueryEditor</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-68bf1b319223d103f1b99e0b681764e4eb76942399397779c81c2cd18f6485ff">+98/-84</a> </td> </tr> <tr> <td><strong>TestFunction.vue</strong><dd><code>Async load CodeQueryEditor, format JSON events</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-b9af9a2d1bf04d23422c26a13e6a763c6953c8713357a2f64ed8073ce6c926a3">+22/-12</a> </td> </tr> </table></details></td></tr><tr><td><strong>Bug fix</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>PanelSchemaRenderer.vue</strong><dd><code>Reset parser and log initialization on unmount</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+3/-0</a> </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>89 files</summary><table> <tr> <td><strong>commands.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-7ed08e69ca91e6bd5233bc45e862113207bfcac657b88d4d1e42e32605166433">+2/-2</a> </td> </tr> <tr> <td><strong>alertsPage.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-c5fc79c6d2dcc83e20d69c46fdcf69449dade50c3e7cd5bf65d88369f5083cce">+207/-0</a> </td> </tr> <tr> <td><strong>dashboardPage.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-05afd11e29f85654b337086bafd33ff6185ee44ad369f61bb8fa478821e6c472">+8/-4</a> </td> </tr> <tr> <td><strong>logsPage.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-6af0f73f0523e6fccd38532cb454dc58c4ef1fe4ef5bc5a135ef3f0ee5371ef6">+10/-15</a> </td> </tr> <tr> <td><strong>pipelinePage.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-324393930b7e946cbbd5a9babc217b50a379217ff3348eb8b76ab70817a492f0">+1/-1</a> </td> </tr> <tr> <td><strong>alerts.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-a51e6bab2ebb7ff9069a707fd7da5bb3e0948db8013765b4a934ba594c1bcf57">+224/-0</a> </td> </tr> <tr> <td><strong>alertsfolders.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-8fe0cba8c6c487d2a0cf8309769adaebddcfc1932080d4cbb4a448902d14123a">+312/-0</a> </td> </tr> <tr> <td><strong>custom-charts.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-bb0672bd78ba9a59df96a08374f5fd77f52a47792ad409921fd25457bcf0a9e2">+3/-2</a> </td> </tr> <tr> <td><strong>dashboard-import.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-4d23d07530d81a854e1e5f91ffbdcbbf5ff33eecf73a1e13819e3194b324a930">+6/-5</a> </td> </tr> <tr> <td><strong>dashboard-transpose.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-da631007cea76a4bc59e4acd1195b59ae4131cd5208d21a9c1f94d3913911dc4">+10/-7</a> </td> </tr> <tr> <td><strong>dashboard.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-d0fa0042783dc109334b05266edce228bad97adcb568dd1e447920596238e9b4">+12/-8</a> </td> </tr> <tr> <td><strong>visualization-vrl.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-4bfe28b08994ca0333edbe51bc99d3ddf05525387e90932d88681028e1947db4">+38/-11</a> </td> </tr> <tr> <td><strong>visualize.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-d144f23552ec150db375c89e52c3a53ede9ff3fa5dcd6092694fbe0a308d22ec">+6/-6</a> </td> </tr> <tr> <td><strong>enrichment.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-1c26b9ac51f49e25aa8fe1ad6ae5376da50d27be032579c4194b62e5e798a76b">+3/-3</a> </td> </tr> <tr> <td><strong>indexquery.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-0fdb3410e34d127b97b20feda5f1c5f244f23af2d2d88c331ab753a1f434d3b1">+3/-1</a> </td> </tr> <tr> <td><strong>logspage.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-950a38f6d66dbcf4f7cb39dc366ab25f533044718edee8199d7f819c5b06efe3">+17/-17</a> </td> </tr> <tr> <td><strong>logsqueries.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-aee28776157572aac692a692c53f8d5aebfe8d01d1a7addf14f3a3f92c35b3a5">+5/-7</a> </td> </tr> <tr> <td><strong>logsquickmode.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-e9af1bd193f255ad6740e261d2d9ec1d9f3290a8eabe7e99818c702ef8d67277">+1/-1</a> </td> </tr> <tr> <td><strong>multiselect-stream.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-e2eb0d6de0ad04a42b73cce92a1c86e68213fed79bd7507ea00abfe18a2633c7">+2/-2</a> </td> </tr> <tr> <td><strong>pipelines.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-9b48f5edc53f2413789549b189d4a80f134a320dd5beebf96d738069eb43033a">+17/-12</a> </td> </tr> <tr> <td><strong>remotepipeline.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-3b5a97115bd312e7490580fa00af21077ea5050915995bd133a7f5fd913e5394">+4/-8</a> </td> </tr> <tr> <td><strong>sanity.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-53b3ede269fef5199fbaea935f79134b50ba4db51edc517e4b1701f2cbcc5130">+17/-16</a> </td> </tr> <tr> <td><strong>sanity2.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-f1ab4c6d536ebc3b8ea7ff17d2954d86ef56b660dcfaa1bb39f8213a5bf92e22">+1/-3</a> </td> </tr> <tr> <td><strong>schema.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-1212ad9c33ea14a5a660923b20c162380c9d8c27ffa64993ddfc827e4d82a208">+3/-2</a> </td> </tr> <tr> <td><strong>schemaload.spec.js</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-768d758450ec41815b1330503394239673698045f5c29e46fc05d7b475c037ea">+1/-1</a> </td> </tr> <tr> <td><strong>package.json</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-b861012a5dd72b8a9f3281b7cf09f5a779c98569d040b1bbc1db50f1b15e7cce">+21/-4</a> </td> </tr> <tr> <td><strong>CodeQueryEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-52a36bf2d64e590036ed1c1f89b07a4a6b971a84e4fae9b4272cbc69d63f9bef">+1188/-0</a></td> </tr> <tr> <td><strong>CodeQueryEditorDarkTheme.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-4ee0166b549a9a7d6a91e72d546dffd2d031b0ad6015ef5f735b67742e13c66d">+230/-0</a> </td> </tr> <tr> <td><strong>CodeQueryEditorLightTheme.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-4e80117fff859d80b9dde6898e8026f2c2514c43244e48e2b639527409d38682">+246/-0</a> </td> </tr> <tr> <td><strong>QueryEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-b949ab08f913cc89fb6db9d9929dab88b1ea6d671537ed95401b721b95d1a43c">+0/-584</a> </td> </tr> <tr> <td><strong>ScriptEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-c870b03c943dcadde6f101c9bcf0032917a4a9be11fec1172ef4ba1dde3edf06">+1/-1</a> </td> </tr> <tr> <td><strong>AddAlert.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+0/-4</a> </td> </tr> <tr> <td><strong>AddTemplate.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-2508a43827e6b35c07f3222deebd9945101ca6bc32b9dc592e6253ab99908bba">+10/-2</a> </td> </tr> <tr> <td><strong>ImportAlert.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-0f40dbf2757672e39ad16b86dddc59b568ca2e6ca36850420cd7be617da12d38">+212/-154</a></td> </tr> <tr> <td><strong>ImportDestination.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-814b8ef1dbb4eebca9dfab72452d9a90d5f3fa5886dea8e82ac0bde44f66b445">+4/-3</a> </td> </tr> <tr> <td><strong>ImportTemplate.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-d22684c5142a49b8925a9dba1ef67631128caa95de66e71ba2a5b8120a0b91c6">+35/-12</a> </td> </tr> <tr> <td><strong>ScheduledAlert.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-5e143a17ab0fa5d7817f6d9301667fb5597236f27184248c7a71728e85b8d999">+3/-3</a> </td> </tr> <tr> <td><strong>QueryEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-571498e285d4dfa487f980ce085fbac19b5045b0e201ed02f6eb45a4da5fba6e">+0/-571</a> </td> </tr> <tr> <td><strong>CustomChartEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-489b6f52a8d12f28eefa2c1c1f396b61a5b17f00a5e1a51d0590e801c7cbc6ca">+7/-22</a> </td> </tr> <tr> <td><strong>CustomHTMLEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-66cb3b43f79787a9b8d99b8c1d0f2f89aacd82055ff9ddbd4a4e5c96ec6b61ca">+7/-5</a> </td> </tr> <tr> <td><strong>CustomMarkdownEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-6f1e425e1dc7a287070fbad1713679c729dc7ee61fa3b31781ed6b285ae3d279">+6/-5</a> </td> </tr> <tr> <td><strong>DrilldownPopUp.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-9fdb8c9d3953179dbd311c7e4d2250683af9b51e7706122a505c5c6a708c2a55">+1/-1</a> </td> </tr> <tr> <td><strong>MonacoHTMLEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-ceffb7bda954a9e66f97c1bf28b92ba4ce00bc650f1b24b50997f9745b3ddc5c">+0/-186</a> </td> </tr> <tr> <td><strong>MonacoMarkdownEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-387421c070b513acdb939e69b2ba73a47b990a0a10b00a937fa4dc06f984a3dc">+0/-186</a> </td> </tr> <tr> <td><strong>ViewPanel.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-e7b26fbbfe7ae57f50377c0f002155df17109ea54708b0f134dd2005356b2930">+1/-0</a> </td> </tr> <tr> <td><strong>AddFunction.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-ebfd6c538f3cd3ecb9ab17550fd76e2e89e7a1abccc83a7505077e4af3eee110">+4/-2</a> </td> </tr> <tr> <td><strong>EnrichmentTableList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-6a29e253f59405d3c0f756dba36afd7483f10ad86927cbbc3348ede6372c3077">+21/-11</a> </td> </tr> <tr> <td><strong>EditRole.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-263b6bc7d29fdf8358c8437cd637f1350aa3733cc2706eae8ff00028686cc0f5">+15/-4</a> </td> </tr> <tr> <td><strong>SearchBar.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-2024fb4414454d05e6335ebbd54b067cf0af41bbc184d6652452d492a64cba31">+4/-4</a> </td> </tr> <tr> <td><strong>schema.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+7/-3</a> </td> </tr> <tr> <td><strong>ImportPipeline.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-d57fa41169daa44551a181f21ca33882004b29ab74e3040e4c56a8c849078670">+1429/-1168</a></td> </tr> <tr> <td><strong>ScheduledPipeline.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-63d8f838bb880356e7804b4a57fd9223d4f2c189de7aadc7cf33cba723b29aaf">+1/-1</a> </td> </tr> <tr> <td><strong>ReportList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-f7d700f7e67fbaba3c58ab5d2c614925db743101828214445ce9dae35dc29067">+44/-34</a> </td> </tr> <tr> <td><strong>SearchBar.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-d20c6ba53e6a9adfe67b2f83fe76357fb541b2764dd40cb16627599e0c80e63f">+13/-3</a> </td> </tr> <tr> <td><strong>VideoPlayer.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-5cb7c9f5d73672eaaabf9214cfeb949f533772e87780829664fac444e3c6fa35">+8/-7</a> </td> </tr> <tr> <td><strong>router.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-a1827956e5a817edc7efb5f4516e7cc4d453e15ea9e9d970aafb8360b09fc78e">+3/-3</a> </td> </tr> <tr> <td><strong>useDashboardPanel.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+5/-1</a> </td> </tr> <tr> <td><strong>useLogs.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+150/-66</a></td> </tr> <tr> <td><strong>usePromqlSuggestions.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-250bf4b2d8cb3845005f72188d73ab954359f841e15c4f217708beac1493e83a">+9/-13</a> </td> </tr> <tr> <td><strong>useQuery.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-fe0bf52b216893c6a31f2923aab979e0d817c742b0cfd75e524e60db75b1d3e8">+5/-1</a> </td> </tr> <tr> <td><strong>useStreamingSearch.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-8fce3e25a161cd458e734bd9b1f98aadefe3482da7b6529a5b1f4fa20ec115e2">+34/-4</a> </td> </tr> <tr> <td><strong>useStreams.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-a083369344f022cdf8d4f536719179b1d920369e33e2e26234e70dd36d151a7c">+194/-97</a></td> </tr> <tr> <td><strong>useSuggestions.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-6d2ecd5b90970ea8c8f5d35c5928a2cf8bf0ed14af700db0202759158bfbbf9d">+142/-133</a></td> </tr> <tr> <td><strong>MainLayout.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-91e4134141264c4624d4eb4cfa987b33ed31eb6f551e089c0b26f2610dd54362">+6/-33</a> </td> </tr> <tr> <td><strong>main.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-37b29c5a3b76595194070205d9a0cdedcd717bf7c4367022d1e2667395962f2e">+1/-2</a> </td> </tr> <tr> <td><strong>Index.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+122/-75</a></td> </tr> <tr> <td><strong>IndexList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+25/-29</a> </td> </tr> <tr> <td><strong>JsonPreview.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-3985073134d35ff074742944b114d0905524038b42e6d2ac887fef2c8436fb16">+74/-71</a> </td> </tr> <tr> <td><strong>QueryEditor.spec.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-cb1820565e2f5b8dd976cc486cf62ab3b756b5ceb6f73d6b203407aa6e6e1721">+1/-1</a> </td> </tr> <tr> <td><strong>SearchBar.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+85/-57</a> </td> </tr> <tr> <td><strong>SearchHistory.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-9dd167bd5e272b2057f53c16b905047eec00655a3552daad240a964d67a6f56d">+609/-581</a></td> </tr> <tr> <td><strong>SearchSchedulersList.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-0c0a4097c53f07712d35562b1336602bf24faddedab77a9f5717f5582dcac2f1">+125/-114</a></td> </tr> <tr> <td><strong>TenstackTable.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-bc3c669f5ab65a42ae378df1f7d6b35014c9c220790bdcc72b47f55d1385dc22">+29/-16</a> </td> </tr> <tr> <td><strong>SearchBar.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-43405981dab6359bdfba1ef176d74d3c557fc349f98cf6b1662fd4a021448eb1">+3/-3</a> </td> </tr> <tr> <td><strong>TraceBlock.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-3ee60afe01a0ce46d117de0e158e14d24134d8a8b5c4496b3eb79ab0015e67a7">+5/-1</a> </td> </tr> <tr> <td><strong>index.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-955a15c7ee060f1545e82be22911dd0c14307dee5a70071a394e9fd583bd2c55">+6/-1</a> </td> </tr> <tr> <td><strong>logs.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-ad599dbc6a05f72f09340ca9417380cdb279110e7feae6ced910a5dad6408918">+38/-0</a> </td> </tr> <tr> <td><strong>streams.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-440c093277fd2be53228c096ef3a408c393754f10ae8ab275e6b0fe5eb063ad7">+105/-0</a> </td> </tr> <tr> <td><strong>commons.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-17cb74f8142984fc46bbfecdeaacccc118fd5d4ab7f040a55695caaa309d104f">+2/-0</a> </td> </tr> <tr> <td><strong>convertPromQLData.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+2/-0</a> </td> </tr> <tr> <td><strong>vrlLanguage.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-d8baadeb1ccdabd0e424d3f335476417990ae5f680645db52ba03a94b75afd7a">+147/-0</a> </td> </tr> <tr> <td><strong>zincutils.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-d3d59688cccdcc6c84ebe88b698c6910030abecc3125f4c0ef81b0df023699ba">+11/-3</a> </td> </tr> <tr> <td><strong>DashboardJsonEditor.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-e3852754d3a888bea3d2ceb9433111d178119e3d86c82e103695ee1ffd3efbfa">+1/-1</a> </td> </tr> <tr> <td><strong>ImportDashboard.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-660ac197e10735b4f08fc4b5a39744187d16c14156ced00eefde09dbaec323f0">+1/-1</a> </td> </tr> <tr> <td><strong>LogStream.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-56f4223b74568c10bc305741cc9fc3a8830184a251b4eaa6a2649033bc6200e3">+71/-32</a> </td> </tr> <tr> <td><strong>AppErrors.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-edad7593714ebb348007aa179f10555b5185d45c9f5f80efee772d407a20b3d0">+4/-4</a> </td> </tr> <tr> <td><strong>AppSessions.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-08359708ae507d81dcdc60e3c05ba4f56a40f4a61718074cd6019bf2ceb87575">+7/-7</a> </td> </tr> <tr> <td><strong>StreamExplorer.vue</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-2c90a38c4ff744a3824c1b112ac4522a7d55912b03aef6f280a5f338fe51e20a">+2/-2</a> </td> </tr> <tr> <td><strong>vite.config.ts</strong></td> <td><a href="https://github.com/openobserve/openobserve/pull/7415/files#diff-9430906049744cbbfe5d0b382b2466843a42cfebf755ff86fec850b0712258ef">+24/-25</a> </td> </tr> </table></details></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> --------- Co-authored-by: Omkar Kesarkhane <127078473+omkarK06@users.noreply.github.com> Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech> Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> Co-authored-by: Kirtan Thakkar <kirtan@kiara.tech> Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech> Co-authored-by: ShyamOOAI <shyam@openobserve.ai> Co-authored-by: ktx-akshay <akshay.patil@kiara.tech> Co-authored-by: omkark06 <omkar@zinclabs.io> Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
2bcae056ac |
fix: redirect short url (#7026) (#7033)
with this POC we will let FE handle all short url redirections. We keep the old routes intact for backwards compatibility --------- --------- Co-authored-by: omkark06 <omkar@zinclabs.io> |
||
|
|
2db1d49fc3 |
fix: log page download count issue , service account description field added (#6892)
1. This PR fixes the log page download count mismatch issue so when user tries to get 1 to 100 records we are actually sending from as 1 which is incorrect because BE expects from 0 so modified we now send -1 from user input eg: user enters 1 we send it as 0 , user sends 50 send 49 this will make sure that actual records are being downloaded 2. This PR also fixes the service account issue so we dont need first name and last name for the service account so we removed that and added description in place of that , removed them in the service account list as well | #6887 #6837 |
||
|
|
3441d5455f |
feat: Support to pass context in O2 AI (#6978)
Support to pass context in O2 AI from logs, dashboard (add_panel) pages |
||
|
|
0fb48ae80b | fix: Logs UI Issues (#6796) | ||
|
|
666dfcdb62 |
fix: Updated UI unit test setup (#6520)
Co-authored-by: Sai Nikhil <nikhil@openobserve.ai> |
||
|
|
f499a9a9b8 |
fix: Added label for duration field in traces (#6939)
Duration field was getting added to query as `duration (us)`. Added label key in field object for displaying label |
||
|
|
44f435028e |
fix: if gRPC can't start we should stop the app (#6925)
- [x] fix: if gRPC can't start we should stop the app #6874 - [x] feat: remove match_all_raw #6935 - [x] feat: node list API will return by router |
||
|
|
31703cc9d2 |
feat: o2 AI Agent (#6899)
this PR introduces o2 ai agent with this user able to ask o2 ai about sql query , vrl query and logs --------- Co-authored-by: Subhradeep Chakraborty <chakrabortysubhradeep556@gmail.com> Co-authored-by: Taiming Liu <liutaiming3@gmail.com> |
||
|
+2 |
0d9f47966b |
feat: Organization revamp (#5579)
Fixes #5131 Addresses #5408 ### Revamp - Created a new table to store organizations in the `organizations` table. Earlier, we never stored organizations in any table, rather we used to store the organizations in the meta table as part of the `user` json. - The users and organization membership relations are now moved to its own separate tables - `users` and `org_users`. ### New changes **API changes** - - `/organizations` - `POST` api to create an org and save it in the meta table. In non-enterprise version, currently only the root user can create the org. For enterprise version with rbac enabled, anyone with `CREATE` access for organizations can create the organization and becomes an admin. Root user can always create an organization. - `/{org_id}/rename` - `PUT` api to rename the existing org. Only root user and the admins of the org can access this API. The payload for following APIs are changed - - `POST api/{org_id}/roles` - `{"name":"new_role"}` is changed to `{"role":"new_role"} - `POST api/{org_id}/users/{user}` - `{"role":"viewer","custom_role":["role_name"]}` is the new payload where `custom_role` is optional and is array of custom roles (only works in enterprise with rbac enabled) which will be assigned to the user. The value of `role` can be standard role or as well as any custom role (when it is custom role, the standard role assigned to the user is decided based on the enterprise env variable - `O2_DEX_DEFAULT_ROLE`). - `POST api/{org_id}/users`- the payload - ``` {"email":"user@user.com","role":"viewer","custom_role":["create_org_permission"],"password":"12345678", "first_name": "", "last_name":""} ``` - `PUT api//{org_id}/users/{email_id}` the payload - ``` {"first_name":"Hello","last_name":"j","role":"viewer","isExternal":false,"change_password":false,"password":"","custom_role":["create_org_permission"]} ``` A new ENV variable is introduced - `ZO_CREATE_ORG_THROUGH_INGESTION` (default `false`) which if true, an org will automatically created when ingesting data to a new org. If false, user can not create org by ingesting data to new org, they need to first call the `POST /organizations` API. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes **New Features** - Added a `cloud` feature for enhanced organizational management capabilities. - Introduced new methods for managing organizational users and asynchronous message processing. - Enhanced user invitation and membership features, including improved role handling. - Implemented configurable ingestion URL support across various components. - Added new functionality for user management and organization handling in the super cluster architecture. **Improvements** - Refined user authentication and authorization processes, including error handling. - Updated database schema to support multi-organization architecture. - Enhanced pagination settings and UI components for better user experience. - Improved handling of organization names and user roles in notifications and alerts. - Streamlined service account token management with visibility enhancements. - Enhanced the `AddUpdateOrganization` component with improved user input handling and validation. - Updated the `AppOrganizations` component to dynamically load the appropriate organization management interface. - Improved the `ServiceAccountsList` component with updated pagination options and token handling logic. **Bug Fixes** - Resolved issues with user role assignments and organization management inconsistencies. - Corrected routing and navigation logic for login and logout processes. - Addressed various error handling scenarios in user and organization processes. - Fixed issues with the visibility of service account options in the `EditGroup` and `EditRole` components based on the cloud configuration. **Breaking Changes** - Significant restructuring of user and organization data models. - Changes to authentication workflows and configuration handling. - Removal of certain components related to user and organization management. - Updated the logic for determining the ingestion URL across various components. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: Bhargav <BJP232004@GMAIL.COM> Co-authored-by: Taiming Liu <liutaiming3@gmail.com> Co-authored-by: hengfei yang <hengfei.yang@gmail.com> Co-authored-by: harshiv-7 <harshiv@openobserve.ai> Co-authored-by: Huaijin <haohuaijin@gmail.com> Co-authored-by: Zhao.wei <weizhao029@gmail.com> Co-authored-by: ShyamOOAI <shyam@openobserve.ai> Co-authored-by: oasisk <ashish.j.kolhe@gmail.com> Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> Co-authored-by: Yashodhan Joshi <yashodhan@openobserve.ai> Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com> |