From d16579155995091e8926299b0104a0a99ed991d0 Mon Sep 17 00:00:00 2001 From: sparky8512 <76499194+sparky8512@users.noreply.github.com> Date: Wed, 6 Jan 2021 10:12:56 -0800 Subject: [PATCH] Readability improvements (or so PEP 8 style guide claims...) --- dishDumpStatus.py | 2 +- dishStatusCsv.py | 36 ++++++++++++++++++-------- dishStatusInflux.py | 62 ++++++++++++++++++++++----------------------- dishStatusMqtt.py | 34 ++++++++++++------------- 4 files changed, 74 insertions(+), 60 deletions(-) diff --git a/dishDumpStatus.py b/dishDumpStatus.py index 118d978..1bebb41 100644 --- a/dishDumpStatus.py +++ b/dishDumpStatus.py @@ -12,7 +12,7 @@ import spacex.api.device.device_pb2_grpc # Note that if you remove the 'with' clause here, you need to separately # call channel.close() when you're done with the gRPC connection. -with grpc.insecure_channel('192.168.100.1:9200') as channel: +with grpc.insecure_channel("192.168.100.1:9200") as channel: stub = spacex.api.device.device_pb2_grpc.DeviceStub(channel) response = stub.Handle(spacex.api.device.device_pb2.Request(get_status={})) diff --git a/dishStatusCsv.py b/dishStatusCsv.py index 3b8e31b..98269e8 100644 --- a/dishStatusCsv.py +++ b/dishStatusCsv.py @@ -6,14 +6,14 @@ # This script pulls the current status once and prints to stdout. # ###################################################################### +import datetime + import grpc import spacex.api.device.device_pb2 import spacex.api.device.device_pb2_grpc -import datetime - -with grpc.insecure_channel('192.168.100.1:9200') as channel: +with grpc.insecure_channel("192.168.100.1:9200") as channel: stub = spacex.api.device.device_pb2_grpc.DeviceStub(channel) response = stub.Handle(spacex.api.device.device_pb2.Request(get_status={})) @@ -27,11 +27,25 @@ alert_bits = 0 for alert in status.alerts.ListFields(): alert_bits |= (1 if alert[1] else 0) << (alert[0].number - 1) -print(",".join([timestamp.replace(microsecond=0).isoformat(), status.device_info.id, - status.device_info.hardware_version, status.device_info.software_version, - spacex.api.device.dish_pb2.DishState.Name(status.state)]) + "," + - ",".join(str(x) for x in [status.device_state.uptime_s, status.snr, status.seconds_to_first_nonempty_slot, - status.pop_ping_drop_rate, status.downlink_throughput_bps, status.uplink_throughput_bps, - status.pop_ping_latency_ms, alert_bits, status.obstruction_stats.fraction_obstructed, - status.obstruction_stats.currently_obstructed, status.obstruction_stats.last_24h_obstructed_s]) + "," + - ",".join(str(x) for x in status.obstruction_stats.wedge_abs_fraction_obstructed)) +csv_data = [ + timestamp.replace(microsecond=0).isoformat(), + status.device_info.id, + status.device_info.hardware_version, + status.device_info.software_version, + spacex.api.device.dish_pb2.DishState.Name(status.state) +] +csv_data.extend(str(x) for x in [ + status.device_state.uptime_s, + status.snr, + status.seconds_to_first_nonempty_slot, + status.pop_ping_drop_rate, + status.downlink_throughput_bps, + status.uplink_throughput_bps, + status.pop_ping_latency_ms, + alert_bits, + status.obstruction_stats.fraction_obstructed, + status.obstruction_stats.currently_obstructed, + status.obstruction_stats.last_24h_obstructed_s +]) +csv_data.extend(str(x) for x in status.obstruction_stats.wedge_abs_fraction_obstructed) +print(",".join(csv_data)) diff --git a/dishStatusInflux.py b/dishStatusInflux.py index e8658bb..b6ab371 100644 --- a/dishStatusInflux.py +++ b/dishStatusInflux.py @@ -7,6 +7,8 @@ # the specified InfluxDB database in a loop. # ###################################################################### +import time + from influxdb import InfluxDBClient from influxdb import SeriesHelper @@ -15,10 +17,8 @@ import grpc import spacex.api.device.device_pb2 import spacex.api.device.device_pb2_grpc -import time - -fVerbose = True -sleepTime = 30 +verbose = True +sleep_time = 30 class DeviceStatusSeries(SeriesHelper): class Meta: @@ -41,20 +41,20 @@ class DeviceStatusSeries(SeriesHelper): "fraction_obstructed"] tags = ["id"] -influxClient = InfluxDBClient(host="localhost", port=8086, username="script-user", password="password", database="dishstats", ssl=False, retries=1, timeout=15) +influx_client = InfluxDBClient(host="localhost", port=8086, username="script-user", password="password", database="dishstats", ssl=False, retries=1, timeout=15) try: - dishChannel = None - lastId = None - fLastFailed = False + dish_channel = None + last_id = None + last_failed = False pending = 0 count = 0 while True: try: - if dishChannel is None: - dishChannel = grpc.insecure_channel("192.168.100.1:9200") - stub = spacex.api.device.device_pb2_grpc.DeviceStub(dishChannel) + if dish_channel is None: + dish_channel = grpc.insecure_channel("192.168.100.1:9200") + stub = spacex.api.device.device_pb2_grpc.DeviceStub(dish_channel) response = stub.Handle(spacex.api.device.device_pb2.Request(get_status={})) status = response.dish_get_status DeviceStatusSeries( @@ -74,45 +74,45 @@ try: pop_ping_latency_ms=status.pop_ping_latency_ms, currently_obstructed=status.obstruction_stats.currently_obstructed, fraction_obstructed=status.obstruction_stats.fraction_obstructed) - lastId = status.device_info.id - fLastFailed = False - except Exception as e: - if not dishChannel is None: - dishChannel.close() - dishChannel = None - if fLastFailed: - if not lastId is None: - DeviceStatusSeries(id=lastId, state="DISH_UNREACHABLE") + last_id = status.device_info.id + last_failed = False + except grpc.RpcError: + if dish_channel is not None: + dish_channel.close() + dish_channel = None + if last_failed: + if last_id is not None: + DeviceStatusSeries(id=last_id, state="DISH_UNREACHABLE") else: # Retry once, because the connection may have been lost while # we were sleeping - fLastFailed = True + last_failed = True continue pending = pending + 1 - if fVerbose: + if verbose: print("Samples: " + str(pending)) count = count + 1 if count > 5: try: - DeviceStatusSeries.commit(influxClient) - if fVerbose: + DeviceStatusSeries.commit(influx_client) + if verbose: print("Wrote " + str(pending)) pending = 0 except Exception as e: print("Failed to write: " + str(e)) count = 0 - if sleepTime > 0: - time.sleep(sleepTime) + if sleep_time > 0: + time.sleep(sleep_time) else: break finally: # Flush on error/exit try: - DeviceStatusSeries.commit(influxClient) - if fVerbose: + DeviceStatusSeries.commit(influx_client) + if verbose: print("Wrote " + str(pending)) except Exception as e: print("Failed to write: " + str(e)) - influxClient.close() - if not dishChannel is None: - dishChannel.close() + influx_client.close() + if dish_channel is not None: + dish_channel.close() diff --git a/dishStatusMqtt.py b/dishStatusMqtt.py index a0993cc..9baaddd 100644 --- a/dishStatusMqtt.py +++ b/dishStatusMqtt.py @@ -14,7 +14,7 @@ import grpc import spacex.api.device.device_pb2 import spacex.api.device.device_pb2_grpc -with grpc.insecure_channel('192.168.100.1:9200') as channel: +with grpc.insecure_channel("192.168.100.1:9200") as channel: stub = spacex.api.device.device_pb2_grpc.DeviceStub(channel) response = stub.Handle(spacex.api.device.device_pb2.Request(get_status={})) @@ -26,25 +26,25 @@ alert_bits = 0 for alert in status.alerts.ListFields(): alert_bits |= (1 if alert[1] else 0) << (alert[0].number - 1) -topicPrefix = "starlink/dish_status/" + status.device_info.id + "/" -msgs = [(topicPrefix + "hardware_version", status.device_info.hardware_version, 0, False), - (topicPrefix + "software_version", status.device_info.software_version, 0, False), - (topicPrefix + "state", spacex.api.device.dish_pb2.DishState.Name(status.state), 0, False), - (topicPrefix + "uptime", status.device_state.uptime_s, 0, False), - (topicPrefix + "snr", status.snr, 0, False), - (topicPrefix + "seconds_to_first_nonempty_slot", status.seconds_to_first_nonempty_slot, 0, False), - (topicPrefix + "pop_ping_drop_rate", status.pop_ping_drop_rate, 0, False), - (topicPrefix + "downlink_throughput_bps", status.downlink_throughput_bps, 0, False), - (topicPrefix + "uplink_throughput_bps", status.uplink_throughput_bps, 0, False), - (topicPrefix + "pop_ping_latency_ms", status.pop_ping_latency_ms, 0, False), - (topicPrefix + "alerts", alert_bits, 0, False), - (topicPrefix + "fraction_obstructed", status.obstruction_stats.fraction_obstructed, 0, False), - (topicPrefix + "currently_obstructed", status.obstruction_stats.currently_obstructed, 0, False), +topic_prefix = "starlink/dish_status/" + status.device_info.id + "/" +msgs = [(topic_prefix + "hardware_version", status.device_info.hardware_version, 0, False), + (topic_prefix + "software_version", status.device_info.software_version, 0, False), + (topic_prefix + "state", spacex.api.device.dish_pb2.DishState.Name(status.state), 0, False), + (topic_prefix + "uptime", status.device_state.uptime_s, 0, False), + (topic_prefix + "snr", status.snr, 0, False), + (topic_prefix + "seconds_to_first_nonempty_slot", status.seconds_to_first_nonempty_slot, 0, False), + (topic_prefix + "pop_ping_drop_rate", status.pop_ping_drop_rate, 0, False), + (topic_prefix + "downlink_throughput_bps", status.downlink_throughput_bps, 0, False), + (topic_prefix + "uplink_throughput_bps", status.uplink_throughput_bps, 0, False), + (topic_prefix + "pop_ping_latency_ms", status.pop_ping_latency_ms, 0, False), + (topic_prefix + "alerts", alert_bits, 0, False), + (topic_prefix + "fraction_obstructed", status.obstruction_stats.fraction_obstructed, 0, False), + (topic_prefix + "currently_obstructed", status.obstruction_stats.currently_obstructed, 0, False), # While the field name for this one implies it covers 24 hours, the # empirical evidence suggests it only covers 12 hours. It also resets # on dish reboot, so may not cover that whole period. Rather than try # to convey that complexity in the topic label, just be a bit vague: - (topicPrefix + "seconds_obstructed", status.obstruction_stats.last_24h_obstructed_s, 0, False), - (topicPrefix + "wedges_fraction_obstructed", ",".join(str(x) for x in status.obstruction_stats.wedge_abs_fraction_obstructed), 0, False)] + (topic_prefix + "seconds_obstructed", status.obstruction_stats.last_24h_obstructed_s, 0, False), + (topic_prefix + "wedges_fraction_obstructed", ",".join(str(x) for x in status.obstruction_stats.wedge_abs_fraction_obstructed), 0, False)] paho.mqtt.publish.multiple(msgs, hostname="localhost", client_id=status.device_info.id)