Volver a la wiki

VendorProfile · Modelo network

VendorProfile · Modelo network

Propósito

VendorProfile es la fuente única de verdad multi-vendor. Almacena, por cada fabricante de red, el conjunto completo de señales de detección (OIDs SNMP, patrones sysDescr, fingerprinting HTTP), comandos SSH, MIBs requeridas y OIDs de monitoreo continuo/fast-poll. Scope global (no por organización): un único registro Cisco, Juniper, Cambium, etc. compartido por todas las organizaciones. Añadir soporte para un vendor nuevo NO requiere tocar código — basta crear/editar un VendorProfile vía admin o API.

Contrato

Campos:

CampoTipoNotas
slugSlugField(50, unique)Clave de lookup (cisco, xirrus)
display_nameCharField(100)Nombre visible
aliasesArrayField(CharField)Para get_slug_for_vendor_name (OUI, “Inc.”)
snmp_communitiesArrayField(CharField)Communities vendor-específicas en discovery
sys_descr_patternsArrayField(CharField)Regex para detectar vendor en sysDescr
sys_descr_model_regexCharField(500)Regex group 1 → modelo desde sysDescr
sys_descr_version_regexCharField(500)Regex group 1 → versión OS
sys_object_id_prefixCharField(255)Prefijo OID empresa (1.3.6.1.4.1.9 Cisco); lookup O(1)
mib_modulesArrayField(CharField)MIBs para deep discovery
deep_discovery_oidsJSONFieldOIDs por categoría (hardware/cpu/memory/vlans)
monitoring_oidsJSONFieldOIDs para monitoreo continuo Sentinel
fast_poll_oidsJSONFieldOIDs ligeros fast-poll 15s
http_server_patternsArrayField(CharField)Patrones lowercase contra HTTP Server header
http_body_patternsArrayField(CharField)Patrones lowercase contra HTTP body
http_product_linesJSONFieldkeyword → product line
http_firmware_regexCharField(500)Regex group 1 → firmware
scrapli_platformCharField(50, default="generic")Plataforma Scrapli (cisco_ios…)
ssh_show_version_cmdCharField(200)Comando show version
ssh_show_interfaces_cmdCharField(200)Comando interfaces
ssh_show_inventory_cmdCharField(200)Comando inventario
ssh_model_regexCharField(500)Regex IGNORECASE group 1 → modelo
ssh_version_regexCharField(500)Regex IGNORECASE group 1 → versión
default_device_typeCharField(50, choices)router/switch/firewall/access_point
device_type_keywordsJSONFieldtipo → lista de keywords para inferencia
os_typesArrayField(CharField)OS conocidos (IOS, IOS-XE, NX-OS)
priorityIntegerFieldOrden detección; menor = primero (específicos ≈10, genéricos ≈50)
is_activeBooleanFieldVendors inactivos se saltan
notesTextFieldNotas internas

Meta:

Dependencias entrantes

ArchivoCapaUso
network/services/vendor_registry.pyServicio/cachéLee todos los activos; caché L1 in-process con regex pre-compilados + L2 Valkey TTL 1h
network/apps.pySignalpost_save/post_delete → vendor_registry.invalidate()
network/api/vendor.pyAPI RESTCRUD completo + edición OIDs y MIBs
network/services/device_discovery/auto_classifier.pyDiscoveryFallback a genérico si no hay match
network/services/mib_assistant.pyIAPropone OIDs tras confirmación usuario
terminal/api/sentinel.pySentinelLee fast_poll_oids para configurar 15s por vendor
network.models.CustomMibModeloFK vendor_profile CASCADE

Dependencias salientes

Ejemplos

# Detección desde sysObjectID (O(1))
vendor = vendor_registry.detect_vendor_from_sys_object_id("1.3.6.1.4.1.9.1.1208")
# → {"slug": "cisco", "scrapli_platform": "cisco_ios", ...}

# Detección desde sysDescr (regex ordenados por priority)
vendor = vendor_registry.detect_vendor_from_sys_descr("Cisco IOS Software, Version 15.6")

# OIDs fast-poll 15s
oids = vendor_registry.get_fast_poll_oids("xirrus")
# → {"connected_clients": {"oid": "1.3.6.1.4.1...", "type": "gauge"}}

# OUI a slug
slug = vendor_registry.get_slug_for_vendor_name("Cambium Networks Limited")
# → "cambium"

Véase también

Subir