Mercurial > code > home > repos > light9
changeset 2413:7a5c7721bf6d
better collector err handling
author | drewp@bigasterisk.com |
---|---|
date | Sun, 19 May 2024 18:31:53 -0700 |
parents | 560c9eab6647 |
children | 6c61735514e9 |
files | src/light9/collector/output.py src/light9/collector/service.py |
diffstat | 2 files changed, 12 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/light9/collector/output.py Sat May 18 23:23:30 2024 -0700 +++ b/src/light9/collector/output.py Sun May 19 18:31:53 2024 -0700 @@ -192,7 +192,7 @@ from pyudmx import pyudmx self.dev = pyudmx.uDMXDevice() if not self.dev.open(bus=self.bus, address=self.address): - raise ValueError("dmx open failed") + raise ValueError(f"dmx open(bus={self.bus}, address={self.address}) failed") log.info(f'opened {self.dev}') metrics('connected', output=self.shortId()).set(1) metrics('reconnections', output=self.shortId()).inc() @@ -252,6 +252,9 @@ self.reconnect() return + if e.errno == 110: # USBTimeoutError + return self.crash() + raise dt = time.time() - t1 if dt > 1 / self.rate * 1.5:
--- a/src/light9/collector/service.py Sat May 18 23:23:30 2024 -0700 +++ b/src/light9/collector/service.py Sun May 19 18:31:53 2024 -0700 @@ -9,6 +9,8 @@ import asyncio import functools import logging +import os +import stat import subprocess import traceback from typing import List @@ -94,7 +96,10 @@ words = line.split(':')[0].split() dev = f'/dev/bus/usb/{words[1]}/{words[3]}' log.info(f'device will be {dev}') - return dev, int(words[3]) + st = os.stat(dev) + if not (st.st_mode & (stat.S_IWUSR | stat.S_IRUSR)): + raise ValueError(f'{dev} has insufficient stat ({stat.filemode(st.st_mode)})') + return dev, int(words[1]), int(words[3]) raise ValueError("no matching uDMX found") @@ -107,7 +112,7 @@ graph = SyncedGraph(networking.rdfdb.url, "collector") - devPath, usbAddress = findDevice() + devPath, bus, usbAddress = findDevice() # if user doesn't have r/w, fail now try: # todo: drive outputs with config files @@ -117,7 +122,7 @@ # port=6445, # rate=rate), #sudo chmod a+rw /dev/bus/usb/003/021 - Udmx(L9['output/dmxA/'], bus=3, address=usbAddress, lastDmxChannel=200, rate=RATE), + Udmx(L9['output/dmxA/'], bus=bus, address=usbAddress, lastDmxChannel=200, rate=RATE), ] except Exception: log.error("setting up outputs:")