feat: Implement backend file indexing for vaults and initial frontend application.
This commit is contained in:
+35
-22
@@ -394,32 +394,45 @@ async def lifespan(app: FastAPI):
|
||||
"""Application lifespan: build index on startup, cleanup on shutdown."""
|
||||
global _search_executor, _vault_watcher
|
||||
_search_executor = ThreadPoolExecutor(max_workers=2, thread_name_prefix="search")
|
||||
logger.info("ObsiGate starting \u2014 building index...")
|
||||
await build_index()
|
||||
|
||||
|
||||
# Bootstrap admin account if needed
|
||||
bootstrap_admin()
|
||||
|
||||
# Start file watcher
|
||||
config = _load_config()
|
||||
watcher_enabled = config.get("watcher_enabled", True)
|
||||
if watcher_enabled:
|
||||
use_polling = config.get("watcher_use_polling", False)
|
||||
polling_interval = config.get("watcher_polling_interval", 5.0)
|
||||
debounce = config.get("watcher_debounce", 2.0)
|
||||
_vault_watcher = VaultWatcher(
|
||||
on_file_change=_on_vault_change,
|
||||
debounce_seconds=debounce,
|
||||
use_polling=use_polling,
|
||||
polling_interval=polling_interval,
|
||||
)
|
||||
vaults_to_watch = {name: cfg["path"] for name, cfg in vault_config.items()}
|
||||
await _vault_watcher.start(vaults_to_watch)
|
||||
logger.info("File watcher started.")
|
||||
else:
|
||||
logger.info("File watcher disabled by configuration.")
|
||||
logger.info("ObsiGate starting — building index in background...")
|
||||
|
||||
logger.info("ObsiGate ready.")
|
||||
async def _progress_cb(event_type: str, data: dict):
|
||||
await sse_manager.broadcast("index_" + event_type, data)
|
||||
|
||||
async def _background_startup():
|
||||
logger.info("Background indexing started")
|
||||
await build_index(_progress_cb)
|
||||
|
||||
# Start file watcher
|
||||
config = _load_config()
|
||||
watcher_enabled = config.get("watcher_enabled", True)
|
||||
if watcher_enabled:
|
||||
use_polling = config.get("watcher_use_polling", False)
|
||||
polling_interval = config.get("watcher_polling_interval", 5.0)
|
||||
debounce = config.get("watcher_debounce", 2.0)
|
||||
global _vault_watcher
|
||||
_vault_watcher = VaultWatcher(
|
||||
on_file_change=_on_vault_change,
|
||||
debounce_seconds=debounce,
|
||||
use_polling=use_polling,
|
||||
polling_interval=polling_interval,
|
||||
)
|
||||
from backend.indexer import vault_config
|
||||
vaults_to_watch = {name: cfg["path"] for name, cfg in vault_config.items()}
|
||||
await _vault_watcher.start(vaults_to_watch)
|
||||
logger.info("File watcher started in background.")
|
||||
else:
|
||||
logger.info("File watcher disabled by configuration.")
|
||||
|
||||
logger.info("Background startup complete.")
|
||||
|
||||
asyncio.create_task(_background_startup())
|
||||
|
||||
logger.info("ObsiGate ready (listening for requests while indexing).")
|
||||
yield
|
||||
|
||||
# Shutdown
|
||||
|
||||
Reference in New Issue
Block a user