duplicati_log_server.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from http.server import BaseHTTPRequestHandler, HTTPServer
  2. from urllib.parse import parse_qs
  3. import json
  4. import logging
  5. from datetime import datetime
  6. # Configure logging
  7. logging.basicConfig(
  8. filename="duplicati_logs.log",
  9. level=logging.INFO,
  10. format="%(asctime)s - %(message)s",
  11. )
  12. class DuplicatiLogHandler(BaseHTTPRequestHandler):
  13. def do_POST(self):
  14. # Get the length of the data
  15. content_length = int(self.headers["Content-Length"])
  16. # Read the POST data
  17. post_data = self.rfile.read(content_length).decode("utf-8")
  18. # Parse the form-urlencoded data
  19. data = parse_qs(post_data)
  20. # Log the data
  21. self.log_data(data)
  22. # Send a response
  23. self.send_response(200)
  24. self.send_header("Content-type", "application/json")
  25. self.end_headers()
  26. response = {"status": "success", "message": "Log received"}
  27. self.wfile.write(json.dumps(response).encode("utf-8"))
  28. def log_data(self, data):
  29. """Log the received data to a file."""
  30. log_entry = {
  31. "timestamp": datetime.now().isoformat(),
  32. "data": data,
  33. }
  34. logging.info(json.dumps(log_entry))
  35. def run(server_class=HTTPServer, handler_class=DuplicatiLogHandler, port=8680):
  36. server_address = ("", port)
  37. httpd = server_class(server_address, handler_class)
  38. print(f"Starting Duplicati log server on port {port}...")
  39. httpd.serve_forever()
  40. if __name__ == "__main__":
  41. run()