MCPcopy Create free account
hub / github.com/miguelgrinberg/python-socketio / InstrumentedAsyncServer

Class InstrumentedAsyncServer

src/socketio/async_admin.py:16–388  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14
15
16class InstrumentedAsyncServer:
17 def __init__(self, sio, auth=None, namespace='/admin', read_only=False,
18 server_id=None, mode='development', server_stats_interval=2):
19 """Instrument the Socket.IO server for monitoring with the `Socket.IO
20 Admin UI <https://socket.io/docs/v4/admin-ui/>`_.
21 """
22 if auth is None:
23 raise ValueError('auth must be specified')
24 self.sio = sio
25 self.auth = auth
26 self.admin_namespace = namespace
27 self.read_only = read_only
28 self.server_id = server_id or (
29 self.sio.manager.host_id if hasattr(self.sio.manager, 'host_id')
30 else HOSTNAME
31 )
32 self.mode = mode
33 self.server_stats_interval = server_stats_interval
34 self.admin_queue = []
35 self.event_buffer = EventBuffer()
36
37 # task that emits "server_stats" every 2 seconds
38 self.stop_stats_event = None
39 self.stats_task = None
40
41 # monkey-patch the server to report metrics to the admin UI
42 self.instrument()
43
44 def instrument(self):
45 self.sio.on('connect', self.admin_connect,
46 namespace=self.admin_namespace)
47
48 if self.mode == 'development':
49 if not self.read_only: # pragma: no branch
50 self.sio.on('emit', self.admin_emit,
51 namespace=self.admin_namespace)
52 self.sio.on('join', self.admin_enter_room,
53 namespace=self.admin_namespace)
54 self.sio.on('leave', self.admin_leave_room,
55 namespace=self.admin_namespace)
56 self.sio.on('_disconnect', self.admin_disconnect,
57 namespace=self.admin_namespace)
58
59 # track socket connection times
60 self.sio.manager._timestamps = {}
61
62 # report socket.io connections, disconnections and received events
63 self.sio.__trigger_event = self.sio._trigger_event
64 self.sio._trigger_event = self._trigger_event
65
66 # report join rooms
67 self.sio.manager.__basic_enter_room = \
68 self.sio.manager.basic_enter_room
69 self.sio.manager.basic_enter_room = self._basic_enter_room
70
71 # report leave rooms
72 self.sio.manager.__basic_leave_room = \
73 self.sio.manager.basic_leave_room

Callers 1

instrumentMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…