feat: add comprehensive error handling and logging for vault settings save operations with permission error detection and detailed error messages in UI toast notifications
This commit is contained in:
+14
-1
@@ -1477,7 +1477,20 @@ async def api_update_vault_settings(vault_name: str, body: dict = Body(...), cur
|
||||
settings_to_update["hiddenWhitelist"] = body["hiddenWhitelist"]
|
||||
|
||||
# Update persisted settings
|
||||
updated = update_vault_setting(vault_name, settings_to_update)
|
||||
try:
|
||||
updated = update_vault_setting(vault_name, settings_to_update)
|
||||
except PermissionError as e:
|
||||
logger.error(f"Permission error saving settings for vault '{vault_name}': {e}")
|
||||
raise HTTPException(
|
||||
status_code=500,
|
||||
detail=f"Permission denied: Cannot write to settings file. Check /app/data permissions."
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Error saving settings for vault '{vault_name}': {e}")
|
||||
raise HTTPException(
|
||||
status_code=500,
|
||||
detail=f"Failed to save settings: {str(e)}"
|
||||
)
|
||||
|
||||
# Update in-memory vault config
|
||||
if vault_name in vault_config:
|
||||
|
||||
@@ -46,14 +46,27 @@ def save_vault_settings() -> None:
|
||||
"""Persist vault settings to disk."""
|
||||
with _settings_lock:
|
||||
try:
|
||||
logger.info(f"Attempting to save settings to {_SETTINGS_PATH}")
|
||||
logger.info(f"Parent directory: {_SETTINGS_PATH.parent}")
|
||||
logger.info(f"Parent exists: {_SETTINGS_PATH.parent.exists()}")
|
||||
|
||||
_SETTINGS_PATH.parent.mkdir(parents=True, exist_ok=True)
|
||||
_SETTINGS_PATH.write_text(
|
||||
json.dumps(_vault_settings, indent=2, ensure_ascii=False),
|
||||
encoding="utf-8"
|
||||
)
|
||||
logger.info(f"Saved settings for {len(_vault_settings)} vaults")
|
||||
logger.info(f"Directory created/verified: {_SETTINGS_PATH.parent}")
|
||||
|
||||
content = json.dumps(_vault_settings, indent=2, ensure_ascii=False)
|
||||
logger.info(f"JSON content prepared ({len(content)} bytes)")
|
||||
|
||||
_SETTINGS_PATH.write_text(content, encoding="utf-8")
|
||||
logger.info(f"Successfully saved settings for {len(_vault_settings)} vaults to {_SETTINGS_PATH}")
|
||||
except PermissionError as e:
|
||||
logger.error(f"Permission denied writing to {_SETTINGS_PATH}: {e}")
|
||||
logger.error(f"Check that user has write permissions to {_SETTINGS_PATH.parent}")
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to save vault settings: {e}")
|
||||
logger.error(f"Failed to save vault settings to {_SETTINGS_PATH}: {e}")
|
||||
logger.error(f"Error type: {type(e).__name__}")
|
||||
import traceback
|
||||
logger.error(f"Traceback: {traceback.format_exc()}")
|
||||
raise
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user