December 1, 2025Dec 1 Github:https://github.com/bmartino1/NetProbe_PythonDocker Hub:https://hub.docker.com/r/bmmbmm01/netprobeNetprobe 2.0 – Internet Quality DashboardNetprobe 2.0 is a lightweight, container-friendly network probe and web UI for home / lab internet monitoring.It periodically:Pings your gateway, router and a list of “anchor” sites.Measures packet loss, latency and jitter.Measures DNS lookup latency per DNS server.Runs scheduled and manual Speedtest.net tests.Stores everything in SQLite and renders a dark-mode dashboard with Chart.js.The goal is a simple “drop in and forget it” quality monitor that you can run on Unraid, Proxmox, Docker, etc.Python gunicorn / flask app for a web serverPython code to get and test networks...
December 1, 2025Dec 1 Author If you don't want to use a single sql file for the database, I have just finished edits to use either SQLite or Postgres, adding additional docker variables to a new docker tag.bmmbmm01/netprobe:postgres16*This image can be used with the Unriad CA by changing the repo setting and still use sqlite!This would require a standalone Postgres database running. for ease of deployment to use the docker compose with Postgres built in... I would recommend cloning the github and using the docker compose file and data there...cd /mnt/user/appdata/ git clone https://github.com/bmartino1/NetProbe_Python.git netprobe mkdir -p /mnt/user/appdata/netprobe/{postgres,sqlite} cd /mnt/user/appdata/netprobe ls rm docker-compose.yml ls The above command will premade the necessary volume mounts within the cloned project page... to make the needed folders for the host volume database.../mnt/user/appdata/netprobe/postgres/mnt/user/appdata/netprobe/sqlitethis will also pre setup for the file below... github docker compose file is a general all around OS version...and more the one here is more for the auto env ui stack labels and settings:Now onto Unraid Setup:Then with the docker compose plugin installed, we link the folder /mnt/user/appdata/netprobeThen edit the stack. It should autoload the github version... this version will build the docker for you to run so if you want to make html js or even python changes to the probe.. Be my guest...Here is a compose file for Postgres all in one:#version: "3.8" services: postgres: image: postgres:16-alpine container_name: netprobe-postgres restart: unless-stopped # If you want to keep config in a file: use .env via compose plugin... #env_file: # - ./probe/config.env environment: POSTGRES_DB: ${POSTGRES_DB:-netprobe} POSTGRES_USER: ${POSTGRES_USER:-netprobe} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-netprobe} volumes: - netprobe_pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-netprobe} -d ${POSTGRES_DB:-netprobe}"] interval: 10s timeout: 5s retries: 5 labels: - "net.unraid.docker.icon=https://raw.githubusercontent.com/sgraaf/Unraid-Docker-Templates/main/postgresql16/icon.png" - "folder.view=netprobe" - "net.unraid.docker.managed=composeman" netprobe: #build: ./probe # Image exists... if you edit the gitclone of the project use build over image instead: image: bmmbmm01/netprobe: latest container_name: NetProbe restart: unless-stopped depends_on: postgres: condition: service_healthy # If you want to keep config in a file: # env_file: # - ./probe/config.env environment: WEB_PORT: ${WEB_PORT:-8080} #Use Postgres docker variables... USE_POSTGRES: ${USE_POSTGRES:-true} DB_ENGINE: ${DB_ENGINE:-postgres} # Postgres connection details (match the postgres service above via env file...) POSTGRES_HOST: ${POSTGRES_HOST:-postgres} POSTGRES_PORT: ${POSTGRES_PORT:-5432} POSTGRES_DB: ${POSTGRES_DB:-netprobe} POSTGRES_USER: ${POSTGRES_USER:-netprobe} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-netprobe} #Probe Data. Most are default unless specified... PROBE_INTERVAL: ${PROBE_INTERVAL:-30} PING_COUNT: ${PING_COUNT:-4} APP_TIMEZONE: ${APP_TIMEZONE:-UTC} # Ping targets SITES: ${SITES:-fast.com,google.com,youtube.com} ROUTER_IP: ${ROUTER_IP:-} # DNS config DNS_TEST_SITE: ${DNS_TEST_SITE:-google.com} DNS_NAMESERVER_4: ${DNS_NAMESERVER_4:-My_DNS_Server} DNS_NAMESERVER_4_IP: ${DNS_NAMESERVER_4_IP:-192.168.1.1} # Speedtest configuration SPEEDTEST_ENABLED: ${SPEEDTEST_ENABLED:-True} SPEEDTEST_INTERVAL: ${SPEEDTEST_INTERVAL:-14400} ports: - "${WEB_PORT:-8080}:8080" # Volume only really used if you ever switch to sqlite, but safe to keep.. volumes: - netprobe_data:/data labels: - "folder.view=netprobe" - "net.unraid.docker.managed=composeman" - "net.unraid.docker.webui=http://[IP]:[PORT:8080]" - "net.unraid.docker.icon=https://github.com/bmartino1/unraid-docker-templates/blob/main/images/netprobe.png?raw=true" # Optional: if ping needs extra caps in your environment #cap_add: # - NET_RAW # - NET_ADMIN # - SYS_ADMIN # Optional: use an existing host network on Unraid (e.g. br0) Best in bridgemode.. #networks: # default: # external: true # name: br0 volumes: netprobe_data: driver: local driver_opts: type: none device: /mnt/user/appdata/netprobe/sqlite o: bind netprobe_pgdata: driver: local driver_opts: type: none device: /mnt/user/appdata/netprobe/postgres o: bind and a example env file:# --------------------------------------- # NetProbe + Postgres (.env for Unraid) # This file is read automatically by the # Docker Compose (compose.manager) plugin # --------------------------------------- # ------------------------------- # Core Netprobe settings # ------------------------------- WEB_PORT=8080 APP_TIMEZONE=UTC # Probe timing (you can leave defaults if you want) PROBE_INTERVAL=30 PING_COUNT=4 # ------------------------------- # Database backend (Postgres) # ------------------------------- # Use Postgres docker variables... USE_POSTGRES=true DB_ENGINE=postgres # Postgres connection details (must match postgres service) POSTGRES_HOST=postgres POSTGRES_PORT=5432 POSTGRES_DB=netprobe POSTGRES_USER=netprobe POSTGRES_PASSWORD=netprobe # ------------------------------- # Ping targets # ------------------------------- # Comma-separated list of external sites to ping SITES=fast.com,google.com,youtube.com # Router IP on your LAN ROUTER_IP=192.168.1.1 # ------------------------------- # DNS config # ------------------------------- DNS_TEST_SITE=google.com # Only overriding DNS #4 to be your LAN DNS; # DNS 1–3 will fall back to built-in defaults. DNS_NAMESERVER_4=My_DNS_Server DNS_NAMESERVER_4_IP=192.168.1.1 # ------------------------------- # Speedtest configuration # ------------------------------- SPEEDTEST_ENABLED=True # 4 hours in seconds SPEEDTEST_INTERVAL=14400 If Building, I recoined using the update stack button ...then you can load the web page... Edited April 8Apr 8 by bmartino1 Compose tag change
December 2, 2025Dec 2 Installed and working.. Very slick so far.My need has abated since I moved from flakey point-to-point to buried fiber but still. Nice work.
February 4Feb 4 Hi. Trying this out and I added a bunch of sites to ping.Should I be able to see the ping latency, jitter, and packet loss to the individual targets in the web gui? I see that the feature is available for the DNS servers.When I look at the log files, I can see that each of the sites is being pinged.I wanted to ask since I couldn't find any obvious setting and before I started poking around in the code.I know it seems like a lot of sites, but I just like to know if there are any problems hitting sites anywhere around the world...Thanks for any suggestions and all the programming! Seems like a nifty app!2026-02-04 14:03:58,562 [INFO] ping fast.com -> loss=0.0% avg=31.1ms jitter=0.5ms 2026-02-04 14:04:01,651 [INFO] ping google.com -> loss=0.0% avg=20.2ms jitter=0.9ms 2026-02-04 14:04:04,685 [INFO] ping reddit.com -> loss=0.0% avg=3.9ms jitter=0.8ms 2026-02-04 14:04:07,713 [INFO] ping youtube.com -> loss=0.0% avg=20.4ms jitter=0.5ms 2026-02-04 14:04:10,760 [INFO] ping us-qas-as14907.anchors.atlas.ripe.net -> loss=0.0% avg=36.9ms jitter=0.7ms 2026-02-04 14:04:13,790 [INFO] ping us-atl-as2637.anchors.atlas.ripe.net -> loss=0.0% avg=20.3ms jitter=0.6ms 2026-02-04 14:04:16,843 [INFO] ping us-chi-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=44.0ms jitter=0.6ms 2026-02-04 14:04:19,889 [INFO] ping us-dal-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=36.9ms jitter=0.5ms 2026-02-04 14:04:22,966 [INFO] ping us-lax-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=67.9ms jitter=0.7ms 2026-02-04 14:04:25,997 [INFO] ping us-mia-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=21.8ms jitter=0.8ms 2026-02-04 14:04:29,034 [INFO] ping us-nyc-as14061.anchors.atlas.ripe.net -> loss=0.0% avg=29.1ms jitter=0.5ms 2026-02-04 14:04:32,120 [INFO] ping us-pao-as32.anchors.atlas.ripe.net -> loss=0.0% avg=77.8ms jitter=1.8ms 2026-02-04 14:04:35,205 [INFO] ping us-sjc-as55002.anchors.atlas.ripe.net -> loss=0.0% avg=81.7ms jitter=1.0ms 2026-02-04 14:04:38,456 [INFO] ping us-sea-as55002.anchors.atlas.ripe.net -> loss=0.0% avg=244.8ms jitter=0.6ms 2026-02-04 14:04:41,505 [INFO] ping us-dca-as11039.anchors.atlas.ripe.net -> loss=0.0% avg=37.9ms jitter=1.0ms 2026-02-04 14:04:44,624 [INFO] ping uk-lon-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=110.3ms jitter=0.5ms 2026-02-04 14:04:47,743 [INFO] ping de-fra-as14061.anchors.atlas.ripe.net -> loss=0.0% avg=111.2ms jitter=0.4ms 2026-02-04 14:04:50,873 [INFO] ping ch-zrh-as62371.anchors.atlas.ripe.net -> loss=0.0% avg=124.5ms jitter=7.6ms 2026-02-04 14:04:54,008 [INFO] ping se-sto-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=126.8ms jitter=0.6ms 2026-02-04 14:04:57,230 [INFO] ping au-syd-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=215.2ms jitter=1.6ms 2026-02-04 14:05:00,405 [INFO] ping jp-tyo-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=167.2ms jitter=0.4ms 2026-02-04 14:05:03,656 [INFO] ping sg-sin-as63949-client.anchors.atlas.ripe.net -> loss=0.0% avg=243.3ms jitter=0.5ms 2026-02-04 14:05:13,480 [INFO] Probe ts=1770231826 score=90.58 loss=0.00% latency=75.8ms jitter=0.9ms dns=817.9ms
February 4Feb 4 Author 6 minutes ago, MatthewGP said:Hi. Trying this out and I added a bunch of sites to ping.Should I be able to see the ping latency, jitter, and packet loss to the individual targets in the web gui? I see that the feature is available for the DNS servers.When I look at the log files, I can see that each of the sites is being pinged.I wanted to ask since I couldn't find any obvious setting and before I started poking around in the code.I know it seems like a lot of sites, but I just like to know if there are any problems hitting sites anywhere around the world...Thanks for any suggestions and all the programming! Seems like a nifty app!2026-02-04 14:03:58,562 [INFO] ping fast.com -> loss=0.0% avg=31.1ms jitter=0.5ms 2026-02-04 14:04:01,651 [INFO] ping google.com -> loss=0.0% avg=20.2ms jitter=0.9ms 2026-02-04 14:04:04,685 [INFO] ping reddit.com -> loss=0.0% avg=3.9ms jitter=0.8ms 2026-02-04 14:04:07,713 [INFO] ping youtube.com -> loss=0.0% avg=20.4ms jitter=0.5ms 2026-02-04 14:04:10,760 [INFO] ping us-qas-as14907.anchors.atlas.ripe.net -> loss=0.0% avg=36.9ms jitter=0.7ms 2026-02-04 14:04:13,790 [INFO] ping us-atl-as2637.anchors.atlas.ripe.net -> loss=0.0% avg=20.3ms jitter=0.6ms 2026-02-04 14:04:16,843 [INFO] ping us-chi-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=44.0ms jitter=0.6ms 2026-02-04 14:04:19,889 [INFO] ping us-dal-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=36.9ms jitter=0.5ms 2026-02-04 14:04:22,966 [INFO] ping us-lax-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=67.9ms jitter=0.7ms 2026-02-04 14:04:25,997 [INFO] ping us-mia-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=21.8ms jitter=0.8ms 2026-02-04 14:04:29,034 [INFO] ping us-nyc-as14061.anchors.atlas.ripe.net -> loss=0.0% avg=29.1ms jitter=0.5ms 2026-02-04 14:04:32,120 [INFO] ping us-pao-as32.anchors.atlas.ripe.net -> loss=0.0% avg=77.8ms jitter=1.8ms 2026-02-04 14:04:35,205 [INFO] ping us-sjc-as55002.anchors.atlas.ripe.net -> loss=0.0% avg=81.7ms jitter=1.0ms 2026-02-04 14:04:38,456 [INFO] ping us-sea-as55002.anchors.atlas.ripe.net -> loss=0.0% avg=244.8ms jitter=0.6ms 2026-02-04 14:04:41,505 [INFO] ping us-dca-as11039.anchors.atlas.ripe.net -> loss=0.0% avg=37.9ms jitter=1.0ms 2026-02-04 14:04:44,624 [INFO] ping uk-lon-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=110.3ms jitter=0.5ms 2026-02-04 14:04:47,743 [INFO] ping de-fra-as14061.anchors.atlas.ripe.net -> loss=0.0% avg=111.2ms jitter=0.4ms 2026-02-04 14:04:50,873 [INFO] ping ch-zrh-as62371.anchors.atlas.ripe.net -> loss=0.0% avg=124.5ms jitter=7.6ms 2026-02-04 14:04:54,008 [INFO] ping se-sto-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=126.8ms jitter=0.6ms 2026-02-04 14:04:57,230 [INFO] ping au-syd-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=215.2ms jitter=1.6ms 2026-02-04 14:05:00,405 [INFO] ping jp-tyo-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=167.2ms jitter=0.4ms 2026-02-04 14:05:03,656 [INFO] ping sg-sin-as63949-client.anchors.atlas.ripe.net -> loss=0.0% avg=243.3ms jitter=0.5ms 2026-02-04 14:05:13,480 [INFO] Probe ts=1770231826 score=90.58 loss=0.00% latency=75.8ms jitter=0.9ms dns=817.9msQ/AShould I be able to see the ping latency, jitter, and packet loss to the individual targets in the web gui? I see that the feature is available for the DNS servers.*Only in the log the script run a formula to calculate it and adds to the chart web page and SQLite/Postgres engine database, then display it on the container website/chart.Example:When I look at the log files, I can see that each of the sites is being pinged.*This is by design to help with what's happening script-wise and what is running to generate the data...I wanted to ask since I couldn't find any obvious setting and before I started poking around in the code.?ask what exactly I'm not getting a clear question here. Where to add the extra dns names?see docker env:https://github.com/bmartino1/NetProbe_Python?tab=readme-ov-file#environment-variablesby default I only have 1 dns name for itIn theory, you could change and/or add more, but atm I think its set to uses only one DNS location, as one was enough to grab the data required...https://github.com/bmartino1/NetProbe_Python/blob/main/probe/app.pyI would have to edit some Python variables to open it up for ?csv style dns names? simalr to sites...like google.com,fast.com,etc...Code work for me later...what I'm doing to get the data: line 638# ---------- DNS probes ----------dns_times = []dns_per_server = {}for server_ip in DNS_SERVERS:t = measure_dns_latency(DNS_TEST_SITE, server_ip, count=3)if t is not None:dns_times.append(t)dns_per_server[server_ip] = tavg_dns = statistics.mean(dns_times) if dns_times else 0.0Currently I'm using sites only for ping to grab that data... not dns. as ping is what would give me the latency / jitter....I will look into editing and adding more than one dns for probing. There is quite a bit that would need to be updated, including database integration and website display for more than 1 target...(Currently I don't have plans to edit / update.) I know it seems like a lot of sites, but I just like to know if there are any problems hitting sites anywhere around the world... sites to ping depend on the internet at large, really. It's why,why by default, I hit speed test locations (speedtest.net,fast.com). IPv6 ping is on by default. ipv4 wants ping off for security against ISP scanning and other surface level attacks. sites to check dns like dig xyz... ping is where the latency comes from anyway... dns is more about whether I can resolve the xyz name to a IP...There are additional command options you can run with ping and other python codes and modules to get some data that is already implemented. It's more on what to capture from the Docker log that you see to throw into the database and what to read to form the web html page for its chart statistics... (this is why the api stuff as mention in the github) but that a abit advanced...Thanks for any suggestions and all the programming! Seems like a nifty app!*Thanks, it was a updated redesign of OG Project https://github.com/plaintextpackets/netprobe_liteI tried to maintain their config as much as possible. as it was more a issue with database and OG project with bitnami and some things that didn't make sense being separated and multi-stacked...That said I highly recommend using Postgres via Compose: https://github.com/bmartino1/NetProbe_Python/blob/main/docker-compose.ymlThis way you can take a look around and set up Grafana if you want additional data outside of what the docker is doing. Generic display of what I would want in a clunky but functional interface...I revamped and remade this 1 to fit a nich case need, 2 as I originally was working with someone else to add this to Unraid, and at that time I couldn't devote time to code it and polish it...especially when other projects existed.https://forums.unraid.net/topic/163308-docker-netprobe/ and only did what i did when that became inoperable but wanted similar functionality.So? what exactly are you needing? Edited February 4Feb 4 by bmartino1 forum clenup - typo data
February 4Feb 4 Author only think i could think of would be a button to use the windows above to click to see the Docker log in the web ui to see the test for ping running for a ? live view?... something I can add as a feature later. but still have no plans to edit or update as it functions, and as time goes on I get forgetful and don't remember what I did to do what(more because I finished it going through all thigns on my road map/white paper for this docker and got it to a production level for my use case, and see no other reason to add, edit or change in it.) I have slept since then and don't remember all the things I did myself and would have to re look at all code again... See comments in code... So since time has passed, I would most likely vibe code it again later, asking ai (my local containers) to help me re review and make edits... which I don't have time for atmwhile clunky. It's functional, and I've done what I can with it at the moment. so if you need something specific, I will gladly try to adapt it or assit you, add to or work around it. for me its a quick run to see network stuff when on site as a analys and pen test.especially for side work I do with multiple sites to test networks. (stralink locations at one location, from fiber to another to make sure our network is maintained and helping to cut down on traffic.) as I work with friends in solar areas in the states.
April 8Apr 8 On 2/4/2026 at 12:33 PM, bmartino1 said:only think i could think of would be a button to use the windows above to click to see the Docker log in the web ui to see the test for ping running for a ? live view?... something I can add as a feature later. but still have no plans to edit or update as it functions, and as time goes on I get forgetful and don't remember what I did to do what(more because I finished it going through all thigns on my road map/white paper for this docker and got it to a production level for my use case, and see no other reason to add, edit or change in it.) I have slept since then and don't remember all the things I did myself and would have to re look at all code again... See comments in code... So since time has passed, I would most likely vibe code it again later, asking ai (my local containers) to help me re review and make edits... which I don't have time for atmwhile clunky. It's functional, and I've done what I can with it at the moment. so if you need something specific, I will gladly try to adapt it or assit you, add to or work around it. for me its a quick run to see network stuff when on site as a analys and pen test.especially for side work I do with multiple sites to test networks. (stralink locations at one location, from fiber to another to make sure our network is maintained and helping to cut down on traffic.) as I work with friends in solar areas in the states.Is there anyway you can add the ability to pick a speed test server?
April 8Apr 8 Author 58 minutes ago, gloves259 said:Is there anyway you can add the ability to pick a speed test server?Kind of I'm using the default speedtest binary / python. the CLI technically, there is a way with the CLI to specify the speed test server you're testing from.speedtest-cli: How to Specify a Server - Hivelocity HostingSpeedtest CLI: Internet speed test for the command lineThe speedtest command in the docekr should use speedtest.net and auto pick the closet / best test server automatically...I will look into it when I have free time and add that as a potential docker environment and feature request.Asnard above. I have slept since then and we'll need to reread the code to re-add or change features, but that should be a fairly simple change or add-on as I have to change the speed test command and add an ENV to set a site, assuming that the speed test CLI accepts custom inputs for that option. Edited April 8Apr 8 by bmartino1 data - typo
April 8Apr 8 Author 2 hours ago, gloves259 said:Is there anyway you can add the ability to pick a speed test server?Feature request updates and changes in coming..speedtest-cli --listyou will still need to run this line in the Docker to see availbe speedtest id to set it manually... Options preferred set at docker env level# Optional: force speedtest to use a specific server ID.# Leave blank to use automatic best server selection.# The web UI can override this value for a one-off manual run.SPEEDTEST_SERVER=you can add the Docker env and number to set the server at the Docker template or manually run them in the index page via the id number...-Knowledge is needed beforehand thus the env will not be in the template... by default design it will still be set to auto...There is a Docker tag update change happening soon as I bring this Docker stack back to lattest a templte update will be implemented shortly.See release notes for updates:https://github.com/bmartino1/NetProbe_Python/releases/tag/production-fixes Edited April 8Apr 8 by bmartino1 data - typo
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.