Skip to main content
Glama

NetBrain MCP

by NorthLaneMS
device_terminal.cpython-312.pyc12.3 kB
� ��)h�����ddlmZmZmZmZmZddlZddlZddlZddl m Z ddl m Z m Z m Z ddlmZmZej"d�ZGd�d�ZGd �d �Ze�Zy) �)�Dict�List�Optional�Any�TupleN)�datetime)�ScrapliConnector�connection_manager� CommandResult)� NetworkDevice�DeviceCredential�device_terminalc ��eZdZdZdedefd�Zdeee e ffd�Z dd�Z dd e d e dee ee e ffd �Zdd �Zdd �Zdee efddfd�Zdee effd�Zy)�TerminalSessionu*终端会话类,管理单个终端连接�device� credentialc���ttj��|_||_||_d|_d|_tj�|_ |j|_ t�|_ y)NF)�str�uuid�uuid4�idrr� connector� connectedr�now� start_time� last_activity�set�clients)�selfrrs �!F:\NetBrainMCP\device_terminal.py�__init__zTerminalSession.__init__sR���d�j�j�l�#����� �$���������"�,�,�.���!�_�_����u�� ��returnc��K� tj|j|j��d{���\}}|rKd|_tj |jj |jj �|_yd|fS7�X#t$r8}tjdt|����dt|�fcYd}~Sd}~wwxYw�w)u连接到设备NT)TNFu终端会话连接错误: ) r �connect_devicerrr� get_connectorrr� Exception�logger�errorr)r�successr)�es r �connectzTerminalSession.connects����� !�#5�#D�#D�T�[�[�RV�Ra�Ra�#b�b�N�G�U��!%���!3�!A�!A�$�+�+�.�.�RV�Ra�Ra�Rd�Rd�!e���!��%�<� � c�� � !� �L�L�5�c�!�f�X�>� ?��#�a�&�=� �� !�sQ�C�-B �B �AB �C�B � C� B � C �-C�C �C�C � CNc��LK�|jrO tj|jj|j j��d{���d|_yy7� #t $r+}tjdt|����Yd}~�:d}~wwxYw#d|_wxYw�w)u 断开连接Nu断开终端会话错误: F) rr �disconnect_devicerrrr'r(r)r)rr+s r � disconnectzTerminalSession.disconnect's����� �>�>� '�(�:�:�4�;�;�>�>�4�?�?�K]�K]�^�^�^�"'��� �^��� D�� � �9�#�a�&��B�C�C�� D��"'���sM� B$�AA!�A�A!� B$�A!�! B�*!B� B�B�B� B!�!B$�command�timeoutc��K�|jsy tj�|_t j |j j|jj||��d{���\}}||fS7� #t$r8}tjdt|����dt|�fcYd}~Sd}~wwxYw�w)u发送命令到设备)Nu会话未连接Nu发送命令错误: ) rrrrr � send_commandrrrr'r(r)r)rr0r1�resultr)r+s r r3zTerminalSession.send_command1s������~�~�*� �!)����D� �"4�"A�"A�� � ������"�"��� #��M�F�E� �5�=� � ��� � �L�L�/��A��x�8� 9���Q��<� �� �sG�B?�AA;�-A9�. A;�8B?�9A;�; B<�-B7�1B<�2B?�7B<�<B?c�:�|jj|�y)u添加WebSocket客户端N)r�add�r� websockets r � add_clientzTerminalSession.add_clientCs�� � � ����#r"c�X�||jvr|jj|�yy)u移除WebSocket客户端N)r�remover7s r � remove_clientzTerminalSession.remove_clientGs%�� �� � � $� �L�L� � � � *� %r"�messagec���K�t�}|jD]} |j|��d{����|D]}|j |��y7�#t$r|j |�Y�VwxYw�w)u向所有客户端广播消息N)rr� send_jsonr'r6r<)rr=�disconnected_clients�clients r � broadcastzTerminalSession.broadcastLsp����"�u���l�l�F� 1��&�&�w�/�/�/�#�+�F� � � �v� &�+� 0��� 1�$�(�(��0� 1�s7�A3�A�A�A�A3�A�A0�-A3�/A0�0A3c �h�|j|jj|jj|jj|jj|j |j j�|jj�t|j�d� S)u转换为字典表示) r� device_id� device_name� ip_address� credential_idrrr� client_count) rr�namerFrrr� isoformatr�lenr�rs r �to_dictzTerminalSession.to_dictYs|���'�'�������;�;�+�+��+�+�0�0�!�_�_�/�/�����/�/�3�3�5�!�/�/�9�9�;��� � �-�  � r"�r#N)�)�__name__� __module__� __qualname__�__doc__r r r!r�boolrrr,r/�intr r3r9r<rrrBrM�r"r rr s���4��}��:J�� !�u�T�8�C�=�%8�9� !�'� �#� �� �U�8�Ta�Kb�dl�mp�dq�Kq�Er� �$$�+� '�t�C��H�~� '�$� '�  ��c�3�h��  r"rc ��eZdZdZd�Zdd�Zdd�Zdedede e e e e ffd �Z d e de fd �Zd e de efd �Zdeee effd �Zdd�Zy)�TerminalManageru?终端会话管理器,负责创建和管理所有终端会话c�.�i|_d|_d|_y)Ni)�sessions�inactivity_timeout� _cleanup_taskrLs r r!zTerminalManager.__init__js��46�� �"&���!��r"r#Nc�n�|j�)tj|j��|_yy)u0启动终端管理器,包括定期清理任务N)r\�asyncio� create_task�_cleanup_inactive_sessionsrLs r �startzTerminalManager.startos/�� � � � %�!(�!4�!4�T�5T�5T�5V�!W�D� � &r"c��LK�|jr6|jj� |j�d{���d|_t |j j ��D]}|j|��d{����y7�M#tj$rY�`wxYw7�"�w)u停止终端管理器N)r\�cancelr^�CancelledError�listrZ�keys� close_session�r� session_ids r �stopzTerminalManager.stopts����� � � � � � � %� %� '� ��(�(�(�(�"&�D� ��t�}�}�1�1�3�4�J��$�$�Z�0� 0� 0�5� )���)�)� �� �� 1�sD�'B$�B �B�B �AB$�?B"�B$�B � B�B$�B�B$rrc ���K� t||�}|j��d{���\}}|rd||j|j<tj d|j�d|j �d|j�d��|jdfSdd|��fS7�t#t$r8}tjdt|����dt|�fcYd}~Sd}~wwxYw�w)uq 创建新的终端会话 Returns: Tuple[session_id, error_message] Nu创建终端会话: z - z (�)u连接失败: u创建会话错误: ) rr,rZrr(�inforIrFr'r)r)rrr�sessionr*r)r+s r �create_sessionzTerminalManager.create_session�s����� �%�f�j�9�G�#*�?�?�#4�4�N�G�U��,3�� � �g�j�j�)�� � �2�7�:�:�,�c�&�+�+��b�QW�Qb�Qb�Pc�cd�e�f��z�z�4�'�'��>�%��1�1� 1� 5��� � �L�L�/��A��x�8� 9���Q��<� �� �sQ�C�B�B�A,B�C�B�C�B� C�#-C�C�C�C�Cric��tK�|jj|�}|sy |jdddd���d{���|j��d{���|j|=tj d|���y7�B7�,#t $r+}tjdt|����Yd}~yd}~wwxYw�w) u关闭终端会话F�statusu会话已关闭)�typerr=Nu关闭终端会话: Tu关闭会话错误: ) rZ�getrBr/r(rmr'r)r)rrirnr+s r rgzTerminalManager.close_session�s������-�-�#�#�J�/���� ��#�#� �"�,�%�� � ��$�$�&� &� &�� � �j�)� �K�K�.�z�l�;� <�� �� '�� � � �L�L�/��A��x�8� 9��� �sP�B8�B�A=�B�A?�)B�<B8�=B�?B� B5� !B0�+B8�0B5�5B8c�8�|jj|�S)u获取终端会话)rZrsrhs r � get_sessionzTerminalManager.get_session�s���}�}� � ��,�,r"c�x�|jj�D�cgc]}|j���c}Scc}w)u列出所有终端会话)rZ�valuesrM)rrns r � list_sessionszTerminalManager.list_sessions�s0��15���1E�1E�1G�H�1G�g����!�1G�H�H��Hs�7c��zK� tjd��d{���tj�}t |j j ��D]�}|j j|�}|s�!||jz j�}||jkDs�N|jr�[tjd|�d|�d��|j|��d{�������7��7� #tj$rYyt $r+}tj#dt%|����Yd}~yd}~wwxYw�w)u清理不活跃的会话�<Nu会话 u 已u秒无活动,自动关闭u清理不活跃会话错误: )r^�sleeprrrerZrfrsr� total_secondsr[rr(rmrgrdr'r)r)rrrirn�inactive_secondsr+s r r`z*TerminalManager._cleanup_inactive_sessions�s���� C���m�m�B�'�'�'��l�l�n��"&�t�}�}�'9�'9�';�"<�J�"�m�m�/�/� �;�G�"� �),�g�.C�.C�(C�'R�'R�'T�$�(�$�*A�*A�A�'�/�/�� � �g�j�\��>N�=O�Oj�$k�l�"�0�0��<�<�<�#=� �'��=���%�%� � �� C� �L�L�8��Q���A� B� B�� C�s]�D;�C0�C,�BC0�' C0�40C0�$C.�%C0�.C0�0D8�D;�D8� !D3�.D;�3D8�8D;rN)rPrQrRrSr!rarjr r rrrrorTrgrrurrrrxr`rVr"r rXrXgs���I�"� X� 1� �"/� �&6� �;@��#��PX�Y\�P]�A]�;^� �,�c��d��2-�c�-�h��.G�-�I�t�D��c��N�3�I�Cr"rX)�typingrrrrrr^�loggingrr�device_connectorr r r �network_devicesr r � getLoggerr(rrX�terminal_managerrVr"r �<module>r�s\��3�3��� ��P�P�;� �� � �,� -��X �X �thC�hC�V#�$�r"

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