measureLatencies method

Future<void> measureLatencies()

Measure latency to each mirror using a HEAD request.

Updates Mirror.latencyMs and Mirror.isAvailable for each mirror.

Implementation

Future<void> measureLatencies() async {
  await Future.wait(
    mirrors.map((m) async {
      try {
        final stopwatch = Stopwatch()..start();
        final response = await _client
            .head(Uri.parse(m.baseUrl))
            .timeout(const Duration(seconds: 10));
        stopwatch.stop();

        m.latencyMs = stopwatch.elapsedMilliseconds;
        m.isAvailable = response.statusCode == 200 ||
            response.statusCode == 301 ||
            response.statusCode == 302;
      } catch (e) {
        m.latencyMs = null;
        m.isAvailable = false;
      }
    }),
  );
}