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:
| Campo | Tipo | Notas |
|---|---|---|
slug | SlugField(50, unique) | Clave de lookup (cisco, xirrus) |
display_name | CharField(100) | Nombre visible |
aliases | ArrayField(CharField) | Para get_slug_for_vendor_name (OUI, “Inc.”) |
snmp_communities | ArrayField(CharField) | Communities vendor-específicas en discovery |
sys_descr_patterns | ArrayField(CharField) | Regex para detectar vendor en sysDescr |
sys_descr_model_regex | CharField(500) | Regex group 1 → modelo desde sysDescr |
sys_descr_version_regex | CharField(500) | Regex group 1 → versión OS |
sys_object_id_prefix | CharField(255) | Prefijo OID empresa (1.3.6.1.4.1.9 Cisco); lookup O(1) |
mib_modules | ArrayField(CharField) | MIBs para deep discovery |
deep_discovery_oids | JSONField | OIDs por categoría (hardware/cpu/memory/vlans) |
monitoring_oids | JSONField | OIDs para monitoreo continuo Sentinel |
fast_poll_oids | JSONField | OIDs ligeros fast-poll 15s |
http_server_patterns | ArrayField(CharField) | Patrones lowercase contra HTTP Server header |
http_body_patterns | ArrayField(CharField) | Patrones lowercase contra HTTP body |
http_product_lines | JSONField | keyword → product line |
http_firmware_regex | CharField(500) | Regex group 1 → firmware |
scrapli_platform | CharField(50, default="generic") | Plataforma Scrapli (cisco_ios…) |
ssh_show_version_cmd | CharField(200) | Comando show version |
ssh_show_interfaces_cmd | CharField(200) | Comando interfaces |
ssh_show_inventory_cmd | CharField(200) | Comando inventario |
ssh_model_regex | CharField(500) | Regex IGNORECASE group 1 → modelo |
ssh_version_regex | CharField(500) | Regex IGNORECASE group 1 → versión |
default_device_type | CharField(50, choices) | router/switch/firewall/access_point |
device_type_keywords | JSONField | tipo → lista de keywords para inferencia |
os_types | ArrayField(CharField) | OS conocidos (IOS, IOS-XE, NX-OS) |
priority | IntegerField | Orden detección; menor = primero (específicos ≈10, genéricos ≈50) |
is_active | BooleanField | Vendors inactivos se saltan |
notes | TextField | Notas internas |
Meta:
- Tabla:
vendor_profiles. - Orden:
["priority", "display_name"]. - Sin partición por organización (scope global).
Dependencias entrantes
| Archivo | Capa | Uso |
|---|---|---|
network/services/vendor_registry.py | Servicio/caché | Lee todos los activos; caché L1 in-process con regex pre-compilados + L2 Valkey TTL 1h |
network/apps.py | Signal | post_save/post_delete → vendor_registry.invalidate() |
network/api/vendor.py | API REST | CRUD completo + edición OIDs y MIBs |
network/services/device_discovery/auto_classifier.py | Discovery | Fallback a genérico si no hay match |
network/services/mib_assistant.py | IA | Propone OIDs tras confirmación usuario |
terminal/api/sentinel.py | Sentinel | Lee fast_poll_oids para configurar 15s por vendor |
network.models.CustomMib | Modelo | FK vendor_profile CASCADE |
Dependencias salientes
django.contrib.postgres.fields.ArrayField— requiere PostgreSQL.django.core.cache(Valkey) —vendor_registrypersiste payload TTL 1h.- Sin FKs salientes; modelo raíz.
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"
Related
entity--network--model--deviceprofile— consume VendorProfile vía registry en discovery.entity--network--model--custommib— FK a VendorProfile; extiende MIBs.concept--network--auto-provision— usa VendorProfile como lookup en cada fase del pipeline.
Véase también
- [[entity—network—model—deviceprofile]]
- [[entity—network—model—custommib]]
- [[concept—network—auto-provision]]