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;
|
if ($wanIp && str_starts_with($wanIp, '127.')) $wanIp = $gw['connect_request_ip'] ?? null;
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
|
'available' => true,
|
||||||
'status' => $wan['status'] ?? 'unknown',
|
'status' => $wan['status'] ?? 'unknown',
|
||||||
'tx_rate' => $wan['tx_bytes-r'] ?? 0,
|
'tx_rate' => $wan['tx_bytes-r'] ?? 0,
|
||||||
'rx_rate' => $wan['rx_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,
|
'latency' => $wan['latency'] ?? $gw['wan1']['latency'] ?? null,
|
||||||
]);
|
]);
|
||||||
} catch (\Throwable $e) {
|
} 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();
|
->values();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
|
'available' => true,
|
||||||
'labels' => $series['labels'],
|
'labels' => $series['labels'],
|
||||||
'traffic_rx' => $rx,
|
'traffic_rx' => $rx,
|
||||||
'traffic_tx' => $tx,
|
'traffic_tx' => $tx,
|
||||||
]);
|
]);
|
||||||
} catch (\Throwable $e) {
|
} 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