Shrinath Rao
9e3d950c7c
test: reports test stabilisation for env ( #9446 )
2025-12-03 10:02:24 +05:30
Yashodhan Joshi and Yashodhan Joshi
e45b7708a9
ci: auto label and milestone ( #9384 )
...
See working run here
https://github.com/openobserve/openobserve/actions/runs/19761555623/job/56624451400
Also check the timeline items that mention gh actions bot added the
label and milestone to it.
This adds a CI which will automatically label every PR on approve and
add it to the lowest open milestone (ignoring backlog)
So if current open milestones are backlog, v0.20.0, v0.20.1 , it will
auto add this on approval to v0.20.0 and add `Needs-Testing` label.
---------
Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com >
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com >
2025-12-02 16:03:24 +05:30
4ecc5509d5
test: Added Shard for Regression tests and logs spec file in it ( #9394 )
...
Co-authored-by: mmosarafO2 <mosraf@openobserve.ai >
Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com >
Co-authored-by: Sai Nikhil <nikhil@openobserve.ai >
2025-12-01 14:38:03 +05:30
mmosarafO2
51924fa063
ci: fix for github rate limit issue ( #9399 )
...
fix for github rate limit issue
2025-11-30 12:29:34 +05:30
Subhra264
0d956ebdde
test: Add tests to directly validate db records ( #9356 )
...
pytest to directly access db, and validate test cases using db queries.
2025-11-28 17:20:10 +05:30
Shrinath Rao
c51434f937
test: process improvements ( #9336 )
2025-11-27 11:45:32 +05:30
Subhra264
ef8c797b4c
test: use base branch as before commit in case of force push ( #9332 )
...
In case the before commit is not found in the history (in case of force
push) inside the api testing ci job, it compares with the base branch
commit.
2025-11-27 10:31:49 +05:30
7f55832426
ci: added workflow to udpate the language conversion ( #9282 )
...
added workflow to udpate the language conversion
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Bhargav <BJP232004@GMAIL.COM >
2025-11-26 16:30:24 +05:30
Bhargav
6dd1e7bab1
fix: Stale pr workflow v1 ( #9298 )
2025-11-26 15:03:08 +05:30
44011fbebc
feat: add organization-level alert deduplication with semantic field groups ( #9209 )
...
## Summary
Implements org-level alert deduplication with semantic field groups for
intelligent alert suppression and batched notifications. This feature
prevents alert storms by deduplicating alerts based on configurable
fingerprints and grouping related alerts together.
### Core Capabilities
- **Semantic Field Groups**: Map field name variations (`hostname`,
`host`, `node`) to canonical dimensions for consistent deduplication
across different data sources
- **Organization-Level Configuration**: Global deduplication settings
with cross-alert support to suppress alerts from different rules sharing
semantic dimensions
- **Alert Grouping & Batching**: Wait-and-collect logic with three send
strategies (`FirstWithCount`, `Summary`, `All`) for batched
notifications
- **Per-Alert Control**: Individual alert deduplication settings with
optional fingerprint field customization
### Features
**Deduplication Modes:**
- Per-alert exact matching using fingerprint-based TTL expiration
- Cross-alert semantic matching using org-defined dimension groups
- Configurable time windows (per-alert override or org-level default)
**Alert Grouping:**
- Batch alerts with same fingerprint before sending notifications
- Three strategies: first alert with count, summary with names, or all
details
- Configurable wait time (1-300 seconds) and max batch size (1-100
alerts)
- Background processor runs every 1 second for expired batches
**Semantic Field Groups:**
- Built-in presets for common fields (host, IP address, service)
- Kubernetes resource groups (cluster, namespace, pod, node, container)
- Field normalization support (lowercase + trim)
- Overlap handling with first-defined precedence
### Configuration Types
- `SemanticFieldGroup`: Field name equivalence definitions with
normalization
- `GlobalDeduplicationConfig`: Org-level settings with semantic groups
and cross-alert dedup
- `DeduplicationConfig`: Per-alert fingerprint fields and grouping
options
### API Endpoints
- `GET /{org_id}/alerts/deduplication/config` - Retrieve org-level dedup
config
- `POST /{org_id}/alerts/deduplication/config` - Set org-level dedup
config
- `DELETE /{org_id}/alerts/deduplication/config` - Delete org-level
dedup config
### Implementation Details
- Pure business logic algorithms in enterprise layer (fingerprinting,
matching, calculations)
- OSS service layer orchestrates database operations with enterprise
delegation
- Feature-gated with `#[cfg(feature = "enterprise")]` for
enterprise-only functionality
- Background job architecture for async batch processing
- Storage: Org config in KV DB at `/alert_config/{org_id}/deduplication`
### Architecture
```
Alert Triggered
↓
Query Evaluation
↓
Deduplication Check (fingerprint + TTL)
↓
Grouping Enabled? → Add to Batch → Wait/Collect → Send Grouped
↓ No
Send Individual Notification
```
---------
Co-authored-by: Ashish Kolhe <ashish.j.kolhe@gmail.com >
Co-authored-by: Shrinath Rao <shnath@openobserve.ai >
2025-11-26 12:09:10 +05:30
Bhargav
6fa2728a43
feat: Stale pr workflow ( #9288 )
2025-11-25 17:04:10 +05:30
ktx-akshay and Shrinath Rao
2b5eafcb86
test(dashboard): improve stability of flaky tests ( #9139 )
...
…tests
---------
Co-authored-by: Shrinath Rao <shnath@openobserve.ai >
2025-11-19 14:51:45 +05:30
Simha G
6ca371ec99
fix: Concurrency control for file locking has multiple anti-concurrent design patterns in the way ( #8523 )
2025-11-17 20:35:43 +08:00
Neha P
9f2e8c87d5
test: index-type-testcases ( #9115 )
...
1. Verify stream detail access and index type options - Test stream
navigation and available configuration options
2. Verify validation error when selecting both index types - Test
business rule enforcement for conflicting field configurations
3. Verify index type clearing mechanism works - Test ability to clear
field index selections after validation errors
2025-11-14 19:00:35 +05:30
Shrinath Rao
12a8568bd1
test: test dino issue fix ( #9095 )
2025-11-13 17:41:48 +05:30
Neha P and Shrinath Rao
4901605a2c
test: e2e-cmd+enter tests ( #9098 )
...
1. Blank SQL Query Error - Verifies proper error message when cmd+enter
pressed with empty SQL query
2. Include/Exclude Terms Persistence - Ensures search terms remain
visible in log details after query execution
3. API Call Optimization - Validates cmd+enter makes exactly 1 search +
1 histogram call (no duplicates)
4. Editor Cursor Integrity - Confirms cmd+enter doesn't add unwanted
characters to Monaco editor
---------
Co-authored-by: Shrinath Rao <shnath@openobserve.ai >
2025-11-13 14:49:59 +05:30
Shrinath Rao
a4dd576df4
test: unskipped 2 pipeline-core tests ( #9085 )
2025-11-13 07:30:32 +05:30
Subhra264 and Shrinath Rao
683bf89c7b
test: Add tests for alerts and pipelines history ( #9064 )
...
Co-authored-by: Shrinath Rao <shnath@openobserve.ai >
2025-11-12 17:48:12 +05:30
Shrinath Rao and priyabrata-stack
8ea3c3240f
test: updated sharding logic for test dino reporting ( #9073 )
...
Co-authored-by: priyabrata-stack <pryabrata@openobserve.ai >
2025-11-12 16:04:10 +05:30
Shrinath Rao
6b11b81d06
test: updated testDino workflow order ( #9059 )
2025-11-11 19:28:53 +05:30
Shrinath Rao
e26c810ffb
test: testdino retry failed tests flow optimisations ( #9015 )
2025-11-11 06:34:41 +05:30
udev and mmosarafO2
7d40316a73
chore: cancel older CI runs ( #8982 )
...
adds concurrency group and cancels CI runs from multiple commits
---------
Co-authored-by: mmosarafO2 <mosraf@openobserve.ai >
2025-11-07 12:38:03 +05:30
Shrinath Rao
87ae8953b1
test: updated testdino approach to work from github variables ( #8987 )
2025-11-06 20:11:48 +05:30
Simran Kumari
6830b2f0b3
ci: add workflow for logging FEAT/PERF merges to sheet ( #8963 )
2025-11-05 19:44:45 +05:30
Shrinath Rao
f61b715a1e
test: Cleanup Mechanism and ENV Runs for e2e tests ( #8839 )
...
### **PR Type**
Enhancement, Tests
___
### **Description**
- Add robust alerts cleanup utilities
- Improve UI flows and resiliency
- Support deployed env testing delays
- Add CI cleanup and health checks
___
### Diagram Walkthrough
```mermaid
flowchart LR
UI["Playwright UI flows hardened"]
API["APICleanup cascade (Alerts→Folders→Destinations→Templates)"]
CI["CI workflow targets deployed env"]
Delay["Configurable test step delay"]
Data["Global ingestion more robust"]
UI -- "uses" --> API
CI -- "runs cleanup.spec" --> API
CI -- "health checks + env vars" --> Data
Delay -- "slows page ops" --> UI
Data -- "ingest logs with parsing" --> 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>7
files</summary><table>
<tr>
<td><strong>alertDestinationsPage.js</strong><dd><code>Add search,
cascade-safe delete, bulk prefix cleanup</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-57e5c53b4ef998b3d8708149620ff94dcc46807927f1a3a9e9f28ed3ebe25b0a ">+178/-0</a>
</td>
</tr>
<tr>
<td><strong>alertTemplatesPage.js</strong><dd><code>Add template search,
in-use handling, prefix cleanup</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-f4ebd248b2140051e74dbbbd1aabe344f01c80704ce5857e9c28a04350e018f3 ">+177/-2</a>
</td>
</tr>
<tr>
<td><strong>alertsPage.js</strong><dd><code>Harden alert actions, bulk
deletion, search across folders</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-79ee01d6d7f145f19207b93b87143b545a1188cfc6a82bc8c45fecfbf68f8a1d ">+280/-9</a>
</td>
</tr>
<tr>
<td><strong>apiCleanup.js</strong><dd><code>New API-based cascade
cleanup utility</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-537fe76c0d8e26e81c5f77c83bd0ee35daaa973822105c809bf83171a26b33c5 ">+399/-0</a>
</td>
</tr>
<tr>
<td><strong>page-manager.js</strong><dd><code>Wire APICleanup into
PageManager</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-565eab8b3c767ae50c9d05e591621d14f66b81af84d6b5ea6efe136c1c3933df ">+4/-0</a>
</td>
</tr>
<tr>
<td><strong>baseFixtures.js</strong><dd><code>Add configurable test step
delay hooks</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-c4c5ee7fbb248d1ab14d3d4e33ffb9626f9aab74c9e0207fcfc08051c8c3c7ee ">+46/-0</a>
</td>
</tr>
<tr>
<td><strong>global-setup.js</strong><dd><code>Harden login and ingestion
with diagnostics</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-06323dad7214f86b41b62e121e716eeea0054bc4d950c6bcf4a0efe53894acc8 ">+61/-22</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>commonActions.js</strong><dd><code>Fix ingestion URLs to use
org variable</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-4d726dd2bdb34b2c90a31798ff49b6df5bc952bd049b7c38bebb18b6db0076e2 ">+4/-4</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>4
files</summary><table>
<tr>
<td><strong>alerts-e2e-flow.spec.js</strong><dd><code>Pre-move folder
cleanup and stabilization</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-32972e38c1fe0e8bb887f9f254b3130916a36f96ea924f9987493d44efefeab9 ">+13/-3</a>
</td>
</tr>
<tr>
<td><strong>alerts-import.spec.js</strong><dd><code>Use dedicated
invalid import test data</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-62b6ec4818685eacc0a934d68aaadfd73b512ef4f4be25fcd5135b97c2844912 ">+1/-1</a>
</td>
</tr>
<tr>
<td><strong>cleanup.spec.js</strong><dd><code>New pre-test API cleanup
spec</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-c214275a512fa285a7e4f2ab61dfcb42d71a0436b0e4241f94d7b45693587983 ">+29/-0</a>
</td>
</tr>
<tr>
<td><strong>invalid-alert.json</strong><dd><code>Add invalid alert
sample for import tests</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-c695f71048e9393a45d3e3e3e415696559fecf3ba85712e7c3f366092f53f424 ">+24/-0</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>playwright.yml</strong><dd><code>Target deployed env; add
cleanup job and health checks</code> </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8839/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3 ">+123/-65</a></td>
</tr>
</table></details></td></tr></tr></tbody></table>
</details>
___
2025-11-04 23:54:54 +05:30
Shrinath Rao
603d641b01
test: test dino upload flag added ( #8945 )
2025-11-04 12:23:28 +05:30
Yashodhan Joshi
2cf0d2dc29
ci: add complete sha in dispatch params ( #8765 )
2025-11-03 12:18:48 +08:00
+3
450da5349e
feat: UI explain query ( #8831 )
...
### **PR Type**
Enhancement, Documentation
___
### **Description**
- Add query plan dialog with EXPLAIN/ANALYZE
- Parse, render plan tree with metrics
- Integrate Explain button in logs toolbar/menu
- Add i18n strings for new UI labels
___
### Diagram Walkthrough
```mermaid
flowchart LR
SearchBar["Logs SearchBar (Explain button)"] -- "opens" --> Dialog["QueryPlanDialog (q-dialog)"]
Dialog -- "calls" --> StreamingSearch["streaming_search.search()"]
StreamingSearch -- "SSE data" --> Dialog
Dialog -- "parse/format" --> Parser["queryPlanParser (parse tree + metrics)"]
Dialog -- "render" --> Tree["QueryPlanTree/Node components"]
Dialog -- "summary" --> MetricsCard["MetricsSummaryCard"]
Dialog -- "i18n labels" --> I18n["en.json additions"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>7
files</summary><table>
<tr>
<td><strong>queryPlanParser.ts</strong><dd><code>Add parser and metrics
utilities for DataFusion plans</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-417957960e379b5c5b042e5eb14acb7dcabfb966c81fbd2965eea383d408add5 ">+319/-0</a>
</td>
</tr>
<tr>
<td><strong>QueryPlanDialog.vue</strong><dd><code>New dialog to fetch,
parse, and display plans</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-857bd0334ca601c4cd4e3ce2be7bff0dca583460a2fdf02d6d1c2f25a65f0ccd ">+495/-0</a>
</td>
</tr>
<tr>
<td><strong>CollapsibleProjection.vue</strong><dd><code>Collapsible
projection field list renderer</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-0768b03cd68e1d7060a7a328e333a1a21a052d3d00719fdaf722c7068e044bd6 ">+135/-0</a>
</td>
</tr>
<tr>
<td><strong>MetricsSummaryCard.vue</strong><dd><code>Summary card for
time, rows, memory metrics</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-dc065cd3367a2c32b655a3cf9654e57eed85d6924bf81e2df39cf21a0c596433 ">+151/-0</a>
</td>
</tr>
<tr>
<td><strong>QueryPlanNode.vue</strong><dd><code>Tree node component with
metrics and collapse</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-db861376fe96048a639c4810804dd2ecd8a95058dac0f40ca23cc41afa4e1a67 ">+293/-0</a>
</td>
</tr>
<tr>
<td><strong>QueryPlanTree.vue</strong><dd><code>Render plan as
expandable ASCII tree</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-301d8f706ec4e5a46f580b4cca08bd951743a0ad5419295ab79956e5f68ec6c0 ">+77/-0</a>
</td>
</tr>
<tr>
<td><strong>SearchBar.vue</strong><dd><code>Add Explain button and
dialog wiring in toolbar/menu</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf ">+51/-0</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>en.json</strong><dd><code>Add i18n strings for query plan
UI</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8831/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824 ">+22/-1</a>
</td>
</tr>
</table></details></td></tr></tr></tbody></table>
</details>
___
---------
Signed-off-by: loaki07 <rustyloaki@gmail.com >
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com >
Co-authored-by: Loakesh Indiran <66478092+Loaki07@users.noreply.github.com >
Co-authored-by: Shrinath Rao <shnath@openobserve.ai >
Co-authored-by: Harsh Mahajan <115500013+007harshmahajan@users.noreply.github.com >
Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com >
Co-authored-by: ByteBaker <42913098+ByteBaker@users.noreply.github.com >
Co-authored-by: Sai Nikhil <nikhil@openobserve.ai >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech >
Co-authored-by: Huaijin <haohuaijin@gmail.com >
Co-authored-by: Simha G <149056463+yaga-simha@users.noreply.github.com >
Co-authored-by: omkark06 <omkar@zinclabs.io >
2025-10-30 21:24:44 +05:30
ktx-akshay
1ee98654ca
fix: resolve flaky behavior in dashboard tests ( #8840 )
...
### **PR Type**
Bug fix, Tests
___
### **Description**
- Stabilize dashboard chart rendering waits
- Replace network idle with canvas detection
- Add explicit chart render wait helper
- Adjust workflow Node action version
___
### Diagram Walkthrough
```mermaid
flowchart LR
Tests["Dashboard tests"] -- "add render waits" --> Transpose["Transpose spec"]
Tests -- "replace networkidle with selector" --> DashboardSpec["Dashboard spec"]
CI["Playwright workflow"] -- "use setup-node v4" --> NodeSetup["Node action updated"]
```
<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>dashboard-transpose.spec.js</strong><dd><code>Add
explicit chart render wait in transpose test</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/dashboards/dashboard-transpose.spec.js
<ul><li>Wait for chart render after apply<br> <li> Update comments to
reflect rendering wait</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8840/files#diff-da631007cea76a4bc59e4acd1195b59ae4131cd5208d21a9c1f94d3913911dc4 ">+3/-2</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>dashboard.spec.js</strong><dd><code>Use canvas-based
wait to reduce flakiness</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/dashboards/dashboard.spec.js
<ul><li>Replace networkidle waits with canvas selector<br> <li> Add
targeted wait for chart canvas attachment<br> <li> Remove redundant
networkidle wait</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8840/files#diff-d0fa0042783dc109334b05266edce228bad97adcb568dd1e447920596238e9b4 ">+5/-3</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>Update GitHub Action
setup-node to v4</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Downgrade actions/setup-node from v5 to v4<br> <li> Keep Node.js
version at 22</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8840/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3 ">+1/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2025-10-27 17:48:08 +05:30
dependabot[bot]
e15357f0bc
chore(deps): bump actions/setup-node from 4 to 5 ( #8797 )
2025-10-21 14:54:31 +08:00
dependabot[bot]
a1f827d200
chore(deps): bump peter-evans/repository-dispatch from 3 to 4 ( #8738 )
2025-10-21 14:54:03 +08:00
Neha P
c5ea42ec2a
test: UTF8 queries pytests ( #8818 )
...
### **PR Type**
Tests
___
### **Description**
- Add regression tests for substr subqueries
- Validate env flags causing Utf8View panic
- Add alternative query pattern coverage
- Verify data content and string functions
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Env flags set via monkeypatch"] -- "enable JOIN_MATCH_ONE, UTF8_VIEW" --> B["Execute queries against stream_pytest_data"]
B -- "substr + IN subquery" --> C["Assert 200, validate hits"]
B -- "alternative IN/JOIN/CONCAT/length" --> D["Cross-validate no Utf8View error"]
B -- "data verification" --> E["Inspect container names/prefixes"]
```
<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>test_subquery_join_match.py</strong><dd><code>Add
regression and coverage tests for substr subqueries</code>
</dd></summary>
<hr>
tests/api-testing/tests/test_subquery_join_match.py
<ul><li>Add end-to-end regression tests reproducing Utf8View panic<br>
<li> Set env vars via monkeypatch for failing conditions<br> <li> Cover
substr IN, JOIN, CONCAT, and length() variants<br> <li> Add data
verification and structural assertions on hits</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8818/files#diff-facac795b55980509f22b59fec9090910a8eb2c8d442936114c4b11f11008152 ">+564/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2025-10-15 18:17:55 +05:30
ByteBaker
bc38057bbd
fix: resolve unit test hanging issue and remove MySQL from CI
...
- Add --no-cfg-coverage flags to prevent test instrumentation conflicts
- Remove MySQL service and test runs from CI workflow
- Add concurrency controls to cancel redundant workflow runs
- Consolidate cleanup commands for better readability
2025-10-15 10:55:28 +05:30
Shrinath Rao
9329c12a0c
test: updated merge logic for test dino upload ( #8793 )
...
### **PR Type**
Tests, Enhancement
___
### **Description**
- Use Playwright blob reporter on CI
- Merge shard reports via playwright merge-reports
- Streamline GitHub Actions artifacts and steps
- Update Node.js to 22 in merge job
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["Playwright tests (CI shards)"] -- "reporter: blob" --> B["blob-report artifacts"]
B -- "download & merge" --> C["playwright merge-reports"]
C -- "outputs" --> D["playwright-results/report.json + html-report"]
D -- "tdpw upload" --> E["TestDino"]
```
<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>playwright.config.js</strong><dd><code>Conditional blob
reporter for CI</code>
</dd></summary>
<hr>
tests/ui-testing/playwright.config.js
<ul><li>CI uses <code>['blob']</code> reporter<br> <li> Local keeps HTML
and JSON reporters<br> <li> Enables cross-shard report merging</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8793/files#diff-91cb9615068914b2e4f5d66fcbed50d3e9771ea2d882f8e8048bbe54eab3c414 ">+6/-4</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>Artifact flow: blob
upload, merge, TestDino upload</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Comment out many test matrices<br> <li> Remove per-matrix
JSON/HTML upload steps<br> <li> Upload blob reports; merge with
Playwright<br> <li> New job merges and uploads to TestDino; Node 22</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8793/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3 ">+117/-236</a></td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2025-10-13 21:16:29 +05:30
Shrinath Rao and Claude
e985244b61
test: e2e test dino poc ( #8771 )
...
### **PR Type**
Enhancement, Tests, Documentation
___
### **Description**
- Add Playwright JSON reporter for TestDino.
- Upload Alerts results to TestDino in CI.
- Limit matrix to Alerts specs for POC.
- Create result folders in workflow.
___
### Diagram Walkthrough
```mermaid
flowchart LR
PWCFG["Playwright config: JSON + HTML reporters"] -- "emit report.json, html-report" --> RESULTS["playwright-results/"]
GHA["GitHub Actions workflow"] -- "create results dirs" --> RESULTS
GHA -- "run Alerts specs only" --> TESTS["Alerts test run"]
TESTS -- "produce reports" --> RESULTS
GHA -- "tdpw upload" --> TESTDINO["TestDino platform"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Formatting</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>alerts-e2e-flow.spec.js</strong><dd><code>Minor comment
tweak in Alerts E2E spec</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Alerts/alerts-e2e-flow.spec.js
- Minor comment formatting change.
- No functional impact.
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8771/files#diff-32972e38c1fe0e8bb887f9f254b3130916a36f96ea924f9987493d44efefeab9 ">+1/-1</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.config.js</strong><dd><code>Add JSON
reporter and configure HTML output</code>
</dd></summary>
<hr>
tests/ui-testing/playwright.config.js
<ul><li>Replace single HTML reporter with array.<br> <li> Configure HTML
output folder path.<br> <li> Add JSON reporter writing to
<code>playwright-results/report.json</code>.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8771/files#diff-91cb9615068914b2e4f5d66fcbed50d3e9771ea2d882f8e8048bbe54eab3c414 ">+4/-1</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>CI: Upload Playwright
results to TestDino, scope to Alerts</code></dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Temporarily narrow matrix to <code>Alerts</code> tests.<br> <li>
Create <code>tests/ui-testing/playwright-results</code> directory.<br>
<li> Add TestDino upload step with token auth.<br> <li> Comment out
other suites and some Alert specs.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8771/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3 ">+101/-92</a></td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-10 18:30:24 +05:30
ByteBaker
8ed584521f
chore: increase minimum coverage threshold for API
2025-10-08 15:24:45 +05:30
ByteBaker
c7a064d947
chore: check if code changes before running UT
2025-10-08 14:08:36 +05:30
Prabhat Sharma and mmosarafO2
3e92683350
fix: build manifest of both builds succeed plus more ( #8729 )
...
### **PR Type**
Enhancement
___
### **Description**
- Split PR image builds by architecture
- Unify Dockerfile for both builds
- Improve build cache isolation per arch
- Gate final job on both builds success
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["build_pr_image_amd64"] -- "produces amd64 image" --> C["build"]
B["build_pr_image_arm64"] -- "produces arm64 image" --> C
C -- "runs only if both succeed" --> D["post-build steps"]
```
<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>build-pr-image.yml</strong><dd><code>Split and harden
PR image build workflow</code>
</dd></summary>
<hr>
.github/workflows/build-pr-image.yml
<ul><li>Rename jobs per arch: amd64/arm64<br> <li> Use single Dockerfile
path for both<br> <li> Add arch-scoped cache keys and prefixes<br> <li>
Make final job depend on both success</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8729/files#diff-ebeabab3ec6b3ad90cc66cb9c0d9f2ad72c7ec6116e30e9801241b46992742d6 ">+15/-22</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>Dockerfile.pr</strong><dd><code>Add unified runtime
Dockerfile for PR builds</code>
</dd></summary>
<hr>
deploy/build/Dockerfile.pr
<ul><li>Add Debian slim runtime base<br> <li> Install required runtime
packages<br> <li> Copy binary and init data dir<br> <li> Set default
command to run service</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8729/files#diff-0db44a1fcb127375b96718556fd43c738708efbcaf0f83a9bffe39d4bfa95a02 ">[link]</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: mmosarafO2 <mosraf@openobserve.ai >
2025-10-06 09:17:26 +05:30
ktx-akshay
e70455bfd9
test: add custom variable tests for dashboard ( #8401 )
...
### **PR Type**
Enhancement, Tests
___
### **Description**
- Add custom value search to variables
- Introduce streaming-aware dashboard tests
- Add streaming state management helper
- Update CI to run streaming tests
___
### Diagram Walkthrough
```mermaid
flowchart LR
vars["DashboardVariables.addDashboardVariable(custom search)"]
mgmt["ManagementPage.setStreamingState()"]
filtSpec["dashboard-filter.spec: custom value search test"]
streamSpec["dashboard-streaming.spec: streaming search test"]
ci["Playwright workflow: Dashboards-Streaming job"]
vars -- "support custom value search" --> filtSpec
mgmt -- "toggle streaming on/off" --> streamSpec
streamSpec -- "verifies _values_stream calls" --> ci
filtSpec -- "validates _values calls" --> ci
```
<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>dashboard-variables.js</strong><dd><code>Support custom
value search for variables</code>
</dd></summary>
<hr>
tests/ui-testing/pages/dashboardPages/dashboard-variables.js
<ul><li>Extend addDashboardVariable with custom search mode<br> <li>
Conditionally skip early save/close for custom search<br> <li> Implement
custom value entry flow in settings</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8401/files#diff-67d38d39bb67f4a0cbfa473ee81ad50b1fffebc40c635417e58905f3c865a6e2 ">+48/-8</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>managementPage.js</strong><dd><code>Add streaming state
management utility</code>
</dd></summary>
<hr>
tests/ui-testing/pages/generalPages/managementPage.js
<ul><li>Add setStreamingState helper<br> <li> Navigate to settings and
toggle streaming<br> <li> Verify final toggle state with
aria-checked</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8401/files#diff-2e67acc9ff9099e14792ddeb7d0160268727fb064b85e6712f6434130cc23fdd ">+48/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>dashboard-filter.spec.js</strong><dd><code>Add custom
value search e2e test</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/dashboards/dashboard-filter.spec.js
<ul><li>Add test for custom value dropdown search<br> <li> Capture and
assert /_values responses status<br> <li> Configure panel and filter
using variable<br> <li> Ensure dashboard cleanup</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8401/files#diff-c48a796836a25b90a9f94af58273ea9fd1b36248ca8689075c3d48be77de1468 ">+110/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>dashboard-streaming.spec.js</strong><dd><code>Add
streaming-aware dashboard tests</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/dashboards/dashboard-streaming.spec.js
<ul><li>New serial test suite for streaming<br> <li> Enable/disable
streaming via page object<br> <li> Validate _values_stream requests and
200 status<br> <li> Full dashboard create, filter, save, cleanup</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8401/files#diff-92f44296937f53cb448371d1c61510c8c910fbecab83b02b8e89490d5832be19 ">+152/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>CI: run streaming
dashboard tests</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Add Dashboards-Streaming matrix entry<br> <li> Map folder to
Dashboards path<br> <li> Run dashboard-streaming.spec.js on Chrome</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8401/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3 ">+4/-2</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2025-09-17 16:02:09 +05:30
mmosarafO2 and Shrinath Rao
8ede92a58f
ci: updated oss strapi notification to pusblish content ( #8465 )
...
### **User description**
updated oss strapi notification to pusblish content
___
### **PR Type**
Enhancement
___
### **Description**
- Improve changelog cleaning logic robustness
- Stop at 'New contributors' section
- Exclude binaries and links from notes
- Publish Strapi release entries by default
___
### Diagram Walkthrough
```mermaid
flowchart LR
GH["GitHub Release (tag)"] -- "Fetch & clean body" --> Clean["Enhanced changelog cleaner"]
Clean -- "Cleaned notes" --> Payload["Build payload for Strapi"]
Payload -- "POST status=published" --> Strapi["Strapi /api/github-releases"]
```
<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>release.yml</strong><dd><code>Refine changelog cleaner
and publish status</code>
</dd></summary>
<hr>
.github/workflows/release.yml
<ul><li>Rewrote <code>cleanChangelog</code> to iterative parser.<br>
<li> Stops at 'New contributors'; removes links and binaries lines.<br>
<li> Preserves non-empty cleaned lines only.<br> <li> Changes Strapi API
call query to <code>status=published</code>.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8465/files#diff-87db21a973eed4fef5f32b267aa60fcee5cbdf03c67fafdc2a9b553bb0b15f34 ">+13/-14</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Shrinath Rao <shnath@openobserve.ai >
2025-09-17 11:42:20 +05:30
Hengfei Yang
97d09eff1e
fix: support prefix star match_all ( #8451 )
2025-09-16 13:05:02 +08:00
Neha P
50490671db
test: create org testcases ( #8362 )
...
### **PR Type**
Tests, Enhancement
___
### **Description**
- Add comprehensive org CRUD Playwright tests
- Implement org delete via API and UI
- Add helper to extract org identifier
- Fix verifyOrgNotExists usage and CI suite
___
### Diagram Walkthrough
```mermaid
flowchart LR
Tests["New Playwright org tests"] -- "uses" --> CreateOrgPage["CreateOrgPage page object"]
CreateOrgPage -- "adds" --> DeleteAPI["deleteOrgViaAPI()"]
CreateOrgPage -- "adds" --> DeleteUI["deleteOrgViaUI()"]
CreateOrgPage -- "adds" --> GetIdentifier["getOrgIdentifierFromTable()"]
Workflow["GitHub Actions workflow"] -- "runs" --> Tests
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>createOrgPage.js</strong><dd><code>Enhance
CreateOrgPage with delete and identifier utilities</code></dd></summary>
<hr>
tests/ui-testing/pages/generalPages/createOrgPage.js
<ul><li>Import Playwright <code>expect</code>.<br> <li> Remove param
from <code>verifyOrgNotExists</code>.<br> <li> Add
<code>deleteOrgViaAPI</code> with Basic Auth DELETE call.<br> <li> Add
<code>deleteOrgViaUI</code> with fallback selectors and confirm
flow.<br> <li> Add <code>getOrgIdentifierFromTable</code> utility
parsing table cells.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8362/files#diff-e3ff7268323b35f1798acb81fcd3541e0d2ee7c283124a064854ac9f6e67beb8 ">+113/-3</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>org.spec.js</strong><dd><code>New Playwright org
management E2E tests</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/GeneralTests/org.spec.js
<ul><li>Add full CRUD and validation test suite.<br> <li> Cover API/UI
creation, search, negatives, special chars.<br> <li> Implement cleanup
via API with UI fallback.<br> <li> Use test logger and base navigation
setup.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8362/files#diff-ab00b9371adadcb16226e3afb422dcab9e6fb0b99a3b43766d4bdda6b12f4378 ">+556/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>usersOrg.spec.js</strong><dd><code>Fix
verifyOrgNotExists usage in user-org tests</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/GeneralTests/usersOrg.spec.js
<ul><li>Update <code>verifyOrgNotExists</code> call signature.<br> <li>
Remove redundant <code>expect</code> argument.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8362/files#diff-0bf40521e88d2cf427617e49affa14d4ebe469b6da4ea4aeef4fe3e246eb24c7 ">+1/-1</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>Run organization tests
in CI workflow</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Add <code>org.spec.js</code> to CI run files.<br> <li> Ensure
org tests run in workflow.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8362/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3 ">+1/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2025-09-10 19:09:08 +05:30
dependabot[bot]
6b364a08c4
chore(deps): bump actions/setup-node from 4 to 5 ( #8326 )
2025-09-10 10:40:42 +08:00
Shrinath Rao and Claude
cabbacf970
test: e2e logs downloads test cases ( #8001 )
...
### **PR Type**
Tests, Enhancement
___
### **Description**
- Add comprehensive logs download E2E tests
- Implement download utilities in logs page
- Add ingestion via fetch with basic auth
- Update CI to run new tests
___
### Diagram Walkthrough
```mermaid
flowchart LR
Tests["Playwright tests: logsDownloads.spec.js"]
Page["LogsPage: download + ingestion utilities"]
CI["CI workflow: include logsDownloads"]
App["Logs UI (existing)"]
Tests -- "uses" --> Page
CI -- "runs" --> Tests
Page -- "ingests data, verifies CSVs" --> App
```
<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>logsPage.js</strong><dd><code>Add ingestion and CSV
download utility methods</code>
</dd></summary>
<hr>
tests/ui-testing/pages/logsPages/logsPage.js
<ul><li>Add ingestion via page-evaluated fetch with Basic auth.<br> <li>
Add download helpers: setup, cleanup, wait, verify.<br> <li> Add UI
actions for download menus and SQL editor clear.<br> <li> Import fs/path
and minor selector utilities.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8001/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59 ">+149/-2</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>logsDownloads.spec.js</strong><dd><code>Add
comprehensive logs CSV download tests</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Logs/logsDownloads.spec.js
<ul><li>Add E2E tests for CSV downloads (normal/custom).<br> <li> Verify
row counts for multiple custom ranges.<br> <li> Add SQL mode LIMIT 2000
download test.<br> <li> Manage temp download directory per test
run.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8001/files#diff-90f04cfe53caddf683cc4466e9e97af96d7eb90d636bf6b0f5cdc4b76dc395ac ">+265/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>Update CI to run new
download tests</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Include logsDownloads.spec.js in Logs-Queries suite.<br> <li>
Re-enable visualize.spec.js in Dashboards-Charts.</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8001/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3 ">+2/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Claude <noreply@anthropic.com >
2025-09-05 19:04:16 +05:30
ktx-akshay
62d5f2d9e2
test: dashboard max query range limit ( #6813 )
...
### **PR Type**
Tests, Enhancement
___
### **Description**
- Add dashboard max query range UI test
- Introduce StreamSettingsPage page object
- Enhance ManagementPage with streaming toggles
- Include maxquery test in CI workflow
___
### Diagram Walkthrough
```mermaid
flowchart LR
spec["Add maxquery Playwright spec"] -- uses --> pm["PageManager utilities"]
spec -- updates --> streamPage["StreamSettingsPage (new)"]
spec -- verifies --> uiWarn["Max duration warning visible"]
pm -- ensures --> streamingDisabled["Streaming disabled via ManagementPage"]
ci["GitHub Actions workflow"] -- includes --> 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>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>streams.js</strong><dd><code>New StreamSettingsPage for
stream max query updates</code>
</dd></summary>
<hr>
tests/ui-testing/pages/dashboardPages/streams.js
<ul><li>Add StreamSettingsPage class<br> <li> Implement max query range
update flow<br> <li> Add stable locators and waits<br> <li> Handle modal
close after save</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/6813/files#diff-2f4da2122993aa2151d167a8b60db3ebe382cf4d420a20d18c2b0bc6f38ecab5 ">+57/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>managementPage.js</strong><dd><code>ManagementPage
refactor and streaming toggle helpers</code>
</dd></summary>
<hr>
tests/ui-testing/pages/generalPages/managementPage.js
<ul><li>Refactor to modern style and quotes<br> <li> Add navigation
helpers with validation<br> <li> Add enable/disable streaming
utilities<br> <li> Improve selectors and waits</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/6813/files#diff-2e67acc9ff9099e14792ddeb7d0160268727fb064b85e6712f6434130cc23fdd ">+162/-89</a></td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>maxquery.spec.js</strong><dd><code>Playwright spec for
dashboard max query warning</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/dashboards/maxquery.spec.js
<ul><li>Add end-to-end test for max query limit<br> <li> Use PageManager
and StreamSettingsPage<br> <li> Validate warning visibility and API
response<br> <li> Restore stream setting after test</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/6813/files#diff-bfd34c3de558a41ff9397468dca4b855e2ee821b250087832f6f36fca8e2c36f ">+107/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>CI includes max query
dashboard test</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Add maxquery.spec.js to Dashboards-Core matrix<br> <li> Minor
YAML formatting adjustments<br> <li> Preserve existing test
matrices</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/6813/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3 ">+75/-70</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2025-09-05 12:22:05 +05:30
Shrinath Rao
261aea6929
test: playwright upload artifact error fixes ( #8190 )
...
### **PR Type**
Tests, Enhancement
___
### **Description**
- Add conditional artifact upload guards
- Make report artifact names matrix-aware
- Preserve stream name test comment clarity
___
### Diagram Walkthrough
```mermaid
flowchart LR
tests["Playwright tests"] -- "produce reports/coverage" --> outputs["Reports & Coverage"]
outputs -- "conditional check" --> uploadPR["Upload Playwright Report"]
outputs -- "conditional check" --> uploadCov["Upload Coverage Report"]
matrix["Matrix folder name"] -- "used in name" --> uploadPR
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Documentation</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>streamname.spec.js</strong><dd><code>Comment clarity
for ingestion loop</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Streams/streamname.spec.js
- Fix comment wording to singular
- No functional code changes
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8190/files#diff-49828efdc034005c097422deadc8b892bb1e54942d024e40d640fd10c5aa2793 ">+1/-1</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>Conditional artifact
uploads and better naming</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Add hashFiles guard for report upload<br> <li> Rename report
artifact to include matrix folder<br> <li> Add guard for coverage report
upload<br> <li> Add explicit step name for report upload</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8190/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3 ">+5/-3</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2025-09-04 19:38:24 +05:30
ktx-akshay
182332a490
fix: enhance dashboard transpose validation in UI tests ( #8167 )
...
### **PR Type**
Tests, Enhancement
___
### **Description**
- Strengthen transpose table validations
- Add waits for table render stability
- Handle missing/variant table structures
- Safeguard comparisons with conditional checks
___
### Diagram Walkthrough
```mermaid
flowchart LR
Start["Open config & apply transpose"] -- "capture headers & data" --> Initial["Initial table snapshot"]
Initial -- "click transpose" --> Action["Trigger transpose"]
Action -- "wait & detect table" --> Detect["Table presence check"]
Detect -- "tbody rows" --> Capture["Capture transposedData"]
Detect -- "fallback all rows" --> Capture
Capture -- "flatten headers vs values" --> Flatten["Flatten initial data"]
Flatten -- "sort & compare" --> Assert["Assert equality"]
Detect -- "no data" --> Error["Throw diagnostic error"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>dashboard-transpose.spec.js</strong><dd><code>Make
transpose test resilient and diagnostic</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/dashboards/dashboard-transpose.spec.js
<ul><li>Wait for table load and render before reads<br> <li> Robust
transposed data capture with fallbacks<br> <li> Conditional compare with
safer data flattening<br> <li> Diagnostic error path when no data
captured</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8167/files#diff-da631007cea76a4bc59e4acd1195b59ae4131cd5208d21a9c1f94d3913911dc4 ">+79/-27</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2025-09-03 15:49:12 +05:30
Neha P and hengfei yang
24fca0d8bd
test: e2e-add-to-table-tests ( #8257 )
...
### **PR Type**
Tests, Enhancement
___
### **Description**
- Add logs table field management tests
- Extend LogsPage POM with field actions
- Integrate new test into Playwright workflow
- Include ingestion helper for test setup
___
### Diagram Walkthrough
```mermaid
flowchart LR
POM["LogsPage POM"]
Tests["logstable.spec.js"]
CI["playwright.yml matrix"]
Ingest["Ingestion helper"]
Tests -- "uses" --> POM
Tests -- "posts logs" --> Ingest
CI -- "runs" --> Tests
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>logsPage.js</strong><dd><code>POM: field add/remove
helpers for logs table</code>
</dd></summary>
<hr>
tests/ui-testing/pages/logsPages/logsPage.js
<ul><li>Add hover, add, remove field helpers<br> <li> Add table header
visibility assertions<br> <li> Introduce negative assertion via source
column<br> <li> Minor waits for UI stability</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8257/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59 ">+25/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>logstable.spec.js</strong><dd><code>Add logs table
field management E2E tests</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Logs/logstable.spec.js
<ul><li>New E2E tests for add/remove field<br> <li> Test for field
persistence after refresh<br> <li> Ingestion helper posts logs before
tests<br> <li> Setup ensures quick mode is off</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8257/files#diff-4d69d08f317ffc4a26179c74da0418c4db4184ce5f4f96a8df70af7a5a02008c ">+149/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>playwright.yml</strong><dd><code>CI: include logs table
tests in workflow</code>
</dd></summary>
<hr>
.github/workflows/playwright.yml
<ul><li>Add logstable.spec.js to Logs-Core matrix<br> <li> Ensure CI
runs new tests</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8257/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3 ">+2/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: hengfei yang <hengfei.yang@gmail.com >
2025-09-02 19:04:34 +05:30
mmosarafO2 and Shrinath Rao
b9548ec4ac
ci: fixed o2 strapi workflow notfication issue ( #8218 )
...
### **User description**
fixed o2 strapi workflow notfication issue
___
### **PR Type**
Enhancement, Bug fix
___
### **Description**
- Inline Strapi release notification in main workflow
- Remove redundant public release webhook workflow
- Use self-hosted runner for release job
- Fix Strapi endpoint path and query
___
### Diagram Walkthrough
```mermaid
flowchart LR
build["Build artifacts"] -- "needs" --> release["Release job (self-hosted)"]
release -- "Publish GitHub release" --> gh["GH Release"]
gh -- "Fetch release by tag" --> script["Github Script"]
script -- "POST payload" --> strapi["Strapi webhook /api/github-releases?status=draft"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>github-release-public.yml</strong><dd><code>Delete
redundant public release webhook workflow</code>
</dd></summary>
<hr>
.github/workflows/github-release-public.yml
<ul><li>Remove standalone release webhook workflow<br> <li> Consolidate
Strapi notification into main pipeline</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8218/files#diff-be2459e6c9f39dcebd00322123da352105ab53279e8b1a67bcb84de22e1f2841 ">+0/-66</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>release.yml</strong><dd><code>Add Strapi notification
and update runner</code>
</dd></summary>
<hr>
.github/workflows/release.yml
<ul><li>Switch release job to self-hosted runner<br> <li> Add Strapi
notification step post-release<br> <li> Fetch release by tag and clean
changelog<br> <li> Update webhook URL path and include auth headers</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8218/files#diff-87db21a973eed4fef5f32b267aa60fcee5cbdf03c67fafdc2a9b553bb0b15f34 ">+60/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Shrinath Rao <shnath@openobserve.ai >
2025-09-01 20:38:03 +05:30
e2ad15f0c0
test: Framework rework Playwright e2e tests ( #8118 )
...
### **PR Type**
Tests, Enhancement
___
### **Description**
- Migrate sanity tests to enhanced framework
- Add robust SanityPage page-object methods
- Introduce logging and wait helpers
- Refactor service account tests setup
___
### Diagram Walkthrough
```mermaid
flowchart LR
Specs["Playwright specs (sanity, serviceAccount)"]
Utils["Enhanced test utils (fixtures, logger, waits)"]
Pages["New page objects (SanityPage, etc.)"]
Archives["Old specs archived (_old)"]
Specs -- "use" --> Utils
Specs -- "call" --> Pages
Legacy["Legacy inline flows"] -- "moved to" --> Archives
Legacy -- "replaced by" --> Pages
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>sanityPage.js</strong><dd><code>New Sanity page object with
robust flows</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-a0ac0217ef875311dc536edb97deda19927a64e73cede62123b97cbe7df113b8 ">+669/-0</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>sanity.spec.js</strong><dd><code>Refactor to enhanced
fixtures and page object</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-89290ca55858ff744863278ee9381e32276c37a6c0718fb3f9dcba71a6451d91 ">+159/-442</a></td>
</tr>
<tr>
<td><strong>serviceAccount.spec.js</strong><dd><code>Migrate service
account tests to enhanced setup</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-270e1e217b97afe4d451df3a48a0bfb14db453241adf1b7388342292707d5bb1 ">+114/-36</a></td>
</tr>
</table></details></td></tr><tr><td><strong>Miscellaneous</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>sanity.spec_old.js</strong><dd><code>Archive legacy sanity
spec implementation</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-51cb8e6cd5047c3d1ace254fa770ae74a3c13aa97e93315132dede6c4a84739a ">+498/-0</a>
</td>
</tr>
<tr>
<td><strong>sanity2.spec_old.js</strong><dd><code>Archive legacy sanity2
spec with helpers</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-0e189adff26af46cfcc03f014d522c6a37ac268f7ad3e1a3ace1267bd64161e3 ">[link]</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>31 files</summary><table>
<tr>
<td><strong>playwright.yml</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3 ">+7/-8</a>
</td>
</tr>
<tr>
<td><strong>package.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-a41ba7975823b7b2dc071285391f835fbefd33bfffeb5aa2fba3ae15425cc64f ">+2/-1</a>
</td>
</tr>
<tr>
<td><strong>changeOrgPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-1061a261a5b7ae8ffd6c4b48e382bb262289aacca97207aa15f00053b822038b ">+224/-0</a>
</td>
</tr>
<tr>
<td><strong>enrichmentPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-98a7e60352ddf3be23cf70170559e637ef448c189cd9414448e9afff897c3019 ">+507/-0</a>
</td>
</tr>
<tr>
<td><strong>schemaLoadPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-6f0791c152c7a17e60e0167d52c4032edc6384553b69b9a94b81e380e98dd1d3 ">+265/-0</a>
</td>
</tr>
<tr>
<td><strong>schemaPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-1c0c0fc2fdbebae8c8aa7bef5ba92d31dee65238272581453e6f2b9a3f135468 ">+397/-0</a>
</td>
</tr>
<tr>
<td><strong>userPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-bba64431d6702ebcfd265dd690f81d8c06a285fb09016c4823ed3490403ed777 ">+26/-7</a>
</td>
</tr>
<tr>
<td><strong>iamPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-e537da3c3eaa929da94df90ba76b3b17f08792c9de268de899d310d13740efcf ">+13/-5</a>
</td>
</tr>
<tr>
<td><strong>page-manager.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-565eab8b3c767ae50c9d05e591621d14f66b81af84d6b5ea6efe136c1c3933df ">+11/-1</a>
</td>
</tr>
<tr>
<td><strong>pipelinesPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-d5f2771fd1139c174c46d09a9ab2da0ea4588b853e2b87e4728322d072542f49 ">+9/-0</a>
</td>
</tr>
<tr>
<td><strong>reportsPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-bc6b666f3862dce898d9ca68d036f317305b3f3d063d6eda423f2d864d36be0f ">+8/-2</a>
</td>
</tr>
<tr>
<td><strong>changeOrg.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-d5557230e5f003c7c0129aab00855dc94501cc12a06b1f7814ff85d9fe389f47 ">+188/-149</a></td>
</tr>
<tr>
<td><strong>enrichment.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-f52a06db75e7593aee95da4e0b255cb0001aa6c2b416d30358858e2f39b0cdcd ">+106/-319</a></td>
</tr>
<tr>
<td><strong>schema.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-72dd04280e3c77242b982bd7853ffa447428c0f9419c37a71d867ec7cd28d4b8 ">+121/-265</a></td>
</tr>
<tr>
<td><strong>schemaload.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-5184069ec159ab301454535a5f45967635972e108095b82401ba96cb92856c5b ">+114/-184</a></td>
</tr>
<tr>
<td><strong>usersOrg.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-0bf40521e88d2cf427617e49affa14d4ebe469b6da4ea4aeef4fe3e246eb24c7 ">+177/-77</a></td>
</tr>
<tr>
<td><strong>enhanced-baseFixtures.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-3657cfe42414b97b6676be58109d3c3f92e8ba2f52bb09840b65ac9f9c889997 ">+137/-0</a>
</td>
</tr>
<tr>
<td><strong>framework-test.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-d3d8309ee6bdfb8edd0e39b4f8d2008ffe07775f130882a60b0509b29ae1a15d ">+33/-0</a>
</td>
</tr>
<tr>
<td><strong>global-setup.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-06323dad7214f86b41b62e121e716eeea0054bc4d950c6bcf4a0efe53894acc8 ">+147/-0</a>
</td>
</tr>
<tr>
<td><strong>global-teardown.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-f3a6f320a6dd08450cf34d96f07847b9324fff8415f768963252ce0e1e35315e ">+30/-0</a>
</td>
</tr>
<tr>
<td><strong>slack-reporter.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-29fdf4df416fe8e9965be16bc0419787175c227c385ac37560da40dc935328f5 ">+162/-0</a>
</td>
</tr>
<tr>
<td><strong>test-logger.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-9ad67a2a3dbfce3994655b30eb07c0a1b795ce0dc10ae9785481f9472394ce5e ">+202/-0</a>
</td>
</tr>
<tr>
<td><strong>wait-helpers.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-fdf1e3fd5f38875694acd5e3f0a140ed89326ce8a2910f07b18d1004fd5d2165 ">+331/-0</a>
</td>
</tr>
<tr>
<td><strong>playwright.config.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-91cb9615068914b2e4f5d66fcbed50d3e9771ea2d882f8e8048bbe54eab3c414 ">+19/-7</a>
</td>
</tr>
<tr>
<td><strong>changeOrg.spec_old.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-1a658a67b111f3f391520406aed0a66793d0e91c3157dca683a6e3603ff37bc6 ">+239/-0</a>
</td>
</tr>
<tr>
<td><strong>enrichment.spec_old.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-92bb2446bdc69b0b0a88ea39a9ae169f5266e6021df70ea50149f0c624f1b7f9 ">+325/-0</a>
</td>
</tr>
<tr>
<td><strong>sanity2_consolidated.spec_old.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-59079f7e0748f2f8d484ea6537936f8bfc488793799fa118c5f92c710645e175 ">+76/-0</a>
</td>
</tr>
<tr>
<td><strong>schema.spec_old.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-61f5d68bba432d1c3c14d155e24088dd5849e90df5f4e636bf79c6477947105e ">+275/-0</a>
</td>
</tr>
<tr>
<td><strong>schemaload.spec_old.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-f230c8cf8362435b93ca2346369054471f362221d4209308616eb256970f8c8e ">+188/-0</a>
</td>
</tr>
<tr>
<td><strong>serviceAccount.spec_old.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-fed6804e49039a3e8ad282d4db4ddf9da8afc954bdb4c4dbc0cdeccbe1f3f1c0 ">+138/-0</a>
</td>
</tr>
<tr>
<td><strong>usersOrg.spec_old.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8118/files#diff-e7b7c318f5ca80a33d8351d60134f6ff3983d89e76e517eb0d8e94ca9b30fac9 ">+211/-0</a>
</td>
</tr>
</table></details></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Neha P <144308844+neha00290@users.noreply.github.com >
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech >
2025-08-29 00:30:23 +05:30