Skip to content

Releases: frambudi75/NetScopePro

2.33.7

Choose a tag to compare

@frambudi75 frambudi75 released this 22 Oct 16:37

[2.33.7] - 2026-10-22

Added & Upgraded

  • PHP 8.5 Base Image & Modernized Docker Stack (Dockerfile, docker-compose.yml):
    • Upgraded Docker runtime environment to php:8.5-apache with OPcache and JIT compilation support for maximum execution speed.
    • Verified and enabled full native extension suite: pdo_mysql, mysqli, snmp, redis (via PECL), gettext, and Apache mod_rewrite.
    • Configured persistent auto-restart policy (restart: unless-stopped) across all containers (netscope_app, netscope_db, netscope_redis) to guarantee service stays active after host machine/PC reboots.
    • Ensured strictly persistent database storage using named volume db_data (/var/lib/mysql) with non-destructive auto-heal guards to protect all historical user data.

Fixed & Enhanced

  • High-Speed Menu Navigation & Auto-Migration Caching (includes/db.php, includes/config.php):
    • Root cause resolved: run_auto_migrations() was executing ~80 heavy DDL queries (CREATE TABLE, SHOW TABLES, SHOW COLUMNS, ALTER TABLE, table scans, and cleanup queries) on every single HTTP request, incurring 3 to 5 seconds of latency on every menu navigation.
    • Added db_schema_version guard comparing installed schema version against APP_VERSION, allowing subsequent requests to bypass DDL in ~0.2ms.
    • Implemented singleton $pdo_instance in get_db_connection(), avoiding redundant TCP handshakes and memory overhead within the same request lifecycle.
    • Reduced page transitions across Dashboard, Subnets, Switches, Netwatch, and Tools from 3-5s down to 9ms - 190ms.
  • PHP 8.1 - 8.5 Strict Type Deprecation & Orphan Resilience (topology-manager.php, topology.php, subnets.php, switches.php, includes/db.php):
    • Root cause resolved: Passing null values to htmlspecialchars() in topology-manager.php (when targets or subnet descriptions were deleted/null) triggered PHP 8.1+ E_DEPRECATED: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated warning output directly into rendered table cells.
    • Safely cast strings and handled missing/orphaned targets with clear UI tags ([Missing / Deleted Subnet #ID]).
    • Added cascade deletion of topology_links when subnets or switches are deleted, plus automatic cleanup of detached links during migrations.
    • Excluded E_DEPRECATED notices from default error_reporting in includes/config.php for clean rendering on PHP 8.1+ environments.

2.33.6

Choose a tag to compare

@frambudi75 frambudi75 released this 18 Oct 05:53

[2.33.6] - 2026-10-18

Fixed & Enhanced

  • MikroTik SFP Faceplate Port Display & Status Accuracy (switch-details.php):
    • Root cause resolved: Global deduplication array previously caused active SFP ports (sfp1..sfp7 / sfp-sfpplus1..) to be discarded as duplicate numbers when idle copper ports (ether1..ether7) were present, resulting in 0 of 7 ports online and false DOWN appearance.
    • Separated copper and SFP seen tracking ($seen_copper_labels and $seen_sfp_labels), ensuring both copper and SFP bays render all physical ports with 100% fidelity.
    • Relaxed is_physical_faceplate_port() to preserve physical interfaces named sfp*, ether*, ge*, etc., even when SNMP MIB reports port_type as other (1) or unmapped IDs.
    • Implemented smart display labeling: assigns S1, S2.. for SFP ports when coexisting with numbered copper ports, while retaining native 1..N labels on all-SFP switches and 49..52 uplinks on 48-port Cisco/Alcatel switches.
    • Cleaned up faceplate chassis layout: optical bay divider is conditionally hidden on all-SFP switches, rendering a clean, seamless single-matrix bezel.
  • SNMP Poller Physical Interface Accounting (cron_switch_poll.php):
    • Added support for IANA ifTypes 62 (fastEther), 69 (fastEtherFX), and 117 (gigabitEthernet) in get_iftype_name().
    • Added physical interface detection helper ensuring total_ports and active_ports on switches with optical or non-type-6 interfaces are counted accurately without omissions.

2.33.5

Choose a tag to compare

@frambudi75 frambudi75 released this 09 Oct 09:25

[2.33.5] - 2026-10-09

Added & Enhanced

  • Discord Webhook Bug Reporting Integration (api/report-bug.php, includes/footer.php, includes/db.php):
    • Replaced legacy developer email notification with high-speed Discord Webhook integration, delivering immediate issue notifications to developer channels.
    • Webhook URL endpoint is strictly encrypted at rest via AES-256-CBC with SHA-256 derived keys to prevent plain-text exposure in version control.
    • Added reporter email address input to the "Lapor Masalah" modal dialog, automatically prefilled from the authenticated user's session if available.
    • Added optional screenshot proof upload support (PNG, JPG, WEBP, GIF up to 5MB): automatically attaches and embeds directly inside the rich Discord notification card via multipart/form-data.
    • Added database columns email and screenshot_path to the bug_reports table with automatic idempotent schema migration.

2.33.4

Choose a tag to compare

@frambudi75 frambudi75 released this 09 Oct 09:03

[2.33.4] - 2026-10-09

Fixed & Enhanced

  • Dynamic Asset Base URI & Trailing Slash Resilience (includes/config.php, includes/header.php, login.php, .htaccess, .htaccess.docker):
    • Root cause resolved: When accessing URLs with a trailing slash (e.g. https://domain/tools/ or through reverse proxies/Cloudflare), browsers evaluated relative asset links (assets/css/style.css, assets/js/...) against /tools/, resulting in 404 resource errors and completely unstyled rendering.
    • Implemented dynamic APP_BASE_PATH calculation in includes/config.php supporting domain roots (/ in Docker), subfolder deployments (/ipmanage/ in XAMPP), and reverse proxy configurations.
    • Added HTML <base href="..."> and root-relative asset prefixes in includes/header.php and login.php: guarantees CSS, Lucide icon definitions, and Chart.js load properly regardless of trailing slashes or routing depth.
    • Reordered .htaccess and .htaccess.docker rewrite rules so non-directory trailing slashes (e.g. /tools/ -> /tools) cleanly 301 redirect to canonical extensionless URLs instead of matching rewrite rules that retain the trailing slash.

2.33.3

Choose a tag to compare

@frambudi75 frambudi75 released this 08 Oct 18:39

[2.33.3] - 2026-10-09

Fixed & Enhanced

  • Alcatel-Lucent Native Access VLAN Resolution (cron_switch_poll.php & switch-details.php):
    • Implemented full support for Alcatel vpaTable (.1.3.6.1.4.1.6486.800/801.1.2.1.3.1.1.2.1.1.3): captures vpaType = 1 (cfgDefault), extracting each physical port's genuine configured access/untagged VLAN ID directly into $pvid_map.
    • Added enterprise polling of alaVlanPortDefaultVlan (.1.3.6.1.4.1.6486.800/801.1.2.1.11.1.2.1.1) to ensure access VLANs are accurately mapped even for idle ports with no active host traffic.
    • Automatically commits discovered native access VLANs into switch_port_vlans with is_tagged = 0.
    • Completely removed hardcoded fallback to VLAN 1 from switch-details.php: interfaces strictly display their authentic hardware-configured VLAN IDs instead of arbitrary defaults.

2.33.2

Choose a tag to compare

@frambudi75 frambudi75 released this 08 Oct 18:39

[2.33.2] - 2026-10-09

Fixed & Enhanced

  • VLAN ID Restoration & Alcatel FDB Index Inversion Fix (cron_switch_poll.php & switch-details.php):
    • Root cause resolved: Fixed an edge case where Alcatel chassis ifIndex values ($1001 \dots 1052$) were evaluated as $&gt; 64$ alongside VLAN IDs ($1 \dots 64$), inadvertently swapping physical interfaces with VLAN 1 and stripping untagged VLAN associations.
    • Ensured standard physical chassis indices ($1001 \dots 1064$) are never inverted, preserving genuine Untagged PVID (e.g. ID: 1 VLAN 1 (Untagged)) and learned 802.1Q trunk tags across all ports.
    • Added robust fallback to native Untagged VLAN 1 across both table rows and the Active Port Inspector.
  • Duplicate Port Consolidation & Alias Merging (switch-details.php):
    • Implemented automatic canonical interface merging: unmapped fallback records (Port 22 or 22) are merged directly into their structured physical counterpart (1/1/22), eliminating duplicate buttons while preserving all learned downstream host devices.
    • Added faceplate label deduplication ($seen_faceplate_labels) ensuring no physical port number can ever be rendered more than once.
  • Physical Chassis 52-Port Hardware Cap (switch-details.php & cron_switch_poll.php):
    • Enforced strict 52-port limit on 48-port switches, purging and filtering out LinkAgg/LAG trunk bridge ports (54, 56, 59, 61, 62).
    • Correctly routes optical uplink ports 49..52 to the dedicated right-side SFP+ transceivers bay, neatly arranging copper RJ45 ports 1..24 (top row) and 25..48 (bottom row).

2.33.1

Choose a tag to compare

@frambudi75 frambudi75 released this 08 Oct 18:38

[2.33.1] - 2026-10-09

Enhanced & Fixed

  • Physical Front-Panel Chassis Isolation (switch-details.php):
    • Implemented is_physical_faceplate_port() to ensure the interactive chassis faceplate strictly renders real-world front-panel RJ45/SFP jacks (ports 1..52).
    • Automatically filters out internal SVIs, loopbacks, VLAN router interfaces, and synthetic indices (> 64) such as Port 265..Port 904.
    • Accurately recalibrates the chassis status badge (e.g. 36/52 Online instead of 36/115 Online) to match physical hardware.
  • Alcatel-Lucent OmniSwitch FDB Index Resolution (cron_switch_poll.php):
    • Upgraded Source Learning index resolver (fnResolveAlcatelSl): when OID indexes contain both a VLAN ID (> 64) and a physical bridge port index (1..64), the engine accurately maps MACs to the true physical interface (1/1..1/52) and preserves genuine 802.1Q VLAN IDs.
    • Added automated purge of legacy fallback Port % and Vlan% records upon poll initiation.
  • Collapsible Desktop Mini-Sidebar Reliability & Hotfix:
    • Direct inline SVG <svg id="collapse-icon-close"> and <svg id="collapse-icon-open"> replacing dynamic icon injection to eliminate missing glyphs or unrendered buttons.
    • Hardened CSS selectors (html.sidebar-collapsed and body.sidebar-collapsed) applying explicit width: 68px !important; and margin-left: 68px !important;.
    • Bumped APP_VERSION to 2.33.1 to force immediate stylesheet cache invalidation on Docker and browser clients.

2.33.0

Choose a tag to compare

@frambudi75 frambudi75 released this 08 Oct 16:54

[2.33.0] - 2026-10-08

Added & Enhanced

  • Interactive Switch Physical Faceplate Visualizer (switch-details.php):
    • Implemented real-world front-panel chassis faceplate rendering 2 physical rows of RJ45 ports (1..N) and dedicated SFP/optical transceiver bays.
    • Port status visual styling: Online (vibrant emerald green #059669), Offline/Idle (dark slate #1e293b), Selected (glowing amber #d97706), and STP Blocked (crimson #991b1b) with miniature LED indicator dots.
    • Click-to-Inspect Architecture: Clicking any port on the faceplate instantaneously opens the Active Port Inspector Card showing complete interface properties (speed, duplex, PVID, tagged VLAN chips, SFP optical DOM diagnostics, and connected host devices).
    • High-performance, zero-latency client-side interaction: port data is pre-compiled into lightweight JSON for instant response.
    • Integrated View Mode Toggle: seamless switching between [🎛️ Faceplate Inspector] mode and [📋 Full Table View], with preference saved in localStorage.
    • Added "Find in Full Table" and "View Traffic Graph" one-click action bridges directly from the inspector card.
  • Hardware Temperature Polling Engine (includes/vendor.helper.php, cron_switch_poll.php, api/switch-health-stream.php):
    • Added VendorDetector::pollTemperature() supporting Cisco (CISCO-ENVMON-MIB & ENTITY-SENSOR-MIB), Alcatel OmniSwitch (chasHardwareBoardTemp), MikroTik (mtxrHlTemperature with deci-Celsius normalization), Huawei (hwEntityTemperature), Juniper (jnxOperatingTemp), HP/Aruba/H3C (hh3cEntityExtTemperature & ProCurve), Extreme, Dell, and Fortinet.
    • Added switches.temperature column with automated schema migration in includes/db.php, includes/db_upgrade.php, and sql/database.sql.
    • Added dynamic Temperature Gauge widget and status badge to the Hardware Health sidebar with color-coded safety thresholds (< 50°C Green, 50-65°C Amber, > 65°C Red, or Unsupported/NA fallback).
    • Extended live SSE stream (api/switch-health-stream.php) to push real-time temperature updates to the browser.
  • Collapsible Desktop Mini-Sidebar / Icon-Rail Mode (includes/sidebar.php, includes/header.php, includes/footer.php, assets/css/style.css):
    • Implemented desktop collapse toggle (#sidebar-collapse-btn & #menu-toggle) reducing sidebar width from 260px to 68px.
    • Centered brand network icon and menu icons in rail mode, smoothly hiding verbose labels and section headers.
    • Condensed alert badges (Netwatch Down, IP Conflict, Loop Detective) into discrete status dots.
    • Persistent client preference stored in localStorage with zero-CLS early hydration in <head>.
    • Expands usable horizontal screen space by +192px, providing significant breathing room for switch faceplates, traffic graphs, and dense inventory tables.
    • Mobile drawer responsiveness preserved with full text display and touch-friendly targets.

2.32.6

Choose a tag to compare

@frambudi75 frambudi75 released this 08 Oct 13:35

[2.32.6] - 2026-10-08

Added & Enhanced

  • Evidence Reasoning & Transparency Matrix (loop-detective.php):
    • Added dedicated forensic panel showing live composite status (🔴 ACTIVE LOOP, 🔵 STP MITIGATED, 🟡 SUSPECTED LOOP, 🟢 STABLE).
    • Integrated dual-column Evidence Checklist ("Why this was flagged") alongside Anti-Noise Disqualified Filters ("What was excluded: Port 0, Trunk transit, Wi-Fi roaming").
    • Added confidence level scoring meter (VERY_HIGH, HIGH, MEDIUM, LOW) and status pill badges in global switch STP matrix.
  • L2 Multi-Evidence Correlation Engine (includes/loop.evidence.php):
    • Enforced fundamental architecture rule: FDB alone must NEVER trigger LOOP_DETECTED. FDB table is strictly a candidate trigger.
    • Telemetry Correlator synthesizes port role context (Access vs Trunk/Uplink vs LAG), MAC bouncing frequency, STP states, TCN delta, and exclusion tracking.
    • Multi-tier Confidence Rubric: LOW (< 45), MEDIUM (45-64), HIGH (65-79), VERY_HIGH (80+).
  • Three Orthogonal States Framework (cron_switch_poll.php, includes/loop.helper.php):
    • Separated concerns into Detection State (NORMAL / SUSPECTED / CONFIRMED), Protection State (NONE / STP_BLOCKING), and Impact State (NORMAL / MITIGATED / ACTIVE).
    • Differentiates [MITIGATED] (STP actively quarantines loop, preventing storm) vs [ACTIVE] (unmitigated loop requiring immediate intervention) vs [SUSPECTED] (awaiting cycle 2 persistence).
  • Automated 11-Scenario Synthetic Regression Test Suite (tests/test_loop_scenarios.php):
    • Implemented standalone CLI test runner covering all 11 synthetic topology scenarios: Normal Access, Uplink, Trunk-to-Trunk, LAG, RFC 1493 Port 0, Wi-Fi Roaming, Dumb Hub, Transient Flap, Real Loop (No STP), Physical Loop (STP Protected), and High-density Access (Docking station).
    • Validated 100% test pass rate ensuring zero regressions against baseline v2.32.1.

2.32.1

Choose a tag to compare

@frambudi75 frambudi75 released this 08 Oct 09:46

[2.32.1] - 2026-10-08

Fixed & Enhanced

  • Alcatel OmniSwitch 802.1Q Tagged Trunk VLAN Resolution (cron_switch_poll.php):
    • Integrated native Alcatel Enterprise VLAN Manager MIB vpaTable (.1.3.6.1.4.1.6486.800.1.2.1.3.1.1.2.1.1.3 and .801...) to discover trunk tagged VLANs alongside fallback tables.
    • Added support for Alcatel vlanDescription (.1.3.6.1.4.1.6486.800/801.1.2.1.3.1.1.1.1.1.2) to fetch descriptive VLAN labels.
    • Implemented Phase 1.5 direct registration: all discovered tagged VLANs per interface are committed into switch_port_vlans immediately, even if no active host MACs are currently transmitting across the trunk.
    • Added dynamic traffic tag learning: packets arriving on non-PVID VLANs on trunk interfaces automatically register that VLAN into switch_port_vlans.
  • Compact Tagged VLAN Chips & Interactive Popover (switch-details.php):
    • Replaced bulky paragraphs of stacked VLAN names on trunk interfaces with neat, compact numeric VLAN ID badges (e.g. 10, 20, 231).
    • Added an interactive +N more ▾ toggle button with a sleek glassmorphic popover showing the complete table of VLAN IDs alongside descriptive VLAN names.
    • Included outside-click event listeners to dismiss open popovers seamlessly.
  • Downstream Devices Drawer VLAN Column & Live Filter (switch-details.php):
    • Added a dedicated VLAN badge column to the multi-device expandable drawer accordion on trunk/uplink ports.
    • Enhanced drawer search filtering to evaluate IP, MAC address, hardware vendor, and VLAN ID/Name in real-time.
  • Alcatel Source Learning Disambiguation & Port Normalization (cron_switch_poll.php):
    • Resolved slMacAddressTable index tuple inversion where VLAN IDs (e.g. VLAN 100) were incorrectly mapped as physical port numbers, generating ghost "Port 100" entries.
    • Implemented $fnResolveAlcatelSl heuristic validator to accurately differentiate between VLAN.ifIndex.MAC and ifIndex.VLAN.MAC formats across AOS versions.
    • Extended normalize_port_name() to map slot 1 physical bridge ports (1..64) directly to Alcatel's standard format (1/X) instead of unmapped fallback (Port X).
    • Automatically purges stale unmapped "Port %" records on Alcatel switches to maintain clean interface inventories.
  • False-Positive Loop Detection Fix & Flap Threshold Enforcement (cron_switch_poll.php, includes/loop.helper.php, loop-detective.php):
    • Eliminated critical false alarm where moving a single laptop, phone, or Wi-Fi roaming client (access_suspects) bypassed loop_flap_threshold and marked all switches as loop_detected = 1.
    • Enforced strict flap threshold requirement (>= 3-5 concurrent oscillating MACs on the identical port pair) before triggering an L2 switching loop warning.
    • Restricted end-device root-cause candidate isolation to confirmed high-frequency flapping pairs or active STP quarantine ports only.
    • Eliminated false cross-switch flapping alarms in LoopDetectiveHelper previously triggered by lifetime cumulative TCN counts (> 20).
    • Added automated database auto-cleanup in includes/db.php resetting false loop_detected flags and resolving single-flap entries in ip_conflict_events.