mirror of https://github.com/Desuuuu/klipper.git
webhooks: log client requests on shutdown
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
23bb6fa1f3
commit
c64ea474d7
|
@ -3,9 +3,11 @@
|
|||
# Copyright (C) 2020 Eric Callahan <arksine.code@gmail.com>
|
||||
#
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license
|
||||
import logging, socket, os, sys, errno, json
|
||||
import logging, socket, os, sys, errno, json, collections
|
||||
import gcode
|
||||
|
||||
REQUEST_LOG_SIZE = 20
|
||||
|
||||
# Json decodes strings as unicode types in Python 2.x. This doesn't
|
||||
# play well with some parts of Klipper (particuarly displays), so we
|
||||
# need to create an object hook. This solution borrowed from:
|
||||
|
@ -119,6 +121,8 @@ class ServerSocket:
|
|||
self.sock.fileno(), self._handle_accept)
|
||||
printer.register_event_handler(
|
||||
'klippy:disconnect', self._handle_disconnect)
|
||||
printer.register_event_handler(
|
||||
"klippy:shutdown", self._handle_shutdown)
|
||||
|
||||
def _handle_accept(self, eventtime):
|
||||
try:
|
||||
|
@ -139,6 +143,10 @@ class ServerSocket:
|
|||
except socket.error:
|
||||
pass
|
||||
|
||||
def _handle_shutdown(self):
|
||||
for client in self.clients.values():
|
||||
client.dump_request_log()
|
||||
|
||||
def _remove_socket_file(self, file_path):
|
||||
try:
|
||||
os.remove(file_path)
|
||||
|
@ -165,6 +173,15 @@ class ClientConnection:
|
|||
self.partial_data = self.send_buffer = ""
|
||||
self.is_sending_data = False
|
||||
self.set_client_info("?", "New connection")
|
||||
self.request_log = collections.deque([], REQUEST_LOG_SIZE)
|
||||
|
||||
def dump_request_log(self):
|
||||
out = []
|
||||
out.append("Dumping %d requests for client %d"
|
||||
% (len(self.request_log), self.uid,))
|
||||
for eventtime, request in self.request_log:
|
||||
out.append("Received %f: %s" % (eventtime, request))
|
||||
logging.info("\n".join(out))
|
||||
|
||||
def set_client_info(self, client_info, state_msg=None):
|
||||
if state_msg is None:
|
||||
|
@ -210,6 +227,7 @@ class ClientConnection:
|
|||
requests[0] = self.partial_data + requests[0]
|
||||
self.partial_data = requests.pop()
|
||||
for req in requests:
|
||||
self.request_log.append((eventtime, req))
|
||||
try:
|
||||
web_request = WebRequest(self, req)
|
||||
except Exception:
|
||||
|
|
Loading…
Reference in New Issue