Skip to main content
Glama

NetBrain MCP

by NorthLaneMS
network_devices.cpython-312.pyc22.5 kB
� �(he@��p�ddlmZmZmZmZmZddlmZddlm Z m Z m Z ddl Z ddl Z ddlZddlZddlZddlmZGd�de j$�Ze j(e j*de j,ej.� �g� �e j0j2D]-Zeee j,�s�ej9ed���/e j:d �ZGd �d e�ZGd�de�Z Gd�de�Z!Gd�de�Z"Gd�d�Z#e Gd�d��Z$Gd�d�Z%e%�Z&y)�)�Dict�List�Optional�Any�Union)�Enum)� dataclass�field�asdictN)�datetimec�*��eZdZd�fd� Z�fd�Z�xZS)� JsonFormatterc�(��t�|�|||�y�N)�super�__init__)�self�fmt�datefmt�style� __class__s ��!F:\NetBrainMCP\network_devices.pyrzJsonFormatter.__init__ s��� ����g�u�-�c�f��t�|�|�}|jdd��jd�S)N�utf-8�replace)�errors)r�format�encode�decode)r�record� log_recordrs �rrzJsonFormatter.formats2����W�^�F�+� �� � ��� �;�B�B�7�K�Kr)NN�%)�__name__� __module__� __qualname__rr� __classcell__)rs@rrr s���.�L�Lrrz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)�stream)�levelr�handlers�network_devicesc�,�eZdZdZdZdZdZdZdZdZ dZ y ) � DeviceTypeu网络设备类型枚举�router�switch�firewall� load_balancer�wireless_controller� access_point�otherN) r$r%r&�__doc__�ROUTER�SWITCH�FIREWALL� LOAD_BALANCER�WIRELESS_CONTROLLER� ACCESS_POINT�OTHER�rrr-r-$s)��"� �F� �F��H�#�M�/��!�L� �Err-c�0�eZdZdZdZdZdZdZdZdZ dZ d Z y ) � DeviceVendoru网络设备厂商枚举�cisco�huawei�h3c�juniper�arista�fortinet� checkpointr4N) r$r%r&r5�CISCO�HUAWEI�H3C�JUNIPER�ARISTA�FORTINET� CHECKPOINTr<r=rrr?r?.s-��"� �E� �F� �C��G� �F��H��J� �Err?c�$�eZdZdZdZdZdZdZdZy)� DeviceStatusu设备状态枚举�online�offline� unreachable� maintenance�unknownN) r$r%r&r5�ONLINE�OFFLINE� UNREACHABLE� MAINTENANCE�UNKNOWNr=rrrOrO9s��� �F��G��K��K��GrrOc�(�eZdZdZdZdZdZdZdZdZ y) �ConnectionProtocolu连接协议枚举�ssh�telnet�snmp�http�https�netconfN) r$r%r&r5�SSH�TELNET�SNMP�HTTP�HTTPS�NETCONFr=rrr[r[As#��� �C� �F� �D� �D� �E��Grr[c��eZdZdZddddej dddfdededededed ed ed efd �Zd e ee ffd�Z d e ee ffd�Z e de ee fd dfd��Zy)�DeviceCredentialu设备凭据类N��id�name�username�password�protocol�port�enable_password� ssh_key_filec ���|xsttj��|_||_||_||_||_|xs|tjk(rdnd|_ ||_ ||_ y)N��) �str�uuid�uuid4rkrlrmrnror[rbrprqrr) rrkrlrmrnrorprqrrs rrzDeviceCredential.__init__Msc���)��D�J�J�L�)����� � �� � �� � �� ��N�8�/A�/E�/E�#E�R�2�� �.���(��r�returnc���|j|j|j|jj|j |j r|j d�Sdd�S)�转换为字典表示N)rkrlrmrorprr)rkrlrmro�valuerprr�rs r�to_dictzDeviceCredential.to_dict_sY���'�'��I�I�� � �� � �+�+��I�I�15�1B�1B�D�-�-�  � � IM�  � rc ���|j|j|j|jrdnd|jj |j |jrdnd|jr|jd�Sdd�S)uE转换为完整字典表示,包括敏感信息(仅用于调试)z********N�rkrlrmrnrorprqrr) rkrlrmrnror|rprqrrr}s r� to_full_dictzDeviceCredential.to_full_dictksq���'�'��I�I�� � �&*�m�m� ��� � �+�+��I�I�-1�-A�-A�z�t�15�1B�1B�D�-�-�  � �IM�  � r�datac ��|jdd�}|j�dk(rtjntj}||jd�|jdd�|jdd�|jdd�||jd�|jd �|jd �� �S) u从字典创建凭据ror\rkrlrjrmrnrprqrrr�)�get�lowerr[rbrc)�clsr�� protocol_strros r� from_dictzDeviceCredential.from_dictxs����x�x� �E�2� �-9�-?�-?�-A�U�-J�%�)�)�Pb�Pi�Pi����x�x��~����&�"�%��X�X�j�"�-��X�X�j�"�-�����&�!� �H�H�%6�7����.�1�  � r)r$r%r&r5r[rbrv�intrrrr~r�� classmethodr�r=rrririJs���� ��!#�!#�0B�0F�0F�!�(,�%)�)��)��)��)�� )� .� )� � )�#&�)� #�)�$  ��c�3�h��  �  �d�3��8�n�  �� �T�#�s�(�^� �0B� �� rric���eZdZUdZed���Zeed<dZeed<dZ eed<e jZ e ed<e jZe ed <dZeed <dZeed <dZeed <ej&Zeed <dZeed<dZeeed<dZeed<ee��Zeeed<dZeeed<eej<��Zeed<eej<��Z eed<ee!��Z"e#ee$fed<de#ee$ffd�Z%y)� NetworkDeviceu网络设备模型c�<�ttj��Sr)rvrwrxr=rr�<lambda>zNetworkDevice.<lambda>�s��C�� � � �,=r)�default_factoryrkrjrl� ip_address� device_type�vendor�platform�model� os_version�status�locationN� credential_id� description�tags� last_seen� created_at� updated_at�custom_attributesryc�l�id|j�d|j�d|j�d|jj�d|j j�d|j �d|j�d|j�d |jj�d |j�d |j�d |j�d |j�d|jr|jj�nd�d|j j��d|j"j��d|j$�S)r{rkrlr�r�r�r�r�r�r�r�r�r�r�r�Nr�r�r�)rkrlr�r�r|r�r�r�r�r�r�r�r�r�r�� isoformatr�r�r�r}s rr~zNetworkDevice.to_dict�sU�� � �$�'�'� � �D�I�I� � �$�/�/� � �4�+�+�1�1�  � �d�k�k�'�'�  � �� � �  � �T�Z�Z� � �$�/�/� � �d�k�k�'�'� � �� � � � �T�/�/� � �4�+�+� � �D�I�I� � �t�~�~����1�1�3�4� � �$�/�/�3�3�5� � �$�/�/�3�3�5�! �" ��!7�!7�# � r)&r$r%r&r5r rkrv�__annotations__rlr�r-r<r�r?r�r�r�r�rOrYr�r�r�rr��listr�rr�r �nowr�r��dictr�rrr~r=rrr�r��s ����$=�>�B��>��D�#�N��J���(�.�.�K��.�'�-�-�F�L�-��H�c���E�3�O��J���'�/�/�F�L�/��H�c��#'�M�8�C�=�'��K����D�1�D�$�s�)�1�$(�I�x��!�(� ����>�J��>� ����>�J��>�(-�d�(C��t�C��H�~�C� ��c�3�h�� rr�c ���eZdZdZd�Zd�Zd�Zdedefd�Z dede efd �Z dede efd �Z dede fd �Z dd e ede ede ede edeef d�Zdedefd�Zdede efd�Zdede fd�Zdeefd�Zy )� DeviceManageru9设备管理器,负责设备的创建、查询和管理c�v�i|_i|_d|_tjj |jd�|_tjj |jd�|_tj|jd��|j�tjd�y)Nr�z devices.jsonzcredentials.jsonT)�exist_oku设备管理器初始化完成) �devices� credentials�data_dir�os�path�join� devices_file�credentials_file�makedirs� load_data�logger�infor}s rrzDeviceManager.__init__�s|��13�� �8:����� ��G�G�L�L�����G��� "��� � �T�]�]�<N� O��� � � �D�M�M�D�1� ����� � �4�5rc ���i}|jj�D]\}}|j�||<�t|jdd��5}t j ||dd��ddd�i}|jj�D]o\}}|j|j|j|j|jj|j|j|j d�}|||<�qt|j"dd��5}t j ||dd��ddd�t$j'd |j(���y#1swY��xYw#1swY�8xYw) u'将设备和凭据数据保存到文件�wr��encodingF�)� ensure_ascii�indentNr�u数据已保存到: )r��itemsr~�openr��json�dumpr�rkrlrmrnror|rprqrrr�r�r�r�) r� devices_data� device_id�device�f�credentials_data�cred_id� credential� cred_dicts r� save_datazDeviceManager.save_data�sC��� �!%���!3�!3�!5� �I�v�&,�n�n�&6�L�� #�"6��$�#�#�S�7� ;�q� �I�I�l�A�E�!� D�<���#'�#3�#3�#9�#9�#;� �G�Z�!�m�m�"���&�/�/�&�/�/�&�/�/�5�5�"���#-�#=�#=� *� 7� 7� �I�)2� �W� %�$<��$�'�'��w� ?�1� �I�I�&���a� H�@� � � �*�4�=�=�/�:�;�-<� ;��&@� ?�s�E�E)�E&�)E2c � �tjj|j��r� t |jdd��5}t j |�}ddd�j�D�]\}}t|jdd��}t|jdd��}t|jdd ��}tj|jd tj�j���}tj|jd tj�j���} d} |jd �r$tj|jd ��} t!d)id |�d|jdd��d|jdd��d|�d|�d|jdd��d|jdd��d|jdd��d|�d|jdd��d|jd��d|jdd��d|jdg��d | �d |�d | �d|jdi���} | |j"|<��t$j'd|j�dt)|j"��d��tjj|j.��r; t |j.dd��5}t j |�} ddd� j�D]�\}}|jdd�}t1|�}t3||jdd�|jdd�|jd d�||jd!|t0j4k(rd"nd#�|jd$�|jd%��&�}||j6|<��t$j'd|j.�dt)|j6��d'��yy#1swY���xYw#t*$r#} t$j-d| ���Yd} ~ ���d} ~ wwxYw#1swY��KxYw#t*$r"} t$j-d(| ���Yd} ~ yd} ~ wwxYw)*u$从文件加载设备和凭据数据�rrr�Nr�r4r�r�rTr�r�r�rkrlrjr�r�r�r�r�r�r�r�r�u从 u 加载了 u 个设备u加载设备数据失败: ror\rmrnrprtrurqrrr�u 个凭据u加载凭据数据失败: r=)r�r��existsr�r�r��loadr�r-r�r?rOr � fromisoformatr�r�r�r�r�r��len� Exception�errorr�r[rirbr�)rr�r�r�� device_dictr�r�r�r�r�r�r��er�r�r�r�ror�s rr�zDeviceManager.load_data�s$�� �7�7�>�>�$�+�+� ,�) ?��$�+�+�S�7�C�q�#'�9�9�Q�<�L�D�/;�.@�.@�.B�*�I�{�",�[�_�_�]�G�-T�"U�K�)�+�/�/�(�G�*L�M�F�)�+�/�/�(�I�*N�O�F�"*�!7�!7� ��� �V^�Vb�Vb�Vd�Vn�Vn�Vp�8q�!r�J�!)�!7�!7� ��� �V^�Vb�Vb�Vd�Vn�Vn�Vp�8q�!r�J� $�I�"���{�3�$,�$:�$:�;�?�?�;�;W�$X� �+��$��(�_�_�V�R�8��$/�?�?�<��#D��%0� � &� � "-����R�!@� �*�o�o�g�r�:��$/�?�?�<��#D�� &��"-����R�!@��'2�o�o�o�&F��%0�O�O�M�2�$F��)�_�_�V�R�8��#,��$.�� $.�!�"+6�/�/�:M�r�*R�#�F�&/5�D�L�L��+�C/C�F� � �d�4�#4�#4�"5�[��T�\�\�AR�@S�S]�^�_� �7�7�>�>�$�/�/� 0� ?��$�/�/��w�G�1�'+�y�y��|�$�H�+;�*@�*@�*B�&�G�Y�#,�=�=��U�#C�L�1�,�?�H�"2�"�&�]�]�6�2�6�!*���z�2�!>�!*���z�2�!>�!)�&�]�]�6��EW�E[�E[�9[�2�ac�d�(1� � �6G�(H�%.�]�]�>�%B� "�J�1;�D�$�$�W�-�!+C�$� � �d�4�#8�#8�"9��S��IY�IY�EZ�D[�[e�f�g�/ 1�WD�C��N� ?�� � �9�!��=�>�>�� ?�� H�G��,� ?�� � �9�!��=�>�>�� ?�sa�P$�P�IP$�Q �4Q� D Q �P!�P$�$ Q�-Q � Q�Q�Q � R �)R�R r�ryc���||j|j<tjd|j�d|j �d��|j �|jS)u� 添加设备 Args: device: 网络设备对象 Returns: 设备ID u设备添加成功: � (�))r�rkr�r�rlr�r�)rr�s r� add_devicezDeviceManager.add_device0sQ��#)�� � �V�Y�Y��� � �*�6�;�;�-�r�&�:K�:K�9L�A�N�O� �����y�y�rr�c�8�|jj|�S)u� 获取设备 Args: device_id: 设备ID Returns: 设备对象或None )r�r�)rr�s r� get_devicezDeviceManager.get_device?s���|�|��� �*�*rc �t�|j|�}|stjd|���y|j�D]\}}t ||�s�t |||��!t j�|_tjd|j�d|j�d��|j�|S)u� 更新设备信息 Args: device_id: 设备ID kwargs: 要更新的属性 Returns: 更新后的设备对象或None u设备不存在: Nu设备更新成功: r�r�) r�r��warningr��hasattr�setattrr r�r�r�rlr�r�)rr��kwargsr��keyr|s r� update_devicezDeviceManager.update_deviceKs�������+��� �N�N�.�y�k�:� ;�� �,�,�.�J�C���v�s�#����U�+�)�%�L�L�N���� � �*�6�;�;�-�r�&�:K�:K�9L�A�N�O� ����� rc���||jvr]|j|}|j|=tjd|j�d|j�d��|j �yy)u� 删除设备 Args: device_id: 设备ID Returns: 是否删除成功 u设备删除成功: r�r�TF)r�r�r�rlr�r�)rr�r�s r� delete_devicezDeviceManager.delete_devicedsb�� �� � � $��\�\�)�,�F�� � �Y�'� �K�K�.�v�{�{�m�2�f�>O�>O�=P�PQ�R� S� �N�N� ��rNr�r�r��tagc�z�t|jj��}|r|D�cgc]}|j|k(s�|��}}|r|D�cgc]}|j|k(s�|��}}|r|D�cgc]}|j |k(s�|��}}|r|D�cgc]}||j vs�|��}}|Scc}wcc}wcc}wcc}w)u 列出设备,可按条件筛选 Args: vendor: 按厂商筛选 device_type: 按设备类型筛选 status: 按状态筛选 tag: 按标签筛选 Returns: 设备列表 )r�r��valuesr�r�r�r�)rr�r�r�r�r��ds r� list_deviceszDeviceManager.list_devicesvs���"�t�|�|�*�*�,�-�� �")�@�'�Q�Q�X�X��-?�q�'�G�@� �")�J�'�Q�Q�]�]�k�-I�q�'�G�J� �")�@�'�Q�Q�X�X��-?�q�'�G�@� �")�;�'�Q�S�A�F�F�]�q�'�G�;����A��K��A��<s.�B)�B)� B.� B.�,B3�B3� B8�!B8r�c ���||j|j<tjd|j�d|j �d|j j�d��|j�|jS)u� 添加凭据 Args: credential: 凭据对象 Returns: 凭据ID u凭据添加成功: r��@r�) r�rkr�r�rlrmror|r�)rr�s r�add_credentialzDeviceManager.add_credential�sj��+5�������'�� � �*�:�?�?�*;�2�j�>Q�>Q�=R�RS�T^�Tg�Tg�Tm�Tm�Sn�no�p�q� �����}�}�rr�c�8�|jj|�S)u� 获取凭据 Args: credential_id: 凭据ID Returns: 凭据对象或None )r�r�)rr�s r�get_credentialzDeviceManager.get_credential�s�����#�#�M�2�2rc��||jvrO|j|}|j|=tjd|j���|j �yy)u� 删除凭据 Args: credential_id: 凭据ID Returns: 是否删除成功 u凭据删除成功: TF)r�r�r�rlr�)rr�r�s r�delete_credentialzDeviceManager.delete_credential�sY�� �D�,�,� ,��)�)�-�8�J�� � ��/� �K�K�.�z���.?�@� A� �N�N� ��rc�H�t|jj��S)uW 列出所有凭据 Returns: 凭据列表 )r�r�r�r}s r�list_credentialszDeviceManager.list_credentials�s���D�$�$�+�+�-�.�.r)NNNN)r$r%r&r5rr�r�r�rvr�rr�r��boolr�r?r-rOrr�rir�r�r�r�r=rrr�r��s��C� 6�<�>I?�V �� �3� � +�C� +�H�]�,C� +��s���-�9P��2�s��t��&6:�8<�59�)-� �$�\�2��!)�*�!5��%�\�2��"�#�� �37�}�2E� �B �)9� �c� � 3�C� 3�H�=M�4N� 3��s��t��$/�$�'7�"8�/rr�)'�typingrrrrr�enumr� dataclassesr r r rw�logging�sysr�r�r � Formatterr� basicConfig�INFO� StreamHandler�stdout�rootr*�handler� isinstance� setFormatter� getLoggerr�r-r?rOr[rir�r��device_managerr=rr�<module>rs)��3�3��0�0� �� � � ��L�G�%�%�L����� �,�,� A�����S�Z�Z�0����|�|�$�$�G��'�7�0�0�1����]�+a�b�c�%� �� � �,� -����� �4� ��4�����= �= �~ �( �( � �( �TW/�W/�t��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