# revlat/pings architecture

> Architecture diagram of the GitHub repository revlat/pings, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/revlat/pings
- Repository: https://github.com/revlat/pings

## Overview

pings monitors hosts continuously through either a CLI or GUI: each frontend accepts host addresses (including file input) and an interval, starts the shared concurrent monitor, then renders per-host reachability, counts, latency, uptime, and status-change timing. The monitor invokes the system ping command and updates in-memory host state before calling the frontend with each scan snapshot. The README documents both frontends and their sorting and display capabilities; only the listed source files were sampled, so finer internal GUI or CLI boundaries are not inferred.

Main entry points: [`cmd/pings-gui/main.go`](https://github.com/revlat/pings/blob/main/cmd/pings-gui/main.go) (GUI frontend), [`cmd/pings/main.go`](https://github.com/revlat/pings/blob/main/cmd/pings/main.go) (CLI frontend), [`pkg/pinger/pinger.go`](https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go) (Scan coordinator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontends["User interfaces"]
  node_cli["CLI frontend<br/>[main.go]"]
  node_gui["GUI frontend<br/>[main.go]"]
  node_setup["GUI setup form<br/>[main.go]"]
  node_cli_view["Terminal status view<br/>[main.go]"]
  node_gui_view["Sortable status table<br/>[main.go]"]
end

subgraph group_monitoring["Monitoring engine"]
  node_file_input["Host file input<br/>[pinger.go]"]
  node_monitor["Scan coordinator<br/>[pinger.go]"]
  node_parallel["Concurrent host checks<br/>[pinger.go]"]
  node_state["Host status state<br/>[pinger.go]"]
  node_metrics["Latency and uptime<br/>[pinger.go]"]
  node_time_format["Change-time formatting<br/>[pinger.go]"]
end

subgraph group_system["System integration"]
  node_ping["System ping process"]
end

node_user(("Operator"))
node_terminal(("Terminal"))
node_display(("Graphical display"))

node_user -->|"starts with targets"| node_cli
node_user -->|"starts with targets"| node_gui
node_gui -->|"shows when empty"| node_setup
node_setup -->|"loads file via"| node_file_input
node_cli -->|"loads file via"| node_file_input
node_gui -->|"loads file via"| node_file_input
node_cli -->|"starts scan loop"| node_monitor
node_gui -->|"starts scan loop"| node_monitor
node_monitor -->|"dispatches checks"| node_parallel
node_parallel -->|"runs host ping"| node_ping
node_parallel -->|"updates results"| node_state
node_monitor -->|"snapshots hosts"| node_state
node_state -->|"provides counts and latency"| node_metrics
node_cli -->|"renders snapshots"| node_cli_view
node_gui -->|"renders snapshots"| node_gui_view
node_cli_view -->|"formats change time"| node_time_format
node_gui_view -->|"formats change time"| node_time_format
node_cli_view -->|"writes status"| node_terminal
node_gui_view -->|"shows status"| node_display

click node_cli "https://github.com/revlat/pings/blob/main/cmd/pings/main.go"
click node_gui "https://github.com/revlat/pings/blob/main/cmd/pings-gui/main.go"
click node_setup "https://github.com/revlat/pings/blob/main/cmd/pings-gui/main.go"
click node_cli_view "https://github.com/revlat/pings/blob/main/cmd/pings/main.go"
click node_gui_view "https://github.com/revlat/pings/blob/main/cmd/pings-gui/main.go"
click node_file_input "https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go"
click node_monitor "https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go"
click node_parallel "https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go"
click node_state "https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go"
click node_metrics "https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go"
click node_time_format "https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_gui,node_setup,node_cli_view,node_gui_view toneBlue
class node_file_input,node_monitor,node_parallel,node_state,node_metrics,node_time_format toneAmber
class node_ping toneMint
class node_user,node_terminal,node_display toneIndigo
```

## Components

### User interfaces

- [CLI frontend](https://github.com/revlat/pings/blob/main/cmd/pings/main.go): `cmd/pings/main.go`
- [GUI frontend](https://github.com/revlat/pings/blob/main/cmd/pings-gui/main.go): `cmd/pings-gui/main.go`
- [GUI setup form](https://github.com/revlat/pings/blob/main/cmd/pings-gui/main.go): `cmd/pings-gui/main.go`
- [Terminal status view](https://github.com/revlat/pings/blob/main/cmd/pings/main.go): `cmd/pings/main.go`
- [Sortable status table](https://github.com/revlat/pings/blob/main/cmd/pings-gui/main.go): `cmd/pings-gui/main.go`

### Monitoring engine

- [Host file input](https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go): `pkg/pinger/pinger.go`
- [Scan coordinator](https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go): `pkg/pinger/pinger.go`
- [Concurrent host checks](https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go): `pkg/pinger/pinger.go`
- [Host status state](https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go): `pkg/pinger/pinger.go`
- [Latency and uptime](https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go): `pkg/pinger/pinger.go`
- [Change-time formatting](https://github.com/revlat/pings/blob/main/pkg/pinger/pinger.go): `pkg/pinger/pinger.go`

### System integration

- **System ping process**

### Other components

- **Operator**
- **Terminal**
- **Graphical display**

## Connections

- Operator → CLI frontend: starts with targets
- Operator → GUI frontend: starts with targets
- GUI frontend → GUI setup form: shows when empty
- GUI setup form → Host file input: loads file via
- CLI frontend → Host file input: loads file via
- GUI frontend → Host file input: loads file via
- CLI frontend → Scan coordinator: starts scan loop
- GUI frontend → Scan coordinator: starts scan loop
- Scan coordinator → Concurrent host checks: dispatches checks
- Concurrent host checks → System ping process: runs host ping
- Concurrent host checks → Host status state: updates results
- Scan coordinator → Host status state: snapshots hosts
- Host status state → Latency and uptime: provides counts and latency
- CLI frontend → Terminal status view: renders snapshots
- GUI frontend → Sortable status table: renders snapshots
- Terminal status view → Change-time formatting: formats change time
- Sortable status table → Change-time formatting: formats change time
- Terminal status view → Terminal: writes status
- Sortable status table → Graphical display: shows status
