Files
pynamics/tests/pynamics-logger.py

75 lines
3.1 KiB
Python
Raw Normal View History

2026-04-10 16:41:10 +00:00
# Event codes:
#0: notify
2026-04-10 17:37:01 +00:00
#1: hfnotify
#2: prgm_start
#3: prgm_end
#4: prgm_crash
#5: snsr_data
#6: mtr_data
#7: perf_smpl
#8: get_time
#9: breakpoint
2026-04-10 17:36:07 +00:00
class PynamicsLogger:
def __init__(self):
self.verboseness = 7
self.lvldict = {
0: "FATAL",
1: "ALERT",
2: "CRIT",
3: "ERR",
4: "WARNING",
5: "NOTICE",
6: "INFO",
7: "DEBUG"
}
self.time = StopWatch()
self.time.pause()
2026-04-10 16:41:10 +00:00
2026-04-10 17:36:07 +00:00
def start():
self.time.reset()
self.time.resume()
2026-04-10 16:41:10 +00:00
2026-04-10 17:36:07 +00:00
def log(self, message, level, origin):
if level <= self.verboseness:
ms = self.time.time()
timestamp = "{:02d}:{:02d}.{:03d}".format(
(ms // 60000) % 60,
(ms // 1000) % 60,
ms % 1000
)
label = self.lvldict[level]
padding = " " * (7 - len(label))
print(f"[{timestamp}] [{label}]{padding} [{origin}] {message}")
2026-04-10 16:41:10 +00:00
2026-04-10 17:36:07 +00:00
def sendCommand(self, eventnum, level, msg, origin):
print(f"\x1b[?PYN;{str(eventnum)};{lvldict[level]};{msg}~")
def notify(level, msg, origin):
self.sendCommand(self, 0, level, msg, origin)
def notifyfatal(self, message, origin): notify(message, 0, origin)
def notifyalert(self, message, origin): notify(message, 1, origin)
def notifycrit(self, message, origin): notify(message, 2, origin)
def notifyerr(self, message, origin): notify(message, 3, origin)
def notifywarning(self, message, origin): notify(message, 4, origin)
def notifynotice(self, message, origin): notify(message, 5, origin)
def notifyinfo(self, message, origin): notify(message, 6, origin)
def notifydebug(self, message, origin): notify(message, 7, origin)
def notifycrash(self, message, origin):
2026-04-10 17:37:01 +00:00
sendCommand(4, 0, "uhhhh so the program kinda crashed sorry", origin)
2026-04-10 17:36:07 +00:00
raise FatalLoggerError("[FATAL] [{}] {}".format(origin, message))
def breakpoint(self, message, origin):
sendCommand(3, 8, "currently everything about the robot")
def testAll(self):
self.start()
notifyfatal("hey you should probably know that your RAM is corrupted and you cant replace it because of the shortage. byeeeee", "test prgm")
notifyalert(0, 1, "UNRECOVERABLE PYTHON ERROR!!!!! Exiting gracefully... JUST KIDDING WHAT DID YOU THINK IT WAS GONNA DO", "test prgm")
notifycrit(0, 2, "so the program is running but it just started looping on the motor frying bit of your program.", "test prgm")
notifyerr(0, 3, "syntax error, you failure!!!! use an error checker", "test prgm")
notifywarning(0, 4, "wanted to just say that your motor is kinda being slow", "test prgm")
notifynotice(0, 5, "so your motor is like 1% slower than it should be but really no one cares", "test prgm")
notifyinfo(0, 6, "hey everything in the program is going well just in case nothing in your life is", "test prgm")
notifydebug(0, 7, "nobody cares about me but you should know that", "test prgm")
if __name__ == "__main__":
pynlogger = PynamicsLogger()
pynlogger.testAll()