52 lines
1.3 KiB
Plaintext
52 lines
1.3 KiB
Plaintext
|
#!/usr/bin/python3
|
||
|
|
||
|
from http import server
|
||
|
import json
|
||
|
import socket
|
||
|
import socketserver
|
||
|
from systemd import journal
|
||
|
|
||
|
|
||
|
class Handler(server.BaseHTTPRequestHandler):
|
||
|
address_family = socket.AF_INET6
|
||
|
|
||
|
def log_request(self, code, size=None):
|
||
|
pass
|
||
|
|
||
|
def do_GET(self):
|
||
|
self.send_response(200)
|
||
|
self.end_headers()
|
||
|
self.wfile.write(b"OK")
|
||
|
|
||
|
def do_POST(self):
|
||
|
length = int(self.headers['Content-Length'])
|
||
|
post_data = json.loads(self.rfile.read(length).decode('utf-8'))
|
||
|
self.forward_event(post_data)
|
||
|
self.do_GET()
|
||
|
|
||
|
def forward_event(self, event):
|
||
|
level = str(getattr(journal, "LOG_" + event.get("level", "DEBUG"), journal.LOG_DEBUG))
|
||
|
journal.send(
|
||
|
event['description'],
|
||
|
PRIORITY=level,
|
||
|
CURTIN_EVENT_TYPE=event["event_type"],
|
||
|
CURTIN_NAME=event["name"],
|
||
|
SYSLOG_IDENTIFIER="curtin_event",
|
||
|
)
|
||
|
|
||
|
|
||
|
class HTTPServerV6(socketserver.TCPServer):
|
||
|
address_family = socket.AF_INET6
|
||
|
|
||
|
|
||
|
def main():
|
||
|
"""Return URL to pass to curtin."""
|
||
|
httpd = HTTPServerV6(("::", 0), Handler)
|
||
|
port = httpd.server_address[1]
|
||
|
print("http://[::1]:{}/".format(port), flush=True)
|
||
|
httpd.serve_forever()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|