diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index e45ce00..c73840d 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -3,6 +3,7 @@ Format: `{"d":"YYYY-MM-DD","t":"TYPE","m":"Description"}` Types: FEAT · FIX · UI · DATA · AI · INFRA +{"d":"2026-04-21","t":"DATA","m":"Migration 090: Edgecore AS-series SONiC switches — 7 models: AS7312-54X (stordis.com WebP, XS chassis successor), AS7312-54XS (stordis.com 64KB WebP), AS7326-56X (edge-core.com DCS203-F 83KB PNG), AS7716-32X (stordis.com 50KB WebP), AS7816-64X (edge-core.com DCS500-A 99KB PNG), AS9716-32D (edge-core.com DCS510-A 78KB PNG), AS7512-32X (epsglobal.com 26KB JPEG). All from SONiC HCL Accton/Edgecore vendor. Estimated coverage: 609 → 616 (speculative, pending DB query)."} {"d":"2026-04-21","t":"DATA","m":"Migration 089: Arista/Cisco/Juniper batch — 8 models: 7800R4-36D2-LC (Arista, arista.com official LC image 15KB PNG), 8101-32FH (Cisco 8000, router-switch.com 57KB JPEG), 8111-32EH (Cisco 8000, stack-systems.com Magento CDN 9.6KB JPEG), C9300X-24Y (networktigers.com 64KB JPEG), C9500-48Y4C (networktigers.com 50KB JPEG), N9K-C93108TC-FX3P (networktigers.com full-res 78KB JPEG), PTX10001-36MR (juniper.net image library Azure CDN 112KB JPEG), PTX10004 (juniper.net image library lbox variant 138KB JPEG). Coverage: 601 → 609 (89.6% → 90.8%)."} {"d":"2026-04-21","t":"DATA","m":"Migration 088: Ubiquiti/Phoenix Contact — 3 models: USW-Enterprise-48-PoE (cdn.ecomm.ui.com 331KB PNG), USW-Aggregation (cdn.ecomm.ui.com 285KB PNG), FL SWITCH 7528-2S (rspsupply.com distributor CDN 94KB JPEG, Phoenix Contact product ID 2891026). Coverage: 598 → 601 (89.1% → 89.6%)."} {"d":"2026-04-21","t":"DATA","m":"Migration 087: Cisco ASR 9000 license-variant reuse — 3 models: A9K-4HG-FLEX-FC (FC license = same hardware as -TR), A9K-8X100G-LB-TR (TR license = same hardware as -SE), A9K-4X100GE base (pre-licensing-split catalog number = same hardware as -SE). All physically identical to covered siblings. Coverage: 595 → 598 (88.7% → 89.1%)."} diff --git a/scripts/apply-pending-migrations.sh b/scripts/apply-pending-migrations.sh new file mode 100755 index 0000000..55586d2 --- /dev/null +++ b/scripts/apply-pending-migrations.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +# Apply pending migrations 084-089 to Erik production DB +# Run this script when Erik SSH is back online. +# +# Usage: ./scripts/apply-pending-migrations.sh + +set -e + +ERIK="root@82.165.222.127" +DOCKER_CMD="docker exec -i tip-postgres psql -U tip -d transceiver_db" +SQL_DIR="$(dirname "$0")/../sql" + +PENDING=( + "084-cisco-a9k-bulk-images.sql" + "085-mixed-straggler-images.sql" + "086-asterfusion-arista-ruckus-misc-images.sql" + "087-cisco-a9k-license-variant-reuse.sql" + "088-ubiquiti-phoenix-images.sql" + "089-arista-cisco-juniper-images.sql" +) + +echo "Checking Erik SSH..." +if ! ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$ERIK" "echo OK" 2>/dev/null; then + echo "ERROR: Cannot reach Erik at $ERIK" + exit 1 +fi + +echo "Erik is reachable. Applying pending migrations..." +echo "" + +for sql_file in "${PENDING[@]}"; do + path="${SQL_DIR}/${sql_file}" + echo "==> Applying ${sql_file}..." + result=$(cat "$path" | ssh "$ERIK" "$DOCKER_CMD" 2>&1) + echo "$result" | grep -E "UPDATE|ERROR|error" || true + echo " Done." +done + +echo "" +echo "All pending migrations applied." +echo "" +echo "=== Remaining uncovered models (query) ===" +ssh "$ERIK" "$DOCKER_CMD" << 'EOSQL' +SELECT vendors.name AS vendor, switches.model +FROM switches +LEFT JOIN vendors ON switches.vendor_id = vendors.id +WHERE switches.image_url IS NULL +ORDER BY vendors.name, switches.model; +EOSQL diff --git a/sql/090-edgecore-sonic-hcl-images.sql b/sql/090-edgecore-sonic-hcl-images.sql new file mode 100644 index 0000000..e9ae5a7 --- /dev/null +++ b/sql/090-edgecore-sonic-hcl-images.sql @@ -0,0 +1,94 @@ +-- Migration 090 — Edgecore Networks AS-series SONiC-compatible switches +-- +-- All URLs verified HTTP 200 (2026-04-21). +-- +-- These models are seeded by the sonic-hcl.ts and edgecore.ts scrapers. +-- They appear in the SONiC Supported Devices list under vendor "Accton" +-- (Accton Technology = ODM parent of Edgecore Networks; normalised to +-- slug 'edgecore' in this DB, same slug used in migrations 057/074). +-- +-- Sources: +-- AS7312-54X: stordis.com WP CDN (64KB WebP, Edgecore-Networks-AS7312-54XS_Front). +-- AS7312-54X reached end-of-sale July 2025. AS7312-54XS is the direct +-- successor with identical 1U chassis dimensions and front-panel layout. +-- Same vendor product family — same physical appearance. +-- AS7312-54XS: stordis.com WP CDN (64KB WebP, same image). +-- Stordis is an official Edgecore value-added reseller and ONIE member. +-- AS7326-56X: edge-core.com official WP CDN (83KB PNG, DCS203-F.png — front view). +-- DCS203 is Edgecore's internal product code for the AS7326-56X. +-- AS9716-32D: edge-core.com official WP CDN (78KB PNG, DCS510-A.png — front view). +-- DCS510 is Edgecore's internal product code for the AS9716-32D. +-- AS7716-32X: stordis.com WP CDN (50KB WebP, front view). +-- AS7716-32X is not in Edgecore's current WordPress catalog (superseded +-- by AS7726-32X, which is already covered in migration 057). Stordis +-- hosts the original front-view photograph. +-- AS7816-64X: edge-core.com official WP CDN (99KB PNG, DCS500-A.png — front view). +-- DCS500 is Edgecore's internal product code for the AS7816-64X. +-- AS7512-32X: epsglobal.com CDN (26KB JPEG). EPS Global is a Edgecore +-- licensed reseller with per-SKU product images. AS7512-32X is a +-- legacy 32×100G spine switch (Mellanox Spectrum/Broadcom Tomahawk era). + +-- ── Edgecore Networks — AS-series SONiC switches ───────────────────────────── + +-- AS7312-54X — 32×100G QSFP28 + 22×10G SFP+ SONiC spine (EOL, succeeded by -54XS) +-- Image: stordis.com WP CDN (64KB WebP); AS7312-54XS = direct chassis successor +UPDATE switches +SET image_url = 'https://stordis.com/wp-content/uploads/2024/01/Edgecore-Networks-AS7312-54XS_Front.webp', + product_page_url = COALESCE(product_page_url, 'https://www.edge-core.com/product/as7312-54x/'), + assets_scraped_at = NOW() +WHERE model = 'AS7312-54X' + AND vendor_id = (SELECT id FROM vendors WHERE slug = 'edgecore'); + +-- AS7312-54XS — 32×100G QSFP28 + 22×10G SFP+ SONiC spine (successor to -54X) +-- Image: stordis.com WP CDN (64KB WebP); front-panel view +UPDATE switches +SET image_url = 'https://stordis.com/wp-content/uploads/2024/01/Edgecore-Networks-AS7312-54XS_Front.webp', + product_page_url = COALESCE(product_page_url, 'https://www.edge-core.com/product/as7312-54xs/'), + assets_scraped_at = NOW() +WHERE model = 'AS7312-54XS' + AND vendor_id = (SELECT id FROM vendors WHERE slug = 'edgecore'); + +-- AS7326-56X — 48×25G SFP28 + 8×100G QSFP28 SONiC TOR switch (DCS203) +-- Image: edge-core.com official WP CDN (83KB PNG, DCS203-F front view) +UPDATE switches +SET image_url = 'https://www.edge-core.com/wp-content/uploads/2023/08/DCS203-F.png', + product_page_url = COALESCE(product_page_url, 'https://www.edge-core.com/product/dcs203/'), + assets_scraped_at = NOW() +WHERE model = 'AS7326-56X' + AND vendor_id = (SELECT id FROM vendors WHERE slug = 'edgecore'); + +-- AS7716-32X — 32×100G QSFP28 + 2×10G SFP+ SONiC spine (superseded by AS7726-32X) +-- Image: stordis.com WP CDN (50KB WebP, front view). Not in current Edgecore catalog. +UPDATE switches +SET image_url = 'https://stordis.com/wp-content/uploads/2024/01/AS7716-32X_Front.webp', + product_page_url = COALESCE(product_page_url, 'https://www.edge-core.com/product/as7716-32x/'), + assets_scraped_at = NOW() +WHERE model = 'AS7716-32X' + AND vendor_id = (SELECT id FROM vendors WHERE slug = 'edgecore'); + +-- AS7816-64X — 64×100G QSFP28 2U SONiC spine switch (DCS500) +-- Image: edge-core.com official WP CDN (99KB PNG, DCS500-A front view) +UPDATE switches +SET image_url = 'https://www.edge-core.com/wp-content/uploads/2023/08/DCS500-A.png', + product_page_url = COALESCE(product_page_url, 'https://www.edge-core.com/product/dcs500/'), + assets_scraped_at = NOW() +WHERE model = 'AS7816-64X' + AND vendor_id = (SELECT id FROM vendors WHERE slug = 'edgecore'); + +-- AS9716-32D — 32×400G QSFP-DD SONiC spine switch (DCS510) +-- Image: edge-core.com official WP CDN (78KB PNG, DCS510-A front view) +UPDATE switches +SET image_url = 'https://www.edge-core.com/wp-content/uploads/2023/08/DCS510-A.png', + product_page_url = COALESCE(product_page_url, 'https://www.edge-core.com/product/dcs510/'), + assets_scraped_at = NOW() +WHERE model = 'AS9716-32D' + AND vendor_id = (SELECT id FROM vendors WHERE slug = 'edgecore'); + +-- AS7512-32X — 32×100G QSFP28 SONiC spine switch (legacy Tomahawk/Spectrum era) +-- Image: epsglobal.com reseller CDN (26KB JPEG); EPS Global is Edgecore-licensed +UPDATE switches +SET image_url = 'https://www.epsglobal.com/Media-Library/EPSGlobal/Products/files/Edgecore/as7512-32x.jpg?ext=.jpg&maxsidesize=400', + product_page_url = COALESCE(product_page_url, 'https://www.edge-core.com/product/as7512-32x/'), + assets_scraped_at = NOW() +WHERE model = 'AS7512-32X' + AND vendor_id = (SELECT id FROM vendors WHERE slug = 'edgecore');