Skip to content

Releases: byte4geek/switch-dashboard

Release 2026.6.4

Choose a tag to compare

@byte4geek byte4geek released this 12 Jun 12:22

Release 2026.6.4: Interactive Column Sorting, Live Countdowns, & Concurrency / Proxy ARP Fixes 🚀🕸️⏱️

Welcome to Release 2026.6.4 of the Switch Dashboard! This release introduces critical scanner optimizations, interactive column sorting, real-time sync countdown timers across all dynamic pages, and highly requested concurrency options for network discovery.


🌟 What's New in v2026.6.4

1. 🔀 Interactive Column Sorting (Subnet Scanner)

  • Multi-Type Sorting: Added interactive sorting (ascending/descending) on all scanner columns.
    • IP Addresses: Scans are sorted numerically by octets.
    • Status: Sorted alphabetically (ONLINE/OFFLINE).
    • Dates & Times: Sorted chronologically (First Seen, Last Seen Online, Last Updated).
    • Alphanumeric: Natural sort order (case-insensitive) for Hostnames, MACs, Vendors, and Notes.
  • Visual Indicators: Clickable headers render arrow indicators (/) next to the active sorting column.
  • Drag Protection: Header clicks are ignored if the user is currently resizing columns.

2. 🛡️ Proxy ARP / VPN IP Overwrite Protection & Deletion Reset

  • Proxy ARP Override Guard: Prevents multi-IP MAC addresses (such as Fritz!Box gateways responding for local virtual WireGuard VPN tunnels) from overwriting the primary IP address (like .1 for the router).
  • Ascending Scan Priority: Scanned host IPs are ordered numerically before insertion, guaranteeing that lower/primary IPs are processed first.
  • Clean Deletion Reset: Deleting a client host sets scanner_detected = False. Upon the next network scan, the scanner performs a fresh resolution to the primary gateway IP, ignoring subsequent VPN alias responses (like .200 or .201) as long as the primary IP is reachable.

3. ⚙️ Discovery Concurrency & Timeout Customization

  • Parallel Host and Port Scanning: Implemented a multi-threaded host scanner pool (scanner_host_scan_threads) using a ThreadPoolExecutor to scan multiple hosts concurrently. Ports are also scanned concurrently per-host (scanner_port_scan_threads).
  • Configurable Timeout (ms): Added a custom millisecond timeout setting (scanner_port_scan_timeout_ms, default 500 ms) for TCP port checks, allowing fast port scans.
  • Web UI Controls: Added Host/Port Concurrency and Timeout parameters directly to the settings page /config.

4. ⏱️ Live Auto-Refresh Countdowns & Smart Pausing

  • Seconds Countdown: Replaced static status labels with active 1-second interval countdown timers (e.g. Live (update in 25s)) on the Dashboard, Network Scanner, and Network Map.
  • Smart Pausing:
    • Dashboard/Scanner: Polling and countdowns pause and show Paused while editing note/nickname input cells to prevent updates from overwriting user typing.
    • Network Map: Displays a header status dot and countdown. The countdown pauses automatically if the user focuses on sidebar search or inspect detail input/selectors.
  • Strict Syncing: Routed all AJAX fetches directly through the 1-second countdown clock, ensuring perfect alignment.

5. 🎨 Styling Alignment & API Overhaul

  • Dark Mode Scrollbars: Integrated custom dark scrollbars and native dark browser settings (color-scheme: dark) in /scanner/history to match dashboard styles.
  • API Reference Overhaul: Documented all missing endpoints (Scanner, Clients, System Logs, and Topology) in the interactive /api-docs interface.

💾 Installation & Upgrading

Using the Automated Installer (Debian/Ubuntu/RHEL)

To pull the latest release and run the auto-installer:

cd switch-dashboard
git pull
sudo bash install.sh

Using Docker Compose

Simply pull the updated image and recreate the containers:

docker compose pull
docker compose up -d --force-recreate

