diff --git a/selfdrive/statsd.py b/selfdrive/statsd.py index 8fd1f60ca1..33f35032ff 100755 --- a/selfdrive/statsd.py +++ b/selfdrive/statsd.py @@ -74,24 +74,26 @@ def main(): last_flush_time = time.monotonic() gauges = {} while True: - try: - metric = sock.recv_string(zmq.NOBLOCK) - try: - metric_type = metric.split('|')[1] - metric_name = metric.split(':')[0] - metric_value = metric.split('|')[0].split(':')[1] - - if metric_type == METRIC_TYPE.GAUGE: - gauges[metric_name] = metric_value - else: - cloudlog.event("unknown metric type", metric_type=metric_type) - except Exception: - cloudlog.event("malformed metric", metric=metric) - except zmq.error.Again: - time.sleep(1e-3) - started_prev = sm['deviceState'].started - sm.update(0) + sm.update() + + # Update metrics + while True: + try: + metric = sock.recv_string(zmq.NOBLOCK) + try: + metric_type = metric.split('|')[1] + metric_name = metric.split(':')[0] + metric_value = metric.split('|')[0].split(':')[1] + + if metric_type == METRIC_TYPE.GAUGE: + gauges[metric_name] = metric_value + else: + cloudlog.event("unknown metric type", metric_type=metric_type) + except Exception: + cloudlog.event("malformed metric", metric=metric) + except zmq.error.Again: + break # flush when started state changes or after FLUSH_TIME_S if (time.monotonic() > last_flush_time + STATS_FLUSH_TIME_S) or (sm['deviceState'].started != started_prev):