Project Soon

Status Page

A status page is sometimes provided by a company for their online service, and if you are a popular service, you most definitely will have one 123. If it does not exist, or is only used by the developer to give upload information about the state of the service 4, some takes action and hosts their own status page 5. It is such a common thing that you can even set up your own status page, either through some proprietary site 6 or self-hosted 78.

However, the FOSS self-hosted ones either does not support UDP 9, is not easy to set up 10 or have naive developers 111213. Before someone mentions that UDP cannot be pinged I need to point out that there are status projects that does support it. It involves specifying the protocol in order to interact with it at all, basically being similar to TCP, but you have to implement the handshaking yourself. It is not “impossible” as someone mentioned, but it is just harder. Do note as previously mentioned that some services are hard to set up, and that is because I had a specific criteria: It should be able to be hosted in any web server, without running as a separate service. While this criteria sounds dumb, I previously required it as that was my only option for a free off-site hosting.

Therefore I decided to write my own status page, in order to keep track of all my services. I picked PHP as I wanted it to be able to run anywhere, as most web servers support that language. I then created a prototype to prove that I both could securely display each service without exposing their endpoints, but also to make sure that I could check UDP services. The initial prototype supported HTTPS and TCP, basically using curl to verify the status of the HTTP endpoint, and using sockets for TCP. It does support UDP too, but as UDP will per default not respond on socket connections, it is not that useful. Later was added all services that was only hosting their services behind UDP: Factorio 14; Minecraft Bedrock Edition 1516; Valheim 17. It has been tested if WireGuard would work, but that requires a key, so it has been put on ice for now. For Valheim I had no idea over their network protocol, so I used Wireshark with a general ping sent from another status page, and then found out the actual protocol and verified that it was correct.

It got loads of problems that limits what it could possible be, in comparison to all other available projects. For instance, it is inefficient by only be able for one service only check one host at a time, not all at once, meaning if I wanted a gauge of a service, it would take longer time for each host added. Each ping is not done in the background, but per request, meaning it has no idea if a service has been down for that time, nor will it have an accurate history of a service. It can only change config through a specific file, meaning it can only be changed by the person that have direct access to the web service file system. And a couple more issues.

Problems put aside, it does its job, and has very little code footprint. That is what I like about it and will keep using and upgrade it as I go. Maybe I will make it independent with its own service, but as long as it works, I see no reason doing so.

https://git.aposoc.net/McTwist/status


  1. https://discordstatus.com/ ↩︎

  2. https://status.riotgames.com/?locale=en_US ↩︎

  3. https://worldofwarcraft.blizzard.com/en-us/game/status/us ↩︎

  4. https://secure.runescape.com/m=news/a=12/game-status-information-centre?oldschool=1 ↩︎

  5. https://downdetector.com/status/runescape/ ↩︎

  6. https://status.io/ ↩︎

  7. https://uptimerobot.com/status-page/ ↩︎

  8. https://github.com/louislam/uptime-kuma ↩︎

  9. https://cachethq.io/#features ↩︎

  10. https://github.com/statping/statping ↩︎

  11. https://github.com/louislam/uptime-kuma/issues/1073 ↩︎

  12. https://github.com/louislam/uptime-kuma/issues/9 ↩︎

  13. It is possible that this may be some sort of miscommunication. I am biased from my view of the interaction. ↩︎

  14. Sadly I have lost the source I used, and am unable to locate it again. I may update this in the future if I find it. ↩︎

  15. https://github.com/xPaw/PHP-Minecraft-Query/blob/master/src/MinecraftQuery.php ↩︎

  16. https://wiki.vg/Raknet_Protocol#Unconnected_Ping ↩︎

  17. https://developer.valvesoftware.com/wiki/Server_queries ↩︎