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
90 lines
5.0 KiB
PL/PgSQL
90 lines
5.0 KiB
PL/PgSQL
-- TIP: Transceiver Intelligence Platform
|
|
-- Migration 006: Whitebox / Open Networking Switch Extensions
|
|
--
|
|
-- Adds columns for whitebox ODM/OEM switches, open networking OS support,
|
|
-- OCP compliance, and hardware details needed for disaggregated networking.
|
|
|
|
-- ============================================================
|
|
-- EXTEND switches TABLE with whitebox-specific columns
|
|
-- ============================================================
|
|
|
|
-- Whitebox classification
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS is_whitebox BOOLEAN DEFAULT FALSE;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS is_ocp_accepted BOOLEAN DEFAULT FALSE;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS ocp_status TEXT CHECK (ocp_status IN ('Accepted', 'Inspired', 'None', NULL));
|
|
|
|
-- Open Networking OS support
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS supported_nos TEXT[] DEFAULT '{}';
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS onl_compatible BOOLEAN DEFAULT FALSE;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS dent_compatible BOOLEAN DEFAULT FALSE;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS cumulus_compatible BOOLEAN DEFAULT FALSE;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS fboss_compatible BOOLEAN DEFAULT FALSE;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS stratum_compatible BOOLEAN DEFAULT FALSE;
|
|
|
|
-- Hardware details (important for whitebox — CPU/RAM/storage determine NOS capability)
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS cpu TEXT;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS cpu_cores INTEGER;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS ram_gb NUMERIC;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS storage_gb NUMERIC;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS storage_type TEXT;
|
|
|
|
-- ASIC generation tracking (extends existing asic_vendor/asic_model)
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS asic_series TEXT;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS asic_process_nm INTEGER;
|
|
|
|
-- Physical / form factor
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS front_panel_ports TEXT;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS mgmt_ports TEXT;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS console_ports TEXT;
|
|
|
|
-- Transceiver form factors supported (derived from ports_config, but explicit for search)
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS transceiver_form_factors TEXT[] DEFAULT '{}';
|
|
|
|
-- External references
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS catalog_url TEXT;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS sonic_hwsku TEXT;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS onie_support BOOLEAN DEFAULT FALSE;
|
|
|
|
-- Scraping metadata
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS last_scraped TIMESTAMPTZ;
|
|
ALTER TABLE switches ADD COLUMN IF NOT EXISTS scrape_source TEXT;
|
|
|
|
-- ============================================================
|
|
-- INDEXES for whitebox queries
|
|
-- ============================================================
|
|
CREATE INDEX IF NOT EXISTS idx_switches_is_whitebox ON switches (is_whitebox) WHERE is_whitebox = TRUE;
|
|
CREATE INDEX IF NOT EXISTS idx_switches_sonic ON switches (sonic_compatible) WHERE sonic_compatible = TRUE;
|
|
CREATE INDEX IF NOT EXISTS idx_switches_ocp ON switches (is_ocp_accepted) WHERE is_ocp_accepted = TRUE;
|
|
CREATE INDEX IF NOT EXISTS idx_switches_asic_series ON switches (asic_series);
|
|
CREATE INDEX IF NOT EXISTS idx_switches_supported_nos ON switches USING GIN (supported_nos);
|
|
CREATE INDEX IF NOT EXISTS idx_switches_transceiver_ff ON switches USING GIN (transceiver_form_factors);
|
|
|
|
-- ============================================================
|
|
-- UPDATE search vector trigger to include whitebox fields
|
|
-- ============================================================
|
|
CREATE OR REPLACE FUNCTION switches_search_vector_update() RETURNS trigger AS $$
|
|
BEGIN
|
|
NEW.search_vector :=
|
|
setweight(to_tsvector('english', COALESCE(NEW.model, '')), 'A') ||
|
|
setweight(to_tsvector('english', COALESCE(NEW.series, '')), 'A') ||
|
|
setweight(to_tsvector('english', COALESCE(NEW.category, '')), 'B') ||
|
|
setweight(to_tsvector('english', COALESCE(NEW.asic_vendor, '')), 'B') ||
|
|
setweight(to_tsvector('english', COALESCE(NEW.asic_model, '')), 'C') ||
|
|
setweight(to_tsvector('english', COALESCE(NEW.asic_series, '')), 'C') ||
|
|
setweight(to_tsvector('english', COALESCE(NEW.sonic_hwsku, '')), 'C') ||
|
|
setweight(to_tsvector('english', COALESCE(NEW.cpu, '')), 'D') ||
|
|
setweight(to_tsvector('english', COALESCE(array_to_string(NEW.supported_nos, ' '), '')), 'C') ||
|
|
setweight(to_tsvector('english', COALESCE(array_to_string(NEW.tags, ' '), '')), 'D');
|
|
NEW.updated_at := NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
-- ============================================================
|
|
-- EXTEND vendors TABLE for whitebox ODMs
|
|
-- ============================================================
|
|
ALTER TABLE vendors ADD COLUMN IF NOT EXISTS is_odm BOOLEAN DEFAULT FALSE;
|
|
ALTER TABLE vendors ADD COLUMN IF NOT EXISTS is_whitebox_vendor BOOLEAN DEFAULT FALSE;
|
|
ALTER TABLE vendors ADD COLUMN IF NOT EXISTS ocp_member BOOLEAN DEFAULT FALSE;
|
|
ALTER TABLE vendors ADD COLUMN IF NOT EXISTS sonic_contributor BOOLEAN DEFAULT FALSE;
|