Skip to main content
Glama

NetBrain MCP

by NorthLaneMS
realtime_manager.cpython-312.pyc7.72 kB
� �a1h����dZddlZddlZddlZddlmZmZmZmZddl m Z ddl m Z ddl m Z ejd�ZGd�d e �ZGd �d �Ze�Zy) uN 实时更新管理器 负责WebSocket连接管理和数据变更事件广播 �N)�Dict�Set�Any�Optional)� WebSocket)�datetime)�Enum�realtime_managerc�L�eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZy)� EventTypeu事件类型枚举� device_added�device_updated�device_deleted�credential_added�credential_updated�credential_deleted�topology_updated�topology_cleared�topology_discovery_started�topology_discovery_completed� scan_started�scan_completed�scan_results_updated�scan_results_cleared�system_status_changedN)�__name__� __module__� __qualname__�__doc__� DEVICE_ADDED�DEVICE_UPDATED�DEVICE_DELETED�CREDENTIAL_ADDED�CREDENTIAL_UPDATED�CREDENTIAL_DELETED�TOPOLOGY_UPDATED�TOPOLOGY_CLEARED�TOPOLOGY_DISCOVERY_STARTED�TOPOLOGY_DISCOVERY_COMPLETED� SCAN_STARTED�SCAN_COMPLETED�SCAN_RESULTS_UPDATED�SCAN_RESULTS_CLEARED�SYSTEM_STATUS_CHANGED���"F:\NetBrainMCP\realtime_manager.pyr r sb���!�L�%�N�%�N�*��-��-��*��)��!=��#A� �"�L�%�N�1��1��4�r0r c ��eZdZdZd�Z ddededeee de fd�Z defd �Z ded e eefde fd �Z dd e d e eefd eeefd�Zdefd�Zde eeffd�Zy)�RealtimeUpdateManageru实时更新管理器c�J�i|_i|_tjd�y)Nu&🔄 实时更新管理器已初始化�� connections� subscriptions�logger�info��selfs r1�__init__zRealtimeUpdateManager.__init__/s��13���8:���� � �<�=r0N� websocket� connection_id� subscribe_to�returnc ��.K� |j��d{���||j|<|�tt�}||j|<t j d|�d|D�cgc]}|j��c}���|j|d||D�cgc]}|j��c}tj�j�d���d{���y7��cc}wcc}w7�#t$r%}t jd|�d|���Yd}~y d}~wwxYw�w) u5 添加新的WebSocket连接 Args: websocket: WebSocket连接对象 connection_id: 连接唯一标识符 subscribe_to: 要订阅的事件类型集合,默认订阅所有事件 Returns: bool: 连接是否成功 Nu✅ 新的实时更新连接: u, 订阅事件: �connection_established)�typer>�subscribed_events� timestampTu❌ WebSocket连接失败: u , 错误: F)�acceptr6�setr r7r8r9�value�send_to_connectionr�now� isoformat� Exception�error)r;r=r>r?�es r1�connectzRealtimeUpdateManager.connect7s ���� ��"�"�$� $� $�/8�D� � �]� +��#�"�9�~� �0<�D� � �}� -� �K�K�8���GW�jv�Xw�jv�ef�YZ�Y`�Y`�jv�Xw�Wx�y� z��)�)�-�0�!.�7C�%D�|�!�a�g�g�|�%D�%�\�\�^�5�5�7� :�� � ��+ %��Yx�� &E� ��� � �L�L�6�}�o�Z�PQ�s�S� T��� �si�D�C$�C�A C$�"C�5C$�C�#-C$�C"�C$�D�C$� C$�$ D�-D �D� D�Dc��||jvr |j|=||jvr |j|=tjd|���y)u断开WebSocket连接u🔌 WebSocket连接已断开: Nr5)r;r>s r1� disconnectz RealtimeUpdateManager.disconnect`sN�� �D�,�,� ,�� � ��/� �D�.�.� .��"�"�=�1�� � �5�m�_�E�Fr0�datac��.K�||jvry |j|}|jtj|d����d{���y7�#t$r6}t j d|�d|���|j|�Yd}~yd}~wwxYw�w)u� 向指定连接发送数据 Args: connection_id: 连接ID data: 要发送的数据 Returns: bool: 发送是否成功 F)� ensure_asciiNTu❌ 发送数据到连接 u 失败: )r6� send_text�json�dumpsrLr8rMrQ)r;r>rRr=rNs r1rIz(RealtimeUpdateManager.send_to_connectionis����� �� 0� 0� 0�� ��(�(��7�I��%�%�d�j�j��E�&J�K� K� K�� L��� � �L�L�5�m�_�I�a�S�Q� R� �O�O�M� *���  �s@�B�8A� A� A�B�A� B�,B �B� B�B� event_type�exclude_connectionsc���K�|� t�}d|j|tj�j �d�}d}g}|j j �D]B\}}||vr� ||vs�|j||��d{���} | r|dz }�2|j|��D|D]} |j| ��tjd|j�d|�d��y7�^�w) u� 广播事件到所有订阅的连接 Args: event_type: 事件类型 data: 事件数据 exclude_connections: 要排除的连接ID集合 N�realtime_event)rCrXrRrEr�u📡 广播事件 u 完成: u个连接接收成功) rGrHrrJrKr7�itemsrI�appendrQr8r9) r;rXrRrY� event_message�successful_sends�failed_connectionsr>rD�success� failed_ids r1�broadcast_eventz%RealtimeUpdateManager.broadcast_event�s����� � &�"%�%� �%�$�*�*��!����1�1�3�  � �����04�0B�0B�0H�0H�0J� ,�M�,�� 3�3���.�.� $� 7� 7� �}� U�U���$��)�$�&�-�-�m�<�1K�,�I� �O�O�I� &�,� � � �(��)9�)9�(:�)�DT�CU�Uj�k�l�V�s�A+C$�.C$�C"�AC$c�,�t|j�S)u获取当前连接数量)�lenr6r:s r1�get_connection_countz*RealtimeUpdateManager.get_connection_count�s���4�#�#�$�$r0c ��|jj�D���cic]"\}}|d|D�cgc]}|j��c}i��$c}}}Scc}wcc}}}w)u获取活跃连接信息rD)r7r]rH)r;r>�eventsrNs r1�get_active_connectionsz,RealtimeUpdateManager.get_active_connections�sh�� *.�);�);�)A�)A�)C�  �*D�%� �v� �#�v�%>�v�!�a�g�g�v�%>�� �*D�  � ��%>�� s�A�A �A� A)N)rrrrr<r�strrrr �boolrOrQrrrIrd�intrgrjr/r0r1r3r3,s����>�?C�'�y�'��'�#+�C� �N�#;�'�GK�'�RG��G��c���c�3�h���TX��2GK�*m� �*m��c�3�h��*m�19�#�c�(�1C�*m�X%�c�%� ��S�#�X�� r0r3)r�asynciorV�logging�typingrrrr�fastapirr�enumr � getLoggerr8r r3r r/r0r1�<module>rts[��� � ��+�+���� �� � �-� .��4��4�6L �L �^)�*�r0

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NorthLaneMS/NetBrain_MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server