Inspiration

Every student and researcher on a massive university campus like UC San Diego has experienced the frustration of sudden connectivity drops: you walk into Geisel Library basement to submit an assignment or sit down at Price Center for a meeting, and eduroam or UCSD-Protected silently drops into a deadzone or spins endlessly on authentication. Centralized IT Network Operations Centers (NOCs) monitor routers from the top down, but they lack real-time, bottom-up ground truth from the student edge. Meanwhile, students wandering campus with laptops and phones have zero visibility into where nearby reliable Wi-Fi actually is. We built PingDrop to bridge this divide—giving students immediate wayfinding to fast Wi-Fi and providing campus network engineers with real-time, crowd- sourced incident telemetry and automated remediation plans. ────── ## What it does PingDrop is an end-to-end crowd-sourced Wi-Fi telemetry and incident response platform tailored for university campuses:

  1. Crowd-Sourced Real-Time Heatmapping: • Visualizes live connectivity across campus using a dual-layer map: a focused Deadzone HeatMap that highlights clusters of packet loss and latency, combined with interactive, color-coded CircleMarkers (Green for healthy, Orange for latency/auth drops, Red for complete disconnects).
  2. Actionable Student Wayfinding: • Every marker contains a direct, one-click "Walk Here (Google Maps)" walking navigation link (https://www.google.com/maps/dir/?api=1&destination={lat}, {lon}&travelmode=walking) so students can navigate immediately to working Wi-Fi spots nearby.
  3. Edge-Filtered Telemetry & Offline Store-and-Forward: • Offline Deadzone Simulation: If a user is trapped in a total deadzone without signal, reports are buffered in a local store-and-forward queue (st.session_state) and batch- synced automatically once connectivity is restored. • Edge Telemetry Probe: Simulates edge-side heartbeat checks; healthy connections (<80ms) are silenced at the edge ("0 server calls made") to preserve server resources, while anomalous drops are auto-reported.
  4. NOC Dispatch Ticket & Remediation Engine: • A multi-factor priority scoring algorithm dynamically evaluates campus network telemetry against incident thresholds (packet loss, latency spikes, affected user volume, and mission-critical SSID weighting for eduroam/UCSD-Protected). • Automatically generates structured NOC Dispatch Tickets with concrete engineering remediation steps (e.g., AP reboots, RF channel rebalancing, RADIUS auth restarts). ────── ## How we built it

• Full-Stack UI: Built with Streamlit for reactive dashboarding, paired with streamlit- folium and Leaflet.js for interactive geospatial mapping. • Async Write-Behind Queue & Shared-Memory Broadcast (backend/db.py): • Engineered a custom thread-safe BroadcastEngine that keeps all campus telemetry in a RAM cache (logs_cache) protected by a threading.Lock. UI queries read from memory in O(1) time with zero disk reads per render. • Background asynchronous write daemon (_writer_worker) pulls pending logs from a queue.Queue and batch-commits them to SQLite3 using executemany with Write-Ahead Logging (WAL Mode) enabled (PRAGMA journal_mode=WAL;), eliminating database locks. • Cached across concurrent user sessions using @st.cache_resource to ensure a single shared memory state across all browser tabs. • Geospatial & Cartography (frontend/map.py): • Leveraged Folium on top of OpenStreetMap raster tiles to provide zero-key, high- detail cartography of campus paths and buildings. • Implemented severity-weighted kernel density heatmaps (weighting disconnects at 1.0 vs. latency at 0.5) overlaid with translucent markers (fill_opacity=0.65). • Telemetry Simulation Engine (backend/seed_data.py): • Modeled 160 realistic telemetry points using Gaussian distributions (random.gauss), featuring tight landmark clusters around Geisel, Price Center, CSE Building, and Biomedical Library with natural probabilistic variance, alongside ambient college-wide background pings. • Automated Verification: • Built a comprehensive test suite of 154 automated tests across unit, integration, multi-threaded concurrency, and headless browser UI tests (pytest-cov, streamlit. testing.v1.AppTest).

────── ## Challenges we ran into

  1. SQLite Database Locking Under Concurrent Writes: • In early prototypes, concurrent pings from simulated users triggered sqlite3. OperationalError: database is locked. We solved this by implementing an async write- behind queue architecture with Write-Ahead Logging (WAL Mode) where users write to an in-memory queue instantly and a single background daemon batch-persists to disk.
  2. The "API Key Required" Basemap Paywall: • Folium's default CartoDB Positron basemap recently implemented a strict API key requirement, returning blank tiles watermarked with "API KEY REQUIRED". We resolved this by migrating to OpenStreetMap's open tile service, ensuring our map renders seamlessly with rich street and building cartography without API keys or rate limits.
  3. Map Marker vs. Heatmap Occlusion: • Initially, high-opacity markers physically obscured the heatmap layer beneath them. We solved this by passing explicit severity weights (Complete Disconnect = 1.0, Latency = 0.5) to HeatMap, expanding the blur kernel radius, and rendering markers with a dark border and semi-translucent fill (0.65), allowing the red/orange deadzone clouds to glow through.
  4. Offline Reporting in True Deadzones: • If a student is in a deadzone, an HTTP request to log the drop would fail. We designed an offline Store-and-Forward mechanism in session state that holds drops locally and automatically flushes them via a batch insertion call once connection is re-established.

────── ## Accomplishments that we're proud of

• True Zero Disk-Read UI Rendering: Achieving O(1) in-memory read performance across concurrent Streamlit sessions without hitting disk contention during map interactions. • 154 Passing Automated Tests: Maintained 100% test pass rate across the full stack—from DB concurrency stress tests (25 simultaneous threads) to headless Streamlit AppTest UI validation—executing in under 1.5 seconds. • Actionable Student Utility: Going beyond passive observation by embedding direct Google Maps walking navigation into every single pin. • Automated IT NOC Integration: Delivering actionable incident tickets and priority scoring formulas rather than just raw telemetry counters. ────── ## What we learned

• Concurreny Patterns in Python & SQLite: How to combine Python's queue.Queue, threading. Lock, and SQLite WAL mode to create high-throughput write-behind architectures. • Streamlit Lifecycle Mechanics: The critical difference between @st.cache_data (per- session data caching) and @st.cache_resource (global process singleton management for shared memory state). • Cartographic Data Blending: How to balance macro-level density visualization (KDE heatmaps) with micro-level discrete actionable points (CircleMarkers) on Leaflet layers. • Edge Computing Paradigms: The value of edge filtering to discard non-informative data at the source while preserving anomalies and buffered offline telemetry. ────── ## What's next for PingDrop: Campus Wi-Fi Deadzone Telemetry & Infrastructure

• Native Campus Mobile App / PWA: Package PingDrop as a Progressive Web App (PWA) with background service workers that periodically perform passive ping tests as students walk between classes. • BSSID & Access Point Triangulation: Ingest local Wi-Fi router BSSIDs and signal strength (RSSI in dBm) alongside GPS coordinates to identify the exact malfunctioning access point on campus ceilings. • Live ITS NOC Webhook Integration: Connect the incident evaluator directly to campus IT ticketing systems (ServiceNow, Jira Service Desk, Slack/PagerDuty alerts) to dispatch technicians automatically when severity hits HIGH or CRITICAL. • Predictive Deadzone Forecasting: Apply temporal time-series machine learning models to predict when high-traffic areas (e.g., dining halls during lunch or lecture halls during midterms) are about to suffer radio congestion before drops occur.

Built With

Share this project:

Updates

Submission history