ildkule/gatus/minecraft-checker: rewrite to use python-http-handlers module

This commit is contained in:
h7x4
2026-07-16 17:57:50 +09:00
parent b78abaab33
commit ed411cdf6d
@@ -1,78 +1,40 @@
{ lib, pkgs, ... }: { lib, pkgs, ... }:
{ {
systemd.sockets."gatus-minecraft-checker" = { services.python-http-handlers."gatus-minecraft-checker" = {
wantedBy = [ "sockets.target" ];
listenStreams = [ "127.0.0.1:1337" ]; listenStreams = [ "127.0.0.1:1337" ];
socketConfig = { libraries = with pkgs.python3Packages; [
Accept = false; mcstatus
}; ];
}; handler = ''
import json
from mcstatus import JavaServer
systemd.services."gatus-minecraft-checker" = { class Handler(BaseHTTPRequestHandler):
serviceConfig = { def do_GET(self):
ExecStart = lib.getExe (pkgs.writers.writePython3Bin "gatus-minecraft-checker" { try:
libraries = with pkgs.python3Packages; [ mcserver = JavaServer.lookup("minecraft.pvv.ntnu.no")
# sdnotify status = mcserver.status()
mcstatus
];
flakeIgnore = [ "E501" "E704" ];
} ''
import socket
import json
from http.server import HTTPServer, BaseHTTPRequestHandler
from mcstatus import JavaServer body = {
"ok": True,
"players": status.players.online,
"version": status.version.name,
"latency": status.latency,
}
data = json.dumps(body).encode()
class Handler(BaseHTTPRequestHandler): self.send_response(200)
def do_GET(self): self.send_header("Content-Type", "application/json")
try: self.send_header("Content-Length", str(len(data)))
mcserver = JavaServer.lookup("minecraft.pvv.ntnu.no") self.end_headers()
status = mcserver.status() self.wfile.write(data)
body = { except Exception as e:
"ok": True, data = json.dumps({"ok": False, "error": str(e)}).encode()
"players": status.players.online, self.send_response(500)
"version": status.version.name, self.end_headers()
"latency": status.latency, self.wfile.write(data)
} '';
data = json.dumps(body).encode()
self.send_response(200)
self.send_header("Content-Type", "application/json")
self.send_header("Content-Length", str(len(data)))
self.end_headers()
self.wfile.write(data)
except Exception as e:
data = json.dumps({"ok": False, "error": str(e)}).encode()
self.send_response(500)
self.end_headers()
self.wfile.write(data)
class NoBindHTTPServer(HTTPServer):
def server_bind(): pass
def server_activate(): pass
def main():
httpd = NoBindHTTPServer(
("", 0),
Handler,
bind_and_activate=False,
)
httpd.socket = socket.fromfd(3, socket.AF_INET, socket.SOCK_STREAM)
httpd.serve_forever()
if __name__ == '__main__':
main()
'');
NoNewPrivileges = true;
PrivateTmp = true;
};
}; };
} }