Release LoadGen FrontEnd: 1.0.0.11864
LoadGen FrontEnd
- [#8598] Single sign-on via OIDC — the login page now fetches the list of identity providers enabled for the appliance and renders a "Sign in with " button per provider above the username/password form, with a full-page redirect to the identity provider so SignalR connections survive the round-trip. After the identity provider signs the user in, the current username, role flags, and the SignalR reconnect behave identically to a local login. When the API reports that local login is disabled, the username/password form is hidden entirely. Administrators get two new Settings pages — SSO Providers (list with edit/delete and "New provider") and the per-provider editor — covering display name, icon, authority, client ID, client secret, scopes, role claim, group-to-role mapping, auto-provisioning, and enabled state. Non-admin users are redirected away from these pages. Multi-provider support is in place from day one; SAML 2.0 is deferred to a follow-up release. The companion appliance-side endpoints ship in the paired API release.
- [#8604] Extended scheduling for monitoring profiles — the monitoring schedule editor (both the inline-create form on the Schedule step of the Monitoring Profile wizard and the Schedules tab's create/edit dialog) gains a top-level Recurrence selector with five branches: Daily (the existing intraday/day-of-week behaviour, unchanged for existing schedules), Weekly (every-N-weeks plus a days-of-week mask), Monthly (fixed day-of-month with end-of-month clamping, or nth-weekday like "2nd Tuesday" / "Last Friday"), Quarterly (nth-weekday of each quarter's first month, January/April/July/October), and Custom (cron) for power users. Each branch shows only the inputs it needs; the Time Range and Interval pickers hide in Custom mode since cron alone determines the firing instants. The weekly calendar projects Daily/Weekly/Monthly/Quarterly schedules client-side; Custom (cron) schedules render against a server-computed next-run timestamp. Save is disabled when the chosen branch is incomplete (Weekly needs at least one day; Monthly needs either a day-of-month or both nth-weekday inputs; Quarterly needs both nth-weekday inputs; Custom needs a non-empty cron expression). Existing schedules continue to deserialize as Daily without migration. The paired API endpoints (recurrence calculator, cron evaluator, server-computed next-run) ship in a coordinated API release.
- [#8602] Upload enterprise root and intermediate CA certificates to the appliance — a new Appliance trust store lets administrators upload corporate root and intermediate CA certificates as an enterprise-PKI alternative to the per-profile Ignore Certificate Errors toggle. Uploaded certificates apply system-wide so HTTPS uptime checks and outbound API calls trust internal CAs without weakening per-profile validation, and the page lists each installed certificate with subject, issuer, and expiry so operators can audit what is currently trusted. The companion appliance-side endpoint ships in the paired API release.
- [#8613] Mail Account Test Connection and Send Test Email — the Add / Edit Mail Account modal on the Notification Accounts page gains two new actions in the modal footer: Test Connection and Send Test Email. Results render as an inline green/red banner above the form fields, showing an operator-facing message and round-trip duration. The Send Test Email path opens an inline recipient prompt that defaults to the dialog's From Email so the test can be confirmed before saving. Test buttons are enabled once SMTP Host and SMTP Port are filled; the Save button is gated against an in-flight test so a stale "OK" banner cannot survive an edit — any change to host, port, encryption, username, or password clears the banner immediately. Paired API endpoints ship in the matching API release.
- [#8615] Twilio "Send Test SMS" and "Send Test WhatsApp" — the Add / Edit Twilio Account modal on the Notification Accounts page gains Send Test SMS (always present once an Account SID is filled) and Send Test WhatsApp (present once a WhatsApp From Number is filled). Either button opens an inline recipient panel above the form requesting an E.164 phone number; results render as a green/red banner above the form with the operator-facing message and duration. On success the recipient prompt collapses so the banner is the focus; on failure the prompt stays open so the operator can correct the recipient and retry. The Save button is gated against an in-flight test send, and re-opening the editor starts clean. Paired API endpoint ships in the matching API release.
- [#8617] Custom request headers on HTTP uptime checks — the Endpoint step of the Uptime check wizard gains an optional Request headers panel for HTTP-flavoured checks (Http, RestApi, WebHeader, WebRegex, WebTlsCipher, WebHsts). It exposes a curated User-Agent quick-pick (Chrome, Firefox, Safari, Edge on conventional operating systems, plus a self-identifying LoadGen-Uptime crawler string and "Custom...") and a generic key/value editor for arbitrary additional headers. The User-Agent quick-pick is independent of the existing Authentication step's custom-headers option, so an operator can set a User-Agent and keep Basic / API-key / Bearer auth — fixing the real-world Shopify case where storefronts return 403 to header-less probes. The Summary step lists every configured header (long values truncated for readability) so the operator can verify their choices before saving. Legacy checks with no headers serialize byte-identically to before.
- [#8591] Send-to-Support email and cross-restore ticket sync — the Send-to-Support modal gains an optional reporter email (anonymous by default; once set, subsequent opens pre-fill the field and untick Anonymous). When a non-anonymous ticket is sent, the email is included in the ticket body and propagated onto the local catalog row. A new Settings → Support tab lets users save or clear their reporter email outside the support modal. Operations → LoadGen Tickets gains a new Sync from LoadGen header button — disabled with a tooltip when no email is saved, otherwise it calls the upstream by-reporter endpoint and idempotently upserts the returned rows into the local catalog. Synced rows render their real DevOps state immediately (no "Unknown" badge while waiting for the next sync tick), capped result sets surface an inline "narrow the search" hint, and the email is cleared automatically on logout to honour the "forget me" intent. When the local catalog is empty after a snapshot restore but a reporter email is configured, a first-load banner deep-links to the Sync action. A "this LoadGen environment is not bound to a customer" 400 response from the cloud surfaces a dedicated, actionable message rather than a generic transport error. The redundant reporter-email helper paragraph on the My Profile modal's identity card was removed, since the same address is now also visible in Settings → Support. A subsequent polish round added a send-button gate plus an always-on privacy notice on the Send-to-Support modal so operators see what is and isn't transmitted before the ticket leaves the appliance.
- [#8596] Editable display name and email in the My Profile modal — the Identity section of the My Profile modal becomes editable rather than read-only. Display Name is now an editable input seeded from the current session, and a new Email row is injected between Display Name and Roles, seeded from the same per-user preference store that the Send-to-Support modal writes to (so the address surfaces in both places from one source of truth). Username and Roles remain read-only. A Save changes button at the bottom of the Identity section enables only when a real change has been made and validates the email up-front. Display name updates also refresh the header avatar and user-dropdown without a session reload, falling back to the username when cleared. The Change Password section is unchanged; either save in flight blocks the modal from being dismissed.
- [#8579] Backup Now on the Backup Schedule card — the appliance Backups tab's Backup Schedule card gains a prominent Backup Now button next to Save Schedule, so operators can take an on-demand snapshot in the location they expect rather than scrolling down to the Available Backups card. The legacy Create Backup button on the Available Backups card stays in place for muscle memory; both buttons share state, so they disable in unison while a backup is running, and the existing progress block lights up regardless of which button started the job.
- [#8603] Edit monitoring test users from inside the profile wizard — Step 3 (Agent Assignments) of the Monitoring Profile wizard now renders a pencil-icon button next to each agent row that opens the existing Monitoring User dialog in edit mode, closing the CRUD gap that previously forced operators to leave the wizard, edit a user under the standalone Monitoring Users page, and come back. A rename surfaces in-wizard immediately on every row that references the edited user, with no page navigation required.
- [#8610] Title field on the Confirm-Fix / Mark-as-Not-Fixed dialog — the close dialog on Operations → LoadGen Tickets gains an optional Title field above the description textarea, with action-aware placeholder copy ("Short heading for the fix..." on Confirm-fix, "Short heading for what's still broken..." on Mark-as-not-fixed). On submit the title is prepended to the comment as a bold markdown heading, so the resulting DevOps comment thread shows a clean heading followed by the body. The Comment field is renamed to Description for clarity; the existing optional image-only screenshot slot is unchanged.
- [#8609] Paste screenshot from clipboard on the ticket-close dialog — the Confirm-Fix / Mark-as-Not-Fixed dialog gains a Paste from clipboard button alongside the existing Attach screenshot file picker, so operators who just used Win+Shift+S no longer have to save the screenshot to disk before attaching it. The button respects the existing 5 MB image cap, surfaces clipboard-permission failures and "no image on clipboard" with inline copy, and switches its label to Replace from clipboard once a screenshot is attached.
- [#8616] "Check Jobs tab" toast message is now a clickable link — after triggering a per-container update on the Appliance Docker tab (API / MCP / Frontend containers), the green success toast read " container update started. Check Jobs tab for progress." but the wording was plain text, so operators had to navigate to the Jobs tab manually. The phrase "Jobs tab" is now a clickable hyperlink in the toast that takes the operator straight to the Jobs tab to watch the update progress.
- Bulk import and export on Operations → LoadGen Tickets — the page header gains two new actions alongside Import ticket / Sync from LoadGen / Refresh list. Import bulk opens a two-step dialog: a CSV upload (
workItemId,trackingIdcolumns, header row optional,#-comment lines ignored, 500-row cap) with a Download CSV template secondary button that emits a sample file, followed by a preview table where each row shows a live status chip (Pending → Resolved / Failed / Invalid). Rows are processed sequentially through the same pipeline as the single-import flow, so duplicates flip silently to Resolved. Export writes a UTF-8 CSV (with BOM) of the current catalog covering tracking ID, work-item ID, title, status, type, submitted-by username, reporter email, created-at, last-known-status-at, and local note — capped at 10,000 rows so an accidental click can't trigger a multi-gigabyte download. - [#8532] Aligned the "active version" pill on the Appliance Updates page — all three left-column version cards (Appliance Agent, .NET Runtime, Full Agent) now show Active: in the same shape, instead of the Appliance Agent and .NET Runtime cards hard-coding the literal "Installed" while the Full Agent card showed the version. The pill is suppressed during loading, so an unloaded card never shows a bare "Active:" with an empty version.
- [#8463] Fixed the Uptime check Timeout field silently reverting from your typed value to 30 seconds after Save — the wizard now persists the value you entered, and re-opening the check shows the saved timeout correctly. Existing checks (all carrying the 30-second default) continue to display as 30 s after the fix, so no data migration is required. The "Minimum 30 seconds" hint paragraph beneath the Interval slider, added in an earlier release, stays in place since it was always correct guidance.
- [#8571] Fixed the DNS Servers card on the appliance Network tab not making it clear whether DHCP-supplied DNS entries were still active after a static DNS server was configured — when a static DNS is set, the "Supplied by DHCP" heading now reads "Supplied by DHCP (inactive - overridden by static)" and the DHCP entries render with strikethrough and faded styling. When no static DNS is configured the block looks exactly as before.
- [#8575] Fixed the Frontend Domain input on the appliance SSL tab being reset back to the appliance's stored value after Generate Certificate or after the page's periodic auto-refresh — the typed value is now preserved across both events, and the success toast wording was updated to steer the operator into clicking Save Domains to persist the change instead of refreshing the page. The closely related symptom where "Save Domains silently failed unless Generate Certificate was clicked first" is resolved by the same fix.
- [#8583] Fixed the Log Viewer modal on the appliance Logging tab always rendering "No log entries found" on first open even when the underlying log file had content — clicking View Logs now triggers the initial fetch as well as opening the modal, so the spinner shows during the load and the last 100 lines render correctly.
- [#8592] Fixed the Disk Layout cards on the appliance Disk tab showing raw byte counts (e.g.
34359738368) instead of human-readable sizes — sizes now render as32 GB/40 GBand older agent output (e.g.32G) still works. The paired SCSI rescan fix on the appliance-agent side ensures the displayed size actually updates after Extend Filesystem. - [#8618] Fixed the Edit Load Profile wizard crashing with "An item with the same key has already been added" when opening a profile whose agent-assignment data contained empty agent IDs — the wizard now skips those malformed rows defensively, so the profile loads cleanly. Healthy profiles are unaffected.
- [#8582] Fixed a recurring "Failed to load system status" exception in the Frontend log after navigating away from the Appliance page while a refresh tick was mid-flight — the auto-refresh now stops cleanly when you leave the page, so the log no longer fills with disposal noise.
- [#8578] Fixed the Backup Schedule editor on the appliance Backups tab silently resetting to its default of Sunday-only-at-02:00 after navigating away and back, even when a multi-day schedule was actually saved — the editor now hydrates the day buttons, hour, and minute from the saved cron expression so revisits show the real schedule. Unrelated parent re-renders no longer clobber an edit in progress.
- [#8584] Fixed the Create User dialog on the appliance Users tab routing validation errors (e.g. "Username must start with a letter, and contain only lowercase letters, digits, dashes, or underscores" for an input containing a dot) to the page-level banner behind the dialog — the error now renders inline at the top of the modal so the form values stay intact and the operator can correct the username without re-opening the dialog.
- [#8587] Fixed the Delete User dialog on the appliance Users tab routing a failed-delete error message to the page-level banner behind the dialog, so the message was only visible after the dialog closed — the error now renders inline at the top of the dialog and the dialog stays open, matching the inline-error pattern from the Create User fix.
- [#8589] Fixed the Change Password dialog on the appliance Users tab routing password-change errors (validation failures, mismatched confirmation, backend rejection) to the page-level banner behind the dialog — the error now renders inline at the top of the dialog with the form values intact, completing the dialog-error-routing fix family alongside Create User and Delete User.
- [#8614] Fixed the Add / Edit Mail Account dialog on the Notification Accounts page showing only the generic "One or more validation errors occurred." banner when the API rejected the save — per-field errors now render inline under each affected input (Account Name, From Email, Username, Password, SMTP Host, SMTP Port, Description), with the input bordered red and a short message beside it, so the operator can see exactly which field needs attention. The dialog stays open with all form values intact.
- [#8595] Fixed the notification bell in the header doing nothing when clicked and showing a misleading always-on unread indicator — the bell now opens a real dropdown panel with an honest "No notifications." empty state, and the red unread dot is removed until a real notification feed is wired up.
- [#8597] Fixed the Settings entry in the user-dropdown menu returning HTTP 404 — the link now targets the existing Settings page. With the related My Profile fix shipped earlier, the entire user-menu dropdown (My Profile / Settings / Sign Out) is now fully working.
- [#8600] Fixed three coupled defects on the Operations → LoadGen Tickets page reported under one ticket: rows showed status "Unknown" after the auto-refresh fan-out with no explanation, the same rows could not be retried inline, and the auto-refresh tick silently swallowed the underlying 404 / transport error. Status badges now render the real DevOps state on first paint, rows that failed to refresh show a per-row retry icon, and the toast on a refresh failure surfaces an actionable message instead of disappearing.
- [#8601] Removed the orphan Forgot password? link from the login page — the link was a leftover from the sign-in template and routed to a non-existent forgot-password page, so every click returned HTTP 404. Operators who genuinely need a password reset are pointed at the appliance Users tab in the documentation.
- [#8606] Hidden the per-row Status action from the Core Agents page action menu — the action was operationally a no-op (the Core Agent version endpoint typically returns 504, which is exactly the case the on-page info banner already calls out), so the menu entry now matches what the page can actually do. Version and Reset remain.
- [#8607] Reworded the informational banner on the Core Agents page that previously read "Core Agents have limited support. Only Version and Reset operations are available. Status checking may not work until API fix." — the cryptic "API fix" reference is replaced with a plain-English explanation that Core Agents currently expose only a subset of operations because the upstream Core Agent version endpoint is not yet stable in this release, so operators understand what they are looking at without needing release-note context.
- [#8611] Repointed the footer Documentation link from the Cloudflare-proxied origin (which was returning a 525 SSL handshake error on every click, landing the operator on a Cloudflare error page) to the Support site, where the documentation is actually hosted today. The link text is unchanged.
- [#8612] Added inline helper text beneath the Command Path input on the Monitoring Profile wizard's Target Environment step when the operator picks Command Line, explaining that Command Path is the absolute path to the executable to run on the agent (e.g.
C:\Tools\my-check.exeon Windows,/usr/local/bin/my-checkon Linux) — answering the reporter's question without forcing them to dig through documentation. - LoadGen Tickets status badges recognise the full DevOps state vocabulary — the badge column on Operations → LoadGen Tickets now renders New (sky), To Do (sky), Active / Doing / In Progress / Approved / Committed (blue), Rework (amber), Resolved (green), Done (slate), Closed (slate), and Removed (red) instead of falling through to slate "Unknown" for anything other than the four DevOps Agile defaults. Newly-created tickets show their real state from the moment they appear, and a Mark-as-not-fixed action immediately reflects the kicked-back state in amber rather than reading as Unknown. The filter chips above the table also include the new states. Truly-unknown / tenant-customised states still surface as Unknown with a tooltip and can be added on demand.