🛠️ Detailed Changelog

  • [app.py]: Bumped VERSION to "2026.6.4".
  • [app.py]: Implemented ThreadPoolExecutor for parallel host scans in update_scanner_state_in_config.
  • [app.py]: Updated /config POST and GET handlers to support host/port concurrency and millisecond timeout settings.
  • [app.py]: Added numeric IP sorting and was-detected override protection checks during scanning.
  • [templates/config.html]: Added "Host Scan Concurrency", "Port Scan Concurrency", and "Port Scan Timeout" input fields.
  • [templates/index.html]: Replaced setInterval with a 1-second countdown loop (startCountdown()) and integrated pause/resume triggers.
  • [templates/scanner.html]: Implemented header sorting event listeners, arrow indicators, and a 1-second countdown loop with dynamic intervals.
  • [templates/map.html]: Added a status pill and countdown in the header, pausing automatically when details sidebar fields are focused.
  • [templates/scanner_history.html]: Styled tables and scrollbars to match the premium dark theme.
  • [templates/api_docs.html]: Added detailed route cards for all 21 REST API endpoints.
  • [README.md]: Added Release 2026.6.4 entry to the Changelog section.

Release 2026.6.3

Choose a tag to compare

@byte4geek byte4geek released this 11 Jun 08:41

Release 2026.6.3: Draggable Node Reordering, Unified Port Speeds, & Request Retry Tuning 🚀🔌⏱️

Welcome to Release 2026.6.3 of the Switch Dashboard! This release brings major quality-of-life updates, including drag-and-drop node sequence customization on the configuration page, unified network port speed formatting across all switch types, and customizable HTTP query retries with fast-failing on 404 client errors.


🌟 What's New in v2026.6.3

1. ⠿ Custom Node Reordering via Drag-and-Drop

  • Draggable Nodes: Added the ability to reorder nodes (Switches and Routers) directly on the /config page by grabbing the draggable grab handle .
  • Form Synchronization: Moving a node dynamically recalculates form indexes, hidden field states, and checkboxes in real-time.
  • Persistent Ordering: Submitting the form saves the new node order to config.json. The main index page (/) automatically renders the nodes in the exact sequence you configured.

2. 🔌 Unified Port Speed Formats

  • Cross-Node Normalization: Standardized port speeds across Open vSwitch (OVS), Fritz!Box, and Managed Switches.
  • Visual Alignment: Raw speeds such as 2500M, 1000M, 10M are unified into standard 2.5G, 1G, and 10M representations, matching the Virtual Switch (OVS) naming scheme.

3. ⏱️ Configurable Request Retries & HTTP 404 Fail-Fast

  • Max Request Retries Option: Added a Max Request Retries parameter to the General Settings card on the /config page. Users can adjust how many times the background scraper attempts to poll a switch upon request failure. Setting this to 0 disables retries completely (only tries once).
  • HTTP 404 Fail-Fast: The scraper now instantly raises an exception and aborts further attempts if a remote URL returns HTTP 404 Not Found (such as /dhcp_snooping.cgi on unsupported hardware). This prevents thread-blocking, polling lag, and missing throughput charts caused by retry wait-times.

💾 Installation & Upgrading

Using the Automated Installer (Debian/Ubuntu/RHEL)

To pull the latest release and run the auto-installer:

cd switch-dashboard
git pull
sudo bash install.sh

Using Docker Compose

Simply pull the updated image and recreate the containers:

docker compose pull
docker compose up -d --force-recreate

🛠️ Detailed Changelog

  • [app.py]: Bumped VERSION to "2026.6.3".
  • [app.py]: Configured GET/POST route handlers to support the max_request_retries configuration setting.
  • [app.py]: Instantiated switch scrapers with the user-configured max_retries value in the caching thread loop.
  • [app.py]: Implemented unify_speed() helper function inside update_cache() to translate raw switch bit speeds to standard formats.
  • [scraper.py]: Updated _open_request_with_retry to honor custom retries setting and immediately raise exceptions on HTTP 404 errors.
  • [templates/config.html]: Added "Max Request Retries" number field input to the General Settings card.
  • [templates/config.html]: Integrated HTML5 drag-and-drop reordering with a custom grab indicator handle and active dynamic index recalculation script.
  • [README.md]: Added Release 2026.6.3 entry to the Changelog section.

