Refactor geo re-resolve endpoint into geo_service and add typed response
This commit is contained in:
@@ -187,6 +187,41 @@ async def get_unresolved_ips(db: aiosqlite.Connection) -> list[str]:
|
||||
return await geo_cache_repo.get_unresolved_ips(db)
|
||||
|
||||
|
||||
async def re_resolve_all(
|
||||
db: aiosqlite.Connection,
|
||||
http_session: aiohttp.ClientSession,
|
||||
) -> dict[str, int]:
|
||||
"""Retry geo resolution for all unresolved cache entries.
|
||||
|
||||
This helper clears the in-memory negative cache before attempting a
|
||||
fresh batch lookup, then returns counters for how many IPs were retried
|
||||
and how many gained a resolved country code.
|
||||
|
||||
Args:
|
||||
db: BanGUI application database connection.
|
||||
http_session: Shared aiohttp client session.
|
||||
|
||||
Returns:
|
||||
A dict with ``resolved`` and ``total`` counts.
|
||||
"""
|
||||
unresolved = await get_unresolved_ips(db)
|
||||
if not unresolved:
|
||||
return {"resolved": 0, "total": 0}
|
||||
|
||||
clear_neg_cache()
|
||||
geo_map = await lookup_batch(unresolved, http_session, db=db)
|
||||
resolved_count = sum(
|
||||
1 for info in geo_map.values() if info.country_code is not None
|
||||
)
|
||||
|
||||
log.info(
|
||||
"geo_re_resolve_complete",
|
||||
total=len(unresolved),
|
||||
resolved=resolved_count,
|
||||
)
|
||||
return {"resolved": resolved_count, "total": len(unresolved)}
|
||||
|
||||
|
||||
def init_geoip(mmdb_path: str | None) -> None:
|
||||
"""Initialise the MaxMind GeoLite2-Country database reader.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user