A PHP 8.4, MariaDB, Leaflet and Chart.js common operating picture for Maryland emergency operations.
Current release: 5.0.1
- Full-screen Maryland map with ZIP-code outage choropleth.
- Floating and collapsible operational panels.
- METAR airport markers with flight-category status.
- FAA advisories and PurpleAir AQI overlays.
- Current and historical ZIP-code outage playback.
- Optional municipal-boundary overlay for Pennsylvania, Virginia, West Virginia, and Delaware.
- Data-sources dialog with provider attribution and a non-endorsement notice.
- Dynamic legends and rich map popups.
- Correlated power, weather, aviation and air-quality summaries.
- Responsive light and dark themes.
- GitLab CI/CD automatic production deployment.
- PHP 8.4 with PDO MySQL.
- MariaDB or MySQL containing the dashboard tables.
- Apache behind nginx, or another PHP-capable web server.
- Browser access to the Leaflet and Chart.js CDN resources used by the dashboard.
cp config.example.php config.php
nano config.phpSet the database connection values in config.php, then ensure the web server can read the project files.
The production target documented for this repository is:
Host: dashboard.dataguy2020.com
Path: /var/www/html/dashboard
Web stack: nginx -> Apache
curl -fsS https://dashboard.dataguy2020.com/api/health.phpExport the configured database definition without any table rows:
tools/export_schema.shThe script reads the existing config.php, writes a timestamped SQL file under
exports/, and includes tables, views, triggers, procedures, functions, and
events. It uses a temporary credentials file with mode 0600, so the database
password is not exposed through the process list. The MySQL/MariaDB client
package (mysqldump) and PHP CLI must be installed.
Specify a destination when needed:
tools/export_schema.sh --output /srv/backups/dashboard-schema.sqlRestore into a database server with:
mysql -u YOUR_USER -p < exports/schema-YYYYmmdd-HHMMSS.sqlhttps://gitlab.com/mikes-development/eoc-dashboard
See docs/DEPLOYMENT.md for the CI/CD variables and server setup.
Version 4.3.1 reads md_nwps_gauges and md_nwps_stageflow_current through api/rivers.php. The dashboard includes a river-gauge KPI, map layer, and Rivers intelligence tab.
Click the Customers Out KPI to open statewide ZIP outage history. Choose 24 hours, 7 days, 30 days, 90 days, 6 months, 1 year, 3 years, or all available data. The graph shows customers without power and the statewide outage percentage.
The ZIP layer supports history playback, search, sorting, and direct map or table selection. County data remains available as a secondary view; when ZIP allocations overlap, the latest county snapshot supplies the live statewide total.
The incident summary combines power, weather, and aviation conditions into an operational-impact score. The displayed statements mean:
- NORMAL OPERATIONS (score 0–1): No monitored condition currently meets an elevated threshold.
- ELEVATED OPERATIONS (score 2–5): One or more monitored conditions require increased awareness.
- HIGH OPERATIONAL IMPACT (score 6–9): Multiple or significant operational impacts are active.
- EMERGENCY OPERATIONS (score 10 or greater): A critical or widespread condition requires immediate operational attention. This statement is also triggered at any score by at least 100,000 customers without power statewide or by one or more extreme weather alerts.
The score is calculated from the following active conditions:
- Statewide customers without power: 1,000 or more adds 2 points; 5,000 or more adds 3; 25,000 or more adds 5; and 100,000 or more adds 8 and triggers EMERGENCY OPERATIONS. When fewer than 1,000 customers are out, a statewide outage rate of at least 0.5% adds 1 point.
- Counties with an outage rate of at least 1%: 1 point per county, up to 2 points.
- Weather: active warnings add 2 points, severe alerts add 3, or extreme alerts add 6 and trigger EMERGENCY OPERATIONS. Only the highest applicable weather category is scored.
- FAA advisories: 1 point per active advisory, up to 3 points.
- Airport conditions: two or more airports reporting IFR or LIFR add 2 points; otherwise, three or more airports below VFR add 1 point.
During the initial feed load, the summary displays ASSESSING.... If a required assessment feed fails, it displays DATA INCOMPLETE instead of declaring an operational state because an all-clear cannot be determined.
Power operations use the current and historical ZIP outage tables joined to ZIP boundary geometry. County outages remain available as a secondary layer and provide the authoritative live statewide total when ZIP allocations overlap.
The primary operational map opens with OpenStreetMap Streets and supports Esri Satellite, OpenTopoMap, or no basemap. It also offers municipal boundaries for Pennsylvania, Virginia, West Virginia, and Delaware. Public tile services require internet access and their required attribution must remain visible.
Use Data Sources in the dashboard header to review operational-feed and map-service attribution. Source data can be delayed by its publisher and polling interval.