Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
f0c6777
Turning off agent coverage puts the console back on the direct path
tvancott42 Aug 3, 2026
8d5a9ff
Multi-Site: a disabled agent stops counting against its site
tvancott42 Aug 3, 2026
c04c692
Fix the agent enrollment tests for the widened constructor
tvancott42 Aug 3, 2026
f882098
Console teardown follows the path its client was built on
tvancott42 Aug 3, 2026
89d1365
A main site handed to its agent stands down while that agent is offline
tvancott42 Aug 3, 2026
5d3d98e
Keep the server collecting for a main site whose agent is offline
tvancott42 Aug 3, 2026
21e6d6f
Revert "Keep the server collecting for a main site whose agent is off…
tvancott42 Aug 3, 2026
6f35091
Reapply "Keep the server collecting for a main site whose agent is of…
tvancott42 Aug 3, 2026
6fd9e49
Device SSH says it is waiting for the agent, not that the banner was …
tvancott42 Aug 3, 2026
6676875
Drop probe results from a main site agent that is not covering it
tvancott42 Aug 3, 2026
e21a828
Agent docs: point the reverse proxy section at the companion Traefik …
tvancott42 Aug 3, 2026
23752b3
Agent docs: forward the original Host in the nginx proxy examples
tvancott42 Aug 3, 2026
0c3295c
Agent docs: remind operators to set REVERSE_PROXIED_HOST_NAME after t…
tvancott42 Aug 3, 2026
273a61a
MSI build: always publish into an empty folder
tvancott42 Aug 3, 2026
01aa118
macOS install: stop building the unused cfspeedtest binary
tvancott42 Aug 3, 2026
f3c17f9
MSI build: refresh the Traefik config templates on every build
tvancott42 Aug 3, 2026
7dbf8e0
Agent coverage is known before collection starts, not a second later
tvancott42 Aug 3, 2026
4ec8d41
Sweep the agent coverage cache with the other per-site registries
tvancott42 Aug 3, 2026
69ba51b
Run Test from Gateway says why it cannot run
tvancott42 Aug 3, 2026
f3bcd76
Probing stands down on configuration, SNMP on the agent actually bein…
tvancott42 Aug 3, 2026
3cc0454
A coverage write records the new value instead of clearing the cache
tvancott42 Aug 3, 2026
ea75688
Only the main site loses its routing flags when its last agent goes
tvancott42 Aug 3, 2026
65cb681
Record why the no-agent secondary site still offers these controls
tvancott42 Aug 3, 2026
7bf8953
Site setup wizard: preview the slug the site will actually get
tvancott42 Aug 3, 2026
92ad415
Gate reading the audit log at the service, not only at the page in fr…
tvancott42 Aug 3, 2026
d2672e6
Audit Log exports download in place instead of opening a tab
tvancott42 Aug 3, 2026
b55eebf
Multi-WAN monitoring: probe, discover, and grade every WAN (#1098)
tvancott42 Aug 5, 2026
1e85e64
Config Optimizer: catch Smart Queues that UniFi Network never actuall…
tvancott42 Aug 5, 2026
5edd65a
Dashboard: hide a restart reason that belongs to an earlier boot (#1099)
tvancott42 Aug 5, 2026
2183b04
Live View: compact the WAN rate cards on mobile
tvancott42 Aug 5, 2026
d1647d2
Live View: put WAN rates on the speed test download/upload colors
tvancott42 Aug 5, 2026
70ccc46
Live View: move the Fabric cards onto the same rate colors
tvancott42 Aug 5, 2026
ce294cc
ISP Health: carry the report's WAN into the Investigate links
tvancott42 Aug 5, 2026
f10b6a4
ISP Health: widen the GPON upstream loaded-loss band, and keep the lo…
tvancott42 Aug 5, 2026
931db79
Monitoring: stop the deep-linked investigation racing the link's WAN
tvancott42 Aug 5, 2026
f913576
Monitoring: parenthesize the WAN token in the WAN Throughput title
tvancott42 Aug 5, 2026
9548d06
Monitoring: fix two mobile placements of the jump icon
tvancott42 Aug 5, 2026
870251f
Monitoring: tighten the two mobile jump-icon placements
tvancott42 Aug 5, 2026
4a826f7
Monitoring: slim the WAN labels down on mobile
tvancott42 Aug 5, 2026
538d7ee
Monitoring: shift the chart mode cluster in comparison mode, narrow t…
tvancott42 Aug 5, 2026
b4d88dd
Monitoring: consume ?wan= the way ?at= is already consumed
tvancott42 Aug 5, 2026
71337d0
Monitoring: fix two literal-@ escapes, and step live RTT to one decim…
tvancott42 Aug 5, 2026
28c455d
ISP Health: stop hand-escaping the ampersand in the Upstream Discover…
tvancott42 Aug 5, 2026
49adfe1
Upstream Discovery: read a GRE uplink as cellular, and drop its tunne…
tvancott42 Aug 5, 2026
136f763
Upstream Discovery: make the UniFi Cellular Modem handling actually r…
tvancott42 Aug 5, 2026
86a293f
Upstream Discovery: stop CGNAT hops stalling ASN attribution
tvancott42 Aug 5, 2026
bc4e50e
Upstream Discovery: log every whois fallback with its duration and ou…
tvancott42 Aug 5, 2026
2f37ab5
Multi-Site: point a multi-WAN site at where its second WAN gets monit…
tvancott42 Aug 5, 2026
507cfb5
Multi-Site: gate the WAN vantage card on a BOUND vantage, and two ASN…
tvancott42 Aug 5, 2026
5d31c77
Multi-Site: fix the WAN vantage card's layout, and speak to a site wi…
tvancott42 Aug 5, 2026
5b13fdc
Live View: let the standalone WAN filter use the row on mobile
tvancott42 Aug 5, 2026
dc6adea
Multi-Site: stack the WAN vantage card on mobile, and name the site i…
tvancott42 Aug 5, 2026
0dd9ce5
Multi-Site: name the current site as soon as multi-site is turned on
tvancott42 Aug 5, 2026
07cc9e0
Multi-Site: restore the WAN vantage card's conditions
tvancott42 Aug 5, 2026
2cc4bcd
Multi-Site: possessive the site name instead of dropping it into a te…
tvancott42 Aug 5, 2026
2f7a4ea
Tests: pin the WAN scope filter expectations to \n
tvancott42 Aug 5, 2026
e1b594d
Per-WAN outage alerting, and the Alerts & Schedule page it lands on (…
tvancott42 Aug 6, 2026
e2c6bf0
Starlink: alert on what the dish reports about itself (#1102)
tvancott42 Aug 6, 2026
c39b719
Guided tour: add the v2.6.0 tour
tvancott42 Aug 6, 2026
3c1d225
Password reset: reset the Identity admin, not just the legacy row
tvancott42 Aug 6, 2026
cb8400b
Adaptive SQM: give the boot script room to install its dependencies
tvancott42 Aug 6, 2026
874e652
Password reset: make the scripts work on Identity installs again
tvancott42 Aug 6, 2026
e2782e1
Password reset: wait out a busy database instead of failing on it
tvancott42 Aug 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,21 @@ feature that would otherwise write to the controller.
- Threshold tuning based on real-world data collection
- **Consistent wireless bottleneck attribution across test types:** LAN client speed tests show the bottleneck relative to the AP (e.g., "[AP] Back Yard (wireless)") while WAN client speed tests show it relative to the client (e.g., "[Phone] TJ iPhone (wireless)"). This is because WAN client paths reverse hops and swap ingress/egress, which flips the perspective. The wireless link is the same physical connection - both descriptions are technically correct but inconsistent. Investigate unifying to always name the AP side, since that's what users can control. Relevant code: `CalculateWanClientPathAsync` hop reversal/swap and `CalculateBottleneck` wireless link attribution.

## WAN Speed Test

### Run from an individual site agent
Both the page and its schedule run a WAN speed test from one vantage per site: the server, or the
on-site agent where one owns path measurement. A site with several agents - one behind each WAN -
cannot say which of them runs the test, so a secondary WAN's throughput cannot be measured the way
its latency already is.

Wanted: choose the agent, and therefore the WAN, from both the WAN Speed Test page and a schedule.
The Network Tools vantage picker already models this - one entry per (agent, vantage) carrying that
vantage's binding - so the shape is settled and this is wiring it into the speed test paths and the
schedule config.

Not now. The Gateway SSH launched WAN speed test covers the per-WAN case today.

## Alerts & Scheduling

### DST-Aware Schedule Time Display
Expand Down
14 changes: 14 additions & 0 deletions scripts/build-installer.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,20 @@ Write-Host ""

# Step 1: Publish self-contained single-file application
Write-Host "[1/5] Publishing self-contained single-file application for win-x64..." -ForegroundColor Yellow

# Always start from an empty publish folder. Publishing incrementally over a warm
# tree - no compilable change since the last build, e.g. a docs-only release or a
# rebuild after a failed upload - recreates package content folders such as
# LatoFont EMPTY. WiX then harvests the empty folder and packages an MSI that is
# missing files, with no warning and a successful build. That silently cost the
# v2.5.3 MSI its 19 Lato font files. Removing the folder forces the publish target
# to repopulate it; the build output is untouched, so this costs a file copy
# rather than a recompile.
if (Test-Path $PublishDir) {
Write-Host " Cleaning previous publish output..." -ForegroundColor DarkGray
Remove-Item -Recurse -Force $PublishDir
}

dotnet publish $WebProject `
-c $Configuration `
-r win-x64 `
Expand Down
24 changes: 14 additions & 10 deletions scripts/install-macos-native.sh
Original file line number Diff line number Diff line change
Expand Up @@ -276,16 +276,20 @@ if command -v go &> /dev/null; then
GO_ARCH="arm64"
fi

CFSPEEDTEST_SRC="$REPO_ROOT/src/cfspeedtest"
if [ -d "$CFSPEEDTEST_SRC" ]; then
cd "$CFSPEEDTEST_SRC"
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -a -trimpath \
-ldflags "-s -w -X main.version=$GO_VERSION" \
-o "$INSTALL_DIR/tools/cfspeedtest-linux-arm64" .
echo "Built cfspeedtest for linux/arm64"
else
echo "Warning: cfspeedtest source not found at $CFSPEEDTEST_SRC"
fi
# cfspeedtest is no longer deployed: nothing in the app invokes the standalone
# binary any more, uwnspeedtest below superseded it for gateway WAN tests. The
# src/cfspeedtest module itself stays, since uwnspeedtest imports its speedtest
# package. Left commented rather than deleted in case the binary is wanted again.
# CFSPEEDTEST_SRC="$REPO_ROOT/src/cfspeedtest"
# if [ -d "$CFSPEEDTEST_SRC" ]; then
# cd "$CFSPEEDTEST_SRC"
# CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -a -trimpath \
# -ldflags "-s -w -X main.version=$GO_VERSION" \
# -o "$INSTALL_DIR/tools/cfspeedtest-linux-arm64" .
# echo "Built cfspeedtest for linux/arm64"
# else
# echo "Warning: cfspeedtest source not found at $CFSPEEDTEST_SRC"
# fi

UWNSPEEDTEST_SRC="$REPO_ROOT/src/uwnspeedtest"
if [ -d "$UWNSPEEDTEST_SRC" ]; then
Expand Down
Loading