Repository navigation
Releases: frambudi75/NetScopePro
Releases · frambudi75/NetScopePro
Release list
2.33.7
[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-apachewith 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 Apachemod_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.
- Upgraded Docker runtime environment to
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_versionguard comparing installed schema version againstAPP_VERSION, allowing subsequent requests to bypass DDL in ~0.2ms. - Implemented singleton
$pdo_instanceinget_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.
- Root cause resolved:
- 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()intopology-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 deprecatedwarning 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_linkswhen subnets or switches are deleted, plus automatic cleanup of detached links during migrations. - Excluded
E_DEPRECATEDnotices from defaulterror_reportinginincludes/config.phpfor clean rendering on PHP 8.1+ environments.
- Root cause resolved: Passing null values to
2.33.6
[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_labelsand$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 namedsfp*,ether*,ge*, etc., even when SNMP MIB reportsport_typeasother(1) or unmapped IDs. - Implemented smart display labeling: assigns
S1,S2.. for SFP ports when coexisting with numbered copper ports, while retaining native1..Nlabels on all-SFP switches and49..52uplinks 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.
- Root cause resolved: Global deduplication array previously caused active SFP ports (
- SNMP Poller Physical Interface Accounting (
cron_switch_poll.php):- Added support for IANA ifTypes 62 (
fastEther), 69 (fastEtherFX), and 117 (gigabitEthernet) inget_iftype_name(). - Added physical interface detection helper ensuring
total_portsandactive_portson switches with optical or non-type-6 interfaces are counted accurately without omissions.
- Added support for IANA ifTypes 62 (
2.33.5
[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
emailandscreenshot_pathto thebug_reportstable with automatic idempotent schema migration.
2.33.4
[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_PATHcalculation inincludes/config.phpsupporting domain roots (/in Docker), subfolder deployments (/ipmanage/in XAMPP), and reverse proxy configurations. - Added HTML
<base href="...">and root-relative asset prefixes inincludes/header.phpandlogin.php: guarantees CSS, Lucide icon definitions, and Chart.js load properly regardless of trailing slashes or routing depth. - Reordered
.htaccessand.htaccess.dockerrewrite 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.
- Root cause resolved: When accessing URLs with a trailing slash (e.g.
2.33.3
[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): capturesvpaType = 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_vlanswithis_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.
- Implemented full support for Alcatel
2.33.2
[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
ifIndexvalues ($1001 \dots 1052$ ) were evaluated as$> 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.
- Root cause resolved: Fixed an edge case where Alcatel chassis
-
Duplicate Port Consolidation & Alias Merging (
switch-details.php):- Implemented automatic canonical interface merging: unmapped fallback records (
Port 22or22) 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.
- Implemented automatic canonical interface merging: unmapped fallback records (
-
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..52to the dedicated right-side SFP+ transceivers bay, neatly arranging copper RJ45 ports 1..24 (top row) and 25..48 (bottom row).
- Enforced strict 52-port limit on 48-port switches, purging and filtering out LinkAgg/LAG trunk bridge ports (
2.33.1
[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 Onlineinstead of36/115 Online) to match physical hardware.
- Implemented
- 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 %andVlan%records upon poll initiation.
- Upgraded Source Learning index resolver (
- 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-collapsedandbody.sidebar-collapsed) applying explicitwidth: 68px !important;andmargin-left: 68px !important;. - Bumped
APP_VERSIONto2.33.1to force immediate stylesheet cache invalidation on Docker and browser clients.
- Direct inline SVG
2.33.0
[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 inlocalStorage. - 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 (mtxrHlTemperaturewith deci-Celsius normalization), Huawei (hwEntityTemperature), Juniper (jnxOperatingTemp), HP/Aruba/H3C (hh3cEntityExtTemperature& ProCurve), Extreme, Dell, and Fortinet. - Added
switches.temperaturecolumn with automated schema migration inincludes/db.php,includes/db_upgrade.php, andsql/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.
- Added
- 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
localStoragewith 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.
- Implemented desktop collapse toggle (
2.32.6
[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.
- Added dedicated forensic panel showing live composite status (
- 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).
- Separated concerns into Detection State (
- 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
[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.3and.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_vlansimmediately, 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.
- Integrated native Alcatel Enterprise VLAN Manager MIB
- 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.
- Replaced bulky paragraphs of stacked VLAN names on trunk interfaces with neat, compact numeric VLAN ID badges (e.g.
- 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
slMacAddressTableindex tuple inversion where VLAN IDs (e.g. VLAN 100) were incorrectly mapped as physical port numbers, generating ghost"Port 100"entries. - Implemented
$fnResolveAlcatelSlheuristic validator to accurately differentiate betweenVLAN.ifIndex.MACandifIndex.VLAN.MACformats 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.
- Resolved
- 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) bypassedloop_flap_thresholdand marked all switches asloop_detected = 1. - Enforced strict flap threshold requirement (
>= 3-5concurrent 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
LoopDetectiveHelperpreviously triggered by lifetime cumulative TCN counts (> 20). - Added automated database auto-cleanup in
includes/db.phpresetting falseloop_detectedflags and resolving single-flap entries inip_conflict_events.
- Eliminated critical false alarm where moving a single laptop, phone, or Wi-Fi roaming client (