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

Class InstrumentedServer

src/socketio/admin.py:35–397  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33
34
35class InstrumentedServer:
36 def __init__(self, sio, auth=None, mode='development', read_only=False,
37 server_id=None, namespace='/admin', server_stats_interval=2):
38 """Instrument the Socket.IO server for monitoring with the `Socket.IO
39 Admin UI <https://socket.io/docs/v4/admin-ui/>`_.
40 """
41 if auth is None:
42 raise ValueError('auth must be specified')
43 self.sio = sio
44 self.auth = auth
45 self.admin_namespace = namespace
46 self.read_only = read_only
47 self.server_id = server_id or (
48 self.sio.manager.host_id if hasattr(self.sio.manager, 'host_id')
49 else HOSTNAME
50 )
51 self.mode = mode
52 self.server_stats_interval = server_stats_interval
53 self.event_buffer = EventBuffer()
54
55 # task that emits "server_stats" every 2 seconds
56 self.stop_stats_event = None
57 self.stats_task = None
58
59 # monkey-patch the server to report metrics to the admin UI
60 self.instrument()
61
62 def instrument(self):
63 self.sio.on('connect', self.admin_connect,
64 namespace=self.admin_namespace)
65
66 if self.mode == 'development':
67 if not self.read_only: # pragma: no branch
68 self.sio.on('emit', self.admin_emit,
69 namespace=self.admin_namespace)
70 self.sio.on('join', self.admin_enter_room,
71 namespace=self.admin_namespace)
72 self.sio.on('leave', self.admin_leave_room,
73 namespace=self.admin_namespace)
74 self.sio.on('_disconnect', self.admin_disconnect,
75 namespace=self.admin_namespace)
76
77 # track socket connection times
78 self.sio.manager._timestamps = {}
79
80 # report socket.io connections, disconnections and received events
81 self.sio.__trigger_event = self.sio._trigger_event
82 self.sio._trigger_event = self._trigger_event
83
84 # report join rooms
85 self.sio.manager.__basic_enter_room = \
86 self.sio.manager.basic_enter_room
87 self.sio.manager.basic_enter_room = self._basic_enter_room
88
89 # report leave rooms
90 self.sio.manager.__basic_leave_room = \
91 self.sio.manager.basic_leave_room
92 self.sio.manager.basic_leave_room = self._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…