Check the demo here: https://status.harry.id
Consider adding a screenshot.
Neat project. Thank you for sharing.
Good news, OP is responsive and added both the link and a screenshot: https://github.com/harsxv/tinystatus/commit/41d9004b391cf76f...
https://github.com/harsxv/tinystatus/commit/fcde73820dd9cdd1...
Screenshot added.
For doing something like
- name: MySQL
type: exec
command:
- /usr/bin/mysqladmin
- --defaults-file=/path/to/file/handling/credentials
- ping
Not sure about others, but MySQL after a while blocks a host if there are too many connection attempts without successful signin and the ping code in the repo already calls out to an external process, so it should be quite straight ahead to add.In this case it's a bit moot because the yaml file works like a database, but when you deploy this using, say, Docker or k8s, you can use a different method to configure environment variables and skip .env files.
If this is a goal, why is it a goal for only half the configuration?
It's currently 16:20 UTC and the last update timestamp on the bottom of the demo is 06:36 (unknown timezone).
Alternatively, you could use GitHub Actions and schedule the workflow to run every minute.
However, I prefer the Lambda approach.
I know that this is not going to be exposed on Internet, but I think it should be fixed in any case. I am at work, but I can open a PR fixing it later.
Depending on the OS, ping is either set setuid[1] as root, or more commonly these days, ping is granted a "capability"[2], such as CAP_NET_RAW on Linux. macOS does things a little different[3].
This allows non-root users to run stuff like ping without granting them full root access. You do not need to, nor should you, run the script as root.
% ls -l /usr/bin/ping
-rwxr-xr-x 1 root root 89768 Apr 8 09:00 /usr/bin/ping
% getcap /usr/bin/ping
/usr/bin/ping cap_net_raw=ep
~
% whoami
jake
~
% id
uid=1000(jake) gid=1000(jake) groups=1000(jake),4(adm),24(cdrom)
% ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=117 time=9.195 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=8.837 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=10.998 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 8.837/9.677/10.998/0.946 ms
Hope that helps. Happy to elaborate on any unclear points.1. https://unix.stackexchange.com/questions/382771/why-does-pin...
2. https://unix.stackexchange.com/questions/592911/how-does-pin...
3. https://apple.stackexchange.com/questions/312857/how-does-ma...
Edit: updated explanation a bit.
Happy to learn if there's a more nefarious trick that gets around this, though.
So, here's what I see on Ubuntu 24.04 LTS:
$ sudo sysctl -a | grep net.ipv4.ping
net.ipv4.ping_group_range = 1 0
The man page[1] states: ping_group_range (two integers; default: see below; since Linux 2.6.39)
Range of the group IDs (minimum and maximum group IDs,
inclusive) that are allowed to create ICMP Echo sockets.
>>The default is "1 0", which means no group is allowed to
create ICMP Echo sockets.<<
This would seem to indicate this isn't being used -- at least on Ubuntu? What am I missing?"urllib.request" sends an HTTP request. It implies that the thing you want to monitor is an HTTP endpoint. Even if that's true, you still have to decide whether you're okay with just getting a 200 status code back, or whether you want to scrape the page for a certain result as your signal of healthy or broken.
"ping" is an ICMP echo/reply. Ignoring that ICMP messages can be blocked by routers, an ICMP reply can tell you that the host's network interface is alive and that's about all. It doesn't mean any service on that host is online. I have seen hosts that send ICMP replies but were otherwise fully hung by some storage or kernel issue.