MM Web Monitoring
A simple plugin to monitor website performance and uptime.
by Budi Haryono · github.com/itcomindo/mm-web-monitoring · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/itcomindo/mm-web-monitoring/archive/refs/heads/main.zipReadme
🕸️ MM Web Monitoring
Powerful WordPress plugin for monitoring website uptime, SSL certificates, and domain expiration directly from your WordPress dashboard.
Forget expensive third-party monitoring services. Get enterprise-level website monitoring right in your WordPress dashboard!

🚀 Why MM Web Monitoring?
Imagine managing 50+ client websites when suddenly 5 websites go down simultaneously in the middle of the night. With MM Web Monitoring, you'll know within minutes and can act quickly. This plugin is specifically designed for:
- 🏢 Web Agencies - Monitor all client websites from one dashboard
- 💻 Freelance Developers - Maintain reputation with 24/7 uptime monitoring
- 🛒 E-commerce Owners - Ensure online stores are always accessible
- 📰 Content Creators - Monitor blogs and portfolio websites
- 🏗️ System Administrators - Centralized monitoring for multiple properties
✨ Fitur Unggulan v1.0.9
🔍 Website Monitoring
- Smart Monitoring: Response code check + HTML element verification
- Flexible Intervals: 5 minutes to 24 hours customizable per website
- Real-time Status: Live dashboard dengan auto-reload
- Bulk Operations: Monitor 100+ websites dengan bulk add/actions
- Enhanced Stability: Improved error handling dan plugin reliability
📧 Intelligent Email Notifications
- Unified HTML Templates: Professional, responsive email design
- Smart Triggers: Always notify vs. Error & Recovery only
- Customizable Recipients: Per-website or global email settings
- Anti-spam Protection: Rate limiting to prevent email flooding
🔒 SSL Certificate Monitoring
- Auto SSL Check: Monitor certificate expiration
- Early Warnings: 30/10/7 days before expiry alerts
- Certificate Details: Issuer, expiry date, days remaining
- Bulk SSL Status: See all SSL status in one view
🏢 Domain Monitoring
- Domain Expiry Check: Automatic domain registration monitoring
- Manual Override: Set custom expiry dates when needed
- WHOIS Integration: Real-time domain information lookup
- Advanced Alerts: 10 days before domain expiration warnings
🌐 Domain Expiration Monitoring ⭐ NEW
- Smart Domain Detection: Auto-extract root domain from complex URLs
- Multi-TLD Support: .com, .co.uk, .web.id, .my.id and 1000+ other TLDs
- WHOIS Integration: Real-time domain expiry checking
- Manual Override: Manual input when WHOIS fails
- 10-Day Alerts: Early warning before domain expiration
⚡ Enhanced User Experience
- Consolidated Columns: SSL Status + Expiry in one column
- Configurable Auto-reload: 10-300 seconds customizable interval
- Beautiful UI: Modern, responsive admin interface
- Bulk Management: Select multiple websites for bulk operations
- Inline Editing: Quick edit directly from table view
🆕 What's New in v1.0.9
✨ Domain Monitoring Enhancements
- ✅ NEW: Tombol "Click Enable Domain Expiry Monitoring" untuk aktivasi pemantauan domain
- ✅ NEW: AJAX handler untuk pemeriksaan domain secara real-time
- ✅ NEW: Tampilan status pemeriksaan domain yang lebih informatif
- ✅ IMPROVED: Instruksi yang lebih jelas pada checkbox pemantauan domain
🔧 Performance & Reliability
- ⚡ OPTIMIZED: Penyimpanan tanggal kedaluwarsa domain yang lebih efisien
- ⚡ ENHANCED: Cron job untuk pemeriksaan domain 30 hari sebelum kedaluwarsa
- ⚡ FIXED: Masalah pada handler AJAX untuk pemantauan domain
- ⚡ FIXED: Masalah pada penghentian cron pemeriksaan WHOIS
🔒 Security & Documentation
- 🛡️ IMPROVED: Validasi input pada form pemantauan domain
- 🛡️ ADDED: Nonce untuk verifikasi permintaan AJAX
- 📖 UPDATED: Dokumentasi kode yang lebih lengkap
- 📖 NEW: Panduan pengguna yang diperbarui untuk fitur pemantauan domain
💡 Pro Tip: Aktifkan pemantauan domain untuk semua website penting Anda dan periksa dashboard secara berkala untuk melihat status domain.
🕐 Global Daily Monitoring
- Daily Global Check: Full SSL & domain check once daily
- Customizable Schedule: Set what time global check runs (00:00-23:00)
- Smart Notifications: Anti-duplicate to avoid spam
- Comprehensive Coverage: Auto-check all active monitoring
🤔 Critical Questions Answered
Q: "Self-hosted monitoring is useless - what if the monitoring server goes down?"
This is actually the #1 concern, and here are the logical, practical solutions:
🎯 Multi-Server Monitoring Strategy (Recommended)
Primary Solution: Distributed Monitoring
# Professional Setup (3-Server Strategy)
Server 1: Main business site (monitors 70% of sites)
Server 2: Backup site/VPS (monitors 70% of sites + Server 1)
Server 3: Third-party hosting (monitors critical sites + Server 1 & 2)
Why This Works:
- ✅ No Single Point of Failure: If one server goes down, others continue monitoring
- ✅ Cost Effective: Basic VPS costs $5-15/month vs. $50+ for external services
- ✅ Cross-Network Coverage: Different hosting providers = different network paths
- ✅ Geographic Diversity: Monitor from multiple locations globally
🔄 Automated Failover Solutions
Option 1: Monitor-the-Monitor Setup
// Install on Server 2 to monitor Server 1
add_action('mmwm_server_down_detected', function() {
// Automatically take over monitoring duties
wp_remote_post('https://backup-server.com/activate-monitoring');
// Send alert to admin
wp_mail('admin@yoursite.com', 'Primary Monitor Down',
'Backup monitoring server has taken over.');
});
Option 2: External Monitor for Critical Infrastructure
- Use free tier external service (UptimeRobot free = 50 monitors) to monitor your monitoring servers only
- Monitor your 3 monitoring servers + critical business sites
- If monitoring server goes down, external service alerts you immediately
🌐 Hybrid Monitoring Architecture
Best Practice: 80/20 Strategy
- 80% Self-hosted: All regular websites monitored by your servers
- 20% External backup: Critical business sites + monitoring servers watched by external service
Example Configuration:
External Service (UptimeRobot Free):
- monitor-server-1.yoursite.com
- monitor-server-2.yoursite.com
- critical-ecommerce-site.com
- main-business-website.com
- payment-gateway-site.com
Self-hosted (MM Web Monitoring):
- All client websites
- All development sites
- All portfolio sites
- All secondary business sites
Q: "What about network outages, ISP problems, or datacenter issues?"
These are valid concerns with logical solutions:
🌍 Geographic Distribution
# Professional Multi-Location Setup
Primary Monitor: Your main office/hosting (monitors 100% of sites)
Secondary Monitor: Different city/state/country (monitors 50% critical sites)
Tertiary Monitor: Cloud service different provider (monitors 25% most critical)
📱 Mobile Monitoring Backup
// Add mobile checking capability
add_action('mmwm_primary_down', function() {
// Trigger mobile app to start basic monitoring
// Send push notification to check sites manually
// Activate backup monitoring from mobile hotspot
});
Q: "Self-hosted monitoring creates more complexity - why not just use external services?"
Here's the real-world cost-benefit analysis:
💰 Total Cost of Ownership (5 Years)
External Service Route:
UptimeRobot Pro: $7/month × 60 months = $420
+ Pingdom: $10/month × 60 months = $600
+ StatusCake: $15/month × 60 months = $900
+ Setup complexity: 20 hours × $50/hour = $1000
+ Monthly management: 2 hours × 60 months × $50 = $6000
= Total: $8,920 over 5 years
Self-hosted Route:
MM Web Monitoring: $0 (one-time setup)
+ VPS for backup: $10/month × 60 months = $600
+ Setup time: 8 hours × $50/hour = $400
+ Monthly management: 0.5 hours × 60 months × $50 = $1500
= Total: $2,500 over 5 years (72% savings)
🎯 Reliability Comparison
External Services Issues:
- ❌ False positives from Cloudflare blocking
- ❌ IP changes without notification
- ❌ Service outages (even big companies have downtime)
- ❌ Limited customization
- ❌ No control over monitoring logic
Self-hosted Benefits:
- ✅ Complete control over monitoring logic
- ✅ No false positives from security rules
- ✅ Customizable intervals and notifications
- ✅ Direct access to logs and debugging
- ✅ Integration with your existing systems
Q: "What if I don't have technical skills for server management?"
Multiple solutions for different skill levels:
🎓 Beginner Level: Managed WordPress Hosting
# Use these managed services (they handle server management):
- WP Engine: Install plugin → Works automatically
- Kinsta: One-click WordPress → Install plugin
- SiteGround: Managed WordPress → Plugin installation
- Cloudways: Managed hosting → Simple setup
🔧 Intermediate Level: One-Click VPS
# Services with automatic WordPress installation:
- DigitalOcean App Platform
- Linode WordPress Marketplace
- Vultr WordPress Apps
- AWS Lightsail WordPress
⚡ Advanced Level: Full Control
# Custom server setup for maximum control
- Custom VPS with cPanel/Plesk
- Docker containers for isolation
- Kubernetes for enterprise scaling
- Custom monitoring dashboards
📊 Perfect For These Use Cases
| Use Case | Benefit |
|---|---|
| Agency Managing 50+ Client Sites | Monitor all client websites from one dashboard, get instant alerts, professional email reports |
| E-commerce Multi-store Owner | Ensure all stores are online 24/7, SSL certificates valid, domains not expiring |
| Freelance Developer | Proactive monitoring = happy clients, early problem detection before clients notice |
| Corporate IT Team | Centralized monitoring for all company domains, SSL compliance, uptime SLA tracking |
| Content Creator Network | Monitor blog performance, ensure AdSense/affiliate sites always accessible |
� Addressing Common Concerns & Limitations
Q: "Plugin updates might break monitoring - what about automatic updates?"
Solution: Update Safety Strategy
// Add to wp-config.php for staging environment testing
define('MMWM_STAGING_MODE', true); // Test updates in staging first
define('MMWM_BACKUP_CONFIG', true); // Auto-backup settings before updates
define('MMWM_ROLLBACK_ENABLED', true); // Enable quick rollback feature
// Disable auto-updates for critical monitoring server
add_filter('auto_update_plugin', function($update, $item) {
if ($item->slug === 'mm-web-monitoring') {
return false; // Manual updates only
}
return $update;
}, 10, 2);
Best Practices:
- ✅ Test in staging environment before production updates
- ✅ Schedule updates during low-traffic hours
- ✅ Backup WordPress site before major updates
- ✅ Monitor monitoring - have backup alerts during update window
Q: "Database growth concerns - monitoring data will fill up server space"
Solution: Intelligent Data Management
// Automatic cleanup configuration
define('MMWM_RETAIN_LOGS_DAYS', 90); // Keep logs for 90 days
define('MMWM_ARCHIVE_OLD_DATA', true); // Archive instead of delete
define('MMWM_COMPRESS_LOGS', true); // Compress old monitoring data
define('MMWM_MAX_DB_SIZE_MB', 500); // Alert when DB exceeds 500MB
// Custom cleanup schedule
add_action('mmwm_daily_cleanup', function() {
// Archive data older than 6 months
// Compress logs older than 30 days
// Delete non-critical logs older than 1 year
});
Data Management Features:
- ✅ Automatic log rotation every 30 days
- ✅ Compression for old data (up to 80% space savings)
- ✅ Configurable retention periods per data type
- ✅ Export capabilities for historical analysis
Q: "WordPress cron is unreliable - what if monitoring doesn't run?"
Solution: Multiple Cron Strategies
Option 1: Server-Level Cron (Recommended)
# Add to server crontab for guaranteed execution
*/5 * * * * curl -s https://yoursite.com/wp-cron.php >/dev/null 2>&1
# Alternative with wget
*/5 * * * * wget -q -O - https://yoursite.com/wp-cron.php >/dev/null 2>&1
# For monitoring-specific cron
*/1 * * * * php /path/to/wordpress/wp-content/plugins/mm-web-monitoring/cron-runner.php
Option 2: External Cron Services
# Use external services to trigger WordPress cron
- EasyCron.com (free tier available)
- cron-job.org (free service)
- SetCronJob.com (free tier)
# Setup: Point to your wp-cron.php URL every 5 minutes
Option 3: Monitoring Watchdog
// Self-healing monitoring system
add_action('init', function() {
$last_run = get_option('mmwm_last_cron_run');
$current_time = time();
// If cron hasn't run in 10 minutes, force execution
if (($current_time - $last_run) > 600) {
do_action('mmwm_force_cron_execution');
update_option('mmwm_last_cron_run', $current_time);
}
});
Q: "Email notifications might be marked as spam - how to ensure delivery?"
Solution: Professional Email Configuration