Implement Hammerhead debug API

This commit is contained in:
2025-10-27 14:54:20 -04:00
parent b8f8a1a7b1
commit 4bdeca6139

View File

@@ -1,5 +1,4 @@
from datetime import datetime, timezone
from vona.federation import send_join
import vona.globals as globals
import vona.config as config
import time
@@ -9,6 +8,11 @@ from flask import (
jsonify,
)
from vona.federation import (
send_join,
bullshit,
)
hammerhead = Blueprint("hammerhead", __name__)
# Hammerhead endpoints. Not documented, but code is at:
@@ -24,6 +28,7 @@ async def uptime():
async def version():
return jsonify({"version": globals.version})
@hammerhead.route("/_hammerhead/admin/reload-config")
async def reload_config():
return jsonify({})
@@ -61,10 +66,6 @@ async def server_info(server):
@hammerhead.route("/_hammerhead/admin/rooms/<room>/state-resolver")
async def room_state(room):
class bullshit:
def get_json():
return {}
state = send_join(bullshit, room)["state"]
formatted_state = {}
event_cache = {}
@@ -90,3 +91,44 @@ async def room_state(room):
"room_id": room,
"room_version": globals.room_version_from_id(room)
})
@hammerhead.route("/_hammerhead/admin/rooms/<room>/debug")
async def debug_room(room):
state = send_join(bullshit, room)["state"]
formatted_state = {}
event_cache = {}
for event in state:
key = f"({event["type"]},'{event["state_key"]}')"
formatted_state[key] = event
if "event_id" in event:
event_id = event["event_id"]
else:
event_id = globals.make_ref_hash(
event,
int(globals.room_version_from_id(room))
)
event_cache[event_id] = event
if globals.room_version_from_id(room) in ["1", "2"]:
extremity = globals.make_event_id(seed=f"6_{room}")
else:
extremity = globals.make_ref_hash(
state[5],
int(globals.room_version_from_id(room)),
)
return jsonify({
"aliases": [f"#vona:{config.server_name}"],
"current_state": formatted_state,
"event_cache": event_cache,
"room_id": room,
"room_version": globals.room_version_from_id(room),
"forward_extremities": [extremity],
"servers": None
})