Enhance Docker and Compose configurations; add health check endpoint and caching improvements
- Updated Dockerfile to include FINN_CACHE_PATH and create data directory. - Modified docker-compose.prod.yml to expose port 8010 and adjust resource limits. - Updated docker-compose.yml to include FINN_CACHE_PATH and ensure proper port mapping. - Added health check endpoint in http_server.py for container orchestration. - Improved caching logic in analysis.py and service.py for similar units. - Refined scoring.py with updated scoring model and constants for better accuracy. Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
+41
-6
@@ -8,11 +8,13 @@ from .analysis import analyze_search as run_analysis_search
|
||||
from .cache import (
|
||||
get_eiendom_unit as get_cached_eiendom_unit,
|
||||
get_finn_ad,
|
||||
get_similar_units as get_cached_similar_units,
|
||||
init_db,
|
||||
save_eiendom_unit,
|
||||
save_finn_ad,
|
||||
save_similar_units,
|
||||
)
|
||||
from .config import FINN_CACHE_PATH
|
||||
from .config import EIENDOM_NO_CACHE_TTL_HOURS, FINN_CACHE_PATH
|
||||
from .eiendom_no import (
|
||||
build_unit_vector,
|
||||
decode_unit_vector,
|
||||
@@ -89,14 +91,47 @@ async def get_or_fetch_eiendom_unit(
|
||||
async def get_or_fetch_similar_units(
|
||||
unit_code: str, listing_status: str = "RECENTLY_SOLD", force_refresh: bool = False
|
||||
) -> list[SimilarUnit]:
|
||||
"""Get similar units (comps) from cache or fetch fresh."""
|
||||
# Similar units don't have a separate cache table; fetch fresh each time per PRD
|
||||
# (or cache them in search_runs if doing diff detection)
|
||||
unit = await get_or_fetch_eiendom_unit(unit_code)
|
||||
"""Get similar units (comps) from cache or fetch fresh.
|
||||
|
||||
Fetches the unit first to get the unit_vector, then checks cache for similar
|
||||
units by (unit_code, listing_status). On cache miss, fetches fresh from
|
||||
Eiendom.no and saves to cache.
|
||||
"""
|
||||
conn = init_db(FINN_CACHE_PATH)
|
||||
|
||||
# First, ensure we have the unit to build its vector
|
||||
unit = await get_or_fetch_eiendom_unit(unit_code, force_refresh=force_refresh)
|
||||
if unit is None:
|
||||
return []
|
||||
|
||||
# Check cache for similar units (unless force_refresh)
|
||||
if not force_refresh:
|
||||
cached_similar = get_cached_similar_units(
|
||||
conn, unit_code, listing_status, ttl_hours=EIENDOM_NO_CACHE_TTL_HOURS
|
||||
)
|
||||
if cached_similar:
|
||||
logger.debug(
|
||||
"Using cached similar units for %s (status=%s)",
|
||||
unit_code,
|
||||
listing_status,
|
||||
)
|
||||
return cached_similar
|
||||
|
||||
# Cache miss or force_refresh: fetch fresh
|
||||
vector = build_unit_vector(unit)
|
||||
return await get_similar_units(vector, listing_status=listing_status)
|
||||
similar = await get_similar_units(vector, listing_status=listing_status)
|
||||
|
||||
# Save to cache
|
||||
if similar:
|
||||
save_similar_units(conn, unit_code, listing_status, similar)
|
||||
logger.debug(
|
||||
"Cached %d similar units for %s (status=%s)",
|
||||
len(similar),
|
||||
unit_code,
|
||||
listing_status,
|
||||
)
|
||||
|
||||
return similar
|
||||
|
||||
|
||||
async def get_unit_images(unit_code: str, force_refresh: bool = False) -> dict[str, Any]:
|
||||
|
||||
Reference in New Issue
Block a user