GUI: logging addded to daq_worker.py, change frequency of occurence of Host requires authentication error
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import copy
|
||||
import random
|
||||
import time
|
||||
|
||||
from PySide6.QtCore import Signal, QUrl, Slot, QTimer, QObject, QByteArray
|
||||
from PySide6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
|
||||
@@ -11,6 +12,10 @@ from aaredaqlib.models import DAQStatusModel, SampleShortInfoList, SampleShortIn
|
||||
from aaredaqlib.raster_grid import RasterGridRequest, CompletedRasterGrid
|
||||
from aaredaqlib.rotation_scan import RotationScanRequest, CompletedRotationScan
|
||||
|
||||
from aaredaqlib.logger_config import setup_logger
|
||||
|
||||
logger = setup_logger(__name__)
|
||||
|
||||
SPREADHSEET_FREQUENCY = 25 # Every 5 seconds
|
||||
|
||||
|
||||
@@ -38,6 +43,9 @@ class DAQWorker(QObject):
|
||||
self.__timer.start()
|
||||
self.__counter = 0
|
||||
|
||||
self._last_auth_error_log_ts = 0.0
|
||||
self._auth_error_min_interval = 10.0
|
||||
|
||||
@Slot()
|
||||
def regular_update(self):
|
||||
if self.__counter % SPREADHSEET_FREQUENCY == 0:
|
||||
@@ -72,7 +80,7 @@ class DAQWorker(QObject):
|
||||
parsed_response = DAQStatusModel.model_validate_json(response_data)
|
||||
self.update.emit(parsed_response)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
logger.error(f"Exception from status response: {e}")
|
||||
self.http_error.emit(str(e))
|
||||
|
||||
@Slot(QNetworkReply)
|
||||
@@ -82,7 +90,7 @@ class DAQWorker(QObject):
|
||||
parsed_response = SampleShortInfoList.model_validate_json(response_data)
|
||||
self.spreadsheet.emit(parsed_response)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
logger.error(f"Exception from spreadsheet response: {e}")
|
||||
self.http_error.emit(str(e))
|
||||
|
||||
@Slot(QNetworkReply)
|
||||
@@ -92,22 +100,27 @@ class DAQWorker(QObject):
|
||||
parsed_response = SampleShortInfoList.model_validate_json(response_data)
|
||||
self.reference_tools.emit(parsed_response)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
logger.error(f"Exception from reference tools response: {e}")
|
||||
self.http_error.emit(str(e))
|
||||
|
||||
def handle_req_response(self, reply: QNetworkReply):
|
||||
if reply.error() != QNetworkReply.NetworkError.NoError:
|
||||
if reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute) == 401:
|
||||
print(reply.errorString())
|
||||
status = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute)
|
||||
err_str = reply.errorString()
|
||||
if status== 401:
|
||||
now = time.monotonic()
|
||||
if now - self._last_auth_error_log_ts > self._auth_error_min_interval:
|
||||
logger.error(f"{err_str}: baton taken by another user")
|
||||
self._last_auth_error_log_ts = now
|
||||
self.auth_error.emit()
|
||||
else:
|
||||
print(reply.errorString())
|
||||
self.http_error.emit(reply.errorString())
|
||||
logger.error(f"{err_str}")
|
||||
self.http_error.emit(err_str)
|
||||
reply.deleteLater()
|
||||
|
||||
def generic_post(self, url: str, body: str = ""):
|
||||
if self.__base_url is None:
|
||||
print(f"POST /{url}: {body}")
|
||||
logger.info(f"POST /{url}: {body}")
|
||||
return
|
||||
|
||||
request = QNetworkRequest(QUrl(f"{self.__base_url}/{url}"))
|
||||
@@ -119,7 +132,7 @@ class DAQWorker(QObject):
|
||||
|
||||
def generic_put(self, url: str, body: str = ""):
|
||||
if self.__base_url is None:
|
||||
print(f"PUT /{url}: {body}")
|
||||
logger.info(f"PUT /{url}: {body}")
|
||||
return
|
||||
request = QNetworkRequest(QUrl(f"{self.__base_url}/{url}"))
|
||||
request.setRawHeader(b"Authorization", f"Bearer {self.__token}".encode("utf-8"))
|
||||
@@ -130,7 +143,7 @@ class DAQWorker(QObject):
|
||||
|
||||
def generic_delete(self, url: str):
|
||||
if self.__base_url is None:
|
||||
print(f"DELETE /{url}")
|
||||
logger.info(f"DELETE /{url}")
|
||||
return
|
||||
|
||||
request = QNetworkRequest(QUrl(f"{self.__base_url}/{url}"))
|
||||
@@ -215,7 +228,7 @@ class DAQWorker(QObject):
|
||||
parsed_response = CompletedRotationScan.model_validate_json(response_data)
|
||||
self.standard_scan_completed.emit(parsed_response)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
logger.error(f"Exception from rotation scan response: {e}")
|
||||
self.http_error.emit(str(e))
|
||||
|
||||
@Slot(RotationScanRequest)
|
||||
@@ -235,18 +248,19 @@ class DAQWorker(QObject):
|
||||
parsed_response = CompletedRasterGrid.model_validate_json(response_data)
|
||||
self.raster_scan_completed.emit(parsed_response)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
logger.error(f"Exception from raster scan response: {e}")
|
||||
self.http_error.emit(str(e))
|
||||
|
||||
@Slot(RasterGridRequest)
|
||||
def raster_scan(self, r: RasterGridRequest):
|
||||
self.run_number_incremented.emit()
|
||||
if self.__base_url is None:
|
||||
print(f"POST /scan/raster: {r.model_dump_json()}")
|
||||
logger.info(f"POST /scan/raster: {r.model_dump_json()}")
|
||||
image_number = r.get_image_number()
|
||||
new_copy = copy.deepcopy(r)
|
||||
|
||||
images = []
|
||||
|
||||
for i in range(image_number):
|
||||
images.append(ScanResultImagesInner(
|
||||
number=i,
|
||||
@@ -257,9 +271,10 @@ class DAQWorker(QObject):
|
||||
mos = random.uniform(0, 0.1),
|
||||
b= random.uniform(15.0, 80.0)
|
||||
))
|
||||
|
||||
logger.debug("check that this works - raster scan - complete raster grid")
|
||||
reply = CompletedRasterGrid(request = new_copy,
|
||||
result = ScanResult(file_prefix=r.file_prefix, images=images))
|
||||
logger.debug(f"It appears to work {reply}")
|
||||
self.raster_scan_completed.emit(reply)
|
||||
return
|
||||
|
||||
@@ -274,7 +289,7 @@ class DAQWorker(QObject):
|
||||
def raster_scan_auto(self, r: RasterGridRequest):
|
||||
self.run_number_incremented.emit()
|
||||
if self.__base_url is None:
|
||||
print(f"POST /scan/raster: {r.model_dump_json()}")
|
||||
logger.info(f"POST /scan/raster: {r.model_dump_json()}")
|
||||
image_number = r.get_image_number()
|
||||
new_copy = copy.deepcopy(r)
|
||||
|
||||
@@ -289,9 +304,10 @@ class DAQWorker(QObject):
|
||||
mos=random.uniform(0, 0.1),
|
||||
b=random.uniform(15.0, 80.0)
|
||||
))
|
||||
|
||||
logger.debug("check that this works - raster scan auto - complete raster grid")
|
||||
reply = CompletedRasterGrid(request=new_copy,
|
||||
result=ScanResult(file_prefix=r.file_prefix, images=images))
|
||||
logger.debug(f"It appears to work {reply}")
|
||||
self.raster_scan_completed.emit(reply)
|
||||
return
|
||||
|
||||
@@ -306,7 +322,7 @@ class DAQWorker(QObject):
|
||||
@Slot()
|
||||
def load_spreadsheet(self):
|
||||
if self.__base_url is None:
|
||||
print(f"GET /sample/spreadsheet")
|
||||
logger.info(f"GET /sample/spreadsheet")
|
||||
return
|
||||
|
||||
request = QNetworkRequest(QUrl(f"{self.__base_url}/sample/spreadsheet"))
|
||||
@@ -317,7 +333,7 @@ class DAQWorker(QObject):
|
||||
@Slot()
|
||||
def load_reference_tools(self):
|
||||
if self.__base_url is None:
|
||||
print(f"GET /sample/reference_tools")
|
||||
logger.info(f"GET /sample/reference_tools")
|
||||
return
|
||||
request = QNetworkRequest(QUrl(f"{self.__base_url}/sample/reference_tools"))
|
||||
request.setRawHeader(b"Authorization", f"Bearer {self.__token}".encode("utf-8"))
|
||||
@@ -327,14 +343,14 @@ class DAQWorker(QObject):
|
||||
def handle_auto_scan_response(self, reply, sample_id: int):
|
||||
if reply.error() == QNetworkReply.NetworkError.NoError:
|
||||
resp = reply.readAll().data().decode("utf-8")
|
||||
print(f"Sample time {resp} s")
|
||||
logger.info(f"Sample time {resp} s")
|
||||
self.automated_scan_done.emit(sample_id, True)
|
||||
else:
|
||||
if reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute) == 401:
|
||||
print(reply.errorString())
|
||||
logger.Error(f"Error in auto scan: {reply.errorString()}")
|
||||
self.auth_error.emit()
|
||||
else:
|
||||
print(reply.errorString())
|
||||
logger.Error(f"Error in auto scan: {reply.errorString()}")
|
||||
self.http_error.emit(reply.errorString())
|
||||
self.automated_scan_done.emit(sample_id, False)
|
||||
reply.deleteLater()
|
||||
@@ -342,7 +358,7 @@ class DAQWorker(QObject):
|
||||
@Slot(SampleShortInfo)
|
||||
def automated_scan(self, s: SampleShortInfo):
|
||||
if self.__base_url is None:
|
||||
print(f"POST /scan/auto: {s.model_dump_json()}")
|
||||
logger.info(f"POST /scan/auto: {s.model_dump_json()}")
|
||||
return
|
||||
|
||||
request = QNetworkRequest(QUrl(f"{self.__base_url}/scan/auto"))
|
||||
@@ -355,7 +371,7 @@ class DAQWorker(QObject):
|
||||
@Slot(SimpleScanParameters)
|
||||
def smart_params(self, p: SimpleScanParameters):
|
||||
if self.__base_url is None:
|
||||
print(f"POST /scan/smart_params: {p.model_dump_json()}")
|
||||
logger.info(f"POST /scan/smart_params: {p.model_dump_json()}")
|
||||
return
|
||||
self.generic_post("scan/smart_params", p.model_dump_json())
|
||||
|
||||
@@ -410,13 +426,13 @@ class DAQWorker(QObject):
|
||||
parsed_response = RasterGridRequest.model_validate_json(response_data)
|
||||
self.raster_generated_by_ml.emit(parsed_response)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
logger.Error(f"Error in ml box: {e}")
|
||||
self.http_error.emit(str(e))
|
||||
|
||||
@Slot()
|
||||
def ml_bounding_box(self):
|
||||
if self.__base_url is None:
|
||||
print(f"POST /alc/ml_bounding_box")
|
||||
logger.info(f"POST /alc/ml_bounding_box")
|
||||
return
|
||||
|
||||
request = QNetworkRequest(QUrl(f"{self.__base_url}/alc/ml_bounding_box"))
|
||||
@@ -427,12 +443,14 @@ class DAQWorker(QObject):
|
||||
def _handle_face_detection_response(self, reply: QNetworkReply):
|
||||
try:
|
||||
if reply.error() != QNetworkReply.NetworkError.NoError:
|
||||
logger.Error(f"Error in face detection: {reply.errorString()}")
|
||||
raise RuntimeError(reply.errorString())
|
||||
payload = reply.readAll().data().decode("utf-8") or "{}"
|
||||
import json
|
||||
data = json.loads(payload)
|
||||
self.face_detection_result.emit(data)
|
||||
except Exception as e:
|
||||
logger.Error(f"Error in face detection: {e}")
|
||||
self.http_error.emit(str(e))
|
||||
finally:
|
||||
reply.deleteLater()
|
||||
@@ -440,12 +458,11 @@ class DAQWorker(QObject):
|
||||
@Slot()
|
||||
def face_detection(self, steps:int, step_size:int):
|
||||
if self.__base_url is None:
|
||||
print(f"POST /face_detection/run?steps={steps}&step_size={step_size}")
|
||||
logger.info(f"POST /face_detection/run?steps={steps}&step_size={step_size}")
|
||||
return
|
||||
request = QNetworkRequest(QUrl(f"{self.__base_url}/face_detection/run?steps={steps}&step_size={step_size}"))
|
||||
request.setRawHeader(b"Authorization", f"Bearer {self.__token}".encode("utf-8"))
|
||||
request.setRawHeader(b"Content-Type", b"application/json")
|
||||
# fire-and-forget; handle reply asynchronously and emit result
|
||||
reply = self.__net_manager.post(request, QByteArray(b""))
|
||||
reply.finished.connect(lambda: self._handle_face_detection_response(reply))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user