aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/frontend
Commit message (Collapse)AuthorAgeFilesLines
* Made CPR optional, html generated at build time (#840)Stefan Boberg3 days1-0/+0
| | | | | | | - Fix potential crash on startup caused by logging macros being invoked before the logging system is initialized (null logger dereference in `ZenServerState::Sweep()`). `LoggerRef::ShouldLog` now guards against a null logger pointer. - Make CPR an optional dependency (`--zencpr` build option, enabled by default) so builds can proceed without it - Make zenvfs Windows-only (platform-specific target) - Generate the frontend zip at build time from source HTML files instead of checking in a binary blob which would accumulate with every single update
* Transparent proxy mode (#823)Stefan Boberg4 days5-10/+504
| | | | | | | | | | | | | | | | | Adds a **transparent TCP proxy mode** to zenserver (activated via `zenserver proxy`), allowing it to sit between clients and upstream Zen servers to inspect and monitor HTTP/1.x traffic in real time. Primarily useful during development, to be able to observe multi-server/client interactions in one place. - **Dedicated proxy port** -- Proxy mode defaults to port 8118 with its own data directory to avoid collisions with a normal zenserver instance. - **TCP proxy core** (`src/zenserver/proxy/`) -- A new transparent TCP proxy that forwards connections to upstream targets, with support for both TCP/IP and Unix socket listeners. Multi-threaded I/O for connection handling. Supports Unix domain sockets for both upstream/downstream. - **HTTP traffic inspection** -- Parses HTTP/1.x request/response streams inline to extract method, path, status, content length, and WebSocket upgrades without breaking the proxied data. - **Proxy dashboard** -- A web UI showing live connection stats, per-target request counts, active connections, bytes transferred, and client IP/session ID rollups. - **Server mode display** -- Dashboard banner now shows the running server mode (Zen Proxy, Zen Compute, etc.). Supporting changes included in this branch: - **Wildcard log level matching** -- Log levels can now be set per-category using wildcard patterns (e.g. `proxy.*=debug`). - **`zen down --all`** -- New flag to shut down all running zenserver instances; also used by the new `xmake kill` task. - Minor test stability fixes (flaky hash collisions, per-thread RNG seeds). - Support ZEN_MALLOC environment variable for default allocator selection and switch default to rpmalloc - Fixed sentry-native build to allow LTO on Windows
* Dashboard overhaul, compute integration (#814)Stefan Boberg7 days29-854/+4327
| | | | | | | | | | - **Frontend dashboard overhaul**: Unified compute/main dashboards into a single shared UI. Added new pages for cache, projects, metrics, sessions, info (build/runtime config, system stats). Added live-update via WebSockets with pause control, sortable detail tables, themed styling. Refactored compute/hub/orchestrator pages into modular JS. - **HTTP server fixes and stats**: Fixed http.sys local-only fallback when default port is in use, implemented root endpoint redirect for http.sys, fixed Linux/Mac port reuse. Added /stats endpoint exposing HTTP server metrics (bytes transferred, request rates). Added WebSocket stats tracking. - **OTEL/diagnostics hardening**: Improved OTLP HTTP exporter with better error handling and resilience. Extended diagnostics services configuration. - **Session management**: Added new sessions service with HTTP endpoints for registering, updating, querying, and removing sessions. Includes session log file support. This is still WIP. - **CLI subcommand support**: Added support for commands with subcommands in the zen CLI tool, with improved command dispatch. - **Misc**: Exposed CPU usage/hostname to frontend, fixed JS compact binary float32/float64 decoding, limited projects displayed on front page to 25 sorted by last access, added vscode:// link support. Also contains some fixes from TSAN analysis.
* compute orchestration (#763)Stefan Boberg12 days10-50/+2222
| | | | | | | | | | - Added local process runners for Linux/Wine, Mac with some sandboxing support - Horde & Nomad provisioning for development and testing - Client session queues with lifecycle management (active/draining/cancelled), automatic retry with configurable limits, and manual reschedule API - Improved web UI for orchestrator, compute, and hub dashboards with WebSocket push updates - Some security hardening - Improved scalability and `zen exec` command Still experimental - compute support is disabled by default
* updatefrontendzousar2026-02-261-0/+0
|
* Merge branch 'main' into zs/web-ui-improvementszousar2026-02-265-24/+67
|\
| * HttpService/Frontend improvements (#782)Stefan Boberg2026-02-252-15/+42
| | | | | | | | | | | | | | - zenhttp: added `GetServiceUri()`/`GetExternalHost()` - enables code to quickly generate an externally reachable URI for a given service - frontend: improved Uri handling (better defaults) - added support for 404 page (to make it easier to find a good URL)
| * Various bug fixes (#778)Stefan Boberg2026-02-244-14/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | zencore fixes: - filesystem.cpp: ReadFile error reporting logic - compactbinaryvalue.h: CbValue::As*String error reporting logic zenhttp fixes: - httpasio BindAcceptor would `return 0;` in a function returning `std::string` (UB) - httpsys async workpool initialization race zenstore fixes: - cas.cpp: GetFileCasResults Results param passed by value instead of reference (large chunk results were silently lost) - structuredcachestore.cpp: MissCount unconditionally incremented (counted hits as misses) - cacherpc.cpp: Wrong boolean in Incomplete response array (all entries marked incomplete) - cachedisklayer.cpp: sizeof(sizeof(...)) in two validation checks computed sizeof(size_t) instead of struct size - buildstore.cpp: Wrong hash tracked in GC key list (BlobHash pushed twice instead of MetadataHash) - buildstore.cpp: Removed duplicate m_LastAccessTimeUpdateCount increment in PutBlob zenserver fixes: - httpbuildstore.cpp: Reversed subtraction in HTTP range calculation (unsigned underflow) - hubservice.cpp: Deadlock in Provision() calling Wake() while holding m_Lock (extracted WakeLocked helper) - zipfs.cpp: Data race in GetFile() lazy initialization (added RwLock with shared/exclusive paths)
| * Revert "Fix correctness and concurrency bugs found during code review"Stefan Boberg2026-02-242-18/+4
| | | | | | | | This reverts commit 3c89c486338890ce39ddebe5be4722a09e85701a.
| * Fix correctness and concurrency bugs found during code reviewStefan Boberg2026-02-242-4/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | zenstore fixes: - cas.cpp: GetFileCasResults Results param passed by value instead of reference (large chunk results were silently lost) - structuredcachestore.cpp: MissCount unconditionally incremented (counted hits as misses) - cacherpc.cpp: Wrong boolean in Incomplete response array (all entries marked incomplete) - cachedisklayer.cpp: sizeof(sizeof(...)) in two validation checks computed sizeof(size_t) instead of struct size - buildstore.cpp: Wrong hash tracked in GC key list (BlobHash pushed twice instead of MetadataHash) - buildstore.cpp: Removed duplicate m_LastAccessTimeUpdateCount increment in PutBlob zenserver fixes: - httpbuildstore.cpp: Reversed subtraction in HTTP range calculation (unsigned underflow) - hubservice.cpp: Deadlock in Provision() calling Wake() while holding m_Lock (extracted WakeLocked helper) - zipfs.cpp: Data race in GetFile() lazy initialization (added RwLock with shared/exclusive paths) Co-Authored-By: Claude Opus 4.6 <[email protected]>
* | updatefrontendzousar2026-02-261-0/+0
| |
* | icon and header logo changeszousar2026-02-194-19/+21
|/
* Merge branch 'main' into zs/web-ui-improvementszousar2026-02-181-0/+991
|\
| * structured compute basics (#714)Stefan Boberg2026-02-181-0/+991
| | | | | | | | | | | | | | | | | | this change adds the `zencompute` component, which can be used to distribute work dispatched from UE using the DDB (Derived Data Build) APIs via zenserver this change also adds a distinct zenserver compute mode (`zenserver compute`) which is intended to be used for leaf compute nodes to exercise the compute functionality without directly involving UE, a `zen exec` subcommand is also added, which can be used to feed replays through the system all new functionality is considered *experimental* and disabled by default at this time, behind the `zencompute` option in xmake config
* | updatefrontendzousar2026-02-181-0/+0
| |
* | entry.js handles missing/native items more gracefullyzousar2026-02-182-4/+32
| |
* | updatefrontendzousar2026-02-171-0/+0
| |
* | Dependencies table doesn't reflow the entries pagezousar2026-02-171-5/+19
| |
* | Rename the cache section in the web uizousar2026-02-171-1/+1
| |
* | Make files table in entry.js paginated and searchablezousar2026-02-171-40/+170
| |
* | Added custom page for cook.artifactszousar2026-02-164-4/+428
| |
* | Change breadcrumbs for oplogs to be more descriptivezousar2026-02-152-6/+12
| |
* | Add support for listing files on oplog entrieszousar2026-02-151-9/+110
| |
* | Restore handling for hard/soft name prefixeszousar2026-02-151-4/+16
| |
* | Enhance dependencies to include soft and hard depszousar2026-02-141-11/+13
|/
* Fix formatting of stat pages (#748)Liam Mitchell2026-02-094-3/+10
| | | * Fix formatting of stat pages
* Zs/oplog navigation fix (#731)Zousar Shaker2026-01-232-6/+6
| | | * Fix incorrect oplog navigation symbols
* Avoid rendering user text input as HTML (#700)Liam Mitchell2026-01-092-1/+1
| | | * Avoid rendering user text input as HTML
* Added actions to drop all projects or all z$ namespaces. (#655)Martin Ridgers2025-11-183-2/+54
| | | | | | | | | | | * Save references to the project and zcache tables * Add an attribute to table rows with the actionable project/namespace id * Drop-all option for projects and cache namespaces * Updated frontend .zip archive * Edited changelog
* Include version string on the dashboard's start page. (#651)Martin Ridgers2025-11-174-2/+26
| | | | | | | | | | | * Method to get plain text from an async request * Include server's version on the dashboard start page * Same paragraph style as the rest of the method * Updated changelog * Update frontend archive
* Mr/dashboard stats summary tweak (#592)Martin Ridgers2025-10-202-9/+14
| | | | | | | * More robust dashboard stats summary * Updated changelog * Updated frontend zip archive
* Sorting oplog tree view by size would raise an error. (#497)Martin Ridgers2025-09-162-1/+1
| | | | | | | * Sorting oplog tree view by size would raise an error * Updated frontend .zip archive * Updated changelog
* clean up trace options parsing (#473)Dan Engelbrecht2025-08-221-0/+2
| | | | | * clean up trace command line options explicitly shut down worker pools * some additional startup trace scopes
* New frontend zip.Florent Devillechabrol2025-08-141-0/+0
|
* If the oplog has no packagestoreentry then show the raw json.Florent Devillechabrol2025-08-141-2/+5
|
* New frontend zip.Florent Devillechabrol2025-08-141-0/+0
|
* Do not skip oplog without package data.Florent Devillechabrol2025-08-142-36/+39
|
* Surfaced basic z$ information to self-hosted dashboard (#441)Martin Ridgers2025-06-183-0/+124
| | | | | | - Namespaces are listed on the start page. - Namespaces can be dropped. - New page to show details of a namespace and list its buckets. - Buckets can be dropped.
* xmake updatefrontendzousar2025-04-161-0/+0
|
* Make metadata presentation more genericzousar2025-04-151-23/+42
|
* xmake updatefrontendzousar2025-04-151-0/+0
|
* Fix for BigInt conversion bugzousar2025-04-151-1/+1
|
* xmake updatefrontendzousar2025-04-111-0/+0
|
* Avoid signed overflow using BigIntzousar2025-04-115-13/+16
| | | | Bias for use of BigInt when consuming integer fields in compact binary to avoid values showing up as negative due to overflow on the Number type.
* xmake updatefrontendzousar2025-04-041-0/+0
|
* Merge pull request #343 from ue-foundation/zs/web-ui-oplog-searchZousar Shaker2025-04-042-3/+7
|\ | | | | Oplog search improvements
| * Oplog search improvementszousar2025-04-032-3/+7
| | | | | | | | | | | | - Case insensitive search - Allow search of 1 or 2 character strings - Reset table when doing a null search
* | Alternate fix by explicitly initializing pkg_idzousar2025-04-041-2/+1
| |
* | Bump db versionzousar2025-04-031-1/+1
| | | | | | | | Required to refresh db contents after ID fix.
* | Don't duplicate ID bytes when more than one pkg_datazousar2025-04-031-0/+1
|/ | | | | | ID was getting extended and left shifted if we encountered multiple package data items in a single entry. So instead of the ID being 0x0c6500b7fb8dbe2e, it was 0x0C6500B7FB8DBE2E0C6500B7FB8DBE2E. When we went to look up an imported package by ID, it would not be found and the import would be presented as a blank string. Addressing this by making the first package data the only referenceable one. Second package datas are currently used for optional data blobs, and will not be imported or referenced. They are sidecar data.