[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82193":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":14,"stars90d":16,"forks30d":16,"starsTrendScore":15,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":31,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":16,"starSnapshotCount":16,"syncStatus":13,"lastSyncTime":35,"discoverSource":36},82193,"internet-monitor","FutureSolutionDev\u002Finternet-monitor","FutureSolutionDev","free, open-source tool that runs silently in the background and monitors your internet connection 24\u002F7 using three simultaneous checks","",null,"Go",54,2,26,1,0,6,44.03,false,"master",true,[23,24,25,26,27,28,29,30],"checker","dns","go","golang","internet","monitor","monitoring","opensource","2026-06-01 09:50:17","2026-06-10 09:16:12","# 🌐 Internet Monitor\n\n![Logo](dashboard\u002Fassets\u002Ffavicon.png)\n\n[![Build & Release](https:\u002F\u002Fgithub.com\u002FFutureSolutionDev\u002Finternet-monitor\u002Factions\u002Fworkflows\u002Fbuild.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FFutureSolutionDev\u002Finternet-monitor\u002Factions\u002Fworkflows\u002Fbuild.yml)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-blue.svg)](LICENSE)\n[![Go Version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGo-1.21+-00ADD8?logo=go)](https:\u002F\u002Fgo.dev)\n![Platforms](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey)\n\n> [🇸🇦 اقرأ بالعربية](README.ar.md)\n\n**A free, open-source tool for real-time internet connectivity monitoring and speed testing.**\n\nRuns silently in the background, logs every disconnection with its cause and duration, measures your download speed on demand, and displays a live visual dashboard in your browser — with instant notifications on every status change.\n\n---\n\n![Dashboard](docs\u002Fscreenshot-dashboard.png)\n\n![Dashboard Arabic RTL](docs\u002Fscreenshot-dashboard-ar.png)\n\n![Speed Test Running](docs\u002Fscreenshot-speed-running.png)\n\n![Speed Test Result](docs\u002Fscreenshot-speed-result.png)\n\n![Logs](docs\u002Fscreenshot-logs.png)\n\n![Settings Targets](docs\u002Fscreenshot-settings-targets.png)\n\n## 💡 Why Internet Monitor?\n\nUsers often experience internet drops without any concrete evidence — no timestamps, no causes, no durations. **Internet Monitor** solves this practically:\n\n| Who | What they get |\n| --- | ------------- |\n| 🧑 **End users** | Automatic notifications on every drop + one-click speed test |\n| 🛠️ **Support teams** | Full dashboard with exportable JSONL\u002FCSV logs to present to ISPs |\n| 👨‍💻 **Developers** | Detailed Discord\u002FSlack webhook with structured per-check data |\n\n---\n\n## ✨ Features\n\n| Feature | Details |\n| ------- | ------- |\n| 🔍 **Multi-layer checking** | TCP Ping + HTTP + DNS simultaneously — all targets configurable as arrays |\n| 📊 **Live dashboard** | Real-time latency chart + stats + event log + recent checks table |\n| ⚡ **Speed Test** | Adaptive download measurement (Cloudflare endpoint) with configurable parallel connections and timeout |\n| 🔔 **Instant notifications** | Windows Toast + Discord\u002FSlack Webhook + custom alert sound |\n| 📋 **Structured logs** | Daily JSONL files — connectivity events in `connectivity_DATE.jsonl`, speed tests in `speedtest_DATE.jsonl` |\n| 📤 **CSV export** | Export connectivity logs and speed test history directly from the dashboard |\n| 🔄 **Auto-update** | Checks GitHub Releases, one-click update with automatic restart |\n| 🌐 **Bilingual UI** | Arabic & English with full RTL support, toggle anytime |\n| 🖥️ **Two modes** | System Tray (background) + Standalone native window |\n| 🔒 **Single instance** | Prevents running more than one copy at the same time |\n| ⚙️ **Settings tabs** | Organized settings: Monitoring \u002F Targets \u002F Notifications \u002F Speed Test |\n\n---\n\n## 🚀 Quick Start\n\n> **Windows SmartScreen warning?** Click **\"More info\" → \"Run anyway\"**. The binary is unsigned — the source code is fully auditable above.\n\nDownload the latest pre-built binary from [**Releases**](https:\u002F\u002Fgithub.com\u002FFutureSolutionDev\u002Finternet-monitor\u002Freleases\u002Flatest):\n\n| File | OS | Mode |\n| ---- | -- | ---- |\n| `internet-monitor-windows.exe` | Windows 10\u002F11 | System Tray |\n| `internet-monitor-gui-windows.exe` | Windows 10\u002F11 | Standalone window |\n| `internet-monitor-macos-arm64` | macOS M1\u002FM2\u002FM3 | System Tray |\n| `internet-monitor-macos-intel` | macOS Intel | System Tray |\n| `internet-monitor-linux` | Ubuntu\u002FDebian | System Tray |\n\n**Windows — run once, then right-click the tray icon → Open Dashboard:**\n\n```bat\ninternet-monitor-windows.exe\n```\n\n**Windows — install to run automatically at startup:**\n\n```bat\nscripts\\install.cmd\n```\n\n**macOS \u002F Linux:**\n\n```bash\nchmod +x internet-monitor-*\n.\u002Finternet-monitor-macos-arm64\n```\n\nOpen the dashboard at **\u003Chttp:\u002F\u002Flocalhost:8765>**\n\n---\n\n## 🧑‍💻 Dev Mode (Live Reload)\n\n### Option A — `go run` (simplest)\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FFutureSolutionDev\u002Finternet-monitor.git\ncd internet-monitor\ngo mod tidy\ngo run .\n```\n\n### Option B — [Air](https:\u002F\u002Fgithub.com\u002Fair-verse\u002Fair) (auto-rebuild on file change)\n\n```bash\n# Install air\ngo install github.com\u002Fair-verse\u002Fair@latest\n\n# Run with live reload\nair\n```\n\nAir watches `.go`, `.html`, `.js`, and `.css` files and rebuilds automatically.\n\nOpen the dashboard at **\u003Chttp:\u002F\u002Flocalhost:8765>** — edit any source file and the binary reloads.\n\n> The native window (GUI) version requires GCC — see [Build from Source](#️-build-from-source) below.\n\n---\n\n## 🛠️ Build from Source\n\n### Requirements\n\n| Tool | Version | Note |\n| ---- | ------- | ---- |\n| [Go](https:\u002F\u002Fgo.dev\u002Fdl\u002F) | 1.21+ | Required |\n| GCC (TDM-GCC recommended) | any | Optional — native window version only |\n\n### Tray version — no CGO needed\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FFutureSolutionDev\u002Finternet-monitor.git\ncd internet-monitor\ngo mod tidy\nCGO_ENABLED=0 go build -ldflags=\"-H=windowsgui -s -w\" -o internet-monitor.exe .\n```\n\n### Native window version — requires GCC\n\n**Windows** — auto-installs TDM-GCC if missing:\n\n```bat\nscripts\\build-gui.cmd\n```\n\n**macOS \u002F Linux** — GCC is pre-installed:\n\n```bash\ngo build -ldflags=\"-s -w\" -o internet-monitor-gui .\u002Fcmd\u002Fgui\u002F\n```\n\n### Available scripts\n\n```text\nscripts\\build.cmd        Build tray exe\nscripts\\build-gui.cmd    Build native window (auto-installs GCC if missing)\nscripts\\build-debug.cmd  Build with visible console (debugging)\nscripts\\run.cmd          Build and run (tray)\nscripts\\run-gui.cmd      Build and run (native window — requires GCC)\nscripts\\stop.cmd         Stop running instance\nscripts\\install.cmd      Install to Windows Startup\nscripts\\uninstall.cmd    Remove from Startup\nscripts\\logs.cmd         Open logs folder\n```\n\n### CI\u002FCD — GitHub Actions\n\nEvery push to `master` triggers automatic builds for all platforms:\n\n```text\nWindows Tray  →  cross-compiled on Linux (CGO disabled)\nWindows GUI   →  windows-latest runner\nmacOS         →  macos-latest (arm64 native + intel cross-compile)\nLinux         →  ubuntu-22.04 (WebKitGTK 4.0)\n```\n\n---\n\n## ⚙️ Configuration\n\n`config.json` is created automatically on first run with sensible defaults.\nEdit it directly or use the **Settings tab** in the dashboard.\n\n```json\n{\n  \"check_interval_sec\": 5,\n  \"ping_targets\":  [\"8.8.8.8:53\", \"1.1.1.1:53\"],\n  \"http_targets\":  [\"https:\u002F\u002Fconnectivitycheck.gstatic.com\u002Fgenerate_204\"],\n  \"dns_targets\":   [\"www.google.com\", \"www.cloudflare.com\"],\n  \"fail_threshold\": 3,\n  \"packet_loss_threshold\": 20.0,\n  \"latency_threshold_ms\": 500,\n  \"log_dir\": \"logs\",\n  \"webhook_url\": \"\",\n  \"dashboard_port\": 8765,\n  \"speed_test\": {\n    \"download_targets\": [\"https:\u002F\u002Fspeed.cloudflare.com\u002F__down\"],\n    \"parallel_connections\": 4,\n    \"timeout_seconds\": 10,\n    \"alert_threshold_mbps\": 0\n  }\n}\n```\n\n| Field | Description |\n| ----- | ----------- |\n| `ping_targets` | TCP addresses — tries all in parallel, OK if any succeeds |\n| `http_targets` | HTTP URLs — tries in order until one returns 200\u002F204 |\n| `dns_targets` | DNS domains — tries in order until one resolves |\n| `fail_threshold` | Consecutive failures before declaring disconnected |\n| `webhook_url` | Discord or Slack webhook URL (leave empty to disable) |\n| `speed_test.parallel_connections` | Parallel HTTP connections for download test (1–8, default 4) |\n| `speed_test.timeout_seconds` | Download test duration in seconds (default 10) |\n| `speed_test.alert_threshold_mbps` | Send webhook if speed drops below this value (0 = disabled) |\n\n---\n\n## 📡 Webhooks — Discord & Slack\n\nInternet Monitor sends webhook notifications for three event types:\n\n| Trigger | Payload |\n| ------- | ------- |\n| Connectivity event (connected \u002F degraded \u002F disconnected) | Per-layer status + packet loss + duration |\n| Test Targets (from Settings) | Per-target latency and pass\u002Ffail |\n| Speed Test result | Download speed + duration + latency |\n\n### Discord example — disconnection event\n\n```json\n{\n  \"username\": \"Internet Monitor\",\n  \"embeds\": [{\n    \"title\": \"❌ Internet Disconnected\",\n    \"color\": 16007988,\n    \"fields\": [\n      {\"name\": \"🔌 TCP Ping\",    \"value\": \"❌ Failed\", \"inline\": true},\n      {\"name\": \"🌐 HTTP\",        \"value\": \"❌ Failed\", \"inline\": true},\n      {\"name\": \"🔍 DNS\",         \"value\": \"✅ OK\",     \"inline\": true},\n      {\"name\": \"📉 Packet Loss\", \"value\": \"85.0%\",    \"inline\": true},\n      {\"name\": \"⏱️ Duration\",    \"value\": \"2m 15s\",   \"inline\": true}\n    ],\n    \"timestamp\": \"2026-05-11T14:30:00Z\"\n  }]\n}\n```\n\n### Discord example — speed test result\n\n```json\n{\n  \"username\": \"Internet Monitor\",\n  \"embeds\": [{\n    \"title\": \"🚀 Speed Test Completed\",\n    \"color\": 2278718,\n    \"fields\": [\n      {\"name\": \"📥 Download\", \"value\": \"94.3 Mbps\", \"inline\": true},\n      {\"name\": \"⏱️ Duration\", \"value\": \"10.0s\",     \"inline\": true},\n      {\"name\": \"📡 Latency\",  \"value\": \"12ms\",       \"inline\": true}\n    ]\n  }]\n}\n```\n\n---\n\n## ⚡ Speed Test\n\nThe built-in speed test uses an **adaptive HTTP download** approach:\n\n- Starts with small payloads and increases chunk size over the configured duration\n- Opens multiple parallel connections (default: 4) to saturate modern high-speed links\n- Uses **Cloudflare's speed endpoint** (`speed.cloudflare.com`) by default — no account required\n- Results are stored in `logs\u002Fspeedtest_DATE.jsonl` (separate from connectivity logs)\n- History is viewable and exportable as CSV directly from the dashboard\n\n> **Privacy:** speed test payloads contain no device identifiers. Traffic goes only to the endpoint you configure in Settings → Speed Test.\n\n---\n\n## 📂 Project Structure\n\n```text\ninternet-monitor\u002F\n├── main.go                   Entry point — Tray version\n├── singleton_*.go            Single-instance guard (per OS)\n├── cmd\u002Fgui\u002F                  Native window version\n│   ├── main.go\n│   ├── gui_notifier.go       GUI-specific Notifier implementation\n│   ├── tray_windows.go       Background systray in GUI mode\n│   └── notify_*.go           OS notifications (Windows \u002F Unix)\n├── core\u002F                     Shared monitoring engine\n│   ├── engine.go             Engine struct + Notifier interface + MultiNotifier\n│   └── doc.go\n├── types\u002F                    Shared data types (CheckResult, Status, Event)\n├── speedtest\u002F                Adaptive download speed test engine\n├── config\u002F                   Config struct, loading, migration\n├── monitor\u002F                  Check engine — TCP \u002F HTTP \u002F DNS\n├── dashboard\u002F                HTTP server, SSE stream, REST APIs, embedded assets\n│   ├── server.go\n│   ├── notifier.go           DashNotifier (core.Notifier implementation)\n│   └── assets\u002F               Embedded HTML \u002F CSS \u002F JS (Chart.js local)\n├── logger\u002F                   JSONL logging + Discord\u002FSlack webhook formatting\n├── tray\u002F                     System tray icon, menu, OS notifications\n│   └── notifier.go           TrayNotifier (core.Notifier implementation)\n├── updater\u002F                  GitHub Releases API + minio\u002Fselfupdate\n├── startup\u002F                  OS startup registration\n├── .github\u002Fworkflows\u002F        build.yml — CI\u002FCD for all platforms\n└── scripts\u002F                  Windows build \u002F install \u002F run helpers\n```\n\n---\n\n## 📋 Log Format\n\n```text\nlogs\u002F\n  connectivity_2026-05-11.jsonl   Connectivity events (one JSON per line)\n  speedtest_2026-05-11.jsonl      Speed test results (one JSON per line)\n  app.log                          App errors and webhook status\n```\n\n**Connectivity event:**\n\n```json\n{\n  \"timestamp\": \"2026-05-11T14:30:00Z\",\n  \"event\": \"disconnected\",\n  \"duration_seconds\": 45.2,\n  \"reason\": {\n    \"tcp_ping_failed\": true,\n    \"http_failed\": true,\n    \"dns_failed\": false,\n    \"packet_loss_pct\": 80.0,\n    \"avg_latency_ms\": 0\n  }\n}\n```\n\n**Speed test result:**\n\n```json\n{\n  \"timestamp\": \"2026-05-11T14:35:00Z\",\n  \"event\": \"speed_test\",\n  \"download_mbps\": 94.3,\n  \"upload_mbps\": null,\n  \"latency_ms\": 12,\n  \"duration_seconds\": 9.8,\n  \"endpoints\": [\"https:\u002F\u002Fspeed.cloudflare.com\u002F__down\"],\n  \"parallel_connections\": 4,\n  \"triggered_by\": \"user\"\n}\n```\n\n---\n\n## 🤝 Contributing\n\nAll contributions are welcome — bugs, features, translations, documentation.\n\n### 1. Fork and clone\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FYOUR_USERNAME\u002Finternet-monitor.git\ncd internet-monitor\ngo mod tidy\n```\n\n### 2. Create a branch\n\n```bash\ngit checkout -b feature\u002Fyour-feature-name\n```\n\n### 3. Commit convention\n\nWe use [Conventional Commits](https:\u002F\u002Fwww.conventionalcommits.org\u002F) — commit type drives auto-versioning:\n\n| Prefix | Version bump | Example |\n| ------ | ------------ | ------- |\n| `feat:` | minor (v1.1.0) | `feat: add dark mode toggle` |\n| `fix:` | patch (v1.0.1) | `fix: resolve DNS timeout on macOS` |\n| `BREAKING CHANGE` | major (v2.0.0) | in commit body |\n| `docs:`, `refactor:` | patch | no functional change |\n\n### 4. Open a Pull Request\n\n- Describe the motivation clearly\n- Attach a screenshot for any visual change\n- Confirm `go build .\u002F...` passes\n\n### Areas looking for help\n\n- Windows ARM64 build support\n- Telegram webhook integration\n- Mobile-responsive dashboard improvements\n- macOS native menu bar integration\n- Per-target latency history charts\n- Additional language support\n\n---\n\n## 🗺️ Roadmap\n\n| Feature | Status |\n| ------- | ------ |\n| ⬆️ Upload speed measurement | 🔜 v2 |\n| 📬 Telegram webhook support | 🔜 Planned |\n| ⏰ Scheduled speed tests | 🔜 Planned |\n| 📱 Mobile-responsive dashboard | 🔜 Planned |\n| 🪟 Windows ARM64 build | 🔜 Planned |\n| 📈 Per-ISP analytics & weekly reports | 💡 Proposed |\n| 📄 PDF report export (for ISP complaints) | 💡 Proposed |\n| 🔌 Plugin API for custom check types | 💡 Proposed |\n\n---\n\n## 📄 License\n\nMIT — Free for personal and commercial use.\n\nBuilt with ❤️ by [FutureSolutionDev](https:\u002F\u002Fgithub.com\u002FFutureSolutionDev)\n","Internet Monitor 是一个免费且开源的工具，用于实时监控互联网连接状态和速度测试。其核心功能包括通过TCP Ping、HTTP和DNS三种方式同时进行多层检查，并提供实时可视化仪表盘展示连接延迟、统计信息及事件日志。用户还可以按需进行下载速度测试，并接收即时通知。此外，该工具支持自动生成结构化的日志文件，方便导出为JSONL或CSV格式，便于向ISP提交报告。适合个人用户、技术支持团队以及开发者在需要持续监控网络状况并快速响应中断情况时使用，尤其适用于对网络稳定性要求较高的工作环境。","2026-06-11 04:08:02","CREATED_QUERY"]