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