UniFi: degrade wan-status & client-ap-traffic to 200 'unavailable' when controller unreachable
Instead of returning HTTP 500 when the UniFi controller can't be reached, these JSON data feeds now return 200 with an 'available: false' / status 'unavailable' payload so the dashboard widgets show a friendly unavailable state and the WAN poll stops silently failing.
This commit is contained in:
@@ -36,6 +36,7 @@ class StatsController extends Controller
|
||||
if ($wanIp && str_starts_with($wanIp, '127.')) $wanIp = $gw['connect_request_ip'] ?? null;
|
||||
|
||||
return response()->json([
|
||||
'available' => true,
|
||||
'status' => $wan['status'] ?? 'unknown',
|
||||
'tx_rate' => $wan['tx_bytes-r'] ?? 0,
|
||||
'rx_rate' => $wan['rx_bytes-r'] ?? 0,
|
||||
@@ -44,7 +45,19 @@ class StatsController extends Controller
|
||||
'latency' => $wan['latency'] ?? $gw['wan1']['latency'] ?? null,
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
return response()->json(['status' => 'error'], 500);
|
||||
// The UniFi controller is unreachable. Degrade gracefully: return 200 with a
|
||||
// friendly "unavailable" payload so the dashboard widget shows an unavailable
|
||||
// state instead of the poll silently failing on a 500.
|
||||
return response()->json([
|
||||
'available' => false,
|
||||
'status' => 'unavailable',
|
||||
'message' => 'UniFi controller is unreachable.',
|
||||
'tx_rate' => 0,
|
||||
'rx_rate' => 0,
|
||||
'isp' => null,
|
||||
'wan_ip' => null,
|
||||
'latency' => null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,12 +309,21 @@ class StatsController extends Controller
|
||||
->values();
|
||||
|
||||
return response()->json([
|
||||
'available' => true,
|
||||
'labels' => $series['labels'],
|
||||
'traffic_rx' => $rx,
|
||||
'traffic_tx' => $tx,
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
return response()->json(['error' => $e->getMessage()], 500);
|
||||
// UniFi controller unreachable — degrade gracefully (200 with empty series)
|
||||
// so the chart shows an empty/unavailable state rather than erroring on a 500.
|
||||
return response()->json([
|
||||
'available' => false,
|
||||
'message' => 'UniFi controller is unreachable.',
|
||||
'labels' => [],
|
||||
'traffic_rx' => [],
|
||||
'traffic_tx' => [],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user