Release 2026.6.2

Choose a tag to compare

@byte4geek byte4geek released this 08 Jun 12:12
d66f0e6

Release 2026.6.2: Network Topology, Virtual Switches (OVS), Custom Device Types, & UI Refinements 🕸️🔌🎛️

Welcome to Release 2026.6.2 of the Switch Dashboard! This release introduces advanced network virtualization support for Open vSwitch (OVS) and Proxmox VE hosts, customizable device type icons, port graphic wrap styling, resizable MAC table columns, and structural unmanaged switch groupings on the live network topology map.


🌟 What's New in v2026.6.2

1. 🎛️ Open vSwitch (OVS) & Proxmox VE Integration

  • OVS Telemetry Scraper: Native support for virtual switches running on Proxmox VE hosts, scraping interfaces, active ports, packet statistics, and the FDB forwarding database via SSH.
  • Port Speed Formatting: Optimized speed calculations to correctly parse and format fractional ports, displaying virtual/physical speeds (like 2500 Mbps) as 2.5G instead of rounding issues.
  • Proxmox OVS Setup Documentation: Added a comprehensive, step-by-step setup guide to the main README.md covering system packages (openvswitch-switch), Proxmox Web GUI network configurations, and setting up the restricted ovs-monitor SSH system user with safe passwordless sudo permissions.

2. 🕸️ Interactive Network Map & Structural Topology

  • Unmanaged & Virtual Switch Grouping: Support for mapping unmanaged switches to physical parent switch ports. Downstream clients are automatically branched under the unmanaged switch node.
  • Node Alignment & Badge Routing: Implemented Bezier curve equations to route network cables, anchoring port badges precisely along lines during node drags.
  • Auto-expanded Node Cards: Dynamically scales card dimensions based on active client names and sublabels on the map.
  • Disabled Switch Filter: Disabled switches (and their child nodes) are hidden from the map and index dashboard, skipping telemetry polling threads.

3. 🔌 Dynamic Client Device Types & Custom Icons

  • Iconify & SVG Path Support: Device types defined in device_types.yaml support both Iconify classes (e.g. icon: "mdi:cellphone") and custom inline SVG paths (e.g. path: "M10 20 L30 40 Z").
  • Batch Loading & Fallbacks: Iconify icons are requested in parallel batch requests to reduce frontend page loading times, with automatic fallbacks for unrecognized types.
  • Editable via Settings: Manage your custom device types configuration dynamically.

4. 🎨 UI Wrap Layouts & Resizable MAC Tables

  • Port Graphic Wrapping: Added a configurable Ports Row Wrap Threshold general setting. Switch port indicators wrap into multiple stacked rows if their count exceeds this limit (highly useful for OVS virtual bridges with large numbers of interfaces).
  • Resizable MAC Table Columns: MAC Address table columns are now fully resizable by dragging header borders. Sizing configurations are saved persistently on the server.
  • Adaptive Inputs: Host/Nickname text boxes scale to width: 100% of the column, adjusting dynamically when column margins are resized.

💾 Installation & Upgrading

Using the Automated Installer (Debian/Ubuntu/RHEL)

To pull the latest release and run the auto-installer:

cd switch-dashboard
git pull
sudo bash install.sh

Using Docker Compose

Simply pull the updated image and recreate the containers:

docker compose pull
docker compose up -d --force-recreate

🛠️ Detailed Changelog

  • [app.py]: Bumped VERSION to "2026.6.2".
  • [app.py]: Implemented ports_wrap_threshold parameters routing, validation, and serialization.
  • [scraper.py]: Modified OVS speed parsing for fractional speeds (2500 Mbps -> 2.5G).
  • [templates/index.html]: Added .mac-table layout fixed styles, resizer handles, and layout resize event handlers.
  • [templates/index.html]: Implemented port graphic wrapping math inside renderSwitch.
  • [templates/config.html]: Added General Settings input for Ports Row Wrap Threshold.
  • [README.md]: Documented Proxmox OVS installation steps and user setups.

Release 2026.6.1

Choose a tag to compare

@byte4geek byte4geek released this 03 Jun 13:39

Release 2026.6.1: Dynamic MAC Resolution, Column Interactions, & Grid Layouts 🌐🎛️

Welcome to the Release 2026.6.1 of the Switch Dashboard! This release brings a massive set of features focusing on customized layout management, interactive table customization, and dynamic network device intelligence (MAC vendor mapping).

🌟 What's New in v2026.6.1

  1. 🌐 Dynamic MAC Address Vendor Resolution
    Official IEEE Registry Matching: The dashboard now automatically scans and resolves MAC addresses to official manufacturers using standard IEEE OUI files (oui.txt and oui36.txt).
    Custom Local Overrides (mac_vendors.txt): You can now define custom vendor names for local MAC address prefixes. The editor is fully integrated as a text box directly inside the /config page.
    IEEE OUI Update Downloader Card: Trigger manual database updates directly from the settings page.
    IEEE Query Warning: Added a prominent notice box regarding IEEE query limitations (limited to one download per day to prevent IP blocklist bans).
    Startup Constraints: The server will only download OUI database files on startup if they are missing locally. If they are already present, no startup query is made.
  2. 🎛️ Interactive Table Actions
    Interactive Column Drag-and-Drop Reordering: Rearrange dashboard table columns dynamically to custom structures. Layout configurations are persisted directly to browser cookies.
    Interactive Column Resizing: Adjust table columns by dragging margins. Width states are saved to browser cookies.
    Auto-wrap Columns: Prevents text clippings and overflow when columns are sized narrow by auto-wrapping cell content.
  3. 🎨 Layout Grid & Column Configurations
    Switches Per Row Selection: A new general setting dropdown in the configuration page allows users to force layouts into Auto (responsive), 1, 2, 3, or 4 columns side-by-side.
    Column Visibility Toggles: Enable or disable specific columns (e.g. port, speed, notes, raw traffic bytes) dynamically from /config.
  4. 📖 API Docs Reference Upgrades
    Fully documented new vendor endpoints (POST /api/vendors/update_oui and GET/POST /api/vendors) in the built-in local /api-docs section.

💾 Installation & Upgrading

Using the Automated Installer (Debian/Ubuntu/RHEL)
To pull the latest release and run the auto-installer:

cd switch-dashboard
git pull
sudo bash install.sh

Using Docker Compose (Recommended)
Simply pull the updated image and recreate the containers:

docker compose pull
docker compose up -d --force-recreate

🛠️ Detailed Changelog

[app.py]: Bumped VERSION to "2026.6.1".
[app.py]: Optimized OUI files startup downloads checking existence of files individually.
[config.html]: Added styled card for OUI Registry manager with query warnings, update buttons, and custom JS.
[api_docs.html]: Updated documentation schema with vendor APIs.
[README.md]: Documented vendor lookup endpoints and added release details to the global log history.

2026.5.3

Choose a tag to compare

@byte4geek byte4geek released this 27 May 06:34
18b774f
  • Added support to KP-9000-9XHML-X switch.

  • Added log page

v2026.5.2

Choose a tag to compare

@byte4geek byte4geek released this 22 May 15:13
d953806

Release Notes: v2026.5.2 (Docker Deployment & Persistent Storage)

We are proud to release v2026.5.2 of the Switch Dashboard, introducing native Docker & Docker Compose containerization and standardizing persistent data structures for bulletproof, containerized deployments.

🐳 Dockerization & Portability
Official Dockerfile: A lightweight containerized setup built on top of python:3.11-slim that isolates the entire Python environment, reducing host package management overhead.
Unified docker-compose.yml: Simplifies multi-container network configuration. Out-of-the-box support for custom port remappings (e.g., host 8081 to container 8080) to seamlessly coexist with other services on the host.
💾 Unified Persistent Data Mapping
Environment Configuration: Introduced the DASHBOARD_DATA_DIR environment variable to configure the storage directory (defaults to /data inside the container).
Consolidated State Storage: All configuration, telemetry, history, and backup files are saved in the same directory:
config.json (switches)
settings.json (user interface preferences)
notes.json (custom port descriptions)
counters.json (cumulative interface data)
history_hourly.json & history_daily.json (rolling bandwidth metrics)
/backup/ (on-demand binary switch configuration backups)
Host Volume Persistence: Mount a single host folder (e.g. -v ./data:/data) to retain all metrics and user preferences permanently across container restarts, builds, or migrations.
🛡️ Auto-Initialization Safeguard
Empty Directory Detections: When mounting empty folders or fresh volumes, the dashboard automatically detects the absence of configurations and copies the bundled default config.json configuration file.
Resiliency: This prevents container crash loops due to missing files and ensures the user can immediately access the settings page /config to configure their switches via the Web UI.
📦 Robust Absolute Resource Pathing
Absolute Asset Resolution: Refactored Flask's initialization inside app.py to bind both template_folder and static_folder to absolute file pathways resolved dynamically at startup.
Render Guarantee: Eliminates any relative directory mismatch bugs or rendering errors (TemplateNotFound) regardless of the working directory or container runtime layer.
🔬 Service Integration & Compatibility
Standard Deployments Unaffected: The path resolution falls back cleanly to the local directory when DASHBOARD_DATA_DIR is not set, meaning existing virtual env or systemd LXC deployments (like the one running on IP 192.168.1.32) continue to run smoothly with zero adjustments.

v2026.5.1

Choose a tag to compare

@byte4geek byte4geek released this 22 May 09:49
723a0de

🚀 Release Notes - Version 2026.5.1

We are proud to announce the release of Switch Dashboard v2026.5.1! This version introduces multiple advanced switch management controls, premium visual enhancements, and robust network security tracking for HORACO and OEM compatible managed switches.

🎨 What's New in v2026.5.1

  1. Advanced Administrative Port Visuals & Contrast

Distinct Port Highlighting: Ports that are administratively disabled in /port.cgi now render with a dedicated dark-grey (#353c45) in the top panel's graphical view, visually distinguishing them from regular offline ("Down") ports (#57606a).
Legend Update: Added the new Disabled status badge and color swatch directly into the dashboard's PORT STATUS legend.

  1. Live Switch Reboot Controls

On-Demand Power Cycling: Safely reboot your switch hardware directly from the settings panel.
Premium Glassmorphic Confirmation Modal: Protects against accidental disconnects with a stunning frosted glass warning card, complete with a live API status spinner and error notifications.

  1. Server-Side Configuration Backups Manager

Config Archiving: Trigger secure binary backups (.bin) that download directly to the server's disk storage using customized HTTP CGI headers.
Interactive Backups Panel: Manage all saved backups at /backups with quick options to download or permanently delete old configs under glassmorphic modal confirmation windows.

  1. DHCP Snooping & IGMP Multicast Table Telemetry

Security & Port Tracking: Global DHCP Snooping status displays (🟢 Active / ⚪ Inactive) with custom trusted and untrusted port badges.
Collapsible IGMP Group Tables: Scrapes and renders active IGMP Snooping multicast tables (/igmp.cgi?page=dump) in an expandable card.

  1. Jumbo Frame Properties Telemetry

Selected Frame Size: Scrapes and extracts active Jumbo Frame status and the exact configured size (e.g., 9216Bytes).

  1. Visual Harmonization & API reference

Port Speed Colors: Speed values in the port table (colonna speed) are now color-coded matching their graphical counterparts in the legend.
API Documentation Explorer: Documented the new backups and reboot REST endpoints in /api-docs.

🔒 Enhancements & Fixes

Microcontroller Parsing Fixes: Added advanced parser defenses in scraper.py using non-recursive BeautifulSoup scraping to bypass unclosed HTML tags and malformed tables from switch microcontrollers.
Persistent Counter Reset: Added Baselines verification during switch reboots to prevent traffic delta corruption.

TIP

To view the full developer documentation or copy curl examples, visit the locally hosted /api-docs explorer on your dashboard!

v2026.5.0 First release

Choose a tag to compare

@byte4geek byte4geek released this 21 May 12:38

First release