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