Commit Graph
978 Commits
Author SHA1 Message Date
Sai Nikhil 980949392a fix: alert module code splitting (#8611)
### **User description**
add alert module splitting into util files


___

### **PR Type**
Enhancement, Tests


___

### **Description**
- Extract alert logic into utils modules

- Refactor AddAlert to use utilities

- Add SQL/where/query builder helpers

- Update tests to new utilities


___

### Diagram Walkthrough


```mermaid
flowchart LR
  AddAlertVue["AddAlert.vue (component)"] -- uses --> alertQueryBuilder["utils/alerts/alertQueryBuilder.ts"]
  AddAlertVue -- uses --> alertPayload["utils/alerts/alertPayload.ts"]
  AddAlertVue -- uses --> alertValidation["utils/alerts/alertValidation.ts"]
  AddAlertVue -- uses --> alertDataTransforms["utils/alerts/alertDataTransforms.ts"]
  AddAlertVue -- uses --> alertSqlUtils["utils/alerts/alertSqlUtils.ts"]
  AddAlertSpec["AddAlert.spec.ts"] -- import --> alertQueryBuilder
  validateAlertsSpec["utils/validateAlerts.spec.ts"] -- import --> alertValidation
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>AddAlert.spec.ts</strong><dd><code>Tests use extracted
generateWhereClause utility</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-84362398fea8abd9acf30f4f40ba8d4cf27348677454017bd4e6f568d5176ac6">+13/-9</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>validateAlerts.spec.ts</strong><dd><code>Point validation
tests to new module path</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-8ba923d1b6e78fb3134f2775e51fce66e5171bcfb001fcac4837639313c55b4a">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>7
files</summary><table>
<tr>
<td><strong>alertDataTransforms.ts</strong><dd><code>New FE/BE condition
transform and group ops</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-7db039e3a78f8c5306c84382f42b071f680cf4f18f84d17cedcc8d484a8b113f">+116/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>alertPayload.ts</strong><dd><code>New payload build and save
alert helpers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-914546afcdb9f9604ad6efe448d8b373fa3f24be1ba7cbc75bd18bf8c419ab3c">+211/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>alertQueryBuilder.ts</strong><dd><code>New SQL and WHERE
clause builder utilities</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-5c829ce5fd3ad2f5ef359df5976e6adfc52eaa6b5f249f594c8b8a588acf8b3e">+204/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>alertSqlUtils.ts</strong><dd><code>New SQL parser wrapper
for column checks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-fea836214c2a77154fb97a519b6fa4bd0315acbffb9b3d7d94738bf073d5eabd">+33/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>alertValidation.ts</strong><dd><code>Consolidated alert
validation and JSON save flow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-3164a4a58c1865cfcbbba084ac339664c99564545be4d57504dd406d59d8ad4a">+649/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AddAlert.vue</strong><dd><code>Refactor to use new alert
utils modules</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+110/-681</a></td>

</tr>

<tr>
<td><strong>ScheduledAlert.vue</strong><dd><code>UI tweaks and cleanup
of unused logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-5e143a17ab0fa5d7817f6d9301667fb5597236f27184248c7a71728e85b8d999">+22/-165</a></td>

</tr>

</table></details></td></tr><tr><td><strong>Miscellaneous</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>validateAlerts.ts</strong><dd><code>Remove legacy validation
(replaced by utils)</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8611/files#diff-31dfccb7ecf243d062992787997f3e29b26579144def6a562e7f138cf3a73ed6">+0/-313</a>&nbsp;
</td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-24 13:48:05 +05:30
ktx-vaidehi 3dde03ec9f fix: update quick_mode parameter handling in logs URL based on configuration for drilldown and go to logs in dashboard (#8586)
### **PR Type**
Bug fix


___

### **Description**
- Respect `quick_mode_enabled` in logs URL

- Apply to drilldown and go-to-logs flows

- Minor watch formatting cleanup


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Config["zoConfig.quick_mode_enabled"]
  Builder1["PanelContainer: build logs URL"]
  Builder2["PanelSchemaRenderer: build logs URL"]
  URLParam["Set quick_mode=true/false"]
  Format["Refactor watch() formatting"]

  Config -- controls --> Builder1
  Config -- controls --> Builder2
  Builder1 -- sets --> URLParam
  Builder2 -- sets --> URLParam
  PanelSchemaRenderer --> Format
```



<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>PanelContainer.vue</strong><dd><code>Conditional
quick_mode in logs URL construction</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelContainer.vue

<ul><li>Set <code>quick_mode</code> based on
<code>zoConfig.quick_mode_enabled</code>.<br> <li> Remove unconditional
<code>quick_mode=false</code>.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8586/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d">+5/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>PanelSchemaRenderer.vue</strong><dd><code>Apply
config-driven quick_mode and tidy watchers</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelSchemaRenderer.vue

<ul><li>Set <code>quick_mode</code> based on
<code>zoConfig.quick_mode_enabled</code>.<br> <li> Keep histogram
hidden; preserve other params.<br> <li> Reformat watch() for
readability.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8586/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+12/-5</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-23 18:04:47 +05:30
Sai Nikhil 4fa43fdff7 fix: stream detail page (schema) layout changed (#8585)
### **User description**
1. This PR introduces a new tab called configuration where we moved all
the configuration settings to that tab
2. This PR introduces a compact table so that more columns are visible
and also all the stream stats above will stay at viewport always


___

### **PR Type**
Enhancement


___

### **Description**
- Redesigned schema page layout and header

- Added Configuration tab for settings

- New compact stats tiles and sticky table

- Added distinct values toggle and UX polish


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Header["Header: title + name + timeline"] -- "context" --> Tabs["Tabs: Schema Settings / Configuration / Extended Retention"]
  Tabs -- "schema fields" --> SchemaTbl["Schema table: compact, sticky header, mini-select"]
  Tabs -- "settings" --> Config["Configuration panel: retention, max range, flatten, toggles"]
  Tabs -- "retention" --> ExtRet["Extended Retention: date selection + table"]
  Stats["Stats tiles: Events, Storage, Compressed, Index"] -- "overview" --> Header
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>schema.vue</strong><dd><code>Schema page UI/UX overhaul
with new configuration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/logstream/schema.vue

<ul><li>Revamped header with stream name badge and timeline.<br> <li>
Added stats tiles grid and compact layout.<br> <li> Introduced
'Configuration' tab with inputs and toggles.<br> <li> Improved schema
table: sticky header, mini-select, tooltips, <br>pagination.<br> <li>
Added 'Enable Distinct Values' setting wired to backend.<br> <li>
Updated date formatting and preserved original timestamps.<br> <li>
Adjusted per-page options and floating footer behavior.<br> <li> Added
new icons and theme-aware styling; extensive CSS updates.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8585/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+1068/-604</a></td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-23 15:00:23 +05:30
ktx-vaidehiandAbhay Padamani 37675d5320 fix: remove drilldown and compare against config on visualization rc7(#8534) (#8562)
### **PR Type**
Bug fix


___

### **Description**
- Disable drilldown on Logs page

- Guard chart compare against Logs context

- Expose page key to template


___

### Diagram Walkthrough


```mermaid
flowchart LR
  ConfigPanel["ConfigPanel.vue"]
  DrilldownGuard["Add 'pageKey !== logs' guard"]
  CompareGuard["Guard compare UI for logs"]
  ExposeKey["Return dashboardPanelDataPageKey from setup()"]

  ConfigPanel -- "update Drilldown v-if" --> DrilldownGuard
  ConfigPanel -- "update compare v-if" --> CompareGuard
  ConfigPanel -- "export key to template" --> ExposeKey
```



<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>ConfigPanel.vue</strong><dd><code>Disable
drilldown/compare when page key is logs</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/addPanel/ConfigPanel.vue

<ul><li>Add <code>dashboardPanelDataPageKey !== 'logs'</code> to
Drilldown v-if.<br> <li> Add same guard to compare/series options v-if
with <code>!promqlMode</code>.<br> <li> Return
<code>dashboardPanelDataPageKey</code> from setup exports.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8562/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+5/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
2025-09-22 12:41:53 +05:30
Abhay Padamani b2535e2fa0 fix: series list issue for color override config on pie chart (#8540)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Correct series extraction for pie/donut

- Fallback to existing options logic

- Prevent invalid items via filtering


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["panelType check"] -- "pie/donut" --> B["extract from data[].name"]
  A -- "other types" --> C["use existing options"]
  B -- "build series list" --> D["return { series: names }"]
  C -- "fallback" --> E["return options or empty series"]
```



<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>ColorBySeries.vue</strong><dd><code>Properly derive
series for pie/donut charts</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/dashboards/addPanel/ColorBySeries.vue

<ul><li>Add panel type detection for pie/donut.<br> <li> Extract series
names from data[].name.<br> <li> Filter out invalid data items.<br> <li>
Preserve fallback to existing options.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8540/files#diff-2783259507b45f0b3664d9be68ca236690bbbf151472da3fa8b552d230af5b3f">+16/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-19 16:15:20 +05:30
Sai Nikhil 6e49099b5f fix: sql query editor rapidly increases (#8435)
### **User description**
This PR fixes the issue in #8433


___

### **PR Type**
Bug fix


___

### **Description**
- Prevent SQL editor height growth

- Set minimum height to 18rem

- Compute height via inline style binding

- Adjust for error message presence


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Alert Form UI"] -- contains --> Editor["SQL Query Editor"]
  ErrorState["SQL Error State"] -- toggles --> EditorHeight["Dynamic Height Style"]
  Editor -- renders with --> EditorHeight
```



<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>ScheduledAlert.vue</strong><dd><code>Stabilize SQL
editor height with dynamic styles</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/alerts/ScheduledAlert.vue

<ul><li>Remove class-based height toggling.<br> <li> Add inline dynamic
height style based on error state.<br> <li> Increase minimum editor
height to 18rem.<br> <li> Use calc values: 100%-150px or 100%-80px.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8435/files#diff-5e143a17ab0fa5d7817f6d9301667fb5597236f27184248c7a71728e85b8d999">+4/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-18 17:50:22 +05:30
6e75dc0e62 feat: add bulk enable/disable for alert and pipelines (#8438)
### **User description**
This adds two apis, one for bulk enable/disable of pipeline and one for
bulk enable/disable of alerts.


___

### **PR Type**
Enhancement


___

### **Description**
- Add bulk enable/disable for alerts

- Add bulk enable/disable for pipelines

- Introduce enterprise permission checks helper

- Update auth bypass for bulk endpoints


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["New models: Bulk request/response (alerts, pipelines)"]
  B["Alerts: POST /v2/{org_id}/alerts/bulk/enable"]
  C["Pipelines: POST /{org_id}/pipelines/bulk/enable"]
  D["Enterprise permission check: check_resource_permissions"]
  E["Router: register bulk endpoints"]
  F["Auth: bypass for /bulk/enable paths"]

  A -- "used by" --> B
  A -- "used by" --> C
  D -- "enforced in" --> B
  D -- "enforced in" --> C
  E -- "exposes" --> B
  E -- "exposes" --> C
  F -- "allows unauth extraction for" --> B
  F -- "allows unauth extraction for" --> C
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>auth.rs</strong><dd><code>Allow auth extractor bypass for
bulk enable endpoints</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-9bc2b1841504a435f66ad094f72ddbe7b7fa75e5e1557b8adbfe36f7f0592e1b">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>responses.rs</strong><dd><code>Add alerts bulk enable
request/response models</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-224027f90893122eea28e35778467acf1a4b5572ce612fc9bc9ec44ca8ebd9fb">+12/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>pipelines.rs</strong><dd><code>Add pipelines bulk enable
request/response models</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-61bb28d7091130297c917a0530d96202fcb4b073b514410531f9fe71acfc814f">+12/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Implement alerts bulk enable
endpoint with permissions</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-83431801d27626ef27482e67b62661f900043544a45ddf958bd027cf2fa3bd8d">+91/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>pipeline.rs</strong><dd><code>Implement pipelines bulk
enable endpoint with permissions</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-c69f4f94eee97ce226caddc497b2adf89e26869f2d72b0d0206dc31ab2714daf">+89/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>utils.rs</strong><dd><code>Add generic enterprise resource
permission checker</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-96bb9f4a8f547c821f26c957e8505d0437095b08d2b36687531f71565d287bd6">+38/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Register bulk enable endpoints in
service routes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>openapi.rs</strong><dd><code>Expose bulk enable endpoints in
OpenAPI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8438/files#diff-edb8ce232c0cd08366879f642788a75d99f6bab64b4c0e77391281fdb9241e90">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</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>
2025-09-18 12:12:16 +05:30
Sai Nikhil 913c41c04e fix: general management UI in sync (#8443) 2025-09-16 14:56:00 +08:00
Sai Nikhil 7f3ee74085 fix: o2 ui improvements latest (#8391) 2025-09-16 10:32:51 +08:00
ktx-akshayandktx-vaidehi 5fc1944621 test: add camelCase tests for dashboard (#8423)
### **PR Type**
Tests, Bug fix


___

### **Description**
- Add camelCase custom SQL UI tests

- Fix table data validation logic

- Validate line and table chart rendering


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Dashboard UI tests"] -- "add camelCase SQL cases" --> Tests["Playwright specs"]
  Renderer["PanelSchemaRenderer table check"] -- "fix grouping logic" --> Validation["Accurate data validation"]
  Tests -- "verify table & line charts" --> Charts["Rendered charts without no-data"]
```



<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>PanelSchemaRenderer.vue</strong><dd><code>Fix table
data validation logical grouping</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelSchemaRenderer.vue

<ul><li>Correct parentheses in table branch<br> <li> Ensure x/y alias
checks grouped logically</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8423/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>dashboard.spec.js</strong><dd><code>Add camelCase
custom SQL UI tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/dashboards/dashboard.spec.js

<ul><li>Add test for camelCase in table SQL<br> <li> Add test for
camelCase in line SQL<br> <li> Assert data presence and chart
rendering<br> <li> Cleanup dashboards after tests</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8423/files#diff-d0fa0042783dc109334b05266edce228bad97adcb568dd1e447920596238e9b4">+136/-0</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
2025-09-15 19:23:42 +05:30
ktx-vaidehi c68cbcb8da fix: update table chart no data validation logic (#8422)
### **PR Type**
Bug fix


___

### **Description**
- Fix table chart no-data validation

- Separate table logic from other charts

- Ensure presence check on x/y aliases

- Prevent false negatives with single row


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Renderer["PanelSchemaRenderer.vue"]
  Charts["Non-table charts validation"]
  Table["Table-specific validation"]
  Metric["Metric validation (unchanged)"]

  Renderer -- "refine validation" --> Charts
  Renderer -- "add distinct logic" --> Table
  Renderer -- "keep existing flow" --> Metric
```



<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>PanelSchemaRenderer.vue</strong><dd><code>Refine table
chart data validation logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelSchemaRenderer.vue

<ul><li>Remove table from generic chart validation branch.<br> <li> Add
table-specific data presence checks.<br> <li> Allow single-row tables
with any x/y value.<br> <li> Keep gauge and others using stricter alias
checks.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8422/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+10/-2</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-15 13:01:49 +05:30
Abhay Padamani 6479cb8f5a fix: axisvalue issue on go to logs page drilldown #8404 (#8405)
### **PR Type**
Bug fix


___

### **Description**
- Add `__axisValue` to drilldown payload

- Fallback to name when value missing

- Improve logs page drilldown accuracy


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Drilldown event params"] --> B["Extract value/name"]
  B --> C["Set __axisValue from value[0]"]
  B --> D["Fallback to name if missing"]
  C --> E["Build drilldown payload"]
  D --> E
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>PanelSchemaRenderer.vue</strong><dd><code>Add robust
axis value to drilldown data</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PanelSchemaRenderer.vue

<ul><li>Add <code>__axisValue</code> to the drilldown data object.<br>
<li> Use first element of <code>value</code> array when available.<br>
<li> Fallback to <code>name</code> when <code>value[0]</code> is
absent.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8405/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-12 23:13:30 +05:30
ab156bad8d fix: changed code-mirror to monaco-editor (#8047)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Replace CodeMirror with Monaco editor

- Add Monaco autocomplete and markers

- Update build to bundle Monaco

- Remove re-render key from logs UI


___

### Diagram Walkthrough


```mermaid
flowchart LR
  CM["CodeMirror-based editor"] -- Replaced by --> ME["Monaco editor integration"]
  ME -- Autocomplete/Markers --> UX["Improved editor UX"]
  Build["Vite config"] -- Add monaco plugin/chunks --> Bundle["Optimized bundles"]
  UI["Logs and SearchBar"] -- Minor fixes/cleanup --> Stability["Reduced re-renders"]
```



<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>3
files</summary><table>
<tr>
<td><strong>CodeQueryEditor.vue</strong><dd><code>Replace CodeMirror
with Monaco, add features</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8047/files#diff-52a36bf2d64e590036ed1c1f89b07a4a6b971a84e4fae9b4272cbc69d63f9bef">+369/-980</a></td>

</tr>

<tr>
<td><strong>Index.vue</strong><dd><code>Cleanups, visualization flow,
formatting tweaks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8047/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+105/-78</a></td>

</tr>

<tr>
<td><strong>SearchBar.vue</strong><dd><code>Editor placeholder, menus,
toggle guards</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8047/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+148/-82</a></td>

</tr>

</table></details></td></tr><tr><td><strong>Dependencies</strong></td><td><details><summary>3
files</summary><table>
<tr>
<td><strong>CodeQueryEditorDarkTheme.ts</strong><dd><code>Remove legacy
CodeMirror dark theme</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8047/files#diff-4ee0166b549a9a7d6a91e72d546dffd2d031b0ad6015ef5f735b67742e13c66d">+0/-230</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>CodeQueryEditorLightTheme.ts</strong><dd><code>Remove legacy
CodeMirror light theme</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8047/files#diff-4e80117fff859d80b9dde6898e8026f2c2514c43244e48e2b639527409d38682">+0/-246</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>package.json</strong><dd><code>Remove CodeMirror deps; add
Monaco and plugin</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8047/files#diff-b861012a5dd72b8a9f3281b7cf09f5a779c98569d040b1bbc1db50f1b15e7cce">+2/-16</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>vite.config.ts</strong><dd><code>Integrate Monaco plugin and
chunking</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8047/files#diff-9430906049744cbbfe5d0b382b2466843a42cfebf755ff86fec850b0712258ef">+25/-15</a>&nbsp;
</td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
2025-09-12 16:50:35 +05:30
Shrinath Raoandsai nikhil kethe 9bdcc8d3f8 fix: removed the check for show add destination button (#8402)
### **PR Type**
Bug fix


___

### **Description**
- Enable Add Destination button always

- Remove templates-length disable condition


___

### Diagram Walkthrough


```mermaid
flowchart LR
  BTN["Add Destination Button"] -- remove disable binding --> ENABLED["Always enabled"]
```



<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>PipelinesDestinationList.vue</strong><dd><code>Remove
conditional disable on Add button</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/alerts/PipelinesDestinationList.vue

<ul><li>Removed <code>:disable="!templates.length"</code> from Add
button.<br> <li> Button now clickable regardless of templates
array.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8402/files#diff-088c66f5a34e73a5350a794a772e5d905262277337c937dd36f4295072203ebf">+0/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2025-09-12 12:11:23 +05:30
Sai Nikhil 7bf9770b9a fix: sorting issue in query management page (#8305)
### **User description**
This PR fixes the issue that is related to sorting doesn't work properly
for more number of records for execution duration and query range


___

### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Centralize duration utilities in `zincutils`

- Fix sorting by using raw seconds

- Render durations via table slots

- Improve query range formatting


___

### Diagram Walkthrough


```mermaid
flowchart LR
  utils["zincutils.ts: add time helpers"] -- "import/use" --> runningList["RunningQueriesList.vue: slot-based render"]
  utils -- "import/use" --> summaryList["SummaryList.vue: slot-based render"]
  runningQueries["RunningQueries.vue: data shaping"] -- "use raw values" --> tables["Tables sort correctly"]
```



<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>zincutils.ts</strong><dd><code>Add shared time/duration
utilities</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/utils/zincutils.ts

<ul><li>Add <code>localTimeToMicroseconds</code> helper.<br> <li> Add
<code>getDuration</code> returning seconds and formatted.<br> <li>
Export these utilities for reuse.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8305/files#diff-d3d59688cccdcc6c84ebe88b698c6910030abecc3125f4c0ef81b0df023699ba">+23/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>RunningQueriesList.vue</strong><dd><code>Render
durations via slots using utils</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/queries/RunningQueriesList.vue

<ul><li>Add table slots to format <code>duration</code> and
<code>queryRange</code>.<br> <li> Import and expose
<code>getDuration</code> and <code>durationFormatter</code>.<br> <li>
Display duration from <code>created_at</code> via util.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8305/files#diff-eb568491630bd1b80935cc0b02498d40274ede0e5be78593a0b49ca17fbbe627">+13/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>SummaryList.vue</strong><dd><code>Format summary
durations with table slots</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/components/queries/SummaryList.vue

<ul><li>Add slots to format <code>duration</code> and
<code>queryRange</code>.<br> <li> Import and expose
<code>durationFormatter</code>.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8305/files#diff-d844d0a406c5fe3b58bc254f838bfa51352721174666ebd43bbf008aa6db6f5f">+12/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>RunningQueries.vue</strong><dd><code>Use raw values and
shared duration util</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/queries/RunningQueries.vue

<ul><li>Import <code>getDuration</code> from utils.<br> <li> Keep
<code>duration</code> and <code>queryRange</code> as raw values.<br>
<li> Remove local <code>getDuration</code> impl.<br> <li> Adjust
pagination code formatting.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8305/files#diff-6f0e18626a986d934c08c368ac383179c56bfcd914a27619ba748f43629c926b">+6/-14</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-11 23:02:12 +05:30
52e11d3ee7 fix: o2 UI table improvements (#8033)
### **User description**
This PR improves the following 
`Fix: checkboxes as per design for alert list


Fix: general setting, platform settings modified as per design

Fix: numeric input in general settings as per design

Fix: introduced all variables according to design

Fix: secondary button, primary button, tabs, search input added

Fix: another major change related to tabs, sticky header and footer
table

Fix: light mode q-toggle redesign done for both lg and small

Fix: pipeline list as per new design

Fix: added removed padding at the child level for pipeline editor

Fix: function list table as per design changed

Fix: made filtering rows based upon filter query this is done to avoid
the issue of the table showing some height when the filter is applied
and there are no results

Fix: enrichment table list updated with latest design

Fix: added border to the last row when having less rows when filter is
applied or not applied

Fix: function list bottom header to take functions

Fix: function list header as per design

Fix: stream list table as per design

Fix: report list table as per new design

Fix: users list table changed as per design

Fix: added filter check for height so to avoid the issue of the table
showing some height when the filter is applied and there are no results

Fix: service account list table changed as per design

Fix: organization list table updated as per design

Fix: user groups as per design with app table additional props

Fix: app roles tables list updated as per design

Fix: made group roles virtual scroll to false

Fix: group users, roles, service accounts tables as per new design
system

Fix: search icon in IAM tables as per design

Fix: search history table update as per new design

Fix: search scheduler list table updated as per design

Fix: space between app tabs and search in log stream page

Fix: pagination logic modified due to pagination component introduced

Fix: aggregation to streaming aggregation label change in management
page

Fix: change sub text for streaming aggregation in management page

Fix: q-toggle for dark mode

Fix: report list added additional checks

Fix: alert destination table as per design

Fix: destination list, template list tables updated as per design

Fix: cipher keys table as per design

Fix: regex pattern list updated as per design

Fix: search input placeholder text fixed

Fix: per page options consistent with streams page

Fix: import and pipeline editor buttons changed as per design

Fix: added primary and secondary buttons in all listing pages

Fix: increased pipeline editor height

Fix: add stream in pipeline should not have more space in x direction

Fix: secondary, primary, and delete buttons modified in pipeline nodes

Fix: IAM add pages in sync

Fix: introduce toggle button in the entire application

Fix: alert folder list made sticky top title and search input

Fix: import alert primary and secondary button changed

Fix: action scripts table modified as per design

Fix: add action script file changed

Fix: add enrichment table submit and cancel at start

Fix: add stream submit and cancel buttons at start

Fix: create report changed as per new design

Fix: real user monitoring get started button

Fix: data source page reset rum token, reset token to primary button

Fix: add destination button position changed

Fix: add cipher key UI modified according to add report

Fix: organization settings toggle changed

Fix: home view layout spacing fixed

Fix: remove negative bg for delete button`


___

### **PR Type**
Enhancement


___

### **Description**
- Adopt new design system across tables

- Introduce uniform sticky headers/footers

- Replace filters with tabs and styled inputs

- Improve pagination, per-page options


___

### Diagram Walkthrough


```mermaid
flowchart LR
  design["New design tokens/components"]
  tables["Tables (Lists across app)"]
  headers["Sticky headers/footers"]
  filters["Tabs + styled search"]
  pagination["Unified pagination options"]
  ux["Consistent UX across themes"]

  design -- applied to --> tables
  tables -- enable --> headers
  tables -- replace --> filters
  tables -- standardize --> pagination
  tables -- results in --> ux
```



<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>LogStream.vue</strong><dd><code>Header redesign, tabs,
sticky table, pagination</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-56f4223b74568c10bc305741cc9fc3a8830184a251b4eaa6a2649033bc6200e3">+82/-95</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AlertList.vue</strong><dd><code>Header styling,
search/toggle redesign, sticky table</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-be3e41b823e163b226ffc270d95cc4981e59c600851e4e0d10ee5e4ee994ac8e">+59/-62</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ActionScipts.vue</strong><dd><code>Styled header/search,
computed filtering, sticky table</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-6cfeff0b8dbbaba52b13ba67d6f4f8fdc3c58996eccdfae2ad0db2e7aee20f08">+71/-65</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>User.vue</strong><dd><code>New header/search, client
filtering, footer pagination</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-e973c2a665f9b27b94673ba64cc5b23650300836a727a2e07673c8e26305aee5">+63/-53</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>HomeView.vue</strong><dd><code>Card layout spacing and
grouping tweaks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-9af441af191d3254ef5f9db603dca75486de7638cda41a3c050e7b3c33d68280">+110/-109</a></td>

</tr>

<tr>
<td><strong>ServiceAccountsList.vue</strong><dd><code>New header/search,
client filter, sticky table/footer</code>&nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-3afe835bcfbec3fda2e9550850c29581092ee0717e7dd8de8888e774a0048d24">+63/-59</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>General.vue</strong><dd><code>Platform settings UX revamp
with GroupHeader</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-a191d0eb2843df5efa7f18d411a216e86558b49f7b6cdfa9501d69414b933fc3">+144/-63</a></td>

</tr>

<tr>
<td><strong>PipelinesList.vue</strong><dd><code>Header/tabs/search
restyle, sticky table, export button</code>&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-85e3ef322f3eea0fc6d74d89431ba338a1153cb82ee06bef0f7c5f439c04267d">+52/-31</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>EnrichmentTableList.vue</strong><dd><code>Header/search
restyle, client filtering, sticky table</code>&nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-6a29e253f59405d3c0f756dba36afd7483f10ad86927cbbc3348ede6372c3077">+45/-38</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>TemplateList.vue</strong><dd><code>Header/search/buttons
restyle, sticky table/footer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-7df66364d7d69a26cfa25cbc555d0e090c2f73e51c8386d9b0435bae4412564c">+43/-43</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>FunctionList.vue</strong><dd><code>Header/search restyle,
client filtering, sticky table</code>&nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-6ff9af50a1597504b7f0dca91e61cf30c800b4a17b4be2ed2c3a4f7a7b2d7068">+49/-39</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ReportList.vue</strong><dd><code>Header/tabs/search restyle,
sticky table/footer, filters</code>&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-f7d700f7e67fbaba3c58ab5d2c614925db743101828214445ce9dae35dc29067">+38/-32</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ExternalDestination.vue</strong><dd><code>Form controls
restyle, large toggles, delete node dialog</code>&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-7ed6a9ef676d7d6db5440d4157512f731bad58716c351ca39015125a8a9d2df5">+74/-15</a>&nbsp;
</td>

</tr>

<tr>

<td><strong>AlertsDestinationList.vue</strong><dd><code>Header/search/buttons
restyle, sticky table/footer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-e9d05ba6c071c0e2f5d9ef7acdef757f79910abd6897b29e27b069a10d4ba8de">+43/-41</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>GroupHeader.vue</strong><dd><code>New shared section header
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-63133a31279f4f8d5631b5d33f5b12927f9dc6616b714e8c0ffc727696abbc2b">+64/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>_variables.scss</strong><dd><code>Introduce/adjust design
tokens and variables</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-b3e37ee00c17b89ad1177c5592504277aa645b374095c065ea8b3782df5e89a2">+289/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>RegexPatternList.vue</strong><dd><code>Apply unified
table/header/search styles</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-524927acd9f5bb07b71bfac489e747470108574e21a6dde63ea7c1f219cea853">+62/-56</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>CipherKeys.vue</strong><dd><code>Apply unified
table/header/search styles</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-950b715cff2c964d8542512692030c370733b57d698abf40e1dcb3cce2cfaf7a">+45/-45</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>PipelinesDestinationList.vue</strong><dd><code>Apply unified
table/header/search styles</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-088c66f5a34e73a5350a794a772e5d905262277337c937dd36f4295072203ebf">+41/-39</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>TemplateList.spec.ts</strong><dd><code>Update tests to match
new UI structure</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-83d9701e7e491fb1ac667d1e1833ec58153c04ad844560778d06d50b85bd4bc6">+0/-20</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>54 files</summary><table>
<tr>
  <td><strong>alertTemplatesPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-f4ebd248b2140051e74dbbbd1aabe344f01c80704ce5857e9c28a04350e018f3">+17/-17</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>alertsPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-79ee01d6d7f145f19207b93b87143b545a1188cfc6a82bc8c45fecfbf68f8a1d">+5/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-chart.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-573a312576fce62d8e14f2bbb5f9b7d9a552d746304dce3d79862edddd24de76">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>AppTable.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-efcf66a9e913b5d3a7c2eea800b7f4e54d9e5268307131482fd40f32e2074d8e">+30/-13</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>EditScript.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-bf406d8f31f66d50e11b2c41f5ec13daabb4bb2e4f4612c5ff44675817ed2eca">+37/-34</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddAlert.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+12/-10</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddDestination.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-61b295458e13049a538f5014124855d58dce664dfbd644b57a964a37a07b7a3f">+15/-12</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddTemplate.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-2508a43827e6b35c07f3222deebd9945101ca6bc32b9dc592e6253ab99908bba">+11/-11</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ImportAlert.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-0f40dbf2757672e39ad16b86dddc59b568ca2e6ca36850420cd7be617da12d38">+6/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>ImportDestination.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-814b8ef1dbb4eebca9dfab72452d9a90d5f3fa5886dea8e82ac0bde44f66b445">+6/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>ImportTemplate.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-d22684c5142a49b8925a9dba1ef67631128caa95de66e71ba2a5b8120a0b91c6">+7/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>ScheduledAlert.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-5e143a17ab0fa5d7817f6d9301667fb5597236f27184248c7a71728e85b8d999">+6/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>VariablesInput.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-23a647aa1acfc95bc726629f0daa54005e3da1ed5b16482ceccef0649f680a74">+8/-11</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>AddCipherKey.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-ff5ae3a9b070fe2b3650f177ced0d87e9449ae7375a0b117ee299238293df110">+27/-15</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddFolder.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-41d2f8fac44084c004d8386ea4cc32e9c5d3e33266c4009cc855e57fb00a41af">+12/-14</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FolderList.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-b97284b1720dfb524e425f49acd70f1a4e59da3d493eb2d4b3de8551b2da7141">+47/-22</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddEnrichmentTable.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-9aad551dbc051edfdb3994a664506ed6d5e27dcb64f9c2fa917b02e51a35d86e">+12/-10</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FunctionsToolbar.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-8283d2ff9c4a66b4b59eac306672aca2d54655a462e2ddb88e14e039d79dcdaf">+18/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddGroup.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-dd49436305aadc01990cd6d9ea0abf97b964195920a1b49e64e8868fcc8afa6c">+19/-23</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AppGroups.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-402fb2a5338e60fdc3da489f4d50b5cf52f06b4e884a6fe7b82441c9fa5ea22c">+33/-22</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>EditGroup.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-6be040722d1492644adbf65250d44d28be37614d34600a73f74c816138727a40">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>GroupRoles.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-d7d1d9ec26ff77175b0e961e3e53e7ced45c9211eae8a0c00f7ac1cdac88ae14">+21/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>GroupServiceAccounts.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-b7afafc6b850c2d6edc2b855e78ff51d95d101937ec001a5790d130f4fb60695">+18/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>GroupUsers.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-114c767db76d4a09278c765d8aba39a1936c861488f39e7f0f6b3883499a3c40">+17/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>AddUpdateOrganization.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-bca5bebfa6d5f435715dc5fa948876de02fef95a84e3e663e5c7922d601b4b9d">+19/-20</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ListOrganizations.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-572ed99323d3e36d126074eccc10b68f6eef983d92f89d06b205fef0925c93a3">+30/-37</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Quota.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-30293eb5cb924f95356d5abd4588ce0f03765ac9d4446cf5b8cbacba23c6f979">+13/-9</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>AddRole.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-fca7dd7f91da83de52bfc40e82451a8756001af43974d592de2e03a815b21c9b">+14/-14</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AppRoles.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-191634ef09436199f91f442968110a01f54ae46b5ceee67476f52613ad796db4">+27/-17</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>EditRole.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-263b6bc7d29fdf8358c8437cd637f1350aa3733cc2706eae8ff00028686cc0f5">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>AddServiceAccount.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-4e6840978e90be9195797d1b73b6cd1545ddac45cef84aa08701a9d66013c61b">+26/-28</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddUser.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-47543c0488c8cb5bcf77e2bb4af9d0a5dd249993cd9577c4852f7950c7aaec91">+18/-26</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddStream.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-78b8c84a558e60d942bacffee365633d074042e464be465eb6984b0ee5df82b9">+11/-12</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ImportPipeline.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-d57fa41169daa44551a181f21ca33882004b29ab74e3040e4c56a8c849078670">+10/-12</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AssociateFunction.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-24a5b2df69327a6477227ea674939dea19dd6d393b4bfcf807089d71e6391152">+25/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Condition.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-4c3e624233c9e0355c7ded3b26dc74971b867be63e24f92a5e639284f60639dd">+20/-17</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ScheduledPipeline.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-63d8f838bb880356e7804b4a57fd9223d4f2c189de7aadc7cf33cba723b29aaf">+21/-19</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Stream.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-1a17ced9dc89022502cab0a6f9b97b413c2a2c4f8219733d063fc0180d361739">+26/-21</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>PipelineEditor.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-68c21f647336067eb79737ce9aca2d49632f2fa1c0878bcfdae55607e3473a15">+21/-19</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>StreamSelection.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-461440be35cc15b6b78700c8a61747ea9fb601a750af5292fa2d04b6fc96d595">+10/-10</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>CreateReport.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-cf2258c64249d4f28b2a103558bce3af1c87f0b2f23fe0652b458b8c20bb9c64">+28/-30</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddRegexPattern.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-a3783cfbdd32609bfff45ecfa23542854cad7ae60c3d29fedb832312a4de03dc">+9/-12</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>ImportRegexPattern.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-e8e1bcb5a02311504d7d571090eab27a270aaa71cae185ad2703023e2e70a31e">+6/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>OrganizationManagement.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-21e2431538cb6b76e5ef5b367c6df8fc02ad8f6c1294f438be9937c7481ea9ff">+16/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>OrganizationSettings.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-54860a5d84362fe3ade0c3a50d7bacb02af3d21e1012517a0140e21f9ddabfc1">+11/-13</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FilterCreatorPopup.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-7fa80f0424ed3b2e60b0e3ba77493b0e5d3ef98ddcf40cd103fe433d326221d7">+16/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>en.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+5/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>SearchHistory.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-9dd167bd5e272b2057f53c16b905047eec00655a3552daad240a964d67a6f56d">+30/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>SearchSchedulersList.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-0c0a4097c53f07712d35562b1336602bf24faddedab77a9f5717f5582dcac2f1">+53/-27</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>app.scss</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-5703d12504b0395cbfbbfad02a592bc391496026e5f03743102ce06c210ea05f">+414/-8</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Functions.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-ad825ec1b8d58aec9bf5d2553ea09394a30b22ac59d708bcf9e56168ca1daaf6">+1/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>IdentityAccessManagement.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-60b63024c98ee8927e12f9ebec93e99ba7ff419038cfe1cc57d49de1f6f342d6">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>Ingestion.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-97b8e8ed2a1260a39442563c7447d4f6d4830a37d47258920d6f94a292cd2d77">+9/-9</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>RealUserMonitoring.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8033/files#diff-dd099485ccafdabc8f9e63bf1610e7044680f3b7ae19a9e9c5645b351c7a8701">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2025-09-11 18:09:38 +05:30
Simha G 15177ad58c feat: Display Alert name on the frontend - QueryManager View (#8378)
### **User description**
# PR Type
Fix / Enhancement

# Description
Similar to Dashboard names, we are also going to display the alert names
on the frontend. To do this we need to include the alert_name detail in
the SearchEventContext payload which will be tracked by the
QueryManager. The frontend update will make the alert name be displayed
as query_source - just like dashboard name.


___

### **PR Type**
Enhancement


___

### **Description**
- Add `alert_name` to search context

- Propagate field through proto and conversions

- Display alert source in RunningQueries

- Simplify test context init with defaults


___

### Diagram Walkthrough


```mermaid
flowchart LR
  ProtoDef["cluster/search.proto adds 'alert_name'"] -- regenerates --> ProtoGen["generated cluster.rs includes alert_name"]
  ProtoGen -- maps via From --> MetaModel["meta/search.rs SearchEventContext"]
  AlertsEval["alerts/alert.rs evaluate()"] -- sets --> MetaModel
  MetaModel -- exposed in usage --> Frontend["RunningQueries.vue shows alert name"]
```



<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>search.rs</strong><dd><code>Add alert_name to
SearchEventContext and mappings</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/config/src/meta/search.rs

<ul><li>Add <code>alert_name</code> field to
<code>SearchEventContext</code>.<br> <li> Map <code>alert_name</code> in
From/Into proto conversions.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8378/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>alert.rs</strong><dd><code>Set alert_name in alert
evaluation context</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/service/alerts/alert.rs

<ul><li>Populate <code>search_event_ctx.alert_name</code> during alert
evaluation.<br> <li> Initialize mutable context then assign alert
name.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8378/files#diff-574be3504bf4d855c65fd3d7a10797a970237ff552edac4962b474b3983e094e">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>RunningQueries.vue</strong><dd><code>Display alert name
as query source in UI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/components/queries/RunningQueries.vue

<ul><li>Compute <code>query_source</code> based on
<code>search_type</code>.<br> <li> Show <code>folder/dashboard</code>
for dashboards.<br> <li> Show <code>alert_name(alert_key)</code> for
alerts.<br> <li> Fallback to <code>-unknown-</code> when missing.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8378/files#diff-6f0e18626a986d934c08c368ac383179c56bfcd914a27619ba748f43629c926b">+10/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>search.proto</strong><dd><code>Proto: add alert_name to
SearchEventContext</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/proto/proto/cluster/search.proto

- Add `optional string alert_name = 8;` to `SearchEventContext`.


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8378/files#diff-789f17326b818d5fbd1b5b752bed17e5341fde3d3261951634edcf78cacf3dbe">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Dependencies</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>cluster.rs</strong><dd><code>Regenerated proto includes
alert_name field</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/proto/src/generated/cluster.rs

- Include optional `alert_name` with tag 8 in generated struct.


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8378/files#diff-542d8f27a174c845740ca1c3fe0b697db89c3db666437c1c4dd8c9745510080c">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>ingestion.rs</strong><dd><code>Simplify test context
with default struct update</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/self_reporting/ingestion.rs

<ul><li>Use <code>..Default::default()</code> to fill unused context
fields.<br> <li> Keep only <code>dashboard_id</code> explicitly set in
test.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8378/files#diff-3edd5f4ed1eed0f765b7b450ef0fbf587632e6b22302006a5e397049e297057f">+1/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-11 15:29:17 +05:30
Bhargav dce3f30283 feat: provided search on indextype selection along with name field. (#8333)
### **PR Type**
Enhancement


___

### **Description**
- Extend filter to search index types

- Support label-to-value index type matching

- Handle empty search gracefully

- Refactor loop with match flag


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["User search term"] -- "normalize to lowercase" --> B["searchTerm"]
  B -- "map labels→values from streamIndexType" --> C["labelToValueMap"]
  D["Rows iteration"] -- "name match OR index_type match" --> E["match = true"]
  C -- "label lookup equals stored value" --> E
  E -- "if match push row" --> F["filtered results"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>schema.vue</strong><dd><code>Add index type label-aware
filtering</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/logstream/schema.vue

<ul><li>Add lowercase search term handling.<br> <li> Map index type
labels to values for matching.<br> <li> Support matching by name and
index_type in both modes.<br> <li> Refactor loop using a match flag and
early checks.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8333/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+52/-9</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-11 13:42:40 +05:30
Hengfei Yang 5d6700fa58 feat: add per-stream flatten level configuration (#8353) 2025-09-11 15:05:31 +08:00
Bhargav 9235fa7bc3 feat: highlight stream fields when part of default environment quick … (#8336)
### **User description**
…mode settings


___

### **PR Type**
Enhancement, Documentation


___

### **Description**
- Highlight env quick mode fields in schema

- Add tooltip and icon for quick mode

- Localize tooltip message in English


___

### Diagram Walkthrough


```mermaid
flowchart LR
  SchemaVue["schema.vue component"] -- checks --> StoreQuickFields["store.state.zoConfig.default_quick_mode_fields"]
  SchemaVue -- renders --> NameCell["Field name cell with icon + tooltip"]
  ThemeStore["store.state.theme"] -- selects --> QuickIcon["quick_mode(_light).svg"]
  i18nEn["en.json"] -- provides --> TooltipText["logStream.envQuickModeMsg"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>schema.vue</strong><dd><code>Visual cue and tooltip for
env quick mode fields</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/logstream/schema.vue

<ul><li>Render quick mode icon next to field name.<br> <li> Show tooltip
using <code>logStream.envQuickModeMsg</code>.<br> <li> Add
<code>isEnvQuickModeField</code> helper using store config.<br> <li>
Compute icon per theme via <code>quickModeIcon</code>.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8336/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+32/-5</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>en.json</strong><dd><code>Add i18n message for quick
mode tooltip</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/locales/languages/en.json

<ul><li>Add <code>envQuickModeMsg</code> translation string.<br> <li>
Maintain trailing commas consistency.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8336/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-11 11:56:38 +05:30
Simha Gandktx-vaidehi aff48e3a56 fix: Dashboards Names needed on the QueryManager (#8335)
### **User description**
# PR Type
Enhancement

# Description
On the Query Management view, the user must be able to see the Query
generating sources like Dashboards and Alerts by their names. This PR
addresses this by introducing an enhancement at the backend which
responds with QueryStatus carrying search_event_context which has almost
all the necessary details for this change.

# !WIP
+ Need to validate the same for Alerts
+ QueryList.vue needs to be updated for the same changes.
+ A simple test on the backend for the responses guaranteeing that
SearchEventContext is populated appropriately.


___

### **PR Type**
Enhancement, Tests


___

### **Description**
- Add search event context to statuses

- Enrich dashboard names in task status

- Propagate dashboard/folder names to frontend

- Extend UI with Query Source column


___

### Diagram Walkthrough


```mermaid
flowchart LR
  BESEC["Backend SearchEventContext"] -- "added to proto + structs" --> QS["QueryStatus"]
  QS -- "get_task_status enriches names" --> Handler["gRPC handler"]
  Handler -- "QueryStatusResponse includes context" --> FEAPI["Frontend APIs"]
  FEAPI -- "pass dashboard/folder names" --> Panels["Panel Data Loader"]
  Panels -- "meta and URLs include names" --> Streams["Streaming/Search services"]
  Streams -- "display source" --> RunningQueries["Running Queries UI"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>13
files</summary><table>
<tr>
<td><strong>search.rs</strong><dd><code>Add SearchEventContext to
QueryStatus and conversions</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+31/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Enrich dashboard context in task
status retrieval</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-8dcdb10340635be8bb58d45a815569026877f6fdbb3b69a773a30698b91674b0">+19/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Thread search_event_context through
search and responses</code>&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-c3b85ea662a885fbd39797968928b291cb59a58f53a03f7b7dfd7ba8b6a7985a">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>usePanelDataLoader.ts</strong><dd><code>Pass
dashboard/folder names in requests and meta</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+14/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>useStreamingSearch.ts</strong><dd><code>Include
dashboard/folder names in stream URLs</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-8fce3e25a161cd458e734bd9b1f98aadefe3482da7b6529a5b1f4fa20ec115e2">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>search.ts</strong><dd><code>Add dashboard/folder names to
search and metrics URLs</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-885ab872dbc6e7b20264df815e3ef4727f0abc86ce90d2fb47e4aff572814c75">+17/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>PanelContainer.vue</strong><dd><code>Forward
dashboard/folder names to renderer</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>PanelSchemaRenderer.vue</strong><dd><code>Accept and
propagate dashboard/folder name props</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+12/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>RunningQueries.vue</strong><dd><code>Show query source from
search_event_context</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-6f0e18626a986d934c08c368ac383179c56bfcd914a27619ba748f43629c926b">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>RunningQueriesList.vue</strong><dd><code>Add Query Source
column to table</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-eb568491630bd1b80935cc0b02498d40274ede0e5be78593a0b49ca17fbbe627">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>RenderDashboardCharts.vue</strong><dd><code>Provide
dashboard/folder names to panel containers</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-313f7c69102161242c893c863c50f1f1cd1fc19b68b5c99bf840b4b5c72f0f2e">+12/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ViewDashboard.vue</strong><dd><code>Supply dashboard and
folder names to charts view</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-052badb6758aff09ceaf1645869b9ba96125e6a0ea21abb01a8ee0a40d6467f3">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>search.proto</strong><dd><code>Define SearchEventContext and
add to QueryStatus</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-789f17326b818d5fbd1b5b752bed17e5341fde3d3261951634edcf78cacf3dbe">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Dependencies</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>cluster.rs</strong><dd><code>Generate proto for
SearchEventContext and QueryStatus field</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-542d8f27a174c845740ca1c3fe0b697db89c3db666437c1c4dd8c9745510080c">+20/-0</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>RunningQueriesList.spec.ts</strong><dd><code>Update tests
for new Query Source column</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-b1229a7a60180bf83bd9c81e1306941b8414522339566763c92b5d06c979ff38">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>launch.json</strong><dd><code>Add LLDB config for server
debugging</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-bd5430ee7c51dc892a67b3f2829d1f5b6d223f0fd48b82322cfd45baf9f5e945">+19/-0</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>en.json</strong><dd><code>Add i18n key for Query Source
column</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8335/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
2025-09-10 13:19:41 +05:30
ktx-vaidehi 78a5919dae fix: dashboard search text for variables SQL query (#8342) 2025-09-10 10:53:59 +08:00
Sai Nikhil b863826d9f fix: organization related issues (#8130) 2025-09-09 22:20:22 +08:00
Sai Nikhil ecfb6db33d fix: introduce reo dot dev (#8279)
### **User description**
1. This PR introduces reo dot dev in the application


___

### **PR Type**
Enhancement, Tests


___

### **Description**
- Integrate Reo.dev analytics SDK

- Add route meta titles across app

- Track key button clicks and pages

- Set dynamic document titles


___

### Diagram Walkthrough


```mermaid
flowchart LR
  main["App bootstrap (main.ts)"] -- "init + setup titles" --> reo["Reo Analytics Service"]
  router["Vue Router"] -- "meta.title -> document.title" --> dom["Document Title"]
  router -- "afterEach" --> reo
  views["Views & Components"] -- "useReo().track/identify" --> reo
  config["aws-exports.ts"] -- "REO_CLIENT_KEY + flags" --> reo
  pkg["package.json"] -- "add dependency" --> reo
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>aws-exports.ts</strong><dd><code>Add Reo.dev client key to
config</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-74d362ad26d23cf7e76c13e3daeb72d37923a335074d512a543d0f5bfa6a30d2">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>37
files</summary><table>
<tr>
<td><strong>router.ts</strong><dd><code>Add meta titles for primary
routes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-a1827956e5a817edc7efb5f4516e7cc4d453e15ea9e9d970aafb8360b09fc78e">+43/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>useEnterpriseRoutes.ts</strong><dd><code>Add meta titles for
enterprise routes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-962367ed3d329e73232da2c262cf10c60b14820dd43e95e94302cdcb2f080cbe">+28/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>useManagementRoutes.ts</strong><dd><code>Add meta titles for
management routes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-b71a1d39b1fab0749f0668d5f16382536fbda6e2f0c92c56a972fb5d8b5835f5">+22/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>main.ts</strong><dd><code>Initialize Reo analytics and page
titles</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-37b29c5a3b76595194070205d9a0cdedcd717bf7c4367022d1e2667395962f2e">+9/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>index.ts</strong><dd><code>Set document title from route
meta</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-8d302fe8581dca01e60aaf346dfdb0f8e24731551e7e5f91e5da9fc64250f7d2">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>reodotdev_analytics.ts</strong><dd><code>New Reo.dev
analytics service with queueing</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-1df83f0fa6b7599b6cd3ad863ff77d8abc4351b651932ad4d0359690148e1180">+168/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ActionScipts.vue</strong><dd><code>Track add action scripts
button click</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-6cfeff0b8dbbaba52b13ba67d6f4f8fdc3c58996eccdfae2ad0db2e7aee20f08">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddAlert.vue</strong><dd><code>Track alert save/update
button clicks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8">+13/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AddDestination.vue</strong><dd><code>Track destination save
actions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-61b295458e13049a538f5014124855d58dce664dfbd644b57a964a37a07b7a3f">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AddTemplate.vue</strong><dd><code>Track template save
actions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-2508a43827e6b35c07f3222deebd9945101ca6bc32b9dc592e6253ab99908bba">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AlertList.vue</strong><dd><code>Track alert add/hide form
button actions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-be3e41b823e163b226ffc270d95cc4981e59c600851e4e0d10ee5e4ee994ac8e">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AlertsDestinationList.vue</strong><dd><code>Track add
destination action</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-e9d05ba6c071c0e2f5d9ef7acdef757f79910abd6897b29e27b069a10d4ba8de">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>PipelinesDestinationList.vue</strong><dd><code>Track add
pipeline destination action</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-088c66f5a34e73a5350a794a772e5d905262277337c937dd36f4295072203ebf">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>TemplateList.vue</strong><dd><code>Track add template
action</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-7df66364d7d69a26cfa25cbc555d0e090c2f73e51c8386d9b0435bae4412564c">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddFolder.vue</strong><dd><code>Track save new folder
action</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-41d2f8fac44084c004d8386ea4cc32e9c5d3e33266c4009cc855e57fb00a41af">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>FolderList.vue</strong><dd><code>Track add folder button
click</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-b97284b1720dfb524e425f49acd70f1a4e59da3d493eb2d4b3de8551b2da7141">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddFolder.vue</strong><dd><code>Track dashboard folder
saving</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-3bd1ba28ba29b71469aac901fd8000480c3db6c0f2dbc86ea55221787ae3ffd2">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddEnrichmentTable.vue</strong><dd><code>Track save
enrichment table</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-9aad551dbc051edfdb3994a664506ed6d5e27dcb64f9c2fa917b02e51a35d86e">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddFunction.vue</strong><dd><code>Track save/cancel function
actions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-ebfd6c538f3cd3ecb9ab17550fd76e2e89e7a1abccc83a7505077e4af3eee110">+10/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>EnrichmentTableList.vue</strong><dd><code>Track add/update
enrichment table</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-6a29e253f59405d3c0f756dba36afd7483f10ad86927cbbc3348ede6372c3077">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>FunctionList.vue</strong><dd><code>Track add/update function
actions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-6ff9af50a1597504b7f0dca91e61cf30c800b4a17b4be2ed2c3a4f7a7b2d7068">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AddGroup.vue</strong><dd><code>Track save group
action</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-dd49436305aadc01990cd6d9ea0abf97b964195920a1b49e64e8868fcc8afa6c">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AppGroups.vue</strong><dd><code>Track add group
action</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-402fb2a5338e60fdc3da489f4d50b5cf52f06b4e884a6fe7b82441c9fa5ea22c">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddUpdateOrganization.vue</strong><dd><code>Track save
organization action</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-bca5bebfa6d5f435715dc5fa948876de02fef95a84e3e663e5c7922d601b4b9d">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddRole.vue</strong><dd><code>Track save role
action</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-fca7dd7f91da83de52bfc40e82451a8756001af43974d592de2e03a815b21c9b">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AppRoles.vue</strong><dd><code>Track add role button
click</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-191634ef09436199f91f442968110a01f54ae46b5ceee67476f52613ad796db4">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddServiceAccount.vue</strong><dd><code>Track create/update
service account</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-4e6840978e90be9195797d1b73b6cd1545ddac45cef84aa08701a9d66013c61b">+28/-17</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ServiceAccountsList.vue</strong><dd><code>Track add service
account action</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-3afe835bcfbec3fda2e9550850c29581092ee0717e7dd8de8888e774a0048d24">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddUser.vue</strong><dd><code>Track create/update user
actions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-47543c0488c8cb5bcf77e2bb4af9d0a5dd249993cd9577c4852f7950c7aaec91">+18/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>Login.vue</strong><dd><code>Identify user on login; delayed
redirect</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-4c2da0196f97e92fff1a813ce1337a4e94f6592b054e0f5c326ee137657003ff">+11/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AddStream.vue</strong><dd><code>Track save stream
action</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-78b8c84a558e60d942bacffee365633d074042e464be465eb6984b0ee5df82b9">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>PipelineEditor.vue</strong><dd><code>Track node additions
and save/cancel</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-68c21f647336067eb79737ce9aca2d49632f2fa1c0878bcfdae55607e3473a15">+48/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>CreateReport.vue</strong><dd><code>Track save/cancel report
actions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-cf2258c64249d4f28b2a103558bce3af1c87f0b2f23fe0652b458b8c20bb9c64">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ReportList.vue</strong><dd><code>Track add report
navigation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-f7d700f7e67fbaba3c58ab5d2c614925db743101828214445ce9dae35dc29067">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>Dashboards.vue</strong><dd><code>Track add dashboard/folder
actions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-8da3187db8ce3d795d0f196ede6b2290221ffa3e27b15dcc2b645e44dd196213">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>LogStream.vue</strong><dd><code>Track add stream button
click</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-56f4223b74568c10bc305741cc9fc3a8830184a251b4eaa6a2649033bc6200e3">+9/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>Login.vue</strong><dd><code>Identify user after SSO; delayed
redirect</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-a135c379ef6ac8f92199ea5f7ff19a227971a9b0a87ccccf87c0268740522c2c">+11/-2</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Dependencies</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>package.json</strong><dd><code>Add Reo.dev
dependency</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8279/files#diff-b861012a5dd72b8a9f3281b7cf09f5a779c98569d040b1bbc1db50f1b15e7cce">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-04 12:38:01 +05:30
Omkar Kesarkhane 20678e5e9d fix: RUM component testing (#8194)
### **PR Type**
Tests, Enhancement


___

### **Description**
- Add extensive RUM component unit tests

- Harden dashboard layout null checks

- Initialize variables state safely

- Minor UI/typing/import fixes


___

### Diagram Walkthrough


```mermaid
flowchart LR
  specs["Add RUM component specs"] -- validate --> dashboards["Dashboards (API/Errors/WebVitals)"]
  dashboards -- safer init --> vars["Variables default state"]
  dashboards -- guard --> layout["Ref layoutUpdate null-checks"]
  SearchBar["SearchBar.vue"] -- disable guard --> btn["Run Query button"]
  utilsDate["utils/date.ts"] -- lint fix --> commas["Trailing commas"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>19
files</summary><table>
<tr>
<td><strong>ApiDashboard.spec.ts</strong><dd><code>Add comprehensive
tests for API dashboard</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-53095dbafa0cb9c6eed90240cb8af9f89d118168f6af76bdf51267a667ccff2d">+1481/-0</a></td>

</tr>

<tr>
<td><strong>SearchBar.spec.ts</strong><dd><code>Add unit tests for RUM
SearchBar</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-8665e9741021e1ce49dcf12426e74107f678bd5708125104d95f82798f1a33a1">+715/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SessionsList.spec.ts</strong><dd><code>Add tests for
sessions list table</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-d4b43b6d94727c8fe42479141a58908fc490227bd1e87eec6d64c9351efbdcc8">+615/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorEvents.spec.ts</strong><dd><code>Add tests for error
events table</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-81b9f9fcb1fd9a2f50bb512de7de11353519d95d7c276999eb8efa9e315a91d2">+567/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorTags.spec.ts</strong><dd><code>Add tests for error tags
view</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-c6f52cc79dd03d5b9bb6fb66a7c2ca29b66cd2e8bcaf1fa071d52cd43f388f59">+622/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>PlayerEventsSidebar.spec.ts</strong><dd><code>Add tests for
player events sidebar</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-89b65487bce928cbff9e6f17ea7b2288a5b44918c408d48f17e834454d8f6c60">+570/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorsList.spec.ts</strong><dd><code>Add tests for errors
list</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-e65880c9658bdfd0cc8c6dc2144760f924ef4cf6919010e5f48b2ed47f134745">+491/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>WebVitalsDashboard.spec.ts</strong><dd><code>Add tests for
Web Vitals dashboard</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-62eb2eceb30d2aa28e78d4ee898d09aae3d1f0fa176d4bca91055b50024e6c9f">+546/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorHeader.spec.ts</strong><dd><code>Add tests for error
header</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-4b0143e04fd73e173ae4e9696d2654543eaf0c0a85e6610d267a3b2ec3f145d8">+459/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>VideoPlayer.spec.ts</strong><dd><code>Add tests for RUM
video player</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-ee567bd4fd196facb768c7a15cbd7e14feff6be027d3bb78e65ae811319ca82c">+485/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorSessionReplay.spec.ts</strong><dd><code>Add tests for
error session replay</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-40ee2b3a9b103e5c6e5e431609444f0296d2bee46f3f1dd2c606c86e22d8ffe5">+482/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorStackTrace.spec.ts</strong><dd><code>Add tests for
error stack trace view</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-a52e17d1791c4e34e92e7e5953d4df509f4dc8a49910865efc0f13bffc9b2096">+423/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorEventDescription.spec.ts</strong><dd><code>Add tests
for error event description</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-f3a969642703ccec1b54c32c7ef3c2a85d9e9ea15f322ef362eefe71ae736acd">+495/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorDetail.spec.ts</strong><dd><code>Add tests for error
detail view</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-8517542d07e62e45104db342cc69f85a1c07776aecbee8279456d3000f8dd2da">+420/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AppTable.spec.ts</strong><dd><code>Add tests for generic
AppTable</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-37e20196ead408438033e30d909300ef1c02b01fa690e2d4b8cd21472202e4da">+425/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorsDashboard.spec.ts</strong><dd><code>Add tests for
Errors dashboard</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-1330edb3964758b7c9cfbdfb077eac5fcce30b8b4d2f204d69ab71c4041d37c5">+383/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorTypeIcons.spec.ts</strong><dd><code>Add tests for error
type icons</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-737652a4154b05c932a34cf218c3c1432ff8efc557d512813a6879830baf668b">+368/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ErrorTag.spec.ts</strong><dd><code>Add tests for single
error tag</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-d4bf1e6d4e71451a9ce8ead11328edff5064cb3693b01b53ce653694710045ef">+355/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SessionLocationColumn.spec.ts</strong><dd><code>Add tests
for session location column</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-b853b01be9d14931163c1ae8f5287c28f1d43df2a45e113519d853d3a14c1b41">+346/-0</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>5
files</summary><table>
<tr>
<td><strong>date.ts</strong><dd><code>Add debug log and lint
fixes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-b178bce26d7ddb8d02569fa666e3250abbc1f269d7b7a1068a4bd026f4bdcd26">+3/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>ApiDashboard.vue</strong><dd><code>Safer variables init and
layout guards</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-52c091831fcfb625a54f7b56a08c10694a024daa44b6b337d66260461254389e">+24/-12</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SearchBar.vue</strong><dd><code>Guard stream list access;
import cleanup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-d20c6ba53e6a9adfe67b2f83fe76357fb541b2764dd40cb16627599e0c80e63f">+3/-30</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ErrorsDashboard.vue</strong><dd><code>Initialize variables
and guard layout updates</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-46138c05241c5e0911a0feba39a21dbb8452453c0e26a1d00c3493cc579f07b2">+14/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>WebVitalsDashboard.vue</strong><dd><code>Add layout
null-checks and exports</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-bbb15649f6ecf4b2968a8173091ef8b2a21bfe39bff8e08f91566bca189cca09">+10/-5</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Miscellaneous</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>WebVitalsDashboard.spec.ts.backup</strong><dd><code>Backup
spec file for Web Vitals</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8194/files#diff-407d197787cb019e97f989a21530c722baf103aab5583cf85b3f7113b9543e88">+1308/-0</a></td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-02 17:53:40 +05:30
8af3495611 fix: cloud sync (#8222)
### **User description**
This is for syncing the changes done in cloud to main branch. No changes
for non-cloud code.


___

### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Add invite listing and decline APIs

- Bypass auth for user-scoped invite routes

- Improve trial-expiry handling and logging

- Add org cache and invalidation hooks


___

### Diagram Walkthrough


```mermaid
flowchart LR
  FE["Login & Invitations UI"] -- "list/accept/decline" --> API["/api/invites*, /{org}/member_subscription"]
  API -- "auth bypass for user-scoped invites" --> Auth["AuthExtractor/TokenValidator"]
  Auth -- "pending invites flag" --> LoginRedir["/config/redirect builds URL params"]
  OrgSvc["Organization Service"] -- "generate/list/decline/delete" --> InvitesDB["Org Invites"]
  OrgSvc -- "invalidate cache" --> OrgCache["Org table in-memory cache"]
  Ingest["Ingestion services"] -- "trial expired -> 429" --> Clients["Ingestion Clients"]
```



<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>25
files</summary><table>
<tr>
<td><strong>user.rs</strong><dd><code>Expand invite payload with org and
inviter</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-e13b3a981fd70182b9738a6b0ecfdee915c5b36757703a87741e1eddf3f6e786">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>auth.rs</strong><dd><code>Auth bypass and key handling for
invite routes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-9bc2b1841504a435f66ad094f72ddbe7b7fa75e5e1557b8adbfe36f7f0592e1b">+36/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>jwt.rs</strong><dd><code>Return new user and pending invite
flags; defer org creation</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-232cab74f4cbf135af424744272e17732fbda8ac005d33c0acb4597e65479d02">+22/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>token.rs</strong><dd><code>Allow invite/member routes
without org user; header injection</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-3339b4a964c121766ef87fcec0070f27a2b7085cf81281b53154e53d33cb28cf">+34/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ingest.rs</strong><dd><code>Suppress logging for trial
expiry errors</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-24f250254ecfdbe004af9dc0ea23f8a2c0105ae0898690ed3e565089e5d8eef9">+30/-9</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>org.rs</strong><dd><code>Pending-only invites; delete invite
API; trial extend cache poke</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-b47c0c1a8a78524196176430268eecdbfaf6f46d6b95873d3cbe70cfd67182b0">+40/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Include pending_invites flag in
login redirect</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-ca09c9c9b020049bdbc3382c466bfcca80daac92e98760d9a9a76172abf34049">+4/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>List pending invites and decline
invite endpoint</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-56897e42f9436a640bc70fddc25686485ba8ae1223635b32d252a0333309f748">+36/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Wire new invite endpoints into
router</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Add TrialPeriodExpired error
variant</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-90c725d0e77a6e7d4bcc130cf5783848a5cf0efdb304b351cd63cacf8775fc36">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>organizations.rs</strong><dd><code>Add in-memory org cache
with invalidation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-4d87f9fe379a5d161a3e7c3c77f7f320be738e6a70c785aa5ce93cb0830c0147">+77/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Start cloud billing watcher on
cloud builds</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-f2e4c29b8eef22189ec704a832633c4bd135a24444f054864c98064bd0963681">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>organization.rs</strong><dd><code>Invalidate org cache on
watch and mutations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-ce65cea926a09721a8fea14d07fe188bc2b887218e95d74a8bffefb54001da50">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>user.rs</strong><dd><code>Delete invites for user
helper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-6ee6b0fc9ed03224d4ddf0b7b631c6f81ff7d1d579bdb98d2c5d4453852eb5d6">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Return trial expiry as dedicated
error</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-7c7b5bca85f0ced652965cae66540c96f56dfcca4f4c16b77bf7b45aac203d1b">+1/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>loki.rs</strong><dd><code>Silence trial expiry logs for Loki
ingestion</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-a970c8c4785d4e4d878218615b17eec0cf4b4976121766b002c2b2f76371bfe6">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>json.rs</strong><dd><code>Map trial expiry to HTTP 429 in
JSON ingest</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-506987e61095a54e47f7f208dad89f9f1bce595fa6bf1ba8a7d746f2b2ff6c4a">+15/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>otlp.rs</strong><dd><code>Return 429 for trial expiry;
reduce noise</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-a24391bef75a4678c50724e8b5f305ec0ee8c2c74c68be9d677765de68b5d8dd">+17/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>organization.rs</strong><dd><code>Invite generation
validation; delete/decline invite flows</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-6b3c3c2b027c1158c0d41302cc69dfcd20ab68a6a4fa365cda403f838940bbb4">+48/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Handle trial expiry with 429;
logging tweaks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-66f3b4f5e7927092fd6e57738687a1091b6f316638f7c58f8d7be9addb72bc30">+34/-14</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>users.rs</strong><dd><code>Enrich invite list; optional
pending filter; cleanup on removal</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-98da2588a28d62bb2e301d989836125f89f89b76272cd7f75e08ec4deeea5f38">+50/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>organizations.ts</strong><dd><code>Add decline subscription
API client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-2c3bad4c7a9fcedd7a653599381149b82f9c350b177de9d72431013807d4c36f">+10/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>users.ts</strong><dd><code>Add pending/accept/reject invite
APIs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-a334d8d570d9bdcaa3d4c8c2a993eff009a1ec8eb499c8a3d1a292d9224159d0">+12/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>InvitationList.vue</strong><dd><code>New UI to accept or
reject invites</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-ee97546ff1aba36cc0b24cb20782502c7c88279850cc3d540ea5685209f10702">+409/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>Login.vue</strong><dd><code>First-login invite handling and
logo tweaks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-a135c379ef6ac8f92199ea5f7ff19a227971a9b0a87ccccf87c0268740522c2c">+178/-58</a></td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>en.json</strong><dd><code>Add invitation-related
translations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8222/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+18/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Subhra264 <chakrabortysubhradeep556@gmail.com>
Co-authored-by: udev <uddhav@openobserve.ai>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: omkark06 <omkar@zinclabs.io>
Co-authored-by: udev <uddhavdave1@gmail.com>
2025-09-02 14:04:34 +05:30
46fa42a319 fix: dashboard unit tests (#8111)
### **PR Type**
Tests, Enhancement


___

### **Description**
- Add extensive dashboard utility unit tests

- Introduce Sankey builder component tests

- Export helper for PromQL series props

- Temporarily skip flaky UI tests


___

### Diagram Walkthrough


```mermaid
flowchart LR
  utils["Dashboard utils tests"] -- add --> convertDataIntoUnitValue.spec
  component["Sankey builder tests"] -- add --> DashboardSankeyChartBuilder.spec
  promql["PromQL utils"] -- export helper --> getPropsByChartTypeForSeries
  ui_tests["UI specs"] -- skip flaky --> MenuLink.spec & AppSessions.spec
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>19
files</summary><table>
<tr>
<td><strong>convertDataIntoUnitValue.spec.ts</strong><dd><code>Expand
coverage for formatting, colors, validation</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-e9d8a984ed78af13e4d4424c605a3a55fe6ad2a3f7e403fad156ce17ffdc3bdd">+1869/-1</a></td>

</tr>

<tr>
<td><strong>DashboardSankeyChartBuilder.spec.ts</strong><dd><code>Add
full test suite for Sankey builder</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-97b54e2aa2abc946d6ebf5624f8985260fe426cd508965408ee966d829e30872">+1279/-0</a></td>

</tr>

<tr>
<td><strong>MenuLink.spec.ts</strong><dd><code>Skip unstable
external-link test case</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-bd04ff500fc31583a430993830eed36cdf6254c2ce1a52b8a58a07b89bb9f825">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AppSessions.spec.ts</strong><dd><code>Skip flaky mount-time
data fetch test</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-8729444f05a0c753cc1f6fbb229e0ab7fd2ac46bd6ea454131ff80314d57a888">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>convertSQLData.spec.ts</strong><dd><code>Add SQL data
conversion unit tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-1dc85f7550b15820974ad93fa461de48d24bc5cbed621bffddb27250211fa88d">+8632/-0</a></td>

</tr>

<tr>
<td><strong>useDashboardPanel.spec.ts</strong><dd><code>Add unit tests
for dashboard panel composable</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-5dbd79fdde0cbbb7db569095fa062931286463da0b5e72b1fbe99f56116fa5e2">+4723/-0</a></td>

</tr>

<tr>
<td><strong>AddPanel.spec.ts</strong><dd><code>Add tests for add panel
flow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-5565bef51b35f1e9c8167eab0a22dc61c1d697dca45fe31f46cc8e5e9020ca74">+3540/-0</a></td>

</tr>

<tr>
<td><strong>convertPromQLData.spec.ts</strong><dd><code>Add unit tests
for PromQL conversion</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-2769044ec488ef4070c2e1a28ce23ec36b945e46c903b870f8b340cbd6b05211">+2086/-0</a></td>

</tr>

<tr>
<td><strong>DashboardQueryBuilder.spec.ts</strong><dd><code>Add tests
for dashboard query builder</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-f44793de54d6ac2d9c7b3dd504d8b1952cb6e6b2d984254a8466705387cb82ce">+1170/-0</a></td>

</tr>

<tr>
<td><strong>VariableQueryValueSelector.spec.ts</strong><dd><code>Add
tests for variable query selector</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-7e096d825438fc75baab2ef87cb4a04ae7ac1206e5021b71ce42cedd0984e064">+1128/-0</a></td>

</tr>

<tr>
<td><strong>VariablesValueSelector.spec.ts</strong><dd><code>Add tests
for variables value selector</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-9f234d5a15777d62cf8cd6cc9f0d68fbc0419a87ef58fbdb11de8c46ed6d17cb">+1137/-0</a></td>

</tr>

<tr>
<td><strong>DashboardMapsQueryBuilder.spec.ts</strong><dd><code>Add
tests for maps query builder</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-08c9fd103348dc8adea1c343bdaa25c176378a91656cda7f336dd622d8598fef">+1112/-0</a></td>

</tr>

<tr>
<td><strong>viewDashboard.spec.ts</strong><dd><code>Add tests for
dashboard view flow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-0db87f5ba2d11ee942a8054598d18568ce7542e23c830fcf5d802c4338e64937">+1175/-0</a></td>

</tr>

<tr>
<td><strong>DashboardGeoMapsQueryBuilder.spec.ts</strong><dd><code>Add
tests for geomap query builder</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-d9b9e150ca7ac48d81236c882b2aa1f188e26fc2c2d13d69936c3288f305d803">+1079/-0</a></td>

</tr>

<tr>
<td><strong>FieldList.spec.ts</strong><dd><code>Add tests for field list
interactions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-7273ac40c01bb36400c5dd32f86cce6576dc034cbec0010f6e93e22348578ed4">+971/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>DashboardErrors.spec.ts</strong><dd><code>Add tests for
dashboard errors display</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-a5d738d4bafc19b5e324d0c1826f73503a8539d8900cb2f80ff1284780865ac4">+898/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>CustomMarkdownEditor.spec.ts</strong><dd><code>Add tests for
custom markdown editor</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-c706715d0bc3f6b3b5e067d1926b0bd1e01b5aba291072cd612de4f9fed25c4f">+916/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>convertGeoMapData.spec.ts</strong><dd><code>Add unit tests
for geomap conversion</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-c75999bb5bc4dc27c5da1fad5d556614fa139b0b2cae7c2dc200c11133141937">+1061/-0</a></td>

</tr>

<tr>
<td><strong>TabsSettings.spec.ts</strong><dd><code>Add tests for tabs
settings component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-702a83e8e5bce6917f8cc2353dc224d37e667bdc39119f2176185cb4d2fe3b65">+820/-0</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>convertPromQLData.ts</strong><dd><code>Export chart-type
series props helper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>83 files</summary><table>
<tr>
  <td><strong>DateTimePickerDashboard.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-384ca377212c39553c97970a8b57888b7aea566e739ed498304360111c7884b8">+498/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddDashboard.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-3f4eccc613c6abad9a1103fab41aa4f8eb66a74465aea5e3b077c7c31525e91e">+338/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddFolder.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-3c70ca7fa32d6b2f499764c9bae0fcaf6d24a468eb71122865f79be4eed5bd45">+690/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ExportDashboard.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-5aba49ace28e114de7b4113ea725d4cabc6e343aa0bbc41fcb4250de0dfdb1b1">+409/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>MoveDashboardToAnotherFolder.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-05b3c990e345c5c11c1631547269b3644b652b78c4185b5123d3211218adb99d">+643/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>OverrideConfigPopup.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-5c66103162fa701af8c78ba2bc62789ac8fa3f98f281309591ffd4da154fbc0e">+549/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>PanelContainer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-d74ba5293a041ca029d5e9b8fec08d187e51a099451ab0372747d3ec175559a9">+497/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>PanelSchemaRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-897e6e12808163dfb85ea964ac97d45a8c50146672558b4d86de292daaf021ce">+827/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>QueryInspector.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-5db282f1e123d731ab4ed83d9500a87bbdd968f28c2c9f11179eaebed4f6bef6">+679/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>SelectDashboardDropdown.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-9c9dd44be67486631521fa4e8238a6e782d659afb0d71a39d394f22d21fa2d1e">+717/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>SelectFolderDropdown.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-1ff4f3a09802e742b9cc26990c827d9331529a74bc6fc1678473821dc851e1b7">+658/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>SelectTabDropdown.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-3b923039e16f1a26cce563eaefcfe3405e551eaa12ac10c4382ac4d67d9564b2">+780/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddAnnotation.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-c096dd81c6463d55ba96fed549d28d7c83191639ccfd5dccece303a663bfdf9b">+242/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>BackGroundColorConfig.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-e23c4dbce4cba3fd64ac480f21ab9dbdeba66bac46b2277874ee307597980707">+651/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ChartSelection.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-88bf57e3c40ed695321a7366d2f770f6c22e5d8c1adbb057d2a805333ad57de9">+177/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ColorBySeries.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-92afcb1fa6c34cde082443bde1c478d9e98c0074b69f9f8f2343bb0880f2c183">+224/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ColorBySeriesPopUp.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-bd65ddc9813c2a5679b0aeb602afa55e8c15bb3b39dd48cd2489b2e6e9c51965">+224/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ColorPaletteDropDown.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-dbe43d77b398c5f6ede77ff1006a9b7d39b405842d6ca488061e1cbcde566117">+757/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>CommonAutoComplete.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-f11b0763e1eea3c18bf2a69933d84a78df0f18b70a5b2fb3c50459c557ecc842">+588/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ConfigPanel.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-a4e717cd660ad6fa369629f8de524f4d57bf4f71b11d3244ce41b9ed9f0379d2">+617/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>CustomChartEditor.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-00410898c60d1d7d4803eba301bf070d6b3765db0983c06b3d624c485dc1339e">+693/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>CustomHTMLEditor.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-b07faae78603a95d7cb54e4a6dde9381cad82952a76ad78e23a393fb12c635a2">+546/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>DashboardQueryEditor.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-6a37b5f775011f4014399dcb3bae3b3d85403896533c008470b1c9712db96e82">+507/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Drilldown.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-2ffe39b111c8981f0bbf7fcf19ff815fa97a24e007dcc17a23d0e7a2ed6388a1">+605/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>DrilldownPopUp.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-73d704d414f3ea194970a4f079bc1d9fedfdf8547875758133bc1e6e335523e5">+723/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>DrilldownUserGuide.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-0015f582294fe5a56347aea7c3ce42e12100dd4363176fd8013683356aaba74a">+603/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>HistogramIntervalDropDown.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-bc0fbf96ee3ce5f28b7896b3c8f55605f68cdc3386cae22b9adc8c806af9e514">+368/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>MarkLineConfig.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-f6e52e135ac6d21bd1d12226feee88ccaf24bad358890d17af3645ef7103d3a1">+503/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>OverrideConfig.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-e05709bd1fededda3d3ed90a47d9fddb8ae171e87c7f25d07ecca1e6a8ab33ee">+571/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>PanelSidebar.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-4b5378e7a3c198d89d8de88fc9bb3ccb5829c7572d860c42d46b565fd37a2894">+622/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>QueryTypeSelector.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-3094340ad57af51f1bcbad3b63a8ab860a46905ab79997289b89b601553934fd">+777/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>SortByBtnGrp.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-7e52dbb6902695ae38e15e980407d761d528871631365a12726f9731efaccec2">+405/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ValueMapping.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-4920ea2ac96411628202d5350adae25ea97a1cd8eede8d8bf5252e5d468d82f8">+424/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ValueMappingPopUp.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-ef4bd7d95957a65c1efdba2d541a0242d249adc0381efcfd2e1c684c531fab6b">+553/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ChartRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-f005709a26e4b51de30457223129ce0ca84a29c5f69a8d7c84fa35b5f3376fd6">+464/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>CustomChartRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-e5f37800aafd21baeda455df4656da5221369bb6d72880a28294b8a1a83b5f30">+679/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>GeoMapRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-7bf374bb429eafe8b265c34e63fe99df1c05e102be38125bcf3234756f95f12c">+878/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>HTMLRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-128fd699e9ae1552077c27185db37871b57e0002558f89377ec64b4e29e1d7f7">+492/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>MapsRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-588141a6c90f09e4b39ea53d03c1334c0b5cc42c9f35272a9f2eeb6e2ddb852e">+490/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>MarkdownRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-63eed3fbb6882be90c70e833f9f64e9e8c6511e4c40162aa5c1a7662fc79469d">+600/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>TableRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-550a0a669838c47473442a7d37407fead8b7cb2a05121880dd2c0522022c8c3f">+555/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddSettingVariable.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-3f3a2cea87e91a038695bdd8406d72680e4b665bea7a7186a84fbef91c8bdf81">+661/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>GeneralSettings.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-2b3e3d2794669f6b030b6752ef262b96d6504cb1bcd661a3cd248c21df412064">+767/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>SinglePanelMove.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-ba25253c9f76317afde347d4d6a0afbcc95bcf847640ab81a1b40fa0bd4b4bc5">+565/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>TabsDeletePopUp.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-53eadbd58dae03e5fbf9db545d58a03d0d504725544b0500d7b16c5d041668d3">+611/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>VariableAdHocValueSelector.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-82c2b639609e68e8601435e82ae21dcda2ff626853b3a5e310c69e237c34c38d">+422/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>VariableCustomValueSelector.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-8ce1eb841c0ae350a6bb846705ff9d085d1ae2c97ab409b1ff533ef7bcebfa8f">+635/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>VariableSettings.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-fb9c343df2d52c854489057d4a66a1b6c4052637ef12dca16c9b77c0a4e680f4">+696/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>VariablesDependenciesGraph.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-153d420e39a1fdf9b0918f8b765b21a5e9fe6fed4b142fd1c9e24af43c0bb525">+397/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>DashboardHeader.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-7ec062f2fc27df156ca18a22557c1f80426e3fa82c3cfd6386f48efc9e73f757">+440/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddTab.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-25b77cc0d60a268fc0fbd413e53b1c0ace69164ffd58dc0b0081717e4773b365">+767/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>TabList.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-1c0ad8f6163d343eba185ac20d0fe84478afd5975242abc0a957d7ac74a8a5a9">+604/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ViewPanel.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-177dbf7e92561bc76e13819fd7a1d681f77b845071a7c0901857a26660b3ba54">+744/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ApiDashboard.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-53095dbafa0cb9c6eed90240cb8af9f89d118168f6af76bdf51267a667ccff2d">+550/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ErrorsDashboard.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-1330edb3964758b7c9cfbdfb077eac5fcce30b8b4d2f204d69ab71c4041d37c5">+178/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>WebVitalsDashboard.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-62eb2eceb30d2aa28e78d4ee898d09aae3d1f0fa176d4bca91055b50024e6c9f">+547/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>VisualizeLogsQuery.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-fdecf623f9a4bdfe679c6c2e4424f31cbce4a1234cb45e1de472189a46c9d4e2">+674/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>TraceBlock.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-1406f52daa846db3febbb595e81c192166b9e69bc190c5039b6c4866412b877a">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>alertChartData.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-5ab33266e226684ae77d259392edb382f71436edec442411a5500451ce316b31">+259/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>calculateGridForSubPlot.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-f7067cef10cdf9d66fc91a46516c9f2bc0209489bc47fb3d1446666485269680">+374/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>colorPatette.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-d266bf5ce0a458ec9fa8120ff85c252f7a671dd6df9aece83daf7c7b05b50ed1">+576/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>convertCustomChartData.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-228c0f06dd35f43d80dc9f671803fba74ac7e218c1606247d1e44259a18b426e">+771/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>convertDashboardSchemaVersion.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-d32a1607489b29014dd8ecad34358644be46d2735cf49dfa5151671e591d6360">+537/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>convertPanelData.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-d798f99807f72b07f58e09bfe8723fdcee3dcd747f328436ef6bbd7d8f5afa36">+889/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>convertSankeyData.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-e9dce93200dba86a0e13d22ec5a0b5e0f4c5fb8349c904c8780fdb6fe675f4ae">+588/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>convertTableData.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-b3b39fac4e8b48b3ee80827502ece784d8e52f56fd2f1d80acac353fd3a9fe3f">+599/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>datetimeStartPoint.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-7c56f19e7b4c6f5738c814cb013f698fdfd065286ef4539e14a868e8e114a1c8">+214/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>getAnnotationsData.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-4b12626e491ea366087b3cdc2eb66012bf45555504313ca4664f3ae4d93b6e08">+351/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>useCustomDebouncer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-f6c3bc11a1cdc66a9108245e3ec6080bf4f6f0b5a2eaea679546c0b1f00968c2">+307/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>variablesDependencyUtils.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-1a8fd83eb7a8b0c906e668e7e4120a40f7b9853d5bfb485a7c569ff980e4a780">+523/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>variablesUtils.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-769aea99ac476a78b01cb3bb4221b0a0f0d5fa99f3dbc8c77022088ed8024f1b">+533/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>sqlUtils.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-f22df136a6cdfbacf2b637d4902002337620c8e981dbacfdd705455ff899f12d">+1283/-8</a></td>

</tr>

<tr>
  <td><strong>visualizationUtils.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-3312f2b98f34814e89192700cc856231923839bdcd3ea687f271242762b4b3bc">+55/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>DashboardJsonEditor.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-4dfda31e9159f979559afc36652350d155429b73336f014017b27ff96ad58dcc">+551/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>DashboardSettings.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-b29b3e95fd1dfffba34ec05ed6333941f07ee79585feb5e8203eb5958919338f">+640/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Dashboards.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-a8059d6830fa3c72dbe023f76ac813661d62871a379baa30c05204ad86c92699">+813/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ImportDashboard.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-b29b42b94a3219b4074b132168c0b5f5b93e737dc557ba7b930d14455b38b267">+827/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>PanelLayoutSettings.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-34bcd5c5f9b7a2a682f4d4e9c10e3ab4f13a4cc54a6a20bb543f11ae8286d5a1">+423/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>RenderDashboardCharts.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-f76e3b54dc7bfd768172c8faba707c7e31bf0516837cb9073bbdf04823f67602">+700/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ScheduledDashboards.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-f54afa04727c65f2050699e063d693d6fb1833c8e3f1f7b25002de89ab5bb2ff">+519/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddCondition.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-0655e4082a18c9f229d04340341bb32474ae46b3d6e29b29009ef06dcc12e54c">+425/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>DashboardFiltersOption.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-d3e73ec3d32f9068b22b3697ba8a23e3100285b7c92cc86f7d7e88477bb29bba">+878/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Group.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8111/files#diff-556364c74c348eba28f5d8bad6fb23b956008d3f6b9171316ea3ee12009201bd">+718/-0</a>&nbsp;
</td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-09-01 17:18:17 +05:30
Sai Nikhil 1e9761ba61 feat: logs page highlighting (#8059)
### **User description**
This PR helps to highlight text in logs page and also adds a left border
for each depending upon the status of the logs


___

### **PR Type**
Enhancement


___

### **Description**
Add LogsHighLighting component for semantic highlighting
Highlight query terms across logs and JSON
Visual status indicators via colored borders/lines
FTS-aware coloring for selected columns


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Highlighter["LogsHighLighting.vue (new)"] -- "used by" --> Detail["DetailTable.vue"]
  Highlighter -- "used by" --> JsonPrev["JsonPreview.vue"]
  Highlighter -- "used by" --> Table["TenstackTable.vue"]
  Status["statusParser.ts (new)"] -- "row/log status color" --> Detail
  Status -- "row status stripe" --> Table
  Colors["keyValueParser.ts (new)"] -- "theme colors" --> Highlighter
  Composable["useTextHighlighter.ts (new)"] -- "highlight + semantic color" --> Highlighter
  Search["SearchResult.vue"] -- "pass highlight + FTS keys" --> Table
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>8
files</summary><table>
<tr>
<td><strong>LogsHighLighting.vue</strong><dd><code>New component for
semantic JSON/log highlighting</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8059/files#diff-4ef4ac0444004add270de4da30fa39bafd95bd7f1c408d28cf6737655fc152eb">+324/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>DetailTable.vue</strong><dd><code>Add status top border and
inline highlighting</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8059/files#diff-80552b5d25fa6cef9fbbe430b1865d761c4b132284c2d2175afceea8cbabc8c7">+21/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>JsonPreview.vue</strong><dd><code>Use highlighter for
key/value rendering</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8059/files#diff-3985073134d35ff074742944b114d0905524038b42e6d2ac887fef2c8436fb16">+8/-14</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>SearchResult.vue</strong><dd><code>Provide highlight query
and FTS keys downstream</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8059/files#diff-5e65533aa4754bb6d0074fda18ffc1ecacded3b9ca6bc28a161c3f6b12f20195">+16/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>TenstackTable.vue</strong><dd><code>Integrate highlighter
and add status stripe</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8059/files#diff-bc3c669f5ab65a42ae378df1f7d6b35014c9c220790bdcc72b47f55d1385dc22">+34/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>useTextHighlighter.ts</strong><dd><code>New composable for
text highlighting logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8059/files#diff-b18d6e5b667ce7b485a0592cddcaf47cf68b10b6a1b75bd006f21917c4343147">+486/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>keyValueParser.ts</strong><dd><code>Theme-aware color
palette utilities</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8059/files#diff-efcf08bdfe13eeac90f7dadbdb5892ae614d49b16f4f75bfc6225700d0ba7b73">+53/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>statusParser.ts</strong><dd><code>Derive log severity and
colors</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8059/files#diff-c189f5de10234dccf5f5e5b332dbb41f54c21a366ed4817c963bbf2e954d620a">+246/-0</a>&nbsp;
</td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>2 files</summary><table>
<tr>
<td><strong>Index.vue</strong><dd><code>Fix column update timeout
scoping</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8059/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>useLogs.ts</strong><dd><code>Correct FTS key detection
logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8059/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-08-31 14:53:28 +05:30
ktx-vaidehi ef1bf5996b fix: dashboard config height issue (#8201)
### **PR Type**
Bug fix


___

### **Description**
- Fix sidebar height overflow in panel sidebar

- Remove redundant inline height on right column

- Ensure viewport-based sizing for config panel


___

### Diagram Walkthrough


```mermaid
flowchart LR
  View["AddPanel.vue layout"] -- "drop inline height" --> Column["Right column .col-auto"]
  Column -- "hosts" --> Sidebar["PanelSidebar.vue .sidebar-content"]
  Sidebar -- "set viewport height" --> CSS["height: calc(100vh - 176px)"]
```



<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>PanelSidebar.vue</strong><dd><code>Use viewport-based
height for sidebar content</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/addPanel/PanelSidebar.vue

<ul><li>Replace flex/min-height with fixed viewport-based height<br>
<li> Keep vertical scroll via overflow-y: auto</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8201/files#diff-8e63f9f02875ae5308688ef83d5a8d12383dd32b298475e85a210d6c7334af79">+1/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>AddPanel.vue</strong><dd><code>Clean inline height to
prevent overflow issues</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/views/Dashboards/addPanel/AddPanel.vue

<ul><li>Remove inline style height: 100% on right column<br> <li>
Simplify layout to rely on CSS sizing</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8201/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-29 16:27:36 +05:30
Hengfei YangandBhargav 2c0395124f feat: deprecated syslog (#8187)
### **User description**
impl #8186


___

### **PR Type**
Enhancement, Tests


___

### **Description**
- Mark syslog modules as deprecated

- Add allow(deprecated) to callers

- Block enabling syslog setting

- Remove syslog-related tests and OpenAPI types


___

### Diagram Walkthrough


```mermaid
flowchart LR
  meta["meta::syslog module"] -- "mark deprecated" --> callers["call sites"]
  callers -- "add allow(deprecated)" --> compile_ok["compiles with warnings suppressed"]
  db_set["db::syslog::toggle_syslog_setting"] -- "reject enable=true" --> error["returns deprecation error"]
  openapi["OpenAPI schema"] -- "remove syslog types" --> spec["updated API spec"]
  tests["syslog tests"] -- "removed" --> leaner["reduced test surface"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>8
files</summary><table>
<tr>
<td><strong>config.rs</strong><dd><code>Suppress deprecation warnings
for syslog globals</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-cda0d9179ed982fa5f0989c9b26f21cfa49dd1de28195a98135650ffcc7c602a">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Allow deprecated syslog handlers;
annotate endpoints</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-58010c6e78f69dc57c353890a807371cd43c2b4cceeeb1e9378130f26d898397">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Suppress deprecation in API scope
setup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Allow deprecated syslog server
wiring</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-66207bd699343342402f88cdd331f4c549783754e4921d0c8d43e026e2d8e575">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Allow deprecated syslog cache/watch
tasks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-f2e4c29b8eef22189ec704a832633c4bd135a24444f054864c98064bd0963681">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>syslog_server.rs</strong><dd><code>Allow deprecated syslog
server run linkage</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-cb7610142582b44885f673583ab16262c3b9ca6de1f59a9def65e503360665a0">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>syslog.rs</strong><dd><code>Allow deprecated syslog ingest;
remove tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-4bc46f36fad79f5df8c42b8a8d5d8c4a70b1320b966bcff3421deeb96a1981fa">+3/-14</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>syslogs_route.rs</strong><dd><code>Allow deprecated route
endpoints; remove tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-325df35568c993fc0727bfb0499b682e6bd30af781687706306b3bdb429c49e2">+7/-52</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Mark syslog meta module as
deprecated</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-fbf797574839e69491ea0429141c038c0ff96297bdf3d8c60d60cdc4acec74b1">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Mark syslog HTTP request module
deprecated</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-a1cfd40da1ab6cd4db0181fd8664965034298047b3b7c3320c5385897a7c4aed">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>openapi.rs</strong><dd><code>Remove syslog types from
OpenAPI imports</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-edb8ce232c0cd08366879f642788a75d99f6bab64b4c0e77391281fdb9241e90">+0/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Deprecate syslog DB
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-b7e3bf7f0ac23dd084c0c817a310a4d5e7a64ff532746d182986ef940fa03fd0">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Deprecate syslog logs
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-ce72aea3fa4c44904cbd9ec07bd844bec71b49c9676d667b14056aa5798f96b2">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Deprecate syslogs_route service
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-1b15316505c31acccb26ba66d920fdb0894567d08d2bf1e3457716d128a67b83">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>syslog.rs</strong><dd><code>Remove unit tests for syslog
meta types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-dc6813e31e32c23aae5760091460d2ec4023d37ae73e49d29052d9f4e9f2e1fa">+0/-127</a>&nbsp;
</td>

</tr>
</table></details></td></tr><tr><td><strong>Error
handling</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>syslog.rs</strong><dd><code>Block enabling syslog; allow
deprecated routes/cache</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8187/files#diff-4c0e9282e3d2352f9a382099901fe034bae2961eed01d764f16ad52f27f55db4">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
2025-08-28 21:24:21 +05:30
Sai Nikhil 4ef004011f fix: search scheduler issue (#8181) 2025-08-28 19:18:47 +08:00
Abhay Padamani 3f3d12f9e7 fix: visualization sync for saved views (#8168) (#8176)
### **User description**
- Save visualization which contains Dashboard configs as a Saved view.
- CSS issue for config on visualization page.
- `All fields must have alias to visualize` Error msg refactor.

**Note:** On the Logs to Visualize, we use the default chart type(line
or table chart). If a saved visualization view is applied from the Logs
page, it will switch to the Visualization page and select the default
chart type. However, applying a saved visualization view while already
on the Visualization page will work as expected.


___

### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Persist visualization config in saved views

- Sync visualization config to URL on apply

- Improve alias validation error messaging

- Fix sidebar layout and overflow behavior


___

### Diagram Walkthrough


```mermaid
flowchart LR
  SV["Saved View apply"] -- "merge extractedObj" --> SO["searchObj"]
  SO -- "has visualizationData?" --> RD["restoreVisualizationData()"]
  RD -- "set type/config" --> DPD["dashboardPanelData"]
  DPD -- "getVisualizationConfig()" --> VC["visualizationData"]
  VC -- "encode & push" --> URL["router.replace(query.visualization_data)"]

  Save["Save View action"] -- "collect visualizationData" --> SVObj["savedSearchObj.data.visualizationData"]

  UI1["PanelSidebar.vue"] -- "flex layout & shrink fixes" --> UX["Stable sidebar height/scroll"]
  UI2["VisualizeLogsQuery/AddPanel"] -- "full height sidebar container" --> UX
  Valid["Alias validation"] -- "refined messages" --> UX
```



<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>PanelSidebar.vue</strong><dd><code>Make sidebar
flex-based with stable scrolling</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/addPanel/PanelSidebar.vue

<ul><li>Prevent separator shrinking via flex-shrink.<br> <li> Sidebar
becomes flex column with min-height fixes.<br> <li> Header marked
non-shrinking.<br> <li> Content uses flex:1 with proper overflow.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8176/files#diff-8e63f9f02875ae5308688ef83d5a8d12383dd32b298475e85a210d6c7334af79">+7/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>SearchBar.vue</strong><dd><code>Persist and restore
visualization config for saved views</code>&nbsp; </dd></summary>
<hr>

web/src/plugins/logs/SearchBar.vue

<ul><li>Import helpers to get/encode visualization config.<br> <li> Add
restoreVisualizationData to set config/type and sync URL.<br> <li> Apply
restoration when loading saved views.<br> <li> Include visualizationData
when saving views in visualize mode.<br> <li> Refine alias validation
error message.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8176/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+49/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>VisualizeLogsQuery.vue</strong><dd><code>Full-height
container for config sidebar</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/logs/VisualizeLogsQuery.vue

- Ensure config sidebar container takes full height (two places).


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8176/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>AddPanel.vue</strong><dd><code>Full-height PanelSidebar
in add panel views</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/views/Dashboards/addPanel/AddPanel.vue

- Ensure PanelSidebar container takes full height in both layouts.


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8176/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>Index.vue</strong><dd><code>Clarify alias requirement
error text</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/plugins/logs/Index.vue

- Refine alias validation error message.


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8176/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-28 14:11:36 +05:30
Sai Nikhil 1501a6e606 fix: index type for schema check env for fts or secondar index fields (#8165) 2025-08-27 19:18:05 +08:00
Sai Nikhil 12fc60af15 fix: unit test latest v2.0 (#8151)
### **User description**
added unit test cases for missing files


___

### **PR Type**
Tests, Enhancement


___

### **Description**
- Add extensive unit tests coverage

- Expose internals for testability

- Improve VRL language modularity

- Export utility for reuse in tests


___

### Diagram Walkthrough


```mermaid
flowchart LR
  specs["Add comprehensive spec files"] -- drive coverage --> composables["Composable internals exposed for tests"]
  composables -- supports --> store["Store mocks and helpers updated"]
  language["VRL language keywords exported"] -- reuse in tests --> specs
  billing["Export formatDate utility"] -- reuse in tests --> specs
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>4
files</summary><table>
<tr>
<td><strong>SearchBar.spec.ts</strong><dd><code>Add 145+ tests for
SearchBar methods</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-63ac75d3fe278dad233e7dd7c51b3b33076d54a776b89ae05190d8522130c78b">+2196/-0</a></td>

</tr>

<tr>
<td><strong>useStreams.spec.ts</strong><dd><code>Rewrite and expand
useStreams unit tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-513e2d53c46c553904a054e9c2cd12d33e800afc54fe5b4192c9782382ecd79b">+727/-175</a></td>

</tr>

<tr>
<td><strong>useStreams.ts</strong><dd><code>Expose internal helpers for
testing</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-a083369344f022cdf8d4f536719179b1d920369e33e2e26234e70dd36d151a7c">+11/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>store.ts</strong><dd><code>Add meta_org to default store
state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-0f8dff694a1fcfaa42d432168e435b7a2aa122d075fedfd6e75e532aca3b2a73">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>vrlLanguage.ts</strong><dd><code>Export VRL keywords and
refactor usage</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-d8baadeb1ccdabd0e424d3f335476417990ae5f680645db52ba03a94b75afd7a">+7/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>convertBillingData.ts</strong><dd><code>Export formatDate
for external use</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-56fa0a54f04a4fd9d5a715f5dbfe80ebcb852a39720160399e427021f75185ec">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>41 files</summary><table>
<tr>
  <td><strong>AddOpenobserveType.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-d4c9e84859e41b57861e8ec93d08f28111c13c5ca1143c0613f9e3f55051a2f2">+365/-11</a></td>

</tr>

<tr>
  <td><strong>FolderList.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-0c62fad007c4194fb43b3986b2cbdfb7f6317e8e1e4e402d78ec44c951e7973b">+941/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AppOrganizations.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-0be0b81d3cd8b7003dc2aaf283fbe3f2434963086540a4d6bf1dd513fe9ed19f">+1021/-0</a></td>

</tr>

<tr>
  <td><strong>User.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-52945c253c25b4961ba3c66891234a74aa62c69e70f70ee67388bb406f0847cd">+779/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>User.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-e973c2a665f9b27b94673ba64cc5b23650300836a727a2e07673c8e26305aee5">+10/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>LogstashDatasource.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-2cd019295a25886a037e6ede5cad795b52851a377f48beb46f3897bc6d64a20b">+425/-2</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Login.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-746b43968d685362866c3f97bf2b5e0846bac7463fe1ecb080c1c7d962cb855b">+229/-1</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AssociatedRegexPatterns.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-4ca41bf14fd6a3c79a3877324a7c7520a25d1d33f97fe947b2f6dd4bbf6ca5b4">+310/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AssociatedRegexPatterns.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-c6fce5e1c83798991b6ff19effb23c67af59f38fac0b9e56dcab7a09d139f550">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>Nodes.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-65fde080f2ef775dab71d503b730bf029d13640ac241ded1dc22a72185a12082">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>OrganizationManagement.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-bff2884ebe60873c476c6a826739f210aca57e39cd503ca0026e48388be48697">+1090/-0</a></td>

</tr>

<tr>
  <td><strong>OrganizationManagement.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-21e2431538cb6b76e5ef5b367c6df8fc02ad8f6c1294f438be9937c7481ea9ff">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>OrganizationSettings.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-03458cff72df35e454f83d964d2505e87b9c37e4488333e0d18a7757f2b1ebe4">+777/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>useEnterpriseRoutes.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-ce0d8e19a397a63cfe5a423399b9c8f8f08eb0e30913ba9b885a00f5703d2ede">+784/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>useIngestionRoutes.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-3b7ebacf9481f4643a2b56ffe53ab161fc89d416e280d45b48568866a4dee40c">+1013/-0</a></td>

</tr>

<tr>
  <td><strong>useManagementRoutes.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-28a4eb5ed72bef3db05dca1f8e45eef0836819fe0c747783b22cce966d7d6ad4">+608/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>useAiChat.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-666a3e460b35ed780ab299fb01537fe3afdb12dabe2b363d5d91a08a728903f9">+614/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>useAiChat.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-830ee4f21bdbbd0fa5c5c0f43b0a1d0200831e07ccddc91982cf0371c801b046">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>MainLayout.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-59def4c2a6d83249918d30d825ccfb0aa4ce9616586fe13f16a7e29b3827cdbc">+495/-22</a></td>

</tr>

<tr>
  <td><strong>MainLayout.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-91e4134141264c4624d4eb4cfa987b33ed31eb6f551e089c0b26f2610dd54362">+6/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>MetricLegends.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-87f5d1b4980d975625d85d549607833927202ebffe226643723bc733c344622f">+575/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>MetricList.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-cfe67d5bd5005164060b2b219a86074a5b6330e1759260803e54e89255aeb86a">+976/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>MetricList.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-bba38d43b27f28395343746a2de5411a2b18ab093d1843ad6bd413ba50a2b236">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>SyntaxGuideMetrics.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-e83d30b644b4e25b1867e748793726b149a5f8e5e94aac273d32b9fa9f9d73a6">+505/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>HomeView.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-73e32dfbcdec6f87abe68984231fb1227502397e28fd1d91cd9579024010fb82">+771/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Nodes.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-bc3ed81e6399bf6502b432ec0935da08fd0a824adb265a4f579002b4bca13474">+688/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>convertBillingData.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-07358b9d1c1df7af083b9843924628f0525bb2c2552ee5e1392b461a99cec321">+492/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>convertLogData.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-39de9d9ab51415a842d8aa8cee7fa1beb7234eaed7dfcb996a579a2ef4930b4c">+516/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>convertLogData.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-92a6bf770bda75f5e07d57d6cc472f8defa9db6abf02e58de542988b311fed55">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>promQLUtils.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-801511331f719d887e0c2df01bfe47bee812895fb67fde768f3b33ba48ace614">+577/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>sqlUtils.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-f22df136a6cdfbacf2b637d4902002337620c8e981dbacfdd705455ff899f12d">+2074/-15</a></td>

</tr>

<tr>
  <td><strong>sqlUtils.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-dde40e8fcb5c37b06c011ede08922c44a3c025682fbc341aee97ba046b73a0e3">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>vrlLanguage.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-8b8d40ee6bba3647f6e5964e1011778519325e45dbde2cf9abc64e3f9308d3e8">+866/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>vrlLanguageDefinition.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-7885cf603efcffce2a031eaab866f260d0f699f1a52b961ecd77f0bf8aa72039">+651/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AppAlerts.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-7ac6d93d3aa4a91d52bd751822e423a21158e09bfe70cf96fba46f42376d2acf">+798/-27</a></td>

</tr>

<tr>
  <td><strong>Ingestion.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-81be229daf4204aaa0133a1c4cab618bbac68ab704b74ecf3e121636f16c6e61">+1026/-0</a></td>

</tr>

<tr>
  <td><strong>Ingestion.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-97b8e8ed2a1260a39442563c7447d4f6d4830a37d47258920d6f94a292cd2d77">+68/-64</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Login.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-92c3c0344a73a30eadb1c98f849f7297c460f50804cdbb2d34dd374fbcf83d74">+1183/-0</a></td>

</tr>

<tr>
  <td><strong>ShortUrl.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-3838b4efef178fdab0ba9652f21468b36918b3ca9b84783c564cde2a6556ed39">+326/-29</a></td>

</tr>

<tr>
  <td><strong>ShortUrl.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-b7ffcc5de24f9e1db5a3a8e78a686727360f9061ca6f9f8ae60456c3d603f9b7">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>User.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8151/files#diff-1c14af61b2a316a418e1c7b79ff459ea61e1d1ac1f57b7c768421aa8cdd58cd1">+528/-113</a></td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-08-26 17:31:15 +05:30
Sai Nikhil f31304597d fix: unit test cases added (#8133)
### **PR Type**
Tests, Enhancement


___

### **Description**
- Add extensive unit tests across modules

- Expose internal methods for testability

- Extend props for query component metadata

- Minor query and ingestion component updates


___

### Diagram Walkthrough


```mermaid
flowchart LR
  ImportPipelineSpec["ImportPipeline.spec.ts (new tests)"]
  RunningQueriesSpec["RunningQueries.spec.ts (new tests)"]
  RunningQueriesListSpec["RunningQueriesList.spec.ts (new tests)"]
  PlansSpec["Billing plans.spec.ts (new tests)"]
  OtelLogsSpec["Logs OtelConfig.spec.ts (new tests)"]
  ImportPipelineVue["ImportPipeline.vue (expose internals)"]
  QueryListVue["QueryList.vue (add metaData prop)"]

  ImportPipelineSpec -- tests --> ImportPipelineVue
  RunningQueriesSpec -- tests --> RunningQueriesVue["RunningQueries.vue (updated)"]
  RunningQueriesListSpec -- tests --> RunningQueriesListVue["RunningQueriesList.vue"]
  PlansSpec -- tests --> BillingServices["Billing services"]
  OtelLogsSpec -- tests --> OtelLogsVue["OtelConfig.vue (logs)"]
  QueryListSpec["QueryList.spec.ts (new tests)"] -- tests --> QueryListVue
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>11
files</summary><table>
<tr>
<td><strong>ImportPipeline.spec.ts</strong><dd><code>Add thorough unit
tests for ImportPipeline</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-228ad64e4e9ffc0096add762a2619f4531b1fdd638a18b02d031f98bda0f76fd">+1083/-0</a></td>

</tr>

<tr>
<td><strong>RunningQueries.spec.ts</strong><dd><code>Add comprehensive
tests for RunningQueries view</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-b73fab81a4d70291bca59d1f0f408f872705829fadad6b8b6fe1165d8f022490">+680/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>RunningQueriesList.spec.ts</strong><dd><code>Add unit tests
for RunningQueriesList table</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-b80dbf8f275c5bbdae8c5b1b336a67d3dbc6aa8e6f27dd4b8be548c1e6eafae3">+664/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>plans.spec.ts</strong><dd><code>Add unit tests for billing
plans component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-4398fd7c1bd0322c6a964f63b59dd79a190c2f089792460ec43dfa1cd9a8063f">+664/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>OtelConfig.spec.ts</strong><dd><code>Add unit tests for logs
OtelConfig generator</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-46fbf1ab0a2ead705ff5593e115166853ebdfc66e463f893b7e8934bb50bacde">+340/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>invoiceTable.spec.ts</strong><dd><code>Add unit tests for
invoice table</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-a95d419747ed8c8f054d4633d524261b34d709e091af3b0ee656f1bb0c01599c">+655/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>OtelConfig.spec.ts</strong><dd><code>Add tests for
recommended OtelConfig</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-f6c9086bfb3685c0483782e995b01687f40fc0d68d752fe70222512c735c79be">+529/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SummaryList.spec.ts</strong><dd><code>Add tests for queries
summary list</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-b29217e2817d222ee871ba8a205c2e89a832e59a02f0964a85a118c321f41772">+392/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>invoiceHistory.spec.ts</strong><dd><code>Add tests for
invoice history component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-0a63edfe6e4c010c3f80c7afe0f22a394e666591702c376d89e4cc3d0f1f499b">+381/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>QueryList.spec.ts</strong><dd><code>Add tests for QueryList
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-e08f882439ac0d15ee00d96205df02345821408ab81bade0267f780b66b956e2">+345/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>enterprisePlan.spec.ts</strong><dd><code>Add tests for
enterprise plan component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-afe194ebfc98f24482cc388a5e8482174dd48e74c302d24c00b2c9b309b0a2d1">+271/-0</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>4
files</summary><table>
<tr>
<td><strong>ImportPipeline.vue</strong><dd><code>Expose internal methods
via setup return</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-d57fa41169daa44551a181f21ca33882004b29ab74e3040e4c56a8c849078670">+16/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>QueryList.vue</strong><dd><code>Support additional metaData
prop</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-3daa87342834ae1e5bc6d74cb6dbd640b5b5fbb8df15c3cfe43b74c84f872d5d">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>RunningQueries.vue</strong><dd><code>Update logic to align
with new tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-6f0e18626a986d934c08c368ac383179c56bfcd914a27619ba748f43629c926b">+14/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>OtelConfig.vue</strong><dd><code>Minor updates to support
tested behavior</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8133/files#diff-f5f5b0e070bcd827d74339487f2dd8353be1e9095fc4edf6c8c59b6b4dd56ea2">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-08-26 16:35:32 +05:30
Bhargav 6484335345 feat: added oracle database page under datasource (#8140)
### **PR Type**
Enhancement, Documentation


___

### **Description**
- Add Oracle ingestion route and page

- Include Oracle in database tabs and i18n

- Link Oracle docs in ingestion helper


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Routes["Ingestion routes"] -- add --> OracleRoute["/ingestion/database/oracle"]
  DatabaseTabs["Database.vue tabs"] -- show --> OracleTab["Oracle tab"]
  OracleTab -- loads --> OracleComponent["Oracle.vue"]
  IngestionHelper["useIngestion.ts"] -- adds doc URL --> OracleDocs["Oracle documentation link"]
  i18n["en.json"] -- adds key --> OracleLabel["ingestion.oracle"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>useIngestionRoutes.ts</strong><dd><code>Add Oracle
ingestion route</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/shared/useIngestionRoutes.ts

<ul><li>Import <code>Oracle.vue</code> component.<br> <li> Register
<code>oracle</code> child route with <code>routeGuard</code>.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8140/files#diff-29b1f8a3bf25d16999da323aefcd8cd0eff4647a0c0d737abd355a008492b2ae">+9/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>Database.vue</strong><dd><code>Add Oracle tab in
database list</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/ingestion/Database.vue

- Add Oracle tab entry with icon, label, and route.


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8140/files#diff-9f043be1b81e96e163d333d8fac934fbd8cf9009076eeaaf2bd8ee360a3e913c">+12/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>Oracle.vue</strong><dd><code>Create Oracle ingestion
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/ingestion/databases/Oracle.vue

<ul><li>New Oracle ingestion component with copyable content.<br> <li>
Links to Oracle documentation via composable.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8140/files#diff-7b4b75f7f33025d817df39548bd9209f634f26b7c494c868a3fe1c17eca75765">+37/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>useIngestion.ts</strong><dd><code>Include Oracle docs
URL</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useIngestion.ts

- Add `oracle` docs URL to `databaseDocURLs`.


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8140/files#diff-3691717c742137402219c92e4bb4a5943d2676e058e2320bd009faa40ee2ce6a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>en.json</strong><dd><code>Add i18n label for
Oracle</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/locales/languages/en.json

- Add `ingestion.oracle` label.


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8140/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-26 12:39:30 +05:30
Bhargav dd0fbf147a fix: remove environment option from list (#8141)
### **PR Type**
Enhancement


___

### **Description**
- Split index options for environment fields

- Remove env options from default list

- Conditionally render options based on row settings

- Expose new env options in component state


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["Schema Index Select (QSelect)"]
  RowCheck["isEnvironmentSettings(row)"]
  DefaultOpts["streamIndexType"]
  EnvOpts["streamIndexTypeEnv"]
  State["Component exports"]

  UI -- evaluates --> RowCheck
  RowCheck -- true --> EnvOpts
  RowCheck -- false --> DefaultOpts
  EnvOpts -- provided as :options --> UI
  DefaultOpts -- provided as :options --> UI
  EnvOpts -- added to --> State
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>schema.vue</strong><dd><code>Split and conditionally
apply environment index options</code>&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/logstream/schema.vue

<ul><li>Add <code>streamIndexTypeEnv</code> with environment-only
options.<br> <li> Remove environment options from
<code>streamIndexType</code>.<br> <li> Conditionally set QSelect
<code>:options</code> based on
<br><code>isEnvironmentSettings(row)</code>.<br> <li> Expose
<code>streamIndexTypeEnv</code> from setup return.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8141/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+7/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-26 11:12:03 +05:30
Sai Nikhil 15c019fe93 fix: regex patterns introduce search as well (#8134)
### **User description**
1. we are now support both redaction or dropping of matched regex field
during search time and ingestion time


___

### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add confirmation dialog before removing pattern

- Support deselecting apply_at with safe revert

- Generalize redact/drop copy beyond ingestion

- Track dialog state and handlers


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["AssociatedRegexPatterns.vue"]
  Dialog["ConfirmDialog component"]
  State["showWarningDialogToRemovePattern state"]
  Logic["apply_at change handler"]
  Revert["transformApplyAtValue + cancel handler"]
  Actions["handleAddOrRemovePattern"]

  UI -- "imports & registers" --> Dialog
  UI -- "manages" --> State
  Logic -- "empty selection triggers" --> State
  State -- "cancel" --> Revert
  State -- "ok" --> Actions
  Revert -- "restore previous apply_at" --> UI
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>

<summary><strong>AssociatedRegexPatterns.vue</strong><dd><code>Confirmation
and apply_at handling improvements</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/logstream/AssociatedRegexPatterns.vue

<ul><li>Add ConfirmDialog to confirm pattern removal.<br> <li> Introduce
state and handlers for removal flow.<br> <li> Allow empty apply_at to
trigger confirmation; revert on cancel.<br> <li> Simplify redact/drop
help text; remove hardcoded ingestion fallback.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8134/files#diff-c6fce5e1c83798991b6ff19effb23c67af59f38fac0b9e56dcab7a09d139f550">+57/-11</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-25 20:59:43 +05:30
Bhargav 0a63a10032 fix; UI unit test case v7.2 (#8132)
### **PR Type**
Tests, Enhancement


___

### **Description**
- Add comprehensive settings unit tests

- Introduce regex patterns test suite

- Expand MSW handlers for settings APIs

- Add mock data for regex patterns


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Specs["New settings/regex spec files"] -- "use" --> MSW["MSW rest handlers"]
  MSW -- "serve" --> Mocks["Regex patterns mock data"]
  Specs -- "mount" --> Components["Settings components"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>AddRegexPattern.spec.ts</strong><dd><code>Add end-to-end
unit tests for AddRegexPattern</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8132/files#diff-8010ecaba14a295a81248da3901421fe133feb14b178512a4690d2c76eabde03">+626/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>CipherKeys.spec.ts</strong><dd><code>Add full unit tests for
Cipher Keys page</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8132/files#diff-017c69ca1a10dd456e41c8fd188539c6b8c57c0437351710a177358ae3db1fef">+787/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>General.spec.ts</strong><dd><code>Add unit tests for General
settings and branding</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8132/files#diff-f3b556321cf5c1b7cfcc36507d050f70ea355971d718ddb6bafa6faf2dc6d298">+851/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>NoRegexPatterns.spec.ts</strong><dd><code>Add unit tests for
empty Regex Patterns state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8132/files#diff-92a31474de14534958fdf8056a7e6ab9334493c92740fe1ed738fabf01de18cd">+361/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>index.spec.ts</strong><dd><code>Add unit tests for Settings
index navigation and tabs</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8132/files#diff-7c2e13b69b48077a1e82e767fa048995d42d4bef03362f19ad0897f7e2a4dfb3">+543/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>regexPatterns.ts</strong><dd><code>Add mock data for regex
patterns and results</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8132/files#diff-c7324fdbffcb15b12d0597c7235234970331a4e4819611e1241a00b1b936f570">+41/-0</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>handlers.ts</strong><dd><code>Extend MSW handlers for
settings and regex APIs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8132/files#diff-fa72375a2848d474b311c07cf6aef7d6117b1f4d88f56a74c9207f39df72333c">+96/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-08-25 16:59:40 +05:30
Omkar Kesarkhane e92ed4bcc2 fix: Traces Component Testing (#7877)
### **PR Type**
Tests, Enhancement, Bug fix


___

### **Description**
- Extensive unit tests for TraceDetailsSidebar and TraceTree

- Add data-test attributes across trace components

- Handle zero duration in formatTimeWithSuffix

- Fix highlightSearch quoting and JSON formatting


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody></tr></tbody></table>

</details>

___
2025-08-25 15:09:13 +05:30
Abhay Padamani 4963bd648d fix: parse cte query to extract stream name (#8102) (#8116)
### **User description**
- #8080
- #8098


___

### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Fix stream selection for CTE queries

- Add robust stream extraction utility

- Make query updates async-aware

- Adjust watchers to trigger reliably


___

### Diagram Walkthrough


```mermaid
flowchart LR
  SQL["SQL query (incl. CTE)"] -- parse --> Extract["getStreamNameFromQuery()"]
  Extract -- returns stream --> Panel["useDashboardPanel: updateQueryValue()"]
  Panel -- set --> StreamField["currentQuery.fields.stream"]
  Watcher["Vue watch hooks"] -- trigger on changes --> Panel
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>FieldList.vue</strong><dd><code>Stabilize watcher for
stream type changes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/dashboards/addPanel/FieldList.vue

<ul><li>Change watcher source to array form.<br> <li> Ensure stream list
reloads on type changes.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8116/files#diff-a071c06e3e26629cb4ae4751450acc39c61fa49b07a1cc4be3711697829668d4">+5/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>sqlUtils.ts</strong><dd><code>Add robust stream
extractor for SQL/CTE queries</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/utils/query/sqlUtils.ts

<ul><li>Add <code>getStreamNameFromQuery</code> to parse SQL/CTE.<br>
<li> Safeguard recursion and circular refs with WeakSet.<br> <li> Handle
FROM, WHERE, SELECT subqueries.<br> <li> Gracefully handle parser
errors.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8116/files#diff-dde40e8fcb5c37b06c011ede08922c44a3c025682fbc341aee97ba046b73a0e3">+76/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>useDashboardPanel.ts</strong><dd><code>Async query
parsing and CTE-aware stream resolution</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useDashboardPanel.ts

<ul><li>Import <code>getStreamNameFromQuery</code>.<br> <li> Make
<code>updateQueryValue</code> async and await in watcher.<br> <li> Use
stream name from parser for selection, including CTE.<br> <li> Remove
redundant parsing branch; minor bug introduced in logs flag.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8116/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+15/-23</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-25 13:58:39 +05:30
Ashish Kolhe ebe5c0e73e feat: search time patterns (#8104)
### **PR Type**
Enhancement, Tests, Documentation


___

### **Description**
- Apply regex patterns at search time

- Map projections to source columns

- Integrate enterprise pattern manager

- Add tests for projection extraction


___

### Diagram Walkthrough


```mermaid
flowchart LR
  SearchReq["Search request"] -- "execute query" --> DatafusionPlan["DataFusion logical plan"]
  DatafusionPlan -- "extract projection mappings" --> ProjMap["ProjectionColumnMapping"]
  SearchReq -- "fetch hits" --> Hits["Search results (hits)"]
  ProjMap -- "guide field processing" --> PatternMgr["Pattern manager (enterprise)"]
  Hits -- "apply regex patterns" --> Hits2["Transformed results"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Expose projections module in
meta</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8104/files#diff-bab79e8da2d0d9f903cb1a6187d922c6de63d3e4561e8ce633660b664b4e859f">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>projections.rs</strong><dd><code>Add ProjectionColumnMapping
structure</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8104/files#diff-2432b13a92a92cdbd1aa1ee0fbdde05827a67c37081e7f0ecc127a4effbe3101">+26/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Post-process hits with regex
patterns</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8104/files#diff-f07bfacc0501b9c234e64b16c1dd8eb0ae8fcbe231f90c81fed72bcc94946f74">+61/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Register regex_projections planner
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8104/files#diff-70bb941c2eef1365e5ead1a59b65c5397457b9197a4e22596e18d17db7eaf922">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>cache.rs</strong><dd><code>Apply regex patterns to cached
responses</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8104/files#diff-55769b7cb67b550daf45363c6d7d569b39d4a6235f6a68c091beb40f16b6511e">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>execution.rs</strong><dd><code>Apply regex patterns in
streaming paths</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8104/files#diff-75d432351865224f0b00d7cc819554c2ad5fa1f777e9c645d91a3fd5c1113bc0">+35/-1</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>regex_projections.rs</strong><dd><code>Extract projection
source columns with tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8104/files#diff-b329e80dfa025fabb0ef51b6dc25285aaadc00ab7862157deb0eb7b0b01bb494">+500/-0</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>AssociatedRegexPatterns.vue</strong><dd><code>Enable UI
section for detect-at choice</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8104/files#diff-c6fce5e1c83798991b6ff19effb23c67af59f38fac0b9e56dcab7a09d139f550">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-08-25 11:49:23 +05:30
Sai Nikhil c5bc2f97c2 fix: made fn editor by default false (#8000)
This PR fixes the issue #7960
2025-08-24 10:35:57 +05:30
Sai Nikhil 4c03ed1a43 fix: normalize the limit to 100 by default (#8075) (#8078)
### **User description**
1. This PR changes the user limits to 100 by default while validating
the query so it will solve the issue of larger limit
2. we dont change the original query but instead while sending for the
validation we replace the limit if it is greater than 100 to 100
3. it will also detect limit in the entire query so multiple limit is
possible in ctes , sub queries so handled that as well
4. if no limit then we will simply return it


___

### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Normalize SQL LIMIT during validation

- Cap LIMIT to 100 across query parts

- Preserve original user query intact

- Handle multiple LIMIT/OFFSET safely


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["User SQL"] -- "pass to validation" --> B["normalizeLimit(sql, 100)"]
  B -- "replace LIMIT > 100" --> C["Capped SQL for validation"]
  B -- "no LIMIT found" --> D["Original SQL for validation"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>Query.vue</strong><dd><code>Add SQL LIMIT normalization
for validation path</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/pipeline/NodeForm/Query.vue

<ul><li>Use normalizeLimit before assigning query SQL for
validation.<br> <li> Implement normalizeLimit to cap LIMIT to maxLimit
(default 100).<br> <li> Support multiple LIMIT/OFFSET occurrences via
regex replacement.<br> <li> Add error handling and comments; keep
original query unchanged.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8078/files#diff-6247cbd506bcf963372f2e429507fc579af95f003df246889b478da11326a657">+36/-1</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-24 09:38:03 +05:30
Sai Nikhil f78f5d79c8 fix: added unit test cases (#8121)
### **User description**
with this PR the coverage is 

-----------------------------------------------|---------|----------|---------|---------|-------------------------------------------------------------------------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s

-----------------------------------------------|---------|----------|---------|---------|-------------------------------------------------------------------------------------
All files | 48.05 | 82.25 | 50.81 | 48.05 |


___

### **PR Type**
Enhancement, Tests, Bug fix


___

### **Description**
- Add comprehensive unit tests across modules

- Expose component internals for testability

- Safely access org identifier with optional chaining

- Minor exports to composables for testing


___

### Diagram Walkthrough


```mermaid
flowchart LR
  components["Vue components"]
  expose["Expose methods/refs via defineExpose"]
  specs["New/expanded unit tests"]
  fixOrg["Optional chaining for org identifier"]
  composables["Composables export additions"]

  components -- "defineExpose, returns additions" --> expose
  expose -- "enables" --> specs
  components -- "query params use ?.identifier" --> fixOrg
  composables -- "export more helpers" --> specs
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>index.vue</strong><dd><code>Use optional chaining for org
identifier in routes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-699c63979f851c48ad440a078e93282fd797a18fc065e5331b2e41122ddb8b69">+15/-13</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>39
files</summary><table>
<tr>
<td><strong>Stream.vue</strong><dd><code>Expose stream form methods and
state for tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1a17ced9dc89022502cab0a6f9b97b413c2a2c4f8219733d063fc0180d361739">+33/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>RealTimeAlert.vue</strong><dd><code>Expose alert editor
methods/data for tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c3ae6b47832eb33f9ca877cc7165d079de14850e5c5d43a227102ba40326b9d8">+19/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ExternalDestination.vue</strong><dd><code>Expose destination
form functions and state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-7ed6a9ef676d7d6db5440d4157512f731bad58716c351ca39015125a8a9d2df5">+22/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>PerformanceSummary.vue</strong><dd><code>Export additional
helpers and imports for tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-fdf59594c111c1af03772c9deef4ba07cf2c2d00c9609737a0ea3e3c76fb1c1b">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>StreamFieldInputs.vue</strong><dd><code>Expose field input
handlers and state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c8173413939f320f197b0f8790e619da18666f79009345f72b3325e89bbb7566">+17/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>FilterGroup.vue</strong><dd><code>Expose group manipulation
helpers for testing</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-8d5a73bea3aa0b5c86d48cda4a61ee3e30f27797ac2a5add1ee8bd66c75bef23">+17/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ImportDestination.vue</strong><dd><code>Expose validation
and helper functions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-814b8ef1dbb4eebca9dfab72452d9a90d5f3fa5886dea8e82ac0bde44f66b445">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>PipelinesDestinationList.vue</strong><dd><code>Expose list
helper functions and selectedPerPage</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-088c66f5a34e73a5350a794a772e5d905262277337c937dd36f4295072203ebf">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>SearchBar.vue</strong><dd><code>Expose additional editor and
action handlers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ImportTemplate.vue</strong><dd><code>Expose template
validation and helpers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-d22684c5142a49b8925a9dba1ef67631128caa95de66e71ba2a5b8120a0b91c6">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>IndexList.vue</strong><dd><code>Expose websocket/search
helper functions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ImportAlert.vue</strong><dd><code>Expose alert validation
helpers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-0f40dbf2757672e39ad16b86dddc59b568ca2e6ca36850420cd7be617da12d38">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AlertsDestinationList.vue</strong><dd><code>Expose
destination list helpers for tests</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-e9d05ba6c071c0e2f5d9ef7acdef757f79910abd6897b29e27b069a10d4ba8de">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>SysLog.vue</strong><dd><code>Expose syslog route helpers and
state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-2f538c29fd1d51aa470edad915666faca1deade7413645f033f2a67354b3726c">+9/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>TelegrafConfig.vue</strong><dd><code>Expose ingestionURL in
setup for tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f934fcfd5f71fff85e099f5ddf133a1cdd2a02aa3ade339dee73d54474480acf">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>schema.vue</strong><dd><code>Expose schema helpers and
formatters</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9196be2ccae4054a00b0b1aa9d1e87b366c10920d6eaf9ef8c6e6293d50bcf46">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AssociatedRegexPatterns.vue</strong><dd><code>Expose pattern
state/check helpers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c6fce5e1c83798991b6ff19effb23c67af59f38fac0b9e56dcab7a09d139f550">+6/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddFolder.vue</strong><dd><code>Return defaultValue for
tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-41d2f8fac44084c004d8386ea4cc32e9c5d3e33266c4009cc855e57fb00a41af">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>ImportRegexPattern.vue</strong><dd><code>Expose regex
pattern validation and helpers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-e8e1bcb5a02311504d7d571090eab27a270aaa71cae185ad2703023e2e70a31e">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>SearchSchedulersList.vue</strong><dd><code>Expose date
helpers and router</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-0c0a4097c53f07712d35562b1336602bf24faddedab77a9f5717f5582dcac2f1">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>MoveAcrossFolders.vue</strong><dd><code>Expose getModuleName
from setup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-3826ffbf7e4cbae5b621527c9df856e1bd3b349b78d4a6c514b6967636d04237">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>SearchResult.vue</strong><dd><code>Expose row/partition
helpers and column sizes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-5e65533aa4754bb6d0074fda18ffc1ecacded3b9ca6bc28a161c3f6b12f20195">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AddUpdateTicket.vue</strong><dd><code>Expose
validation/upload methods via expose</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-bd6f97ffe635a2127610e0bbc94b1c9fe40a6ca1dff98e72efc4a449116c59db">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>usage.vue</strong><dd><code>Expose getUsage and
router</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-87c1e1d75e488a25773db68ada1e49913ad50be7971fbb588939941a3ea6302b">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>Databricks.vue</strong><dd><code>Expose database config
state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-2ff8f0c23b75de8b87f86d00af9de4f6c8ceb335ade6cbef227cb37f26d42ae6">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>SqlServer.vue</strong><dd><code>Expose database config
state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-23653eb1e4b5fa9fc519ac44cdf06b01e645d61c86340e59fcf58eb11702008f">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>JsonPreview.vue</strong><dd><code>Expose getTracesStreams
function</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-3985073134d35ff074742944b114d0905524038b42e6d2ac887fef2c8436fb16">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>VisualizeLogsQuery.vue</strong><dd><code>Expose hovered
series and metadata</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>FrontendRumConfig.vue</strong><dd><code>Expose defaultConfig
for tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a90414833508a6d5f76b245c65f2a2ff067ada5e1c5c09b1b53598a4881e2676">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>OpenTelemetry.vue</strong><dd><code>Expose ingestionURL in
setup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-45be3e74a543860331e1cbb11c299a81d5f2e49030bcc3eab03dd6db09f93c5b">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>Index.vue</strong><dd><code>Expose ingestRoutes for
tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a8ce6281b41747a4c58b111d6c31a57f8597b2c33f79d9b236af548d5683b200">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>PipelineFlow.vue</strong><dd><code>Expose store and
setViewport</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9c7475a54f0c895dd49eb0c5b53fe0a76ceff0520f667a9cb065b364557ced50">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>MessageQueues.vue</strong><dd><code>Expose
messageQueueTabs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-ab520bb9b203fc532d2544ba60b140600cbc0efb9773e000c1867076275780bc">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>Database.vue</strong><dd><code>Expose
databaseTabs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9f043be1b81e96e163d333d8fac934fbd8cf9009076eeaaf2bd8ee360a3e913c">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>Languages.vue</strong><dd><code>Expose
languagesTabs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-5ac446e8fed967883b402dfe4ff686717138a76f0333c2416a6b6f955a0086fc">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>Networking.vue</strong><dd><code>Expose
networkingTabs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-ca61b8331afde2b46c0a193e0cc31e2b6b8a915aad1841fbbda229450af02726">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>Recommended.vue</strong><dd><code>Expose
recommendedTabs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-d52f7f52bf8f6d3d639e5d0a550bed82223cd4fbd3eee3c257b7f80e0b8ee6d2">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>SearchBar.spec.ts</strong><dd><code>Rewrite and expand
SearchBar unit tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-63ac75d3fe278dad233e7dd7c51b3b33076d54a776b89ae05190d8522130c78b">+1058/-1118</a></td>

</tr>

<tr>
<td><strong>GCPConfig.spec.ts</strong><dd><code>Add unit tests for GCP
config logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-76e896e96fdae254b7b569e0d3afdea55b05c7777d6eda2da0374fe782d74457">+533/-0</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>usePromqlSuggestions.ts</strong><dd><code>Export additional
suggestion helpers/state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-250bf4b2d8cb3845005f72188d73ab954359f841e15c4f217708beac1493e83a">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>101 files</summary><table>
<tr>
  <td><strong>App.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-e5d10660c09127e3b4234cd8fe18303e53db38e43a1c5a6edb13032afbebe28f">+291/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AutoRefreshInterval.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-4fae96431d981a4338e96dd393820e3497ed56382adc77fab6024f6efd15bd4c">+320/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ConfirmDialog.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-16ffba01e15b66513827b99a68c002b567e65bd1124f9bcf7c4db8db5795df8a">+61/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>CopyContent.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a09160ad7355806c5f4f5b0194a6026ed7c24a77f3de0bce58ffa67c4e97de4d">+348/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>CustomDateTimePicker.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f3c4dc21e87d485ae2d167b1f4e993ffc00b941b207a664ea504468842f4d428">+338/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>DateTime.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-ee6ae1a77af32afb0b0410cbe812d546c8639815748908e716d48a189695d8ec">+543/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>MenuLink.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-bd04ff500fc31583a430993830eed36cdf6254c2ce1a52b8a58a07b89bb9f825">+56/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>PendingSubscriptionWarning.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a38d050077b70a4e16ed3fa89df6978e0d15284b824fc1840ed3d0f10403f9f8">+301/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ResumePipelineDialog.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-ca982d78b8c120585dcf75837fbc09426c3fa2dd7e0f3a8d6cdbf9954aee6027">+136/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>RouteTabs.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f4940a707bb9a1790b34d87c2588bb957876214edbfaf0072b2519afe230d077">+400/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>SanitizedHtmlRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-b45de775a1fc42af052b7af7b5c0b40512fab530db228a548e5bbe0510e774de">+350/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FileItem.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-189b4998b9446d2b44aa820117eb54f555e15fb5d12dbd5bf61b4722fbc85b4e">+395/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ScriptEditor.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-7989b3c2125f44e258f2e1e12dbb6e0608c2cfd6165619815501c8a4548b641c">+408/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ScriptToolbar.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-5057edcc2e7f7f2bd115d1ad3b00bb668607662edee60131ba04fd078e41eaef">+412/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddAlert.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-84362398fea8abd9acf30f4f40ba8d4cf27348677454017bd4e6f568d5176ac6">+5/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>AlertsDestinationList.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-796a77635e67bca70cc19a671e1862438f78a9391ede0e936763e2204bd7a876">+709/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FilterCondition.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-d09ca687da324598f7c1f17610406dda5c47faba21b1eba5dd606ce8f5a2671e">+463/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FilterGroup.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1628547d4b6650b1e87817989b84ffb25895c64ad789457b094860fcd7f13447">+1405/-0</a></td>

</tr>

<tr>
  <td><strong>ImportAlert.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-553f61b4cb949550d09d7016031a29361e4aaa22ad86f20781787bc4ccf43272">+951/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ImportDestination.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-cf334a840c66788867f54f726f5d9431f8e1197637c641469a34e63facfcb180">+815/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ImportTemplate.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1a14d1b5cdc535c0fd982bcb6c02af07b647d5013922084df5d208c673eefaff">+875/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>PipelinesDestinationList.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f749b2cdb5476b289a38418201bf27c69a7e9ab01237f6ffefc7b23392c3ff71">+529/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>RealTimeAlert.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-3b33541be3d07c04f1afd3b0a716e683b804b4f8adcba09b4fc5f3ddd0c14ef6">+693/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ScheduledAlert.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c85c209fe2d6eb3e8a223ddc1124e713f21ce3bbddf657be931cf8726f2e2934">+1197/-0</a></td>

</tr>

<tr>
  <td><strong>VariablesInput.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1c6c211f8e8e49e12619c73ac450cfdc6f92f5ffc533bf09716477fa37154786">+353/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddCipherKey.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1ae71f00dfb6f9424d2443856ca3a419aaf2ee0c08900f7ef2ca44e41c1982e9">+507/-467</a></td>

</tr>

<tr>
  <td><strong>AppDialog.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-28cde24b3e035186bbdf389f3c7560ba087588fd52d377c5615d50a6b5ad3dc7">+443/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AppTabs.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1a762da82b05a89aaea5cfac75315972be2fcc622d8dcabd9bb6e10a091a2e9d">+132/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>JsonEditor.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-be62ee12fe0b191ed850f0d8c6be49abc52596a06bfd10ac037ecc8f758d2660">+107/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>LoadingProgress.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-6096c465ac03fdbe599251405ff150d38ffc2f42be501d93723a6cc9f8eeae52">+153/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>RelativeTime.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1ab920651a73975c32a1e00c0c6c0596866bf65b6aeec005e0d17f5084fddfef">+75/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>AddFolder.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c47fb42fd03cf2b19f7c1da98ec484699730d00d2a5ae348002df727c6f009b4">+545/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FieldList.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-b32e6b73a1268169f32fcd0a092350e543c3d4ffb00eef685aed4ba8c36ac6a1">+907/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>MoveAcrossFolders.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-4bce3286733956ade6e6f93cc65f471314a07e610b7e3f57a95050f683fc688a">+1385/-0</a></td>

</tr>

<tr>
  <td><strong>AddFunction.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-5bf8cf7b136d01ade73a969358f28642eca484ee1f93008f2787405bc928c0df">+883/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>EnrichmentSchema.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-020714ac53ba9e0397b5f0d7fa40bbb54638a30858d2e85693e117e3616c03d1">+394/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FullViewContainer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-498a7631461da0b1acbb272f4e1be20f999a28cdbf66f3e2f86b2f59b82841fd">+503/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FunctionList.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-555eb5d72b94d73c66cc303b1e3cece61564b622f7b1010219a23761c21f4c55">+0/-618</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>TestFunction.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c1b26d908f381d548650300e436d7b2e22410ef4e3d6508287c951add6633f3c">+598/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ServiceAccountsList.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-7b77b3425b30af8671b95b2c74702c89cf374669c2dc67a0b49ec182d30bedcd">+415/-99</a></td>

</tr>

<tr>
  <td><strong>AscSort.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-afc2d5fea4960d77d9f0487a89139f5409c9f55e34c3a58aedc8664cb9465c36">+200/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>DescSort.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f6c074687e3f02ec34f0c398f64a100f5511baf1789e5dd280d48f999dfd8505">+231/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FunctionIcon.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-5ce858f61f52bf2fdad1dc34d3ecdd852f38c66e329b6f71a4eb25f745530ada">+313/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>PipelineIcon.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-28fb2dcadc48a4bf7407fe99d2dddcd4993b430fe8398db23c786abd9cdad427">+340/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Custom.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-75fb68bb0e3ab0416c7a6840bd615a0432026c0675b7b8db80cedd8a29f07d0f">+941/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Database.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-890a9b5f5bde73f36522a300d5ada6f14fae2a94bdb3f061ac3e7d1d0cb9cd8e">+775/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>DevOps.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-8dbbccb5f29f0766ead95f3aea538f5f5b85ec3b2ff8fbedbaff50f0c5771ab4">+331/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Languages.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-34642bc2e6238f98a78fe2185eadd4995749ae336204bfb6095620369268e7d1">+753/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>MessageQueues.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-eee646fcdd254e0be152dfb3f2c6749b1710b6ec6be272b8c5f865b83d2853df">+526/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Networking.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-aff8de29d05af2b04cc0b83ab292896c79a6d68cfb3649c10ec517679b73e97e">+659/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Others.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-56f4544b83413f5b8d87c5fec280204b75388a0686c388445b3eceaef523f10e">+493/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Recommended.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-86de7fab5e678188cf1b96d463809fa645abd8d1a19d86cd3f2214b12fac3c43">+557/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Security.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-952301dec9efb69bbdc3b82753e8a7c86d64a67e3cd544fcc50f118fcd1d017e">+623/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Server.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-80a46b98c8aef2059b9d25de464c3450aa3310c02d1a4bbfcd32a706b5d0334c">+667/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Databricks.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-0cc6f4230b08c6d1f888bae4c5d9f11169714506be5f3be77b371ced9d084936">+350/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Postgres.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-046ae7ca570ff9960c83ec5fca8a95110a5158ceafda48549bdf47ccc5c71b71">+498/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>SqlServer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-33abd49e96a5a6ecb0e07f76f3b55cb53a12674ddd450890ec185eb85e33fae3">+313/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Curl.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-755d02153c11d74b259e12605ae3ad203b01507c4f778347616ed4c1ba542024">+374/-24</a></td>

</tr>

<tr>
  <td><strong>FileBeat.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-d4f433b57979c49407559afd1b9a35131cf823a29596882f46aca6aa8789a777">+389/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FluentBit.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9bb84df5402b65026cdf6fe4ead0937f825f129538f4e7e6291492a9b9ade289">+362/-27</a></td>

</tr>

<tr>
  <td><strong>Fluentd.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-b0d737e6ac8536493791c38acde3b0b339bae519b8ce58fb780f794bc31f62d1">+382/-23</a></td>

</tr>

<tr>
  <td><strong>LogstashDatasource.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-2cd019295a25886a037e6ede5cad795b52851a377f48beb46f3897bc6d64a20b">+522/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>SysLog.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-98526471b0f8a5a7547c205c9da6f8b4e62f20c6ee728b687225d4ee1c564758">+966/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>SyslogNg.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c1afe13c4d7ccf6c9e360c4beff423e785f52c05b58340acf5d0e11fbc77bfc3">+787/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Vector.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-35a48d805d8ded5b793d07c4dbb85cfafb759d073e597758cb999ed28eaf3f31">+571/-26</a></td>

</tr>

<tr>
  <td><strong>ingestionIndex.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-aa6c7d67f4885ef49f587f3dde7760ba3eabea6478e776aede5f86ab4ca76e75">+570/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>CloudWatchMetrics.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-d2e18e89f6400e04f77e4dff297030ffdf6306038d7cfe08315e0736cd0520f4">+615/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>PrometheusConfig.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9026aa740243dc87d7be703fad5ad83e8ebdbb907b20b0f75a653ea3514dd6b4">+416/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>TelegrafConfig.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-9de7588766a4cc480d9b053d4c6dd34bad93c4e85c6580c2d8f04073f8f0fa25">+350/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AWSConfig.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a40ad271f4e88e42c4e746b5ce54ef0dceca122bedf3f9fa1f0571765001c680">+500/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FrontendRumConfig.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-28bda2968dbbe401bacf2ce4a95e566d4672d59dafdf309d9a66dd567734af9a">+945/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>OpenTelemetry.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-489085e78e204c6e2b6dfdf21f1e48fef86d4bc4dd6f36869f9a2164027b3b7b">+554/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Login.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-746b43968d685362866c3f97bf2b5e0846bac7463fe1ecb080c1c7d962cb855b">+994/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AssociatedRegexPatterns.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-4ca41bf14fd6a3c79a3877324a7c7520a25d1d33f97fe947b2f6dd4bbf6ca5b4">+1384/-0</a></td>

</tr>

<tr>
  <td><strong>Schema.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-27aac0c27d14c76ae7d02277822392d29777f07fb588bc4a19d93cc0379a25e6">+593/-677</a></td>

</tr>

<tr>
  <td><strong>StreamFieldInputs.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a421936485eb26fe8b6c1a89cd0b40de202936fd57b49957e8ac1521a4641f57">+469/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ExternalDestination.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-716d02dd388d827ba64d21320834f07a281242627dbce78a9d29fa84e2727a42">+0/-584</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ExternalDestination.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a404d8244c3beb0122fbd403d2b8b410a934aacd3e498c73499204db85bc790e">+1029/-0</a></td>

</tr>

<tr>
  <td><strong>Query.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-28606cc9e509c3f1c132551ed29c46ef168444b4425cf5e81e0eff65302a9d16">+950/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Stream.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f0e36c3bdbe8da79becc97e236de086bec117c4272ef4a7691a3330835993e40">+232/-5</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>PipelineView.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-f78a1273b1fb7f5696f364f509b6bd13a1536a160b4fd98260cc8e61750e96f9">+600/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>PipelinesList.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-afcaf75b1dd20ccf66bd61334ba262512135a3f85593310890a774421d50265e">+712/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>pipelineCommonValidation.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-820d4f4f076840724bd6f0e7b5a9da1cbacea4d074249f07c957120b6601ac38">+311/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>pipelineCommonValidation.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-b2c4c50027aace8991d17030333e880b7d4808ab04d96e9c372d82d424235ef5">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>CreateReport.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-8a0f39751d08a258c4997c5e68edaf167ea01477528beee2295dd9f992310cc6">+0/-1854</a></td>

</tr>

<tr>
  <td><strong>PerformanceOverview.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-c37f87d6d7205b9688af8c24fa6d7847c77bf35c51d4d7d1e08e6f10f3af2942">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>PerformanceSummary.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-a2a97a13f8d5caa69d38d883576678dacecd8728386886f76d105e376879d60e">+1582/-0</a></td>

</tr>

<tr>
  <td><strong>ImportRegexPattern.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1111ec8ccc0c9b62d4791101f69855ac22baa856dedd54827970f993147c3aed">+811/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>RegexPatternList.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-df942239cac609f116dcb4aa61405a60fc718219c77af46258c34e8e86e44080">+1005/-0</a></td>

</tr>

<tr>
  <td><strong>settingsIndex.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-fc96fd3ae93a42ba09577ee2c27416e9e729f2729146f88e146e4a9473626da2">+774/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>FilterCreatorPopup.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-4167cd3f9eec0c9df78517b7514c39dcc2c0234810010d93e311879971bd552e">+439/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>NoData.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-e7f5be4faf7164f86bdfea69049db3aae0509a8d33b037bfcf799347b3a0ab0d">+335/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>NoOrganizationSelected.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1338e495c82b9d07995c13a6b245c919588012974c0f08096c7b93b5e143606c">+88/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>Pagination.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-8846923daf3fe7a897ab5956098564aeb6d1748db90f637fc39f4ac8a30e1234">+110/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AddUpdateTicket.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-8f7eb6b61a8dfdab68d5e2f73e1d2bc9580e03290d287bcfb35802331165d118">+531/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>usePermissions.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-83e050b2b1753f98e357db0e2f8a6a353b24857640c3a522a73d0d2609a0bced">+513/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>useActions.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1bd297e5011b31dca1cb4edb6ff63a705e582dfe392e34b2e781c8051be5ee5e">+158/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>useIngestion.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-495d1e7e830eecd3e430e987a7056298d67df84282b31869bb27973aec8e4f06">+606/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>useIsMetaOrg.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-635f3965352f56c275b1309753a9f1421ffb0e8bd985b1286a012217df33eab5">+123/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>useLogs.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-1e4dd9056495ae6a0c1cf2b8c9e803d7372c2c1426918d848bb903b424103875">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>Additional files not shown</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8121/files#diff-2f328e4cd8dbe3ad193e49d92bcf045f47a6b72b1e9487d366f6b8288589b4ca"></a></td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-08-23 12:26:28 +05:30
Bhargav 3960871ad2 fix: added test cases for iam groups (#8105)
### **PR Type**
Tests


___

### **Description**
- Add comprehensive IAM groups unit tests

- Cover create, list, edit flows

- Include roles, users, service accounts

- Verify notifications and error handling


___

### Diagram Walkthrough


```mermaid
flowchart LR
  AddGroupSpec["AddGroup.spec: create group tests"]
  AppGroupsSpec["AppGroups.spec: list/delete groups tests"]
  EditGroupSpec["EditGroup.spec: edit group tests"]
  GroupRolesSpec["GroupRoles.spec: manage roles tests"]
  GroupUsersSpec["GroupUsers.spec: manage users tests"]
  GroupSActionsSpec["GroupServiceAccounts.spec: manage service accounts tests"]

  AddGroupSpec -- "emit, validate, notify" --> AppGroupsSpec
  AppGroupsSpec -- "edit/delete navigation" --> EditGroupSpec
  EditGroupSpec -- "tabs and updates" --> GroupRolesSpec
  EditGroupSpec -- "tabs and updates" --> GroupUsersSpec
  EditGroupSpec -- "tabs and updates" --> GroupSActionsSpec
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>AddGroup.spec.ts</strong><dd><code>Tests for AddGroup
dialog behaviors</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/iam/groups/AddGroup.spec.ts

<ul><li>Add unit tests for AddGroup dialog<br> <li> Validate input rules
and trimming<br> <li> Mock IAM createGroup and notifications<br> <li>
Test success and error scenarios</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-2bf9c9935bbd22db8608e9b5e12c1f85ad8afcb9a4eacb5cee672e69e544a79e">+340/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>AppGroups.spec.ts</strong><dd><code>Tests for Groups
list and actions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/iam/groups/AppGroups.spec.ts

<ul><li>Add tests for groups listing table<br> <li> Cover search, add
dialog, actions<br> <li> Mock permissions, router, and services<br> <li>
Test delete flow with notifications</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-cfe60bc2c1440c6b2a41eb2db9901f922afa6adcd09ae263d4444556a1d1ac12">+486/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>EditGroup.spec.ts</strong><dd><code>Tests for EditGroup
flows and tabs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/iam/groups/EditGroup.spec.ts

<ul><li>Add tests for editing group details<br> <li> Cover tabs, data
fetch, save payload<br> <li> Validate notifications and navigation<br>
<li> Mock child components and services</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-7683afda02004afab5d91e031b8ae82d614ecae38c926f6b6af2d3cf9528b725">+561/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>GroupRoles.spec.ts</strong><dd><code>Tests for group
roles selection</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/iam/groups/GroupRoles.spec.ts

<ul><li>Add tests for role selection table<br> <li> Cover filtering,
search, and selection sets<br> <li> Mock getRoles and permissions
state<br> <li> Verify rows/columns and edge cases</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-0833bc337b21487c4ef1deffcac799a91dbaf35241374284deb328e6482c11d9">+533/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>GroupServiceAccounts.spec.ts</strong><dd><code>Tests
for service accounts management</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/iam/groups/GroupServiceAccounts.spec.ts

<ul><li>Add tests for service accounts selection<br> <li> Cover data
fetch, filter, search<br> <li> Validate add/remove selection logic<br>
<li> Note existing bug in removedUsers logic</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-ef96f03e5a8237d18edf3b51dcf65f33d6f2938859a9a55d10eaf0f502954589">+572/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>GroupUsers.spec.ts</strong><dd><code>Tests for group
users management and org filters</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/iam/groups/GroupUsers.spec.ts

<ul><li>Add extensive tests for users selection<br> <li> Cover org
filtering, meta org, search<br> <li> Validate selection add/remove
sets<br> <li> Theme and accessibility checks included</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8105/files#diff-7a9c6922e6c8a7d2c052f7f74ceba652af41bc123aa127a05276696278d792d8">+894/-0</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-22 18:42:37 +05:30
ktx-vaidehiandLoakesh Indiran 9a422cb34d feat: dashboard unique colors to the table column automatically. (#8051)
### **PR Type**
Enhancement


___

### **Description**
- Add unique value auto-color for tables

- Introduce typed override config schema

- Update popup UI for new config types

- Pass color mode through table pipeline


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Schema["Dashboard v5 Config enum"]
  Popup["OverrideConfigPopup UI logic"]
  Convert["convertTableData column metadata"]
  Renderer["TableRenderer cell style"]
  Palette["colorPalette getColorForTable"]

  Schema -- "new type 'unique_value_color'" --> Popup
  Popup -- "persist {type, autoColor|value}" --> Convert
  Convert -- "set col.colorMode='auto'" --> Renderer
  Renderer -- "map unique values to colors" --> Palette
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Typed dashboard Config with
color variant</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/config/src/meta/dashboards/v5/mod.rs

<ul><li>Replace <code>Config</code> struct with tagged enum.<br> <li>
Add variants: <code>Unit{value?}</code> and
<code>UniqueValueColor{auto_color}</code>.<br> <li> Adjust serde to use
<code>type</code> tag and camelCase.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-da49585bbcb02bf0f737bb68739ebc248edd15c7ad9427c0e68f7728bb4a8c17">+13/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>OverrideConfigPopup.vue</strong><dd><code>Popup
supports unit and auto color overrides</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/components/dashboards/OverrideConfigPopup.vue

<ul><li>Redesign popup to choose config type.<br> <li> Support unit
config and unique value color (auto).<br> <li> Normalize, transform, and
save typed configs.<br> <li> UI tweaks: width, layout, and
handlers.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-f1512a15069c23bcc71ac88db5b0ab882031bf6ec9d53a84de2fcd8adb6dec2c">+155/-62</a></td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>OverrideConfig.vue</strong><dd><code>Adapt prop shape
for typed overrides</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/addPanel/OverrideConfig.vue

<ul><li>Pass override configs via <code>{ overrideConfigs }</code>
shape.<br> <li> Simplify dialog prop wiring.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-54a6038f5c684ade27b88e3c6a134874b51501904441fa7849a532d10aa7d533">+3/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>TableRenderer.vue</strong><dd><code>Table cells
auto-colored by unique values</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/components/dashboards/panels/TableRenderer.vue

<ul><li>Add auto-color rendering path for columns.<br> <li> Use
<code>getColorForTable</code> palette and per-column cache.<br> <li>
Fallback to value-mapping color.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+24/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>colorPalette.ts</strong><dd><code>Add table color
palette export</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/utils/dashboard/colorPalette.ts

<ul><li>Export <code>getColorForTable</code> palette for tables.<br>
<li> Provide light pastel color list.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-30ac812743f2388c4061647fac5e9f413bfe561f1fc5d4f6f7be82fce73f2840">+27/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>convertTableData.ts</strong><dd><code>Pipe override
color/unit configs to table</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/utils/dashboard/convertTableData.ts

<ul><li>Parse typed override configs to maps.<br> <li> Set
<code>colorMode: 'auto'</code> on columns when enabled.<br> <li> Use
unit config map for formatting.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8051/files#diff-a672094c46e697ee7b7a3949a901cc1f7f88ec06cddaf67370474b508d5b0960">+32/-8</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: Loakesh Indiran <66478092+Loaki07@users.noreply.github.com>
2025-08-22 15:27:19 +05:30
Bhargav d48e35fa05 fix: added test cases for cipher keys (#8101)
### **PR Type**
Tests


___

### **Description**
Add comprehensive unit tests for cipher keys
Cover Akeyless provider form behaviors
Test encryption mechanism selection logic
Validate OpenObserve local secret workflows


___

### Diagram Walkthrough


```mermaid
flowchart LR
  AddCipherKeySpec["AddCipherKey.spec.ts"] -- "mount, navigation, submit" --> AddCipherKeyVue["AddCipherKey.vue"]
  AddCipherKeySpec -- "stubs, mocks" --> ServicesMocks["cipher_keys service"]
  AkeylessSpec["AddAkeylessType.spec.ts"] -- "fields, validation, update mode" --> AddAkeylessTypeVue["AddAkeylessType.vue"]
  OpenobserveSpec["AddOpenobserveType.spec.ts"] -- "local secret, update mode" --> AddOpenobserveTypeVue["AddOpenobserveType.vue"]
  MechanismSpec["AddEncryptionMechanism.spec.ts"] -- "provider, algorithm" --> AddEncryptionMechanismVue["AddEncryptionMechanism.vue"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>AddAkeylessType.spec.ts</strong><dd><code>Tests for
Akeyless provider form behavior</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/components/cipherkeys/AddAkeylessType.spec.ts

<ul><li>Add unit tests for Akeyless form fields<br> <li> Validate URL,
access ID, and HTML sanitization<br> <li> Test auth types (access_key,
ldap) conditional UI<br> <li> Test secret types (static_secret, dfc)
conditional UI and update mode</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8101/files#diff-394b98b49b31d82146024ad8d9ad900a69afd49cb33d913514bb61058c7a2649">+324/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>AddCipherKey.spec.ts</strong><dd><code>Comprehensive
tests for AddCipherKey flow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

web/src/components/cipherkeys/AddCipherKey.spec.ts

<ul><li>Add end-to-end component tests with mocks/stubs<br> <li> Cover
create/update workflows and validations<br> <li> Test dynamic child
rendering and step navigation<br> <li> Verify helpers, state management,
and error handling</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8101/files#diff-1ae71f00dfb6f9424d2443856ca3a419aaf2ee0c08900f7ef2ca44e41c1982e9">+616/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>AddEncryptionMechanism.spec.ts</strong><dd><code>Tests
for encryption mechanism selection</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/cipherkeys/AddEncryptionMechanism.spec.ts

<ul><li>Add tests for provider type and algorithm options<br> <li>
Validate conditional rendering for simple provider<br> <li> Verify
bindings, validation, and accessibility props<br> <li> Include robust
stubs for Quasar selects</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8101/files#diff-041335605ede2ba506406e550ba3c7663f4a8155f8c548f9e18b95ddfea4a51e">+402/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>AddOpenobserveType.spec.ts</strong><dd><code>Tests for
OpenObserve local secret form</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/cipherkeys/AddOpenobserveType.spec.ts

<ul><li>Add tests for local secret input behavior<br> <li> Validate
required rules and data binding<br> <li> Cover update mode toggle and
buttons<br> <li> Verify field properties and structure</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8101/files#diff-d4c9e84859e41b57861e8ec93d08f28111c13c5ca1143c0613f9e3f55051a2f2">+675/-0</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-22 14:22:47 +05:30
Bhargav 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>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-22 10:38:47 +05:30
ktx-vaidehi f8956f30c1 fix: dashboard stream fields not found (#8087)
### **PR Type**
Bug fix


___

### **Description**
Handle missing or empty stream schemas
Fetch schema when absent or zero-length
Default to empty schema to avoid errors
Improve robustness of dashboard field loading


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["FieldList.vue"]
  Check["Check stream.schema present and non-empty"]
  Fetch["Fetch schema via loadStreamFields(name)"]
  Validate["Validate schema not null/empty"]
  Assign["Assign settings and schema"]
  DefaultEmpty["Set stream.schema = [] and return"]

  UI -- "iterate streams" --> Check
  Check -- "missing or empty" --> Fetch
  Fetch --> Validate
  Validate -- "valid schema" --> Assign
  Validate -- "invalid/empty" --> DefaultEmpty
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>FieldList.vue</strong><dd><code>Robust schema presence
and fallback handling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/addPanel/FieldList.vue

<ul><li>Add check for empty <code>stream.schema</code> arrays<br> <li>
Fetch schema when missing or empty<br> <li> Guard against
undefined/empty fetched schema<br> <li> Default
<code>stream.schema</code> to <code>[]</code> on failure</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8087/files#diff-a071c06e3e26629cb4ae4751450acc39c61fa49b07a1cc4be3711697829668d4">+10/-2</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-21 19:39:21 +05:30