Added in-software logging, and increased logging verbosity.
This commit is contained in:
@@ -1005,13 +1005,13 @@ class CanvasScene(QtWidgets.QGraphicsScene):
|
||||
self.nodesDict[item.uid] = item
|
||||
self.addItem(item)
|
||||
item.setPos(QtCore.QPointF(x, y))
|
||||
self.parent().mainWindow.MESSAGEHANDLER.info('Added node: ' + str(item.uid))
|
||||
self.parent().mainWindow.MESSAGEHANDLER.info('Added node: ' + str(item.uid) + ' | ' + item.labelItem.text())
|
||||
|
||||
def addLinkToScene(self, link: Entity.BaseConnector) -> None:
|
||||
self.linksDict[link.startItem().uid + link.endItem().uid] = link
|
||||
self.addItem(link)
|
||||
self.parent().mainWindow.MESSAGEHANDLER.info('Added link: (' + link.startItem().uid + ", " +
|
||||
link.endItem().uid + ')')
|
||||
link.endItem().uid + ') | ' + link.labelItem.text())
|
||||
|
||||
def appendSelectedItemsToGroupToggle(self) -> None:
|
||||
if self.linking:
|
||||
@@ -1164,6 +1164,7 @@ class CanvasScene(QtWidgets.QGraphicsScene):
|
||||
self.addEntityLinkCreatorHelper(self.nodesDict[entity])
|
||||
|
||||
progress.setValue(steps)
|
||||
self.parent().mainWindow.MESSAGEHANDLER.info('Loaded canvas ' + self.getSelfName())
|
||||
|
||||
def updatePositionInDB(self, uid, x, y) -> None:
|
||||
"""
|
||||
@@ -1444,6 +1445,8 @@ class CanvasScene(QtWidgets.QGraphicsScene):
|
||||
|
||||
item.iconItem.setPos(item.pos())
|
||||
item.addToGroup(item.iconItem)
|
||||
primaryField = pEditor.objectJson[list(pEditor.objectJson)[1]]
|
||||
self.parent().messageHandler.info('Edited node: ' + pEditor.objectJson['uid'] + ' | ' + primaryField)
|
||||
|
||||
def editLinkProperties(self, linkUID: tuple) -> None:
|
||||
"""
|
||||
@@ -1460,6 +1463,8 @@ class CanvasScene(QtWidgets.QGraphicsScene):
|
||||
if pEditor.exec_():
|
||||
# Adding link with the same UID just overwrites properties.
|
||||
self.parent().entityDB.addLink(pEditor.objectJson)
|
||||
self.parent().messageHandler.info('Edited link: ' + str(pEditor.objectJson['uid']) + ' | ' +
|
||||
pEditor.objectJson['Resolution'])
|
||||
|
||||
# Because the entities on each canvas are stored in dicts, and dicts are ordered, group nodes will always
|
||||
# come after the nodes they contain.
|
||||
|
||||
@@ -4,7 +4,9 @@ from PySide6 import QtWidgets, QtCore, QtCharts, QtGui
|
||||
from Core.Interface import Stylesheets
|
||||
from datetime import datetime
|
||||
from getpass import getuser
|
||||
from time import sleep
|
||||
import networkx as nx
|
||||
import queue
|
||||
|
||||
|
||||
class DockBarThree(QtWidgets.QDockWidget):
|
||||
@@ -16,12 +18,17 @@ class DockBarThree(QtWidgets.QDockWidget):
|
||||
# self.setStyleSheet(Stylesheets.MAIN_WINDOW_STYLESHEET)
|
||||
childWidget = QtWidgets.QWidget()
|
||||
childWidget.setLayout(QtWidgets.QVBoxLayout())
|
||||
childWidget.setContentsMargins(0, 0, 0, 0)
|
||||
self.setWidget(childWidget)
|
||||
|
||||
childWidget2 = QtWidgets.QWidget()
|
||||
childWidget2.setContentsMargins(0, 0, 0, 0)
|
||||
childWidget2.setLayout(QtWidgets.QHBoxLayout())
|
||||
childWidget.layout().addWidget(childWidget2)
|
||||
childWidget2.layout().addWidget(self.timeWidget)
|
||||
childWidget2.layout().addWidget(self.tabPane)
|
||||
self.tabPane.setContentsMargins(0, 0, 0, 0)
|
||||
self.tabPane.addTab(self.logViewer, 'Program Log')
|
||||
self.tabPane.addTab(self.timeWidget, 'Timeline')
|
||||
childWidget2.layout().addWidget(self.chatBox)
|
||||
self.serverStatus.setStyleSheet(Stylesheets.DOCK_BAR_LABEL)
|
||||
childWidget.layout().addWidget(self.serverStatus)
|
||||
@@ -38,12 +45,22 @@ class DockBarThree(QtWidgets.QDockWidget):
|
||||
self.setMaximumHeight(275)
|
||||
self.setMinimumHeight(275)
|
||||
|
||||
self.tabPane = QtWidgets.QTabWidget()
|
||||
|
||||
self.serverStatus = ServerStatusBox(self)
|
||||
self.chatBox = ChatBox(self, self.parent())
|
||||
self.timeWidget = TimeWidget(self, self.parent())
|
||||
self.logViewer = QtWidgets.QPlainTextEdit()
|
||||
logViewerUpdateThread = LoggingUpdateThread(mainWindow.MESSAGEHANDLER)
|
||||
logViewerUpdateThread.loggingSignal.connect(self.updateLogs)
|
||||
logViewerUpdateThread.start()
|
||||
self.logViewer.setReadOnly(True)
|
||||
|
||||
self.initialiseLayout()
|
||||
|
||||
def updateLogs(self, newLogMessage: str):
|
||||
self.logViewer.appendPlainText(newLogMessage)
|
||||
|
||||
|
||||
class TimeWidget(QtWidgets.QWidget):
|
||||
|
||||
@@ -236,7 +253,7 @@ class TimeWidget(QtWidgets.QWidget):
|
||||
|
||||
yAxis = QtCharts.QValueAxis()
|
||||
yAxis.applyNiceNumbers()
|
||||
yAxis.setTickCount(min(maxEntityNum + 1, 5))
|
||||
yAxis.setTickCount(min(maxEntityNum + 1, 4))
|
||||
|
||||
xAxis = QtCharts.QBarCategoryAxis()
|
||||
xAxis.append(xAxisValues)
|
||||
@@ -502,3 +519,22 @@ class ChatBox(QtWidgets.QWidget):
|
||||
self.mainWindow.sendChatMessage(self.chatName + self.textSendBox.text())
|
||||
self.receiveMessage(self.chatName + self.textSendBox.text())
|
||||
self.textSendBox.setText("")
|
||||
|
||||
|
||||
class LoggingUpdateThread(QtCore.QThread):
|
||||
loggingSignal = QtCore.Signal(str)
|
||||
|
||||
def __init__(self, messageHandler):
|
||||
super().__init__()
|
||||
self.messageHandler = messageHandler
|
||||
|
||||
def run(self):
|
||||
while True:
|
||||
if not self.messageHandler.logQueue.empty():
|
||||
try:
|
||||
logMsg = self.messageHandler.logQueue.get().getMessage()
|
||||
self.loggingSignal.emit(logMsg)
|
||||
except queue.Empty:
|
||||
pass
|
||||
else:
|
||||
sleep(0.25)
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import logging
|
||||
from logging import handlers
|
||||
|
||||
from multiprocessing import Queue
|
||||
from pathlib import Path
|
||||
from PySide6 import QtWidgets
|
||||
|
||||
@@ -82,16 +84,21 @@ class MessageHandler:
|
||||
|
||||
def __init__(self, parentObject):
|
||||
self.mainWindow = parentObject
|
||||
self.logQueue = Queue()
|
||||
self.logFileHandler = logging.FileHandler(
|
||||
self.mainWindow.SETTINGS.value("Logging/Logfile", str(Path.home() / 'LinkScope_logfile.log')), 'a')
|
||||
self.logQueueHandler = handlers.QueueHandler(self.logQueue)
|
||||
self.logFormatter = logging.Formatter(
|
||||
'{' + self.mainWindow.SETTINGS.value("Project/Name", "Untitled") + '} [%(asctime)s] - %(levelname)s: %('
|
||||
'message)s')
|
||||
self.logFormatterQueue = logging.Formatter('[%(asctime)s] - %(levelname)s: %(message)s')
|
||||
self.logFileHandler.setFormatter(self.logFormatter)
|
||||
self.logQueueHandler.setFormatter(self.logFormatterQueue)
|
||||
rootLogger = logging.getLogger()
|
||||
for handler in rootLogger.handlers[:]:
|
||||
if isinstance(handler, logging.FileHandler):
|
||||
rootLogger.removeHandler(handler)
|
||||
rootLogger.addHandler(self.logFileHandler)
|
||||
rootLogger.addHandler(self.logQueueHandler)
|
||||
|
||||
self.setSeverityLevel(self.mainWindow.SETTINGS.value("Logging/Severity", logging.INFO))
|
||||
|
||||
@@ -904,6 +904,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
resolutionThread = ResolutionExecutorThread(
|
||||
resolution, resArgument, resolutionParameterValues, self, resolutionUID)
|
||||
resolutionThread.sig.connect(self.resolutionSignalListener)
|
||||
self.MESSAGEHANDLER.info('Running Resolution: ' + resolution)
|
||||
resolutionThread.start()
|
||||
self.resolutions.append((resolutionThread, category == 'Server Resolutions'))
|
||||
|
||||
@@ -1381,6 +1382,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.centralWidget().tabbedPane.createHomeTab()
|
||||
|
||||
self.setStatus("Ready")
|
||||
self.MESSAGEHANDLER.info('Project opened, ready to work.')
|
||||
|
||||
def __init__(self):
|
||||
super(MainWindow, self).__init__()
|
||||
|
||||
Reference in New Issue
Block a user