PingTower checks your servers over HTTP/HTTPS, TCP, and ICMP, keeps latency history, and tells you the moment one goes down or comes back — in the browser, by email, or in Telegram.
| Probe | Evaluate | Store | Alert |
|---|---|---|---|
| Each server gets its own goroutine that checks it over HTTP/HTTPS, TCP, or ICMP on schedule | Failures in a row and slow responses flip a server to DOWN; a success brings it back UP |
Every ping — latency, RTT, packet loss, TLS, DNS — goes to ClickHouse in batches | Status changes reach the browser, email, and Telegram, with a cooldown against spam |
| Product |
|---|
| api — REST API, live status SignalR hub, authentication, notification routing C# · ASP.NET Core 10 · MediatR · SignalR · EF Core · PostgreSQL |
| frontend — dashboard: servers, real-time statuses, latency charts, notification settings React 19 · TypeScript · Vite · TanStack Query · Zustand · Radix UI · Recharts |
| Monitoring |
| ping-service — HTTP/HTTPS, TCP and ICMP probes, one goroutine per target Go · pro-bing · RabbitMQ · Redis |
state-elevator — status lifecycle: failure and latency thresholds → UP / DOWNC# · .NET Worker Service · RabbitMQ · Redis |
| metrics-writer — batched ping history writes to ClickHouse C# · .NET Worker Service · ClickHouse |
| Notifications |
| email-service — SMTP email with retries and a circuit breaker C# · .NET Worker Service · MailKit · Polly |
| tg-bot — Telegram bot: account linking and alert delivery Python · FastAPI · aiogram · FastStream |
| Platform |
| infra — Traefik, PostgreSQL, Redis, ClickHouse, RabbitMQ, logging; one Makefile for the whole stack Docker Compose · Traefik · Loki / Promtail / Grafana |
| I want to… | Go to |
|---|---|
| run everything locally | infra: make -C infra up — storages, broker, migrations and all services |
| understand the event flow | the diagram above and the RabbitMQ topology |
| integrate over REST | api — endpoints, JWT auth, /hubs/monitoring hub |

