fromHealthz static method

CatStatus? fromHealthz(
  1. String body
)

null for anything but a cat cam's /healthz answer, so other hosts show nothing; one that is not ok still is one, with its problem.

Implementation

static CatStatus? fromHealthz(String body) {
  final json = decodeJsonObject(body);
  final ok = json?['ok'];
  if (json == null || ok is! bool) {
    return null;
  }
  final cat = json['cat'];
  if (cat is! Map<String, dynamic>) {
    return null;
  }
  final name = json['name'];
  final seconds = cat['last_seen'];
  final visits = cat['visits'];
  final recent = cat['recent'];
  final clip = cat['clip'];
  final clips = cat['clips'];
  final problem = json['problem'];
  final peers = json['peers'];
  return CatStatus(
    peers: <String>[
      if (peers is List)
        for (final peer in peers)
          if (peer is String) peer,
    ],
    problem: ok ? null : (problem is String ? problem : ''),
    name: name is String ? name : '',
    inView: cat['in_view'] == true,
    lastSeen: seconds is int
        ? DateTime.fromMillisecondsSinceEpoch(seconds * 1000)
        : null,
    visits: visits is int ? visits : 0,
    clip: clip is int
        ? DateTime.fromMillisecondsSinceEpoch(clip * 1000)
        : null,
    clips: <DateTime>[
      if (clips is List)
        for (final t in clips)
          if (t is int) DateTime.fromMillisecondsSinceEpoch(t * 1000),
    ],
    recent: <CatVisit>[
      if (recent is List)
        for (final visit in recent)
          if (visit is Map<String, dynamic> && visit['arrived'] is int)
            CatVisit(
              DateTime.fromMillisecondsSinceEpoch(
                (visit['arrived'] as int) * 1000,
              ),
              visit['stayed_s'] is int
                  ? Duration(seconds: visit['stayed_s'] as int)
                  : null,
            ),
    ],
  );
}