mirror of https://github.com/probonopd/MiniDexed
NetworkSyslogEnabled and minor network related fixes (#876)
Add `NetworkSyslogEnabled=1` to `minidexed.ini`, increase vebosity, add `syslogserver.py`pull/871/head^2
parent
acf9e11d5f
commit
23a3730d50
@ -0,0 +1,57 @@ |
||||
#!/usr/bin/env python3 |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
Syslog server to receive and display syslog messages from MiniDexed. |
||||
""" |
||||
|
||||
import socket |
||||
import time |
||||
import threading |
||||
|
||||
class SyslogServer: |
||||
def __init__(self, host='0.0.0.0', port=8514): |
||||
self.host = host |
||||
self.port = port |
||||
self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
||||
self.server.bind((self.host, self.port)) |
||||
self.start_time = None |
||||
self.running = True |
||||
|
||||
def start(self): |
||||
ip_address = socket.gethostbyname(socket.gethostname()) |
||||
print(f"Syslog server listening on {ip_address}:{self.port}") |
||||
input_thread = threading.Thread(target=self.wait_for_input) |
||||
input_thread.daemon = True |
||||
input_thread.start() |
||||
while self.running: |
||||
try: |
||||
data, address = self.server.recvfrom(1024) |
||||
self.handle_message(data) |
||||
except KeyboardInterrupt: |
||||
self.running = False |
||||
|
||||
def handle_message(self, data): |
||||
message = data[2:].decode('utf-8').strip() |
||||
|
||||
if self.start_time is None: |
||||
self.start_time = time.time() |
||||
relative_time = "0:00:00.000" |
||||
else: |
||||
elapsed_time = time.time() - self.start_time |
||||
hours = int(elapsed_time // 3600) |
||||
minutes = int((elapsed_time % 3600) // 60) |
||||
seconds = int(elapsed_time % 60) |
||||
milliseconds = int((elapsed_time % 1) * 1000) |
||||
relative_time = f"{hours:02d}:{minutes:02d}:{seconds:02d}.{milliseconds:03d}" |
||||
|
||||
print(f"{relative_time} {message}") |
||||
|
||||
def wait_for_input(self): |
||||
input("Press any key to exit...") |
||||
self.running = False |
||||
|
||||
if __name__ == "__main__": |
||||
server = SyslogServer() |
||||
server.start() |
||||
print("Syslog server stopped.") |
Loading…
Reference in new issue