mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-03 16:10:21 +00:00
main
58
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f624c0b157 | test(streams): don't count GitHub 429 as a broken doc link (#16202) | ||
|
|
495e414f49 | fix(search): isolate concurrent queries that share a trace id (#15515) | ||
|
|
bde25eedf8 | fix(search): only prune partitions when the stream is read once (#15514) | ||
|
|
c99cb0d516 |
fix(logs): logs finesse phase 1 — severity inference, auto-run, free-text FTS search, J/K, line permalinks (#15234)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Neha P <neha@openobserve.ai> |
||
|
|
17e771a6c7 |
feat(ingestion): add GPU → NVIDIA DCGM Exporter recommended data source (#14903)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Bhargav <BJP232004@GMAIL.COM> |
||
|
|
6785abe1f8 |
feat(metrics): generate sample blocks in MIDX during compaction (#14711)
Co-authored-by: Huaijin <haohuaijin@gmail.com> |
||
|
|
33c6e9e0e1 |
test(dashboards): cover CTE/subquery match_all queries through the panel search path (#13838)
## What First test coverage for the dashboard **panel** endpoints and the **dashboard search path**, running CTE/subquery `match_all` queries as real dashboard panels. Nothing in the repo previously touched either: `grep -rn "/panels\|search_type=dashboards" tests/api-testing/` returned zero hits. ## Why Panels query `_search?type=logs&search_type=dashboards&dashboard_id=…` — a different route into the engine than the Logs page (`search_type=ui`). The `match_all` + FST projection rewrite fixed in #13808 runs inside it, so a query that passes via Logs can still regress on a dashboard. The rewrite has to preserve the projection of the block the predicate sits in. When that block is the whole statement, the projection is obvious. When it's a CTE body feeding a JOIN, a window, or a four-branch UNION ALL, it has to preserve the *CTE's* output schema while the outer query reads different columns from it — which is where it went wrong. ## Coverage **71 distinct queries across 29 combination families**, all with `match_all` inside a `WITH …` body or a derived table: | Axis | Variants | |---|---| | Nesting depth | 1, 2, 3, and 5-level CTE chains | | Nesting kind | CTEs and derived tables (and one query using both) | | UNION ALL | 2, 3, and 4 separate `match_all` branches | | JOIN | CTE⋈CTE, derived⋈derived, cross-stream | | Window | `ROW_NUMBER`, `RANK`, `DENSE_RANK`, partitioned aggregates | | Negation | `NOT match_all`, and mixed with positive `match_all` | | Combined with | `COUNT(DISTINCT)`, `CASE`, `HAVING`, `histogram()` | Each case creates a real panel, runs it via the dashboard search path, then asserts row count against the DuckDB oracle and that no expected column was dropped from the projection. A further 30 cases run the same SQL through **both** Logs and dashboard and diff the results — that's what catches a rewrite firing on only one path. Queries are reused from the existing query-agent corpus rather than duplicated, so the two suites can't drift: query-agent verifies the values via the Logs path, this verifies the same SQL survives the dashboard path. Cases are **discovered by classifying the SQL**, not from a hand-written ID list, so new combinations added to the corpus are picked up automatically. Test ids name the shape (`Q1022-cte1_union_cdist_4ma`), so a failure identifies the combination without opening the corpus. Plus 14 tests for the panel endpoints themselves — AddPanel / UpdatePanel / DeletePanel, contract + CRUD lifecycle + 7 error paths derived from `DashboardError` in `src/core/src/http.rs`. ## Changes | File | | |---|---| | `tests/dashboards/test_dashboard_cte_panels.py` | new — 103 tests | | `tests/dashboards/test_dashboard_panels.py` | new — 14 tests | | `tests/dashboards/conftest.py` | new — shared fixtures | | `support/panel_queries.py` | new — discovery + panel helpers | | `support/endpoints/dashboards.py` | +78, additive | | `support/endpoints/search.py` | +36, additive | | `support/factories.py` | +73, additive | The three shared-file edits are **187 added lines, 0 modified** — nothing existing can break. ## Results 168 tests in tests/api-testing/tests/dashboards/ (117 new + 51 pre-existing) 166 passed, 1 skipped, 1 xfailed # full nested-query corpus present 74 passed, 2 skipped, 1 xfailed # current corpus on main Repeated 2× and 4× respectively, no flakes. Discovery scales with the corpus: on main it finds 8 nested `match_all` cases, and 71 once the larger sentinel set is present. Cases that aren't in the corpus skip with an explanatory message instead of failing, so this is safe to merge in either order. |
||
|
|
8a4f7ea23b |
test(query-agent): add 70 match_all sentinel queries for FST rewrite path coverage (#13824)
## Summary Adds Q1003–Q1072 (70 queries) to `tests/test-data/query-agent/queries/full_text_search.json`. All exercise the `match_all` + FST projection rewrite path fixed in #13808, under diverse plan shapes. Structural patterns mirror real production customer queries (fan-out UNION ALL, multi-CTE, CSE-triggering scalar wrappers on the FTS field) but use **only test-fixture fields and values** — no customer identifiers. ## Shape coverage | Family | Range | Count | What it exercises | |---|---|---|---| | A. Subquery + `match_all` + GROUP BY | Q1003–Q1012 | 10 | Simple inline-view aggregations | | B. CTE with fan-out UNION ALL, `match_all` per branch | Q1013–Q1027 | 15 | Dominant customer pattern (multi-branch UNION + per-branch FTS + LIKE/regex + outer aggregate) | | C. CTE + scalar wrapper on `log` (trim/upper/split_part/regexp_replace/substring/concat/length) + `match_all` | Q1028–Q1037 | 10 | **CSE-trigger sentinels** — the wrappers cause DataFusion CSE to insert the intermediate `ProjectionExec` that #13808 fixes | | D. Deep multi-CTE + `match_all` + regex/LIKE/CASE combos | Q1038–Q1047 | 10 | Deep plan trees, many projection candidates | | E. Edge cases (DISTINCT, HAVING, CASE, IN-list) | Q1048–Q1052 | 5 | Corner combinations | | F. `match_all` inside JOINs (self-join, LEFT JOIN, cross-stream) | Q1053–Q1058 | 6 | JOIN builders inject their own projections | | G. `match_all` + window functions (ROW_NUMBER, RANK, DENSE_RANK, SUM/COUNT OVER) | Q1059–Q1063 | 5 | Window planning inserts projections above filter | | H. Negated `match_all` (NOT, AND NOT, UNION of pos/neg) | Q1064–Q1066 | 3 | Rewriter's negation code path | | I. Multiple `match_all` in same query (AND, OR, nested) | Q1067–Q1069 | 3 | Two FST fields injected simultaneously | | J. `histogram` + `match_all` time-series | Q1070–Q1072 | 3 | Common customer pattern; histogram optimizer + FST rewriter together | ## Verification - All 70 queries have DuckDB oracle results auto-populated via `compute_counts.py`. - Two initial cross-stream JOIN queries (Q1055, Q1058) were rewritten to disambiguate the FTS field between streams — now they scope `match_all` inside a per-stream CTE before joining. - Audit for customer-token leakage (pharma, tomcat, o2_test, usgm, storenumber, tagname, cash, credit_card, etc.) returns **zero hits** across Q1003–Q1072. ## Implementation notes - Added generator script [tests/test-data/query-agent/gen_q1003_q1052.py](tests/test-data/query-agent/gen_q1003_q1052.py) alongside existing `gen_q201_q400.py` / `gen_q511_q556.py` convention. Deterministic regeneration. - Wide JSON churn across the other 12 category files is `compute_counts.py` re-baselining expected results against a fresh `BASE_TS` (`base_ts_override.json` is untracked); tuple-order shuffles are harmless under `results_mode: rowsort`. - Coverage is most meaningful under the `remove_filter_with_index_false` CI leg (added in #13810), where `match_all` actually reaches `RewriteMatchPhysical`. Under the default flag (`true`), the index optimizer removes `match_all` before the rewriter runs, masking the bug path. ## Test plan - [ ] `api_query_agent / single_node_opt_true` — green - [ ] `api_query_agent / single_node_opt_false` — green - [ ] `api_query_agent / remove_filter_with_index_false` — green (this is the leg that actually validates the rewriter under all 70 shapes) - [ ] Q1003–Q1072 all pass on both memtable and parquet phases 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
7fbce61fd1 |
test: add Q1001 + Q1002 sentinels for match_all/CSE + widen CI matrix (#13810)
Two regression sentinels for the FST projection rewrite path fixed in openobserve/openobserve#13808 (currently in the merge queue on branch-v0.40.0 and awaiting the main-branch counterpart): Q1001 — CTE with trim(log) alias, match_all in WHERE, column-pruned outer SELECT. Mirrors the shape of the PR's own unit test (test_cse_projection_schema_propagation) — CSE inserts a ProjectionExec between filter and datasource; a regression in the rewriter's f_down handling would surface here. Q1002 — five-CTE pipeline (filtered → in_shop → scoped → normalized → cleaned) mixing match_all with LIKE, split_part, regexp_replace ID normalization, and GROUP BY aggregation. Higher structural pressure: more intermediate ProjectionExec nodes and more chances for a stale column index to leak through. Uses only test-fixture fields (log, resource_path, page_url, http_method); no customer identifiers. Also adds a third leg to the query-agent CI matrix that runs with ZO_FEATURE_QUERY_REMOVE_FILTER_WITH_INDEX=false — exercises the non-index-filter path that the match_all projection rewriter also touches. The wide JSON churn across the other query files is compute_counts.py re-baselining expected results against a fresh BASE_TS (base_ts_override.json is untracked); tuple-order shuffles are harmless under results_mode: rowsort. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
7f647109fc |
fix: preserve projection schema when rewriting match_all (#13808)
## Summary Forward-port of #13798 to `main`. - rebuild `ProjectionExec` expressions against the rewritten child schema before DataFusion validates the projection - carry full-text search fields through intermediate projections and preserve the original `FilterExec` output schema - reject a full-text search field that a projection already exposes as an alias for a different expression, instead of silently searching the wrong data - add a regression for a projection sitting between the filter and the datasource ## Root cause `RewriteMatchPhysical` expanded the `NewEmptyExec` projection with full-text search fields. When an optimizer rule (CSE, for example) had inserted an intermediate `ProjectionExec`, adding the FST field changed the child column positions while the projection still referenced its columns by their old indices, so DataFusion rejected the plan. The old `filter_projection` was also computed as positions inside `parquet_projection`, i.e. in the datasource output space. That is only valid when the filter reads the datasource directly. It is now mapped by name against the actual filter input schema, and the field order of `filter.schema()` is preserved so the operators above the filter keep reading the same columns. Two latent issues are fixed along the way: - a scan with `projection == None` (all columns) was narrowed down to only the FST fields - `schema.index_of(...).unwrap()` in the datasource rewrite panicked instead of returning a plan error ## Differences from #13798 `main` is on DataFusion 54 and builds the filter through `FilterExecBuilder`, so step 5 uses `apply_projection` and keeps `with_fetch`. The regression test also differs. The CTE query used in #13798 no longer produces an intermediate projection on DataFusion 54 — CSE does not extract `btrim(log)` there — so the test would be vacuous. `test_projection_between_filter_and_scan` builds the offending plan shape directly instead, which does not depend on optimizer internals. ## Verification - `cargo test -p search --no-default-features --lib datafusion::optimizer::physical_optimizer::rewrite_match` — 7 passed, 0 failed - `test_projection_between_filter_and_scan` fails on `main` without the fix (`SchemaError: Unable to get field named "__common_expr_1"`) --------- Co-authored-by: Neha P <neha@openobserve.ai> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
8303be0b4c |
refactor: rename AlertManager node role to Scheduler (#13696)
## Summary - rename the `AlertManager` node role to `Scheduler` across Rust services, jobs, protobuf bindings, UI labels, and tests - emit `scheduler` as the canonical role name - continue accepting legacy `alertmanager` and `alert_manager` configuration values - keep protobuf enum value `5` unchanged for wire compatibility ## Why The role schedules and executes alerts, reports, pipelines, synthetics, and other background work. `Scheduler` describes that broader responsibility more accurately. ## Compatibility - existing role configuration values remain accepted through parser and serde aliases - the protobuf numeric value remains stable - coordinated changes are included in the Enterprise, Helm chart, and documentation repositories ## Verification - `cargo test -p config test_role` - `cargo test -p openobserve-node` - `cargo check -p openobserve-jobs` - targeted web tests: 307 passed, 13 skipped - Rust formatting and targeted Prettier checks |
||
|
|
9af9a47fea |
test: add error path, explain analyze, and concurrency stress tests for query agent (#12809)
## Summary - **Phase 4 — Error Paths** (`test_4_error_paths.py`): 28 cases across 8 categories that send intentionally invalid SQL and assert 4xx not 5xx. Self-contained, runs in ~24s without data dependency. - **Phase 5 — Concurrency Stress** (`test_5_concurrency.py`): 26 queries (2 per category) run simultaneously at 5/10/15 worker levels via ThreadPoolExecutor. Each thread gets its own client. Catches deadlocks and thread-safety bugs. - **EXPLAIN ANALYZE** (`test_explain_analyze.py`): Verifies EXPLAIN/EXPLAIN ANALYZE return 200 with plan output and no `partial_error`. Also validates EXPLAIN ANALYZE on cross-schema dot-notation queries returns 4xx (not 500 crash). - **Fix**: `load_all_queries()` now skips JSON files without a `"queries"` key. ## Test plan - [x] Error path tests pass on pentest (28/28, all return 400) - [ ] CI run: `rye run pytest tests/query_agent/test_4_error_paths.py -v` - [ ] CI run: `rye run pytest tests/query_agent/test_5_concurrency.py -v` - [ ] CI run: `rye run pytest tests/query_agent/test_explain_analyze.py -v` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
0be7644721 |
test: common data seed for real-issue verification (#13029)
Yesterday's real-bug proof-of-concept showed the pipeline plumbing works, but every real bug came back INCONCLUSIVE because the Tester (via Playwright MCP) opened pages on an **empty OpenObserve instance**. There was nothing to observe — no streams, no alerts, no pipelines, no traces. This PR adds a common data seed the engine runs before every dispatch. **Pairs with [o2-enterprise#XXXX](https://github.com/openobserve/o2-enterprise/pull/XXXX) — both must merge together.** ## Files added | File | Contents | |------|----------| | `seed/seed-common.sh` | Main orchestrator. POSTs everything via HTTP Basic auth (matches OSS Playwright's `data-ingestion.js` — header-based, no creds on CLI args). | | `seed/traces_seed.json` | 5-span OTLP payload (synthetic — OSS doesn't ship a static traces JSON; `trace-ingestion.js` generates programmatically) | | `seed/metrics_seed.json` | 3-metric OTLP payload (HTTP counter + latency gauge + memory gauge; synthetic for the same reason) | | `seed/alerts_seed.json` | 3 alerts (one scheduled, one real-time, one disabled) | | `seed/pipeline_seed.json` | 1 pipeline (default → ci_pipeline_out) | ## What runs (in order) 1. **Fixture logs** → `ci_seed_stream` (kept for fixture #90001 backward compat via existing `logs_seed.json`) 2. **Bulk logs** (~3.8k entries from existing `tests/test-data/logs_data.json`) → 4 streams: `default`, `e2e_automate`, `web_logs`, `k8s_logs`. **Same file** OSS Playwright's `globalSetup` uses. 3. **OTLP traces** → `default` trace stream 4. **OTLP metrics** → `default` metrics stream 5. **3 alert definitions** (POST /api/{org}/{stream}/alerts) 6. **1 pipeline** (POST /api/{org}/pipelines) Idempotent — all ingestion is best-effort; single-endpoint failures log the HTTP status code but don't abort the seed. Unpopulated areas still yield INCONCLUSIVE downstream (better than the whole engine failing at seed). ## Coverage for the 10 Needs-Testing bugs we're firing next | Bug | Data type needed | Seed step | |-----|------------------|-----------| | #12452 SQL editor overflow | logs | 2 | | #11700 Streams spacing | streams (auto-created via ingest) | 2 | | #5042 Include search cmd+enter | logs | 2 | | #12603 Traces page issues | traces | 3 | | #12820 Alerts UX | alerts | 5 | | #6750 Multi-window custom time | alerts | 5 | | #10530 Pipeline cron alignment | pipeline | 6 | | #12647 Pipelines popup overflow | pipeline | 6 | | #9252 Pipeline destination verbiage | pipeline | 6 | | #12803 Language translation | any page (no seed needed) | — | ## Validated end-to-end Fixture #90002 dispatched on the paired branches ([run 28657529004](https://github.com/openobserve/o2-enterprise/actions/runs/28657529004)) — all 26 pipeline steps completed successfully, including the new Seed step showing 6 sub-seeds with their HTTP status codes. ## What's NOT in this PR - The old `seed/seed.sh` stays for one merge cycle (deprecated in the README) — will delete once two clean real-bug batches confirm seed-common works - No `Test-Assist-CI-Verified` label changes - No qa-reports table updates ## Test plan - [x] Fixture #90002 with `source_ref=feat/test-assist-common-seed` — all 26 steps green - [ ] After merge (this + ENT PR): dispatch on any real bug — expect seed step to run before Scout, and Tester to find non-empty pages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
7ad182b167 |
test(test-assist-ci): vision-preprocessor fixture + caller filter fix (#12973)
Consolidated OSS-side changes for the vision preprocessor rollout. Two things bundled here — both small, both OSS-only, related by "unblocks test-assist real-issue verification." ## Change 1 — Caller filter fix (originally in #12972, now closed) **One-line fix** for `.github/workflows/test-assist-caller.yml`: ```yaml # BEFORE — broken (silently skipped every /verify-bug comment on real issues) github.event.issue.pull_request == null # AFTER — truthy negation, evaluates correctly for undefined fields !github.event.issue.pull_request ``` Yesterday: 5 `/verify-bug` comments on real issues (#12452, #12647, #12603, #12820, #11700 — all by @neha00290, MEMBER association) produced 5 caller runs with `conclusion: skipped` and empty steps arrays. Root cause: `== null` compared against an *undefined* field in GHA expression context returns unexpected results → the entire OR short-circuited to false. The council caller uses the truthy check in the opposite direction (`github.event.issue.pull_request` alone → *requires* a PR). We use the negation of the same pattern — proven, works. ## Change 2 — Vision preprocessor fixture (`bug-002-image-attachment.json`) Adds fixture #90002 whose repro info lives **entirely in an image attachment**: - body has `Steps to Reproduce: _No response_` - body embeds a stable github.com/user-attachments/... permalink (streams-page screenshot from real bug #11700) Pairs with the ENT-side vision preprocessor PR (adds extract-attachments + describe-via-GLM-4.6V-Flash steps before Analyst). Success = pipeline extracts the image, GLM describes it, Analyst uses the description → produces `area: Streams` + `testability >= MEDIUM` instead of skipping for "no repro steps." `expected-verdicts.json` updated with the pipeline-signal expectations for #90002. ## Why bundled Both changes unblock real-bug verification. The caller fix means `/verify-bug` starts dispatching; the fixture proves the vision preprocessor works on visual-only bugs. Reviewing them together is faster than in isolation. ## Test plan - [x] YAML parses; fixture JSON valid; expected-verdicts JSON valid - [ ] After merge (this + ENT PR): comment `/verify-bug` on any Needs-Testing issue → expect caller job to RUN (not skip) → engine dispatched - [ ] After merge: dispatch fixture 90002 via workflow_dispatch → confirm vision preprocessor produces non-empty `bug-90002-attachments.md` → confirm Analyst produces `area: Streams` + non-SKIP testability Closes #12972. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
ea039d0940 |
ci: add test-assist-ci caller + fixture data (#12946)
## Summary Thin OSS caller for the upcoming **Test-Assist** automated bug-verification pipeline — first piece of a 3-PR rollout. Mirrors the existing [`docgen-caller.yml`](.github/workflows/docgen-caller.yml) and [`e2e-council-caller.yml`](.github/workflows/e2e-council-caller.yml) patterns: the heavy engine will live in `o2-enterprise`; this caller only gates the trigger and dispatches via `ORG_ADMIN_TOKEN`. - **`.github/workflows/test-assist-caller.yml`** — caller workflow with two doors (`workflow_dispatch` + `/verify-bug` issue comments by org members). Defaults to `fixture_mode=true` / `write_mode=false` so the engine can't post to real issues until explicitly flipped. - **`tests/test-data/test-assist-ci/`** — fixture issue (#90001) + log seed data + `expected-verdicts.json` contract. Lets the engine soak in `FIXTURE_MODE=true` against synthetic data without touching real `Needs-Testing` issues. - **`tests/ui-testing/.gitignore`** — adds `_ci_tmp/` for the throwaway specs the engine generates per run. ### Differences from docgen / e2e-council callers | Dimension | docgen / e2e-council | test-assist | |---|---|---| | Operates on | PRs | **Issues** (`.issue.pull_request` filter dropped) | | Comment trigger | `/docgen`, `/e2e` | `/verify-bug` | | Inputs | pr_number, dry_run | issue_number, **fixture_mode**, **write_mode** | | Default safety | dry_run=true on comment | write_mode=false on every door | ### Rollout sequencing 1. **This PR** — OSS caller + fixtures + gitignore (no engine yet → caller will 404 on dispatch; intentional) 2. **Follow-up ENT PR** — `o2-enterprise/.opencode/agents/test_assist_ci/` (6 opencode sub-agents + README) 3. **Follow-up ENT PR** — `o2-enterprise/.github/workflows/test-assist.yml` (the engine itself) ## Test plan - [ ] CI: workflow YAML parses (verified locally via `python3 -c "import yaml; yaml.safe_load(open(...))"` — passes) - [ ] After ENT engine PR merges: trigger via `workflow_dispatch` with default inputs (`issue_number=90001`, `fixture_mode=true`, `write_mode=false`) → expect engine ack + fixture verdict in job summary, **no** GitHub writes - [ ] After soak: trigger `workflow_dispatch` with `fixture_mode=false` on a hand-picked `Needs-Testing` issue, `write_mode=false` → verdict in summary only - [ ] After verdict accuracy is calibrated: org member comments `/verify-bug` on a real issue, `write_mode=true` flipped via repo vars → comment + labels post 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
b0f4b0e46f |
test: expand query-agent suite from 672 to 1,000 queries (#12856)
## Summary Expands the query-agent regression test suite from **672 → 1,000 queries** by adding 328 complex queries (Q672–Q999) across all 13 categories. ## What changed - **`data_gen.py`**: `NUM_QUERIES` bumped from 675 → 1000 so `build_dataset()` generates records for all query IDs - **13 query JSON files**: 328 new queries appended, with DuckDB-computed expected results via `compute_counts.py` - **`gen_q672_q999.py`**: new generation script (idempotent — re-running skips all existing queries) ## New query patterns added Targets DataFusion-upgrade-fragile areas identified from past breakage: | Pattern | Examples | |---|---| | 3-stream JOINs + correlated EXISTS | Q672–Q677 | | FULL OUTER JOIN between streams | Q693–Q696 | | Window + DISTINCT (FIRST_VALUE, LAST_VALUE, NTH_VALUE) | Q717–Q730 | | Named WINDOW clauses | Q731–Q736 | | LAG/LEAD with CASE trend detection | Q742–Q751 | | match_all + GROUP BY + HAVING | Q792–Q796 | | INTERSECT/EXCEPT with CTEs | Q822–Q849 | | Deep CTE chains (3+ CTEs, self-joins) | Q757–Q791 | | Correlated scalar subqueries in SELECT | Q769–Q776 | | Histogram with JOIN between streams | Q901–Q905 | ## Issues fixed - **4 duplicate IDs** (Q545–Q548) existed in both `cte_subquery.json` and `full_text_search.json` — renumbered FTS copies to available gaps (Q025, Q611, Q631, Q1000) - **27 queries** using OO-specific functions (match_all, spath, regexp_like, window-inside-aggregate) annotated with `skip_sqllogictest: true` ## Final breakdown | Category | Before | After | |---|---|---| | cte_subquery | 89 | 124 | | aggregation | 71 | 99 | | string_functions | 70 | 92 | | combined | 73 | 88 | | full_text_search | 58 | 88 | | window | 48 | 88 | | basic_select | 71 | 86 | | histogram | 57 | 79 | | union | 34 | 62 | | cross_stream | 16 | 61 | | date_time | 37 | 60 | | pagination | 22 | 42 | | math_functions | 26 | 31 | | **Total** | **672** | **1,000** | - **956** queries use sqllogictest mode (DuckDB-verified results) - **44** use legacy assertion mode (OO-specific functions, histograms) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
7d3e67903e |
ci: add single_node_opt matrix mode to query agent tests (#12756)
## Summary - Adds a matrix strategy to the query agent SQL regression suite jobs in both `api-testing.yml` and `query-agent.yml` - Each job now runs with `ZO_FEATURE_SINGLE_NODE_OPTIMIZE_ENABLED=false` and `ZO_FEATURE_SINGLE_NODE_OPTIMIZE_ENABLED=true` - Verifies both DataFusion physical optimizer paths produce identical query results - Matrix legs run in parallel with `fail-fast: false` - All artifact/log names include the matrix label to avoid collisions ## Test plan - [ ] PR CI shows two `api_query_agent` matrix legs (single_node_opt_false and single_node_opt_true), both pass - [ ] `/query-agent` PR comment triggers both modes and posts per-mode results comments 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
494025f83b |
test: add ~100 query-agent queries covering re_match, production patterns, deep nesting, edge cases (#12735)
## Summary - Expands the query agent test suite from **574 → 675 queries** across 13 category files - **20 re_match queries** — testing `\d`, `[abc]`, `^anchor`, `a|b`, coercion, boolean mode, COALESCE+CASE patterns found 224x in production - **19 production-inspired queries** — histogram+re_match+CASE+percentage, COALESCE chains, re_match+re_not_match combined - **19 deep-nesting queries** — INTERSECT, EXCEPT, subquery-in-HAVING, double-NOT-EXISTS, 2-level correlated subqueries - **15 edge-case queries** — empty results, division-by-zero via NULLIF, STDDEV of single row, NULL grouping, BETWEEN edge - **10 window-depth queries** — multiple window functions, WINDOW clause reuse, NTH_VALUE, NTILE, CUME_DIST - **5 histogram+re_match queries** — covering production pattern of histogram + filtered metric extraction - **5 FTS combo queries** — match_all + histogram/re_match/window/aggregation - **5 aggregation edge queries** — multiple FILTER clauses, STRING_AGG with ORDER BY, HAVING complexity - Expected values regenerated by DuckDB oracle ## Test plan - [ ] CI passes (memtable + parquet phases) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
4f3c0fcba3 |
fix(tests): verify match_all FTS result correctness and enforce Tantivy readiness (#12717)
## Summary
Fixes a test gap where `match_all` Tantivy queries could return wrong
results after a DataFusion upgrade without being caught by existing
assertions.
### Problem
After a DataFusion upgrade merge, the DataFusion access plan was no
longer used for `match_all` queries, causing Tantivy to return wrong
results. The existing tests only compared row counts against a DuckDB
oracle that emulates `match_all` with `LIKE '%term%'` — so wrong rows
that still matched the LIKE pattern passed undetected.
Additionally, `node/flush` does not generate Tantivy indexes
immediately. The default `ZO_MAX_FILE_RETENTION_TIME=600s` means
WAL→parquet→Tantivy conversion can lag, so FTS queries may fall back to
a non-Tantivy path during tests.
### Changes
1. **Content verification**
([conftest.py](tests/api-testing/tests/query_agent/conftest.py)): Every
hit from a `match_all` query that returns the `log` field is now checked
— each search term word must be present in `log`. A hard assertion fails
if Tantivy returns rows that don't contain the search terms.
2. **Tantivy readiness gate**
([test_2_parquet.py](tests/api-testing/tests/query_agent/test_2_parquet.py)):
After `node/flush`, the test now polls with a `match_all('warehouse')
LIMIT 1` query (up to 120s timeout) to confirm Tantivy indexes are built
before running FTS assertions. Previously only COUNT(*) was checked.
3. **Multi-word match_all emulation**
([compute_counts.py](tests/test-data/query-agent/compute_counts.py)):
`match_all('ACK batch')` now translates to `(log LIKE '%ACK%' AND log
LIKE '%batch%')` — per-token AND conditions matching Tantivy's
token-level search semantics, instead of the old phrase match `log LIKE
'%ACK batch%'`.
4. **Regenerated expected results** across all query JSON files.
## Test plan
- [ ] Run query agent test suite against an environment with Tantivy
enabled
- [ ] Verify `match_all` content assertions catch intentionally
corrupted results
- [ ] Confirm post-flush Tantivy readiness poll works within the timeout
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Huaijin <haohuaijin@gmail.com>
|
||
|
|
1484f920a9 |
test: expand query agent suite to 570 queries with production SQL patterns (#12534)
## Summary - Added **46 new queries** (Q511-Q556) to the query agent regression suite, bringing the total from 524 to **570 unique queries** - Mined from real production SQL patterns (june7.sql) and adapted to use existing test data fields - Fixed **15 pre-existing duplicate IDs** (Q226-Q240 existed in both aggregation.json and basic_select.json — renumbered to Q557-Q571) ## New query distribution | Category | New | Description | |---|---|---| | string_functions | +10 | spath() + str_match_ignore_case, split_part() + chr(), multi-COALESCE chains, CAST AS VARCHAR | | histogram | +7 | 30-second/min intervals, COUNT FILTER, SUM(CASE WHEN), NULL breakdowns | | date_time | +6 | arrow_cast(), date_trunc(), to_timestamp_micros(), timestamp arithmetic, LAG for gaps | | combined | +6 | count(distinct) in CASE WHEN, re_match + re_not_match combo, FILTER in aggregation, HAVING percentages | | full_text_search | +5 | re_match + re_not_match, regexp_like, match_all(), str_match_ignore_case with COALESCE | | cte_subquery | +4 | CTE with spath, CTE with COALESCE fallbacks, correlated subquery | | aggregation | +2 | IS NOT NULL exploration patterns, multi-column GROUP BY | | window | +2 | NTILE with COALESCE PARTITION, LAG with delta calculation | | basic_select | +2 | Complex COALESCE + CAST chains, NULLS LAST ordering | | cross_stream | +1 | LEFT JOIN on dual keys across streams | | union | +1 | UNION ALL with different metric types | ## New OO-specific functions covered Four functions previously had **zero test coverage**: - `chr()` — 1 query (string splitting by character code) - `arrow_cast()` — 1 query (DataFusion timestamp arithmetic) - `date_trunc()` — 1 query (minute-level timestamp bucketing) - `to_timestamp_micros()` — 1 query (microsecond-to-timestamp conversion) Plus expanded coverage of rare functions: `spath()` (+3), `split_part()` (+3). ## Test modes - **38/46** new queries have full sqllogictest comparison (DuckDB computed expected results) - **8/46** use legacy assertions for OO-specific functions that DuckDB cannot replicate (spath, arrow_cast, date_trunc, to_timestamp_micros) - Overall suite: **533** sqllogictest, **37** legacy ## Changes | File | Change | |---|---| | `data_gen.py` | `NUM_QUERIES` 520 → 575 | | `gen_q511_q556.py` | New: query generation script | | 13 category JSON files | Updated with new queries + dedup fix | ## Verification - `compute_counts.py` ran successfully on all 570 queries - 0 duplicate IDs across all 13 category files - Only gap: Q025 (pre-existing) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
146d5e7612 |
feat(tests): vortex file format test suite (scenarios 1–83) (#12472)
## Summary - Adds **239 new tests** covering the vortex columnar file format across 78 scenarios from the test plan - **`tests/api-testing/tests/vortex/`** — 9 test modules (83 tests): format conversion, schema evolution, data integrity, FTS, downsampling, API format awareness, server config, and performance/stress - **`tests/api-testing/tests/query_agent/test_3_vortex.py`** — 156 tests: the full 155-query SQL correctness suite + scenario 39 (self-join) run post-flush against vortex files - **`api-testing.yml`** — adds `--ignore=tests/vortex` to the OSS default-set run; vortex tests require the enterprise binary with `ZO_FILE_FORMAT=vortex` and are gated to enterprise CI only ## Test plan coverage | Module | Scenarios | |--------|-----------| | `test_format_conversion.py` | 1–13, 7, 8, 9, 10 | | `test_schema_evolution.py` | 14–25 | | `test_data_integrity.py` | 55–62 | | `test_fts.py` | 51–54 | | `test_downsampling.py` | 47–50 | | `test_api_format.py` | 71–73 | | `test_config.py` | 66–67 | | `test_performance.py` | 74–78 | | `test_3_vortex.py` | 26–46 (155 queries + JOIN) | ## Enterprise CI Two dedicated jobs added in the companion `openobserve/o2-enterprise` PR on the same branch: - **`api_query_agent_vortex`** — runs `test_3_vortex.py` with `ZO_FILE_FORMAT=vortex` - **`api_vortex_format_tests`** — runs the full `tests/vortex/` suite with 4-phase server lifecycle (parquet→vortex→parquet→vortex+compaction) OSS CI is unchanged except for the ignore rule — no vortex tests run against the OSS binary. ## Test checklist - [ ] `tests/vortex/` collects cleanly: `83 tests collected` - [ ] `tests/query_agent/test_3_vortex.py` collects cleanly: `156 tests collected` - [ ] Enterprise CI `api_query_agent_vortex` job passes - [ ] Enterprise CI `api_vortex_format_tests` job passes 🤖 Generated with [Claude Code](https://claude.ai/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
008398163b |
test: add more queries to query regression (#12487)
## Summary - Adds **100 new structural-pattern queries** (Q411-Q510) across all 13 categories, bringing the suite from 425 to **525 queries** - Adds **cross-stream JOIN/UNION support**: `stream_offset` in data_gen.py, `STREAM2` in conftest, dual-table DuckDB oracle - 15 cross-stream queries (Q401-Q415) covering INNER/LEFT/RIGHT JOIN, EXISTS/NOT EXISTS, UNION ALL across streams - Bumps data_gen.py from 510 to 520 query capacity ## Changes - **Infrastructure**: [conftest.py](tests/api-testing/tests/query_agent/conftest.py), [compute_counts.py](tests/test-data/query-agent/compute_counts.py), [data_gen.py](tests/test-data/query-agent/data_gen.py) - **New file**: [cross_stream.json](tests/test-data/query-agent/queries/cross_stream.json) — 15 queries - **12 categories**: 85 queries across aggregation, basic_select, combined, cte_subquery, date_time, full_text_search, histogram, math_functions, pagination, string_functions, union, window ## Test plan - [x] `compute_counts.py` generates expected results for all 525 queries - [ ] Run `pytest tests/query_agent/ -v` against target environment (565 tests expected) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
0334dda9a3 |
test: add data variety and NULL stress to query agent data generation (#12485)
## Summary Two high-value improvements to the query agent regression test data: 1. **Data variety** — Per-field rotation offsets (`qi*13 + i*7`) replace the old uniform `idx % len(pool)` approach. Previously all fields picked from the same pool position, creating only 5 fixed row shapes per query. Now field-value combinations vary independently per field. 2. **NULL stress** — 8 fields (`bot_flag`, `info_tag`, `upstream_error_code`, `page_url`, `endpoint_path`, `resource_path`, `variant_tag`, `threat_flag`) get `None` for 40% of records per query. This exercises `IS NULL` / `IS NOT NULL` / `COALESCE` paths that were previously untested. ## Changes - `data_gen.py`: Rewrote `make_record()` with per-field rotation and NULL injection - 24 queries: Adjusted WHERE/HAVING filters to match new data distribution - All 12 query JSONs: Regenerated expected results via `compute_counts.py` ## Impact - 400 queries all have results (18 pre-existing legacy/skip queries unchanged) - No change to record count (still 5/query, 2000 total) — test time unaffected (~7 min) ## Test plan - [x] `compute_counts.py` regenerates all expected results - [ ] Run `pytest tests/query_agent/ -v --tb=short` against dev environment 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
5eb63395f1 |
test: broaden coverage with structural query templates (#12482)
## Summary - Adds 200 new SQL queries (Q201-Q400) across all 12 categories, extracted as structural templates from production `june6.sql` query patterns - All queries use the existing synthetic `FIELD_POOL` schema — zero real stream/field names - Bumps `data_gen.py` from 200 → 400 queries (4000 records total, 10 per query) - Introduces new structural patterns previously missing from the suite ## New patterns - **CONCAT + COALESCE chains**: Multi-field string construction for display messages - **CASE WHEN inside histogram COUNT**: Platform mapping + conditional aggregation - **Multi-field LIKE / NOT LIKE OR chains**: Text search across 4-8 fields - **NOT IN + IS NOT NULL**: Exclusion filters with null safety - **Long IN lists**: 5+ values in WHERE clauses - **Percentage calculations**: `100.0 * COUNT(CASE WHEN ...) / COUNT(*)` patterns - **approx_percentile_cont in subqueries**: P95/P99 in nested SELECTs - **Histogram with breakdown**: `GROUP BY _time, breakdown` pattern - **char_length CASE fallbacks**: `CASE WHEN char_length(f) > 0 THEN f ELSE fallback END` - **CTE with multiple subquery references**: Self-join and multi-CTE patterns ## Distribution | Category | New | Range | |----------|-----|-------| | aggregation | 25 | Q201-Q225 | | basic_select | 25 | Q226-Q250 | | combined | 20 | Q251-Q270 | | cte_subquery | 25 | Q271-Q295 | | date_time | 10 | Q296-Q305 | | full_text_search | 20 | Q306-Q325 | | histogram | 25 | Q326-Q350 | | math_functions | 8 | Q351-Q358 | | pagination | 7 | Q359-Q365 | | string_functions | 15 | Q366-Q380 | | union | 12 | Q381-Q392 | | window | 8 | Q393-Q400 | ## Test plan - [x] `compute_counts.py` generates DuckDB expected results for all 400 queries - [ ] CI: 800 tests (400 × 2 phases) pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
4d48bbb21b |
test: expand query agent regression suite (#12479)
## Summary - Expands the SQL regression catalog from **155 to 200 queries** across all 12 categories - Adds **7 queries** extracted from abc.sql (Q156-Q162) — synthesized from real-world OpenObserve SQL patterns with all data/fields/streams generated from scratch - Adds **230 auto-generated queries** (Q163-Q392) from templates to cover query format diversity - Both test phases pass: **200 memtable + 200 parquet = 400 total** ## Key changes - **data_gen.py**: 43 new fields (record_type, site_name, latency_ms, payload_size, alert_tags, phase_data, db_info, etc.), generates 3920 deterministic records - **compute_counts.py**: new translations for regexp_like, str_match_ignore_case, approx_distinct, json_get_str/json_get_json chaining; empty-aggregate result detection (OO returns 0 rows vs DuckDB's 1 NULL row) - **conftest.py**: PID-based stream name suffix for cross-invocation isolation (prevents data accumulation) ## Test plan - [x] test_1_memtable.py — 392 passed - [x] test_2_parquet.py — 392 passed - [x] All 7 abc.sql queries pass (Q156-Q162) - [x] No real stream names, field names, or data copied from external sources 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
73ce75c883 |
fix(tests): bump query_agent ingest timeout 120s → 300s (#12444)
## Summary - ENT CI runners are slower than local/OSS runners — the `ingest_query_agent_data` fixture was hitting the 120s timeout before 1550 records became searchable, causing all 310 query_agent tests to fail at setup - Bumped `wait_until` timeout to 300s ## Test plan - [ ] OSS `api_query_agent_tests` passes as before - [ ] ENT `api_query_agent_tests` no longer hits WaitTimeout on ingest 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
eb7cce9b96 |
test: query agent SQL regression suite — 155 queries, sqllogictest-style, two-phase (#12384)
## Summary
155-query SQL regression test suite covering 12 categories. Adding a new
query requires zero test code changes — drop a JSON entry into the right
category file and run `compute_counts.py`.
**Sqllogictest-style comparison**: DuckDB pre-computes full expected
result sets (not just row counts). The test runner extracts actual
values from OO hits, sorts both sides, and compares cell-by-cell with 5%
relative float tolerance. This catches value-level regressions that
row-count-only checks miss.
Two-phase execution: **memtable** (pre-flush) then **parquet**
(post-flush + Tantivy). **310/310 pass**.
## Architecture
```
tests/
├── api-testing/tests/query_agent/
│ ├── conftest.py # Shared fixtures, run_query(), tolerance comparison
│ ├── test_1_memtable.py # Phase 1: all queries pre-flush (FTS skipped)
│ └── test_2_parquet.py # Phase 2: post-flush (module-scoped fixture triggers flush)
└── test-data/query-agent/
├── data_gen.py # Deterministic data generator (single source of truth)
├── compute_counts.py # DuckDB oracle: computes expected result sets
├── base_ts_override.json # Locks BASE_TS so compute and tests share same timestamps
└── queries/ # 12 JSON files, 155 queries with expected results
```
### How it works
1. **Deterministic data** — `data_gen.py` generates 10 records per query
(1550 total) with a warehouse/supply-chain IoT schema. Each query Q{N}
gets isolated timestamps. `BASE_TS` is locked via
`base_ts_override.json` so compute and tests share identical timestamps
(prevents histogram bucket drift on minute boundaries).
2. **Unique stream per session** — `STREAM =
f"query_agent_test_{int(time.time())}"` prevents accumulated-data bleed
from prior runs.
3. **DuckDB oracle** — `compute_counts.py` loads the same dataset into
DuckDB, creates a pre-filtered VIEW per query (so time filters work for
CTEs, subqueries, UNIONs — no fragile SQL injection), translates
OO-specific functions, and writes `expected.results` blocks into the
query JSONs.
4. **Histogram translation** — `histogram(_timestamp, 'N unit')` is
translated to integer arithmetic matching OO's `date_bin` with origin at
2001-01-01T00:00:00 UTC. Verified against DataFusion CLI — 100/100
records match across all interval types (15s, 30s, 1m, 2m, 3m, 4m, 5m).
ISO timestamp post-processing converts epoch-µs bucket values to
`YYYY-MM-DDTHH:MM:SS` strings matching OO's serialization format.
5. **Sqllogictest comparison** — `run_query()` checks for
`expected.results`. When present, it extracts column values from hits as
strings, sorts both actual and expected (`results_mode: "rowsort"`), and
compares cell-by-cell with 5% relative float tolerance (handles
cross-engine floating-point drift in AVG/STDDEV/etc.).
6. **Two-phase testing** — `test_1_memtable.py` runs all queries
pre-flush (FTS sqllogictest skipped — Tantivy indexes don't exist yet).
`test_2_parquet.py` has a module-scoped `post_flush` fixture that
triggers `/node/flush`, re-polls until data is searchable, then runs all
queries with full assertions.
### Comparison modes
| Mode | Count | Mechanism |
|------|-------|-----------|
| **Sqllogictest** | 140 | Cell-by-cell comparison with 5% float
tolerance |
| **Skip sqllogictest** | 9 | DuckDB results for documentation, fall
back to legacy assertions |
| **Legacy** | 6 | 5 auto-interval histograms + Q122 (STRING_AGG
DISTINCT ORDER BY) |
**Skip sqllogictest queries** — known OO-DuckDB divergence:
| Query | Reason |
|-------|--------|
| Q037 | ROW_NUMBER tie-breaking differs between engines |
| Q058 | Self-join pairings non-deterministic across engines |
| Q072 | FULL OUTER JOIN histogram — NULL handling differs |
| Q080 | FTS `match_all` + histogram — Tantivy vs SQL LIKE |
| Q111 | ROW_NUMBER ties in pagination |
| Q117 | STRING_AGG ordering differs between engines |
| Q121 | STRING_AGG concatenation order |
| Q127 | UNION across 5 overlapping groups — boundary records compete
for LIMIT spots |
| Q152 | PERCENT_RANK tie-breaking differs between engines |
### Key design decisions
| Decision | Why |
|----------|-----|
| Full result-set comparison | Catches value-level regressions (e.g.,
ROUND producing wrong decimal) |
| `rowsort` mode | DuckDB and OO order ties differently — sorting both
sides eliminates spurious failures |
| 5% float tolerance | Cross-engine AVG/STDDEV/PERCENTILE differ at
least-significant digits |
| `''` = `'None'` normalization | OO serializes NULL as empty string;
DuckDB uses `"None"` |
| DuckDB VIEW for time filtering | WHERE injection into CTEs/subqueries
is fragile — VIEW filters at scan level |
| Dynamic columns excluded | `_timestamp` and `_time` differ between
compute time and test time |
| OO-dropped LAG columns excluded | `prev_tput`, `hours_2_back`,
`delta_from_prev`, `temp_diff` |
| Histogram → DuckDB integer math | DuckDB lacks `date_bin`; integer
formula verified via DataFusion CLI |
| BASE_TS override file | Prevents histogram timestamp drift when
compute and test run at different minutes |
| 1s time window margins | Minimizes cross-query data bleed while
capturing all 10 records |
| `pytest.fail()` on fixture failure | Stops all tests instead of
running 310 against an empty stream |
### Categories covered
| Category | Queries | Description |
|---|---|---|
| aggregation | Q001-Q020 | GROUP BY, COUNT, AVG, SUM, MIN, MAX, FILTER,
HAVING |
| basic_select | Q021-Q035 | WHERE, IN, BETWEEN, LIKE, ORDER BY,
DISTINCT, CASE |
| combined | Q036-Q045 | JOINs, multi-condition filters, combined
aggregations |
| cte_subquery | Q046-Q062 | CTEs, subqueries, derived tables, EXISTS |
| date_time | Q063-Q073 | Date parsing, formatting, extraction, interval
arithmetic, histogram |
| full_text_search | Q074-Q082 | match_all, match against fields |
| histogram | Q083-Q093 | histogram() bucketing, aggregation over
buckets |
| math_functions | Q094-Q102 | ROUND, SQRT, ABS, POWER, arithmetic
expressions |
| pagination | Q103-Q112 | LIMIT, OFFSET, combination with filters and
sorts |
| string_functions | Q113-Q122 | SUBSTR, CONCAT, UPPER, LOWER, TRIM,
LIKE patterns |
| union | Q123-Q134 | UNION ALL, UNION (dedup), CTE + UNION combinations
|
| window | Q135-Q155 | ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, SUM/AVG
OVER |
## Test plan
- [x] All 155 queries pass in both phases (310/310)
- [x] 140 queries with sqllogictest cell-by-cell comparison
- [x] 17 histogram queries converted from legacy to sqllogictest
- [x] 9 queries with skip_sqllogictest for known OO-DuckDB divergence
- [x] 6 queries in legacy mode (auto-interval histograms + Q122)
- [x] BASE_TS locked via override file — no timestamp drift
- [x] Dedicated CI job (`api_query_agent_tests`) runs in parallel
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|
+5 |
ae22a74e62 |
feat: ux improvement main (#11838)
#11720 Design at: https://github.com/openobserve/designs/blob/main/dashboards/ux-improvement-dialog/design.md --------- --------- Co-authored-by: ktx-vaidehi <134508096+ktx-vaidehi@users.noreply.github.com> Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com> Co-authored-by: Sai Nikhil <nikhil@openobserve.ai> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: ktx-akshay <akshay.patil@kiara.tech> Co-authored-by: Bhargav <BJP232004@GMAIL.COM> Co-authored-by: ktx-mihir <mihir.patel@kiara.tech> Co-authored-by: ktx-riya <riya.kukadiya@kiara.tech> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Omkar Kesarkhane <127078473+omkarK06@users.noreply.github.com> Co-authored-by: omkark06 <omkar@zinclabs.io> Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech> Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
84c72f98b9 | test: add automation coverage for Sankey chart visualization (#10761) | ||
|
|
da65a0ec8d |
test: add broadcast joins tests (#10557)
Add comprehensive API tests for logs-to-logs joins with asymmetric data sizes: - 29 test cases covering INNER/LEFT/RIGHT/FULL joins, aggregations, filters - Subquery tests with IN/NOT IN, substr, length, CONCAT functions - Tests run with both ZO_FEATURE_JOIN_MATCH_ONE_ENABLED=true and false - Test data: logs_small.json (10 records) and logs_large.json (50 records) --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
5ee7aff96d |
test: add search patterns E2E tests and pipeline cron display assertion (#10544)
## Summary - Add E2E tests for the Search Patterns feature (Enterprise feature) - Add assertion to verify pipeline cron expression displays correctly in the pipeline list after import - Add page object methods for Search Patterns feature to logsPage.js ## Test Details ### Search Patterns Tests (`@enterprise` tag) 10 new tests covering: - **P0 Smoke Tests**: Toggle visibility, switching to patterns view, patterns loading, statistics display - **P1 Functional Tests**: Pattern card display, include/exclude buttons, details dialog, navigation - **P2 Edge Cases**: Anomaly badge display, navigation button states ### Pipeline Cron Display - Adds `expectScheduledPipelineCronDisplayed()` method to verify cron expression is visible in the Frequency column - Applied to both scheduled pipeline import tests ## Files Changed - `tests/ui-testing/pages/logsPages/logsPage.js` - Added 20+ Search Patterns selectors and methods - `tests/ui-testing/pages/pipelinesPages/pipelinesEP.js` - Added cron display verification method - `tests/ui-testing/playwright-tests/Logs/searchPatterns.spec.js` - New spec file with 10 tests - `tests/ui-testing/playwright-tests/Pipelines/pipelineImport.spec.js` - Added cron assertion --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
93d4914b52 |
test: add API tests for cross-stream type JOIN with enrichment tables (#10173)
### **User description** Tests the feature from PR #5452 - joining logs with enrichment tables using both enrichment_tables.{table} and enrich.{table} prefixes. Test cases: - JOIN with enrichment_tables prefix - JOIN with enrich prefix (shorter alias) - LEFT JOIN preserves all rows - JOIN with GROUP BY aggregation - JOIN with WHERE clause filtering - Verify enriched columns appear in results - Both prefixes return identical results 🤖 Generated with [Claude Code](https://claude.com/claude-code) ___ ### **PR Type** Tests ___ ### **Description** - Add API tests for enrichment table cross-stream JOIN - Test both `enrichment_tables` and `enrich` prefixes - Include LEFT JOIN, aggregation, and WHERE filter scenarios - Validate enriched column presence and prefix equivalence ___ <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_enrichment_table_join.py</strong><dd><code>Tests for enrichment table JOIN suite</code> </dd></summary> <hr> tests/api-testing/tests/test_enrichment_table_join.py <ul><li>New test suite <code>TestEnrichmentTableJoin</code> with 7 methods<br> <li> Fixture setup/teardown for enrichment table creation<br> <li> Tests cover prefix variants, LEFT JOIN, aggregation, filtering<br> <li> Utility helpers for multipart upload and SQL search</ul> </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/10173/files#diff-59300e59ac91f497cbad0e9df7ee3c47ade382b0f37382da4f25861eac3e2628">+338/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
660dfbabaf |
test: Dashboard Joins and Nested Functions e2e tests (#9685)
### **PR Type**
Tests, Enhancement
---
### **Description**
This PR adds comprehensive E2E tests for Dashboard Joins and Dashboard
Functions features, along with supporting page object helpers.
#### Key Changes:
- **Dashboard Joins Tests**: 8 consolidated multi-panel tests covering
INNER/LEFT/RIGHT joins, conditions, aggregations, field selection,
filters, dynamic operations, persistence, and error handling
- **Dashboard Functions Tests**: 2 multi-panel tests covering basic
(COUNT, COUNT-DISTINCT, AVG, SUM) and advanced (Multiple Y-axis, MIN,
MAX) aggregation functions
- **New `JoinHelper` class**: Provides methods for configuring join
types, streams, conditions, and operators
- **Enhanced `ChartTypeSelector`**: Added Y-axis function configuration
methods and stream selection with retry mechanism
- **Org Context Fix**: Navigate directly to dashboards with
`org_identifier` parameter to ensure correct API context
---
### **Test Coverage**
#### Dashboard Joins Tests (`dashboard-join.spec.js`) - 8 Tests
| # | Test Name | Panels | Coverage | Tags |
|---|-----------|--------|----------|------|
| 1 | Core Join Types - INNER, LEFT, RIGHT | 3 | INNER JOIN (11 rows),
LEFT JOIN (12 rows), RIGHT JOIN (5 rows) | `@dashboard-joins`, `@smoke`,
`@P0` |
| 2 | Join Conditions & Multi-Join | 3 | Multiple AND conditions, 3-way
join, OR conditions | `@dashboard-joins`, `@dashboard-joins-conditions`,
`@P1` |
| 3 | Aggregation Functions | 4 | Basic aggregation, SUM-like grouping,
AVG-like grouping, COUNT grouping | `@dashboard-joins`,
`@dashboard-joins-aggregation`, `@P1` |
| 4 | Field Selection | 4 | response_time_ms, country, bytes, request_id
fields | `@dashboard-joins`, `@dashboard-joins-fields`, `@P2` |
| 5 | Filters & Edge Cases | 6 | Join with filter, LEFT JOIN with NULLs,
session duration, not-equal (!=), greater-than (>), self-join |
`@dashboard-joins`, `@dashboard-joins-filters`, `@P2` |
| 6 | Dynamic Join Operations & UI Validation | 1 | Add/remove joins,
change join types, modify conditions | `@dashboard-joins`,
`@dashboard-joins-dynamic`, `@P2` |
| 7 | Persistence - Save and Reload Dashboard | 1 | Save panel, navigate
away, reload, verify join config persisted | `@dashboard-joins`,
`@dashboard-joins-persistence`, `@P2` |
| 8 | Error Handling & Recovery | 1 | Incomplete join handling, recovery
from invalid state | `@dashboard-joins`, `@dashboard-joins-errors`,
`@P3` |
#### Dashboard Functions Tests (`dashboard-nested-functions.spec.js`) -
2 Tests
| # | Test Name | Panels | Coverage | Tags |
|---|-----------|--------|----------|------|
| 1 | Basic Aggregation Functions | 4 | COUNT, COUNT-DISTINCT, AVG, SUM
functions | `@dashboard-functions`, `@dashboard-functions-basic`, `@P1`
|
| 2 | Advanced Aggregation Functions | 2 | Multiple Y-axis (COUNT + SUM
+ AVG), MIN + MAX functions | `@dashboard-functions`,
`@dashboard-functions-advanced`, `@P2` |
---
### **New Page Object Methods**
#### `JoinHelper` (`dashboard-joins.js`)
| Method | Description |
|--------|-------------|
| `addJoin()` | Open add join popup |
| `selectJoinType(type)` | Select INNER/LEFT/RIGHT/FULL/CROSS join |
| `selectJoinStream(streamName)` | Select stream to join with |
| `selectLeftField(field)` | Select left side join field |
| `selectRightField(field)` | Select right side join field |
| `selectOperator(operator)` | Select =, !=, <, >, <=, >= operator |
| `addCondition()` | Add another join condition |
| `saveJoin()` | Save join configuration |
| `removeJoin(index)` | Remove a join by index |
| `verifyJoinChipVisible(stream, index)` | Verify join chip displays
correctly |
#### `ChartTypeSelector` (`dashboard-chart.js`)
| Method | Description |
|--------|-------------|
| `selectStream(name, retries)` | Select stream with retry mechanism |
| `configureYAxisFunction(alias, func)` | Configure Y-axis aggregation
function |
| `verifyYAxisLabel(alias, func)` | Verify Y-axis label shows function |
| `openYAxisFunctionPopup(alias)` | Open Y-axis configuration popup |
| `selectFunction(name)` | Select aggregation function from dropdown |
#### `DashboardPanelActions` (`dashboard-panel-actions.js`)
| Method | Description |
|--------|-------------|
| `addNextPanel()` | Add another panel after saving |
| `getTableRowCount()` | Get count of data rows in table |
| `verifyChartRenders(expect)` | Verify chart/table renders |
| `savePanel()` | Save panel with networkidle wait |
---
### **Test Data**
Test data files located in `test-data/` directory:
- `joins/test_app_users.json` - 5 user records
- `joins/test_web_requests.json` - 12 web request records
- `joins/test_sessions.json` - 8 session records
- `dashboard-functions/test_records.json` - 7 records with user_name and
score fields
---
### **Fixes Included**
| Issue | Fix |
|-------|-----|
| Org context mismatch on remote environments | Navigate to
`/web/dashboards?org_identifier=${ORGNAME}` |
| Streams not appearing in dropdown | Page reload after dashboard
creation to refresh stream list |
| Save panel race condition | Added `waitForLoadState("networkidle")`
after save click |
| Stream selection timing | Retry mechanism with debug logging |
| Test 5 timeout | Increased to 5 minutes for 6-panel test |
---
<details><summary><h3>File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>5
files</summary><table>
<tr>
<td><strong>dashboard-chart.js</strong><dd><code>Enhance stream
selection and add Y-axis function methods</code> </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-573a312576fce62d8e14f2bbb5f9b7d9a552d746304dce3d79862edddd24de76">+106/-14</a></td>
</tr>
<tr>
<td><strong>dashboard-create.js</strong><dd><code>Add smart panel
addition for empty and existing dashboards</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-c3c5add2b934580a91a79bb580634b70e2376b0452113008a0911102db3863e2">+25/-1</a>
</td>
</tr>
<tr>
<td><strong>dashboard-joins.js</strong><dd><code>New JoinHelper for
configuring and validating joins</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-f88eb0cf951ec45e97befde5c83a2c187bb46db3f6cb27bc0cb88d48c5f45b78">+351/-0</a>
</td>
</tr>
<tr>
<td><strong>dashboard-panel-actions.js</strong><dd><code>Add next-panel,
row count and chart render verifications</code> </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-d29713fdcc11cbc93bda29da5261da389226cd718e4292a1c2cd96629f573a80">+76/-1</a>
</td>
</tr>
<tr>
<td><strong>global-setup.js</strong><dd><code>Include org_identifier in
login navigation URL</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-06323dad7214f86b41b62e121e716eeea0054bc4d950c6bcf4a0efe53894acc8">+4/-3</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>dashboard-join.spec.js</strong><dd><code>Consolidated
dashboard joins feature E2E tests</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-552f4ba6f199ade20dbab2c54b8573422fd644587ed1575262a7aa34f8041174">+1160/-0</a></td>
</tr>
<tr>
<td><strong>dashboard-nested-functions.spec.js</strong><dd><code>Multi-panel
dashboard functions E2E tests</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-d2a9855da60f5fd3820832815036c368a680e2885033ad1a7a2bcbd060e2a750">+372/-0</a>
</td>
</tr>
<tr>
<td><strong>test_records.json</strong><dd><code>Add test data for
dashboard functions tests</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-3a09d97f4091ae2f4dc97ebc14199c5d94efb878a6ebfa7da686cad5450ddda0">+7/-0</a>
</td>
</tr>
<tr>
<td><strong>test_app_users.json</strong><dd><code>Add user data for
dashboard joins tests</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-7c5af3decd88c4f9031fd83282844872f4a0a65eea2b51a46aac849aa4a5c129">+7/-0</a>
</td>
</tr>
<tr>
<td><strong>test_sessions.json</strong><dd><code>Add session data for
dashboard joins tests</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-836e072600882ffa58662a4867ac17d2ce799dd338daac585203ccaa01275e3c">+10/-0</a>
</td>
</tr>
<tr>
<td><strong>test_web_requests.json</strong><dd><code>Add web request
data for dashboard joins tests</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-1c4b00b1929e9a01de1cb8129161c49dc1563a5dde1c4b5e770a307245155382">+14/-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>cleanup.spec.js</strong><dd><code>Extend cleanup regex for
join and function test streams</code> </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-c214275a512fa285a7e4f2ab61dfcb42d71a0436b0e4241f94d7b45693587983">+8/-1</a>
</td>
</tr>
</table></details></td></tr></tbody></table>
</details>
---
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
|
||
|
|
cc3a6110ae |
test: add ingestion config UI tests (#9643)
### **User description**
- Added IngestionConfigPage POM with 20+ methods for page interactions
- Created 20+ comprehensive tests for ingestion configuration (3 P0, 8
P1, 1 P2)
- Tests cover: Navigation, Copy functionality, Configuration content,
Search
- Fixed all hardcoded waitForTimeout() calls with element-based waits
- Fixed search test selector to use .data-sources-recommended-tabs
.q-tab
- All tests passing (46.3s execution time)
___
### **PR Type**
Tests, Enhancement
___
### **Description**
- Added IngestionConfigPage POM for ingestion interactions
- Introduced comprehensive ingestion configuration tests
- Updated PageManager to include new POM
- Tests cover navigation, copy, content, search
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["PageManager"]
B["IngestionConfigPage POM"]
C["Ingestion config tests"]
A -- "imports" --> B
C -- "uses" --> A
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>ingestionConfigPage.js</strong><dd><code>Implement
ingestion config page object</code>
</dd></summary>
<hr>
tests/ui-testing/pages/generalPages/ingestionConfigPage.js
<ul><li>Created <code>IngestionConfigPage</code> class<br> <li> Defined
selectors for navigation, tabs, copy, search<br> <li> Implemented
navigation, copy, search, assertion methods<br> <li> Replaced hardcoded
waits with element-based waits</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9643/files#diff-22a47625a9849c4d6b6a0944d864db20d03453666f9cbfaaeb2cf5b57e00d5c5">+147/-0</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>page-manager.js</strong><dd><code>Integrate ingestion
config POM</code>
</dd></summary>
<hr>
tests/ui-testing/pages/page-manager.js
<ul><li>Imported <code>IngestionConfigPage</code><br> <li> Added
<code>ingestionConfigPage</code> to <code>PageManager</code>
constructor</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9643/files#diff-565eab8b3c767ae50c9d05e591621d14f66b81af84d6b5ea6efe136c1c3933df">+2/-0</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>ingestion-config.spec.js</strong><dd><code>Add
ingestion configuration tests</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Ingestion/ingestion-config.spec.js
<ul><li>Added navigation tests for recommended/custom pages<br> <li>
Added copy functionality tests for Fluentd and Prometheus<br> <li> Added
configuration content validation tests<br> <li> Added recommended page
search and filter test</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9643/files#diff-35352597cf8f8ded17cd9c0abac4efb41cb255a1f69f110129a1b0427b4c8870">+159/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Claude <noreply@anthropic.com>
|
||
|
|
7efa71f8ed | test(dashboard): add test cases for table chart JSON mode (#9500) | ||
|
|
52b2759bfa |
test: add INTERSECT and EXCEPT query tests for PR #9544 (#9601)
Added 4 new test cases to verify the join optimization fix: - INTERSECT query: Common user_ids in both streams - EXCEPT query: Users without orders - INTERSECT with WHERE clause: Active users with orders - EXCEPT with multiple columns: Users details without orders Also improved test_joinqueries.py by adding a 3-second sleep after data ingestion to allow proper indexing before querying. Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
bcdc05bca9 |
test: add automated severity color mapping tests for issue #9439 (#9576)
Tests #9439 - Added comprehensive tests for all 8 severity levels (0-7) - Implemented POM methods in logsPage.js for severity color validation - Created test data file with 16 test records (integer and string formats) - Tests verify correct color mapping for each severity level - Includes automatic test stream creation and cleanup - All tests pass successfully with no impact on existing tests --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
6ae38d5ce2 |
test(e2e): refactor pipeline condition tests and fix data ingestion timeout (#9528)
## Summary
Refactored pipeline condition tests into 2 new spec files for better
organization and maintainability, fixed data ingestion timeout issue,
and added comprehensive test coverage for pipeline conditions.
## Changes
- Refactored pipeline condition tests into 2 new spec files for better
organization
- Added 14 new comprehensive test cases (7 UI-based + 7 API-based
validation tests)
- Fixed beforeEach timeout issue by reducing data ingestion from 3,800+
to 10 records per stream
- Added cleanup patterns for `e2e_conditions_*` streams to prevent data
accumulation
- Updated apiCleanup.js to include 7 new stream names in pipeline
cleanup
- Removed outdated comments referencing conditional wait logic
- Added page object methods for condition testing in pipelinesPage.js,
logsPage.js, and streamsPage.js
## Test Coverage
### pipeline-conditions.spec.js (7 tests - all passing ✅)
- Basic condition operations with multiple operators (=, !=, Contains,
NotContains, >=)
- Condition groups, nesting, and reordering
- Field validation and error messages
- Complex operator precedence (A OR B AND C)
- Multiple conditions (A, B, C, D)
- Condition node deletion
- Comparison operators validation
### pipeline-conditions-validation.spec.js (7 tests - API-based)
- Operator precedence validation
- Nested groups with AND/OR logic
- Numeric comparisons
- String operators (case-insensitive Contains)
## Performance
- Reduced test execution time from 180s timeout to ~4.6 minutes for full
suite
- 100% pass rate for active UI tests (7/7)
## Files Changed
- `.github/workflows/playwright.yml` - Updated test configuration
- `tests/test-data/data_100.json` - Added test data for validation tests
- `tests/test-data/sample_pipeline_template.json` - Added pipeline
template
- `tests/ui-testing/pages/apiCleanup.js` - Added stream cleanup patterns
- `tests/ui-testing/pages/pipelinesPages/pipelinesPage.js` - Added
condition testing methods
- `tests/ui-testing/pages/logsPages/logsPage.js` - Added data ingestion
helpers
- `tests/ui-testing/pages/streamsPages/streamsPage.js` - Added stream
management helpers
-
`tests/ui-testing/playwright-tests/Pipelines/pipeline-conditions.spec.js`
- Refactored UI tests
-
`tests/ui-testing/playwright-tests/Pipelines/pipeline-conditions-validation.spec.js`
- New API validation tests
- `tests/ui-testing/playwright-tests/cleanup.spec.js` - Added
e2e_conditions_* pattern
## Testing
All 7 UI-based tests passing with 100% pass rate.
|
||
|
|
8a158884c8 |
test: match_all_camelcase_tests (#9345)
- Verify full camel case token search: DbException should be found when searching for complete camel case identifiers - Verify atomic token search: UserAccountService should be searchable and return matching results for full service class names - Verify XML acronym tokenization: XMLHttpRequest should be properly tokenized and discoverable through match_all queries - Verify camel case with numbers: OAuth2TokenHandlershould handle mixed alphanumeric camel case tokens correctly - Verify multi-word service search:UserManagementService should support complex multi-word camel case service names |
||
|
|
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> ___ |
||
|
|
d70c75e4bc | test: added tests for ent repo - not to be run, but maintained (#8956) | ||
|
|
923348bb43 |
fix: ux changes for logs page (#8790)
### **PR Type** Enhancement, Bug fix, Documentation ___ ### **Description** - Extracted inline styles to scoped SCSS - Improved logs UI/UX and theming - Fixed flicker and pagination UX - Added reusable toolbar and collapse styles ___ ### Diagram Walkthrough ```mermaid flowchart LR SearchBar["SearchBar.vue"] -- "toolbar, toggles, menu UX" --> Styles["New SCSS modules"] IndexList["IndexList.vue"] -- "field list pagination, loading" --> Styles SearchResult["SearchResult.vue"] -- "histogram/table layout refactor" --> Styles Index["Index.vue"] -- "splitter/collapse UX, visualize container" --> Styles TenstackTable["TenstackTable.vue"] -- "table hover/headers theme" --> Styles DetailTable["DetailTable.vue"] -- "wrap toggle, layout" --> Styles History["SearchHistory.vue"] -- "wrap toggle, warning pill" --> Styles Scheduler["SearchSchedulersList.vue"] -- "rounded btn, external styles" --> Styles TransformSel["TransformSelector.vue"] -- "toolbarized toggle, icons" --> Styles FunctionSel["FunctionSelector.vue"] -- "class hooks, styles" --> Styles SyntaxGuide["SyntaxGuide.vue"] -- "dark mode class, ext styles" --> Styles JsonPreview["JsonPreview.vue"] -- "externalized styles" --> Styles App["App.vue"] -- "theme root class" --> AppStyles["app.scss: global scrollbar, collapse btn"] ``` <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>31 files</summary><table> <tr> <td><strong>SearchBar.vue</strong><dd><code>Toolbar/UI cleanup, toggles and menus restyle</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+272/-585</a></td> </tr> <tr> <td><strong>IndexList.vue</strong><dd><code>Field list pagination UX, loading state, helpers</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+133/-419</a></td> </tr> <tr> <td><strong>SearchResult.vue</strong><dd><code>Histogram/table layout classes, external styles</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-5e65533aa4754bb6d0074fda18ffc1ecacded3b9ca6bc28a161c3f6b12f20195">+30/-283</a></td> </tr> <tr> <td><strong>Index.vue</strong><dd><code>Splitter/collapse UX, visualize container cleanup</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+99/-57</a> </td> </tr> <tr> <td><strong>DetailTable.vue</strong><dd><code>Wrap toggle restyle and list/table CSS extraction</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-80552b5d25fa6cef9fbbe430b1865d761c4b132284c2d2175afceea8cbabc8c7">+19/-79</a> </td> </tr> <tr> <td><strong>SearchSchedulersList.vue</strong><dd><code>Minor button rounding, moved styles to SCSS</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-0c0a4097c53f07712d35562b1336602bf24faddedab77a9f5717f5582dcac2f1">+2/-137</a> </td> </tr> <tr> <td><strong>TenstackTable.vue</strong><dd><code>Table container class and theming adjustments</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-bc3c669f5ab65a42ae378df1f7d6b35014c9c220790bdcc72b47f55d1385dc22">+5/-104</a> </td> </tr> <tr> <td><strong>SearchHistory.vue</strong><dd><code>Wrap toggle restyle and externalized styles</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-9dd167bd5e272b2057f53c16b905047eec00655a3552daad240a964d67a6f56d">+13/-100</a></td> </tr> <tr> <td><strong>TransformSelector.vue</strong><dd><code>Toolbarized transform toggle and SCSS import</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-0037d8dd9cfbacc26309b26e98ae953e7ccbd0891ac2fd01c6314ebd7eed9d2c">+25/-47</a> </td> </tr> <tr> <td><strong>JsonPreview.vue</strong><dd><code>Moved component styles to shared SCSS</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-3985073134d35ff074742944b114d0905524038b42e6d2ac887fef2c8436fb16">+1/-109</a> </td> </tr> <tr> <td><strong>SyntaxGuide.vue</strong><dd><code>Dark-mode class hook and SCSS extraction</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-c6e8bb651fadd2b15b5b97f5b6069a57813fb97cc3d06eef983af4def33e8806">+5/-67</a> </td> </tr> <tr> <td><strong>FunctionSelector.vue</strong><dd><code>Class hooks and SCSS module inclusion</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-11d9577516700b94b5f3325e77214d0d886473e690db8c9ea981613c9fb89b68">+5/-3</a> </td> </tr> <tr> <td><strong>VisualizeLogsQuery.vue</strong><dd><code>Externalized layout/splitter styles</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+1/-50</a> </td> </tr> <tr> <td><strong>DateTime.vue</strong><dd><code>Rounded buttons and hover feedback</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-c06c96ba750be6fc82f517a53ba809efff8aa619aba203b871d4d2aeb7f64f60">+6/-2</a> </td> </tr> <tr> <td><strong>App.vue</strong><dd><code>Theme root class binding for global styles</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-7322e6842f92edbe4a6e810d63f066ec95e64806d64a02b52e2b9bef2a73db91">+7/-1</a> </td> </tr> <tr> <td><strong>app.scss</strong><dd><code>Global scrollbar, collapse button, toggles polish</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-5703d12504b0395cbfbbfad02a592bc391496026e5f03743102ce06c210ea05f">+142/-2</a> </td> </tr> <tr> <td><strong>search-result.scss</strong><dd><code>New SCSS for search result layout and table</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-e98f726aae49bdd5f8a426c8023eed612f3f33d52b0d458b7730990b3aafc41e">+235/-0</a> </td> </tr> <tr> <td><strong>detail-table.scss</strong><dd><code>New SCSS for detail table and panels</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-63d5673331a5ee1ab792d07831e4a6dbb0d2d40d2ad628652d57944e47a96338">+55/-0</a> </td> </tr> <tr> <td><strong>logs-page.scss</strong><dd><code>New SCSS for logs page structure and splitter</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-3d8458bb7b934b0529dcb35f85e008a4404510435ee4a636ff86e20cfd2970c9">+1401/-0</a></td> </tr> <tr> <td><strong>search-schedulerlist.scss</strong><dd><code>New SCSS for scheduler list views</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-42bbf309982cfcfd1cca270e80a2bddd35947e59dd91f600f5c85788af1e0802">+136/-0</a> </td> </tr> <tr> <td><strong>index-list.scss</strong><dd><code>New SCSS for field/index list</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-0a3be477d7575f8e412bf8092f91901dd1330c8458ebc2b24f96107647cfe200">+139/-0</a> </td> </tr> <tr> <td><strong>search-history.scss</strong><dd><code>New SCSS for search history page</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-01ae0807917e4de78780d9ec549ae2b57e3004e7be72cd77536ac5ae75bda3ed">+97/-0</a> </td> </tr> <tr> <td><strong>transform-selector.scss</strong><dd><code>New SCSS for transform selector controls</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-131c7ba7388ebe94d30b7f42ca12c30b0840a9f8d69622b68e573e829d9fa7d6">+99/-0</a> </td> </tr> <tr> <td><strong>syntax-guide.scss</strong><dd><code>New SCSS for syntax guide dialog</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-7173f5473b8fed57af19a3017f9823e68099745dc181f7996f0024fa8099535c">+78/-0</a> </td> </tr> <tr> <td><strong>tenstack-table.scss</strong><dd><code>New SCSS for data table and resizer</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-0175daf538e52ff95480cb40fadf8e26564474f15e39c5fe2d628f2d7e72aa78">+99/-0</a> </td> </tr> <tr> <td><strong>function-selector.scss</strong><dd><code>New SCSS for function selector</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-16e97b00c534fae20daf24545e4e6a37b83f59e22668eddfd2083c9d778a9032">+58/-0</a> </td> </tr> <tr> <td><strong>visualizelogs-query.scss</strong><dd><code>New SCSS for visualize logs layout</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-263f2af1f510ef9047a88f4cf438ffdc7b22cc598a56071900b898899d5bdab3">+50/-0</a> </td> </tr> <tr> <td><strong>json-preview.scss</strong><dd><code>New SCSS for JSON preview and menus</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-27d0a0d1ec327559e1c09ffec34a7fc937db12580f53d61f10897f378af7d6ff">+17/-0</a> </td> </tr> <tr> <td><strong>quasar-overrides.scss</strong><dd><code>Quasar overrides aligned to new tokens</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-563af58e60b7250169ebe9ced59dfe163a801a106d7f20964a8d20000b320af5">+16/-15</a> </td> </tr> <tr> <td><strong>_variables.scss</strong><dd><code>Variables updated for rem units and theming</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-b3e37ee00c17b89ad1177c5592504277aa645b374095c065ea8b3782df5e89a2">+1/-1</a> </td> </tr> <tr> <td><strong>quasar-variables.sass</strong><dd><code>Quasar variables tuned for new UI</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-bb2b39e6af7e949bef75bce0c7021310c42dd0945c30f963e3c8b599598bfdaa">+2/-2</a> </td> </tr> </table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1 files</summary><table> <tr> <td><strong>ui-guidelines.md</strong><dd><code>UI guidelines documentation added</code> </dd></td> <td><a href="https://github.com/openobserve/openobserve/pull/8790/files#diff-8c5e2f35601f7d06e3389626dd501fc84e694efd6cf0faab6dfaf92445483dfa">+1056/-0</a></td> </tr> </table></details></td></tr></tr></tbody></table> </details> ___ --------- Co-authored-by: Ashish Kolhe <ashish.j.kolhe@gmail.com> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
|
7218fa3439 |
test: e2e-cte-queries (#8070)
### **PR Type**
Tests
___
### **Description**
- Add advanced CTE logs query e2e tests
- Cover strings, NULLs, joins, unions
- Add error-rate and aggregation analysis
- Add complex multi-part query typing/validation
___
### Diagram Walkthrough
```mermaid
flowchart LR
CTEs["Add advanced CTE query tests"]
String["String ops & NULL handling"]
Joins["JOINs and UNIONs"]
Analytics["Error-rate and aggregations"]
Robust["Multi-part typing + validation"]
CTEs -- "new tests" --> String
CTEs -- "new tests" --> Joins
CTEs -- "new tests" --> Analytics
CTEs -- "new tests" --> Robust
```
<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>logsqueries.cte.spec.js</strong><dd><code>Expand CTE
logs e2e coverage with advanced cases</code>
</dd></summary>
<hr>
tests/ui-testing/playwright-tests/Logs/logsqueries.cte.spec.js
<ul><li>Add tests for string manipulation CTEs<br> <li> Add NULL
handling and LEFT JOIN CTE tests<br> <li> Add UNION and error-rate
analysis CTE tests<br> <li> Add complex multi-part CTE with typing and
validation</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8070/files#diff-153f79d86888d9e3a82f42a15242cacb3a126c263aee91cada88ae04dffacd36">+110/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
---------
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
|
||
|
|
8eda4d0bf9 | test: e2e-cte(with-queries)-testcases (#7704) | ||
|
|
5dfc889c18 | test: e2e-match-all-phrase-tests (#7656) | ||
|
|
c2c7ea6a95 |
test: match_all queries pytest (#7208)
### **User description** match_all queries pytest ___ ### **PR Type** Tests ___ ### **Description** - Add tests for match_all streaming queries ___ ### **Changes walkthrough** 📝 <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_streaming.py</strong><dd><code>Add match_all streaming test cases</code> </dd></summary> <hr> tests/api-testing/tests/test_streaming.py <li>Added "match_all query one" test case<br> <li> Added "match_all query two" test case<br> <li> Added "match_all query three" test case </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7208/files#diff-f15e9b733130f72112380fda658264545435fbf956b08869b0ad5a9435d222f7">+21/-3</a> </td> </tr> </table></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details> --------- Co-authored-by: Taiming Liu <liutaiming3@gmail.com> Co-authored-by: Shrinath Rao <shnath@openobserve.ai> |
||
|
+2 |
0d9f47966b |
feat: Organization revamp (#5579)
Fixes #5131 Addresses #5408 ### Revamp - Created a new table to store organizations in the `organizations` table. Earlier, we never stored organizations in any table, rather we used to store the organizations in the meta table as part of the `user` json. - The users and organization membership relations are now moved to its own separate tables - `users` and `org_users`. ### New changes **API changes** - - `/organizations` - `POST` api to create an org and save it in the meta table. In non-enterprise version, currently only the root user can create the org. For enterprise version with rbac enabled, anyone with `CREATE` access for organizations can create the organization and becomes an admin. Root user can always create an organization. - `/{org_id}/rename` - `PUT` api to rename the existing org. Only root user and the admins of the org can access this API. The payload for following APIs are changed - - `POST api/{org_id}/roles` - `{"name":"new_role"}` is changed to `{"role":"new_role"} - `POST api/{org_id}/users/{user}` - `{"role":"viewer","custom_role":["role_name"]}` is the new payload where `custom_role` is optional and is array of custom roles (only works in enterprise with rbac enabled) which will be assigned to the user. The value of `role` can be standard role or as well as any custom role (when it is custom role, the standard role assigned to the user is decided based on the enterprise env variable - `O2_DEX_DEFAULT_ROLE`). - `POST api/{org_id}/users`- the payload - ``` {"email":"user@user.com","role":"viewer","custom_role":["create_org_permission"],"password":"12345678", "first_name": "", "last_name":""} ``` - `PUT api//{org_id}/users/{email_id}` the payload - ``` {"first_name":"Hello","last_name":"j","role":"viewer","isExternal":false,"change_password":false,"password":"","custom_role":["create_org_permission"]} ``` A new ENV variable is introduced - `ZO_CREATE_ORG_THROUGH_INGESTION` (default `false`) which if true, an org will automatically created when ingesting data to a new org. If false, user can not create org by ingesting data to new org, they need to first call the `POST /organizations` API. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes **New Features** - Added a `cloud` feature for enhanced organizational management capabilities. - Introduced new methods for managing organizational users and asynchronous message processing. - Enhanced user invitation and membership features, including improved role handling. - Implemented configurable ingestion URL support across various components. - Added new functionality for user management and organization handling in the super cluster architecture. **Improvements** - Refined user authentication and authorization processes, including error handling. - Updated database schema to support multi-organization architecture. - Enhanced pagination settings and UI components for better user experience. - Improved handling of organization names and user roles in notifications and alerts. - Streamlined service account token management with visibility enhancements. - Enhanced the `AddUpdateOrganization` component with improved user input handling and validation. - Updated the `AppOrganizations` component to dynamically load the appropriate organization management interface. - Improved the `ServiceAccountsList` component with updated pagination options and token handling logic. **Bug Fixes** - Resolved issues with user role assignments and organization management inconsistencies. - Corrected routing and navigation logic for login and logout processes. - Addressed various error handling scenarios in user and organization processes. - Fixed issues with the visibility of service account options in the `EditGroup` and `EditRole` components based on the cloud configuration. **Breaking Changes** - Significant restructuring of user and organization data models. - Changes to authentication workflows and configuration handling. - Removal of certain components related to user and organization management. - Updated the logic for determining the ingestion URL across various components. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com> Co-authored-by: Bhargav <BJP232004@GMAIL.COM> Co-authored-by: Taiming Liu <liutaiming3@gmail.com> Co-authored-by: hengfei yang <hengfei.yang@gmail.com> Co-authored-by: harshiv-7 <harshiv@openobserve.ai> Co-authored-by: Huaijin <haohuaijin@gmail.com> Co-authored-by: Zhao.wei <weizhao029@gmail.com> Co-authored-by: ShyamOOAI <shyam@openobserve.ai> Co-authored-by: oasisk <ashish.j.kolhe@gmail.com> Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai> Co-authored-by: Yashodhan Joshi <yashodhan@openobserve.ai> Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com> |
||
|
|
dbd6c1017b | test(dashboard): add geomap and map test cases (#6722) | ||
|
|
c3364cbab0 |
test: Import destination alert playwright (#6631)
1. Import webhook and email destination 2. Import scheduled and realtime alert --------- Co-authored-by: Taiming Liu <liutaiming3@gmail.com> |
||
|
|
e8f348819e |
test: Import Template Destination Alerts Playwright (#6205)
1. Import webhook and email Template --------- Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com> |