From 2e515efc549f116418efda8c137414b732cd677c Mon Sep 17 00:00:00 2001 From: James Woglom Date: Mon, 3 Jan 2022 17:52:15 -0500 Subject: [PATCH] check: add additional output to --check-login --- .gitignore | 1 + tconnectsync/check.py | 158 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 132 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index 96344b6..6f06ea2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ build *.swa *.egg-info .env +tconnectsync-check-output.log diff --git a/tconnectsync/check.py b/tconnectsync/check.py index 3ead712..b2f632b 100644 --- a/tconnectsync/check.py +++ b/tconnectsync/check.py @@ -1,58 +1,162 @@ +import sys +import time +import pkg_resources +from datetime import datetime + from .nightscout import NightscoutApi +from .parser.nightscout import BASAL_EVENTTYPE, BOLUS_EVENTTYPE + +try: + __version__ = pkg_resources.require("tconnectsync")[0].version +except Exception: + __version__ = "UNKNOWN" """ Attempts to authenticate with each t:connect API, and returns the output of a sample API call from each. Also attempts to connect to the Nightscout API. """ -def check_login(tconnect, time_start, time_end): +def check_login(tconnect, time_start, time_end, verbose=False): errors = 0 - print("Logging in to t:connect ControlIQ API...") + loglines = [] + def log(*args): + print(*args) + loglines.append(" ".join([str(i) for i in args]) + "\n") + + def debug(*args): + if verbose: + print(*args) + loglines.append(" ".join([str(i) for i in args]) + "\n") + + log("tconnectsync version %s" % __version__) + log("Python version %s" % sys.version) + log("System platform %s" % sys.platform) + log("Running checks with time range %s to %s" % (time_start, time_end)) + log("Current time: %s" % datetime.now()) + log("time.tzname: %s" % str(time.tzname)) + + log("Loading secrets...") + try: + from .secret import TCONNECT_EMAIL, TCONNECT_PASSWORD, PUMP_SERIAL_NUMBER, NS_URL, NS_SECRET, TIMEZONE_NAME + except ImportError as e: + log("Error: Unable to load config file. Please check your .env file or environment variables") + log(e) + + if not TCONNECT_EMAIL or TCONNECT_EMAIL == 'email@email.com': + log("Error: You have not specified a TCONNECT_EMAIL") + errors += 1 + + if not TCONNECT_PASSWORD or TCONNECT_PASSWORD == 'password': + log("Error: You have not specified a TCONNECT_PASSWORD") + errors += 1 + + if not PUMP_SERIAL_NUMBER or PUMP_SERIAL_NUMBER == '11111111': + log("Error: You have not specified a PUMP_SERIAL_NUMBER") + errors += 1 + + if not NS_URL or NS_URL == 'https://yournightscouturl/': + log("Error: You have not specified a NS_URL") + errors += 1 + + if not NS_SECRET or NS_SECRET == 'apisecret': + log("Error: You have not specified a NS_SECRET") + errors += 1 + + log("TIMEZONE_NAME: %s" % TIMEZONE_NAME) + + log("-----") + + log("Logging in to t:connect ControlIQ API...") try: summary = tconnect.controliq.dashboard_summary(time_start, time_end) - print("ControlIQ dashboard summary: %s" % summary) + debug("ControlIQ dashboard summary: %s" % summary) except Exception as e: - print("Error occurred querying ControlIQ API: %s" % e) + log("Error occurred querying ControlIQ API:") + log(e) errors += 1 + + log("Querying ControlIQ therapy_timeline...") + try: + tt = tconnect.controliq.therapy_timeline(time_start, time_end) + debug("ControlIQ therapy_timeline: %s" % tt) + except Exception as e: + log("Error occurred querying ControlIQ therapy_timeline:") + log(e) + errors += 1 + + log("-----") - print("\nLogging in to t:connect WS2 API...") + log("Logging in to t:connect WS2 API...") try: summary = tconnect.ws2.basaliqtech(time_start, time_end) - print("WS2 basaliq status: %s" % summary) + debug("WS2 basaliq status: %s" % summary) except Exception as e: - print("Error occurred querying WS2 API: %s" % e) + log("Error occurred querying WS2 API:") + log(e) errors += 1 + + log("Querying WS2 therapy_timeline_csv...") + try: + ttcsv = tconnect.ws2.therapy_timeline_csv(time_start, time_end) + debug("therapy_timeline_csv: %s", ttcsv) + except Exception as e: + log("Error occurred querying WS2 therapy_timeline_csv:") + log(e) + errors += 1 + + log("-----") - print("\nLogging in to t:connect Android API...") + log("Logging in to t:connect Android API...") try: summary = tconnect.android.user_profile() - print("Android user profile: %s" % summary) - - from .secret import PUMP_SERIAL_NUMBER - + debug("Android user profile: %s" % summary) event = tconnect.android.last_event_uploaded(PUMP_SERIAL_NUMBER) - print("\nAndroid last uploaded event: %s" % event) - except ImportError: - print("Error: Unable to load config file.") + debug("Android last uploaded event: %s" % event) except Exception as e: - print("Error occurred querying Android API: %s" % e) + log("Error occurred querying Android API:") + log(e) errors += 1 - - print("\nLogging in to Nightscout...") + + log("Querying Android therapy_events...") try: - from .secret import NS_URL, NS_SECRET - - status = NightscoutApi(NS_URL, NS_SECRET).api_status() - print("\nNightscout status: %s" % status) - except ImportError: - print("Error: Unable to load config file.") + androidevents = tconnect.android.therapy_events(time_start, time_end) + debug("android therapy_events: %s" % androidevents) except Exception as e: - print("Error occurred querying Nightscout API: %s" % e) + log("Error occurred querying Android therapy_events:") + log(e) errors += 1 + + log("-----") + + log("Logging in to Nightscout...") + try: + nightscout = NightscoutApi(NS_URL, NS_SECRET) + status = nightscout.api_status() + debug("Nightscout status: %s" % status) + + last_upload_basal = nightscout.last_uploaded_entry(BASAL_EVENTTYPE) + debug("Nightscout last uploaded basal: %s" % last_upload_basal) + + last_upload_bolus = nightscout.last_uploaded_entry(BOLUS_EVENTTYPE) + debug("Nightscout last uploaded bolus: %s" % last_upload_bolus) + except Exception as e: + log("Error occurred querying Nightscout API:") + log(e) + errors += 1 + + log("-----") if errors == 0: - print("\nNo API errors returned!") + log("No API errors returned!") else: - print("\nAPI errors occurred. Please check the errors above.") + log("API errors occurred. Please check the errors above.") + + with open('tconnectsync-check-output.log', 'w') as f: + f.writelines(loglines) + + print("Created file tconnectsync-check-output.log containing additional debugging information.") + print("For support, you can upload this file to https://github.com/jwoglom/tconnectsync/issues/new") + print("Before uploading, look through the file and remove any sensitive data, such as") + print("Nightscout URL and pump serial number.")