transceiver-db/sql/009-seed-switches.sql
Rene Fichtmueller 4b452ab49e feat(scrapers+mcp): ATGBICS + ProLabs scrapers, MCP HTTP/SSE server
Scrapers:
- atgbics.ts: PlaywrightCrawler for UK vendor ATGBICS (Shopify store),
  scrapes SFP/SFP+/SFP28/QSFP+/QSFP28/QSFP-DD in GBP, max 50 pages/run
- prolabs.ts: HttpCrawler for ProLabs (Legrand subsidiary), USD pricing,
  category-driven crawl with reach/fiber/speed detection
- Both registered in scheduler (every 8h, staggered) and index.ts CLI

MCP HTTP Server:
- packages/mcp-server/src/http-server.ts: Express + SSEServerTransport
- Exposes all 12 TIP tools via GET /sse + POST /message
- Bearer token auth (MCP_SECRET env), CORS-configurable
- GET /health → { status: "ok", tools: 12 }
- Port: MCP_HTTP_PORT (default 3201)

SQL + tools:
- sql/006-009: seed scripts for whitebox switches, vendors, assets
- switch-docs.ts: MCP tool for switch documentation queries
2026-03-29 02:26:45 +08:00

211 lines
13 KiB
SQL

-- TIP: Transceiver Intelligence Platform
-- Migration 009: Seed Switch Data
-- Major network switch models from Cisco, Arista, Juniper, Broadcom-based whitebox
-- First ensure vendors exist
INSERT INTO vendors (name, slug, type, headquarters, country, website)
VALUES
('Cisco Systems', 'cisco', 'manufacturer', 'San Jose, CA', 'US', 'https://www.cisco.com')
ON CONFLICT (slug) DO NOTHING;
INSERT INTO vendors (name, slug, type, headquarters, country, website)
VALUES
('Arista Networks', 'arista', 'manufacturer', 'Santa Clara, CA', 'US', 'https://www.arista.com')
ON CONFLICT (slug) DO NOTHING;
INSERT INTO vendors (name, slug, type, headquarters, country, website)
VALUES
('Juniper Networks', 'juniper', 'manufacturer', 'Sunnyvale, CA', 'US', 'https://www.juniper.net')
ON CONFLICT (slug) DO NOTHING;
INSERT INTO vendors (name, slug, type, headquarters, country, website)
VALUES
('Edgecore Networks', 'edgecore', 'manufacturer', 'Hsinchu', 'TW', 'https://www.edge-core.com')
ON CONFLICT (slug) DO NOTHING;
INSERT INTO vendors (name, slug, type, headquarters, country, website)
VALUES
('Celestica', 'celestica', 'manufacturer', 'Toronto', 'CA', 'https://www.celestica.com')
ON CONFLICT (slug) DO NOTHING;
INSERT INTO vendors (name, slug, type, headquarters, country, website)
VALUES
('NVIDIA Networking', 'nvidia-networking', 'manufacturer', 'Santa Clara, CA', 'US', 'https://www.nvidia.com/en-us/networking/')
ON CONFLICT (slug) DO NOTHING;
INSERT INTO vendors (name, slug, type, headquarters, country, website)
VALUES
('Dell Technologies', 'dell', 'manufacturer', 'Round Rock, TX', 'US', 'https://www.dell.com')
ON CONFLICT (slug) DO NOTHING;
INSERT INTO vendors (name, slug, type, headquarters, country, website)
VALUES
('HPE / Aruba', 'hpe-aruba', 'manufacturer', 'San Jose, CA', 'US', 'https://www.arubanetworks.com')
ON CONFLICT (slug) DO NOTHING;
INSERT INTO vendors (name, slug, type, headquarters, country, website)
VALUES
('Asterfusion', 'asterfusion', 'manufacturer', 'Beijing', 'CN', 'https://www.asterfusion.com')
ON CONFLICT (slug) DO NOTHING;
-- Cisco Nexus Data Center
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support)
SELECT v.id, 'N9K-C9364C', 'Nexus 9300', 'DataCenter', 'L3',
'{"100G_QSFP28": 64}'::jsonb, 64, 100, 12.8, 4760,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true
FROM vendors v WHERE v.slug = 'cisco';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support)
SELECT v.id, 'N9K-C93600CD-GX', 'Nexus 9300', 'DataCenter', 'L3',
'{"400G_QSFP-DD": 28, "100G_QSFP28": 8}'::jsonb, 36, 400, 12.8, 4760,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true
FROM vendors v WHERE v.slug = 'cisco';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support)
SELECT v.id, 'N9K-C9336C-FX2', 'Nexus 9300', 'DataCenter', 'L3',
'{"100G_QSFP28": 36}'::jsonb, 36, 100, 7.2, 2680,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true
FROM vendors v WHERE v.slug = 'cisco';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support)
SELECT v.id, 'N9K-C9332D-GX2B', 'Nexus 9300', 'DataCenter', 'L3',
'{"400G_QSFP-DD": 32}'::jsonb, 32, 400, 25.6, 9520,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true
FROM vendors v WHERE v.slug = 'cisco';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support, mpls_support)
SELECT v.id, 'N9K-C9508', 'Nexus 9500', 'Core', 'L3',
'{"400G_QSFP-DD": 576}'::jsonb, 576, 400, 230.4, 85000,
'Cisco', 'Cloud Scale', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'cisco';
-- Arista 7000 Series
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support, openconfig_support)
SELECT v.id, '7060X6-64PE', 'Arista 7060X', 'DataCenter', 'L3',
'{"800G_OSFP": 64}'::jsonb, 64, 800, 51.2, 19000,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'arista';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support, openconfig_support)
SELECT v.id, '7060X5-64', 'Arista 7060X', 'DataCenter', 'L3',
'{"400G_QSFP-DD": 64}'::jsonb, 64, 400, 51.2, 19000,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'arista';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support, openconfig_support)
SELECT v.id, '7050X4-32', 'Arista 7050X', 'DataCenter', 'L3',
'{"400G_QSFP-DD": 32}'::jsonb, 32, 400, 25.6, 9520,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'arista';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support, openconfig_support)
SELECT v.id, '7280R3-48YC6', 'Arista 7280R', 'SP', 'L3',
'{"100G_QSFP28": 6, "25G_SFP28": 48}'::jsonb, 54, 100, 6.4, 2380,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'arista';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support, openconfig_support)
SELECT v.id, '7800R3-36P-LC', 'Arista 7800R', 'Core', 'L3',
'{"400G_QSFP-DD": 36}'::jsonb, 36, 400, 28.8, 10700,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'arista';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support, openconfig_support)
SELECT v.id, '7020R', 'Arista 7020R', 'Campus', 'L3',
'{"1G_SFP": 48, "10G_SFP+": 6}'::jsonb, 54, 10, 0.176, 130,
'Broadcom', 'Memory Pipeline', 'Active', true, false, false, true
FROM vendors v WHERE v.slug = 'arista';
-- Juniper QFX Series
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support)
SELECT v.id, 'QFX5130-32CD', 'QFX5100', 'DataCenter', 'L3',
'{"400G_QSFP-DD": 32}'::jsonb, 32, 400, 25.6, 9520,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true
FROM vendors v WHERE v.slug = 'juniper';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support)
SELECT v.id, 'QFX5220-32CD', 'QFX5200', 'DataCenter', 'L3',
'{"400G_QSFP-DD": 32}'::jsonb, 32, 400, 25.6, 9520,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true
FROM vendors v WHERE v.slug = 'juniper';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support)
SELECT v.id, 'QFX5120-48Y', 'QFX5100', 'DataCenter', 'L3',
'{"25G_SFP28": 48, "100G_QSFP28": 8}'::jsonb, 56, 100, 4.0, 1488,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true
FROM vendors v WHERE v.slug = 'juniper';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support, mpls_support)
SELECT v.id, 'QFX10008', 'QFX10000', 'Core', 'L3',
'{"400G_QSFP-DD": 288}'::jsonb, 288, 400, 115.2, 42800,
'Juniper', 'ExpressPlus', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'juniper';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, lifecycle_status, bgp_support, vxlan_support, evpn_support)
SELECT v.id, 'EX4400-48T', 'EX4400', 'Campus', 'L3',
'{"1G_RJ45": 48, "10G_SFP+": 4, "25G_SFP28": 2}'::jsonb, 54, 25, 1.76, 654,
'Broadcom', 'Active', true, true, true
FROM vendors v WHERE v.slug = 'juniper';
-- NVIDIA / Mellanox Spectrum
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support, sonic_compatible)
SELECT v.id, 'SN5600', 'Spectrum-4', 'DataCenter', 'L3',
'{"800G_OSFP": 64}'::jsonb, 64, 800, 51.2, 19000,
'NVIDIA', 'Spectrum-4', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'nvidia-networking';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support, sonic_compatible)
SELECT v.id, 'SN4700', 'Spectrum-3', 'DataCenter', 'L3',
'{"400G_QSFP-DD": 32}'::jsonb, 32, 400, 12.8, 4760,
'NVIDIA', 'Spectrum-3', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'nvidia-networking';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, forwarding_rate_mpps, asic_vendor, asic_model, lifecycle_status, bgp_support, vxlan_support, evpn_support, sonic_compatible)
SELECT v.id, 'SN3700', 'Spectrum-2', 'DataCenter', 'L3',
'{"100G_QSFP28": 32}'::jsonb, 32, 100, 6.4, 2380,
'NVIDIA', 'Spectrum-2', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'nvidia-networking';
-- Edgecore Whitebox
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, asic_vendor, asic_model, lifecycle_status, sonic_compatible, is_whitebox, onie_support, bgp_support)
SELECT v.id, 'DCS810', 'AS9516-32D', 'DataCenter', 'L3',
'{"400G_QSFP-DD": 32}'::jsonb, 32, 400, 12.8,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'edgecore';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, asic_vendor, asic_model, lifecycle_status, sonic_compatible, is_whitebox, onie_support, bgp_support)
SELECT v.id, 'AS7726-32X', 'AS7726', 'DataCenter', 'L3',
'{"100G_QSFP28": 32}'::jsonb, 32, 100, 6.4,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'edgecore';
-- Celestica
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, asic_vendor, asic_model, lifecycle_status, sonic_compatible, is_whitebox, onie_support, bgp_support)
SELECT v.id, 'DS5000', 'Seastone', 'DataCenter', 'L3',
'{"800G_OSFP": 64}'::jsonb, 64, 800, 51.2,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'celestica';
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, asic_vendor, asic_model, lifecycle_status, sonic_compatible, is_whitebox, onie_support, bgp_support)
SELECT v.id, 'DS3000', 'Seastone', 'DataCenter', 'L3',
'{"400G_QSFP-DD": 32}'::jsonb, 32, 400, 12.8,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'celestica';
-- Asterfusion
INSERT INTO switches (vendor_id, model, series, category, layer, ports_config, total_ports, max_speed_gbps, switching_capacity_tbps, asic_vendor, asic_model, lifecycle_status, sonic_compatible, is_whitebox, onie_support, bgp_support)
SELECT v.id, 'CX864E-N', 'CX8000', 'DataCenter', 'L3',
'{"400G_QSFP-DD": 64}'::jsonb, 64, 400, 25.6,
'Broadcom', 'Memory Pipeline', 'Active', true, true, true, true
FROM vendors v WHERE v.slug = 'asterfusion';
-- Generate search vectors for switches
UPDATE switches SET search_vector = to_tsvector('english',
coalesce(model, '') || ' ' ||
coalesce(series, '') || ' ' ||
coalesce(category, '') || ' ' ||
coalesce(asic_vendor, '') || ' ' ||
coalesce(asic_model, '')
)
WHERE search_vector IS NULL;