fix: cell-network name, install error surfacing, health history cleanup
Unit Tests / test (push) Successful in 11m22s
Unit Tests / test (push) Successful in 11m22s
- docker-compose.services.yml: change external network name from pic_cell-network to cell-network so store-service compose files can find it. The project-prefixed name was overriding the explicit name: cell-network fix in docker-compose.yml when both files were merged by make start. - service_store.py: normalize docker compose stderr into the error key in the 400 response so the Store page shows the actual failure reason instead of the generic fallback message. - app.py: skip health checks for email/calendar/files managers when those optional store services are not installed — prevents false Down alerts and unnecessary noise in health history. - Logs.jsx: remove Email/Calendar/Files columns from the health history table; they are optional store services, not core builtins that should always appear. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+11
-2
@@ -519,9 +519,18 @@ def perform_health_check():
|
||||
'timestamp': datetime.utcnow().isoformat(),
|
||||
'alerts': []
|
||||
}
|
||||
|
||||
|
||||
# email/calendar/files are optional store services — only check them when installed
|
||||
_installed_store_ids = set(config_manager.get_installed_services())
|
||||
_OPTIONAL_STORE_MANAGERS = frozenset({'email_manager', 'calendar_manager', 'file_manager'})
|
||||
|
||||
# Get health from each service
|
||||
for service_name in service_bus.list_services():
|
||||
if service_name in _OPTIONAL_STORE_MANAGERS:
|
||||
# Map manager name to store service id (strip _manager suffix)
|
||||
store_id = service_name.replace('_manager', '')
|
||||
if store_id not in _installed_store_ids:
|
||||
continue
|
||||
try:
|
||||
service = service_bus.get_service(service_name)
|
||||
if hasattr(service, 'health_check'):
|
||||
@@ -531,7 +540,7 @@ def perform_health_check():
|
||||
result[service_name] = health
|
||||
except Exception as e:
|
||||
result[service_name] = {'error': str(e), 'status': 'offline'}
|
||||
|
||||
|
||||
# Health alerting logic — alert only when a service container is not running
|
||||
global service_alert_counters
|
||||
for service_name in service_bus.list_services():
|
||||
|
||||
@@ -62,6 +62,10 @@ def install_service(service_id: str):
|
||||
result = _ssm().install(service_id)
|
||||
if result.get('ok'):
|
||||
return jsonify(result)
|
||||
# Normalize docker compose stderr into the error key so the frontend
|
||||
# can display the actual failure reason rather than a generic message.
|
||||
if not result.get('error') and result.get('stderr'):
|
||||
result = {**result, 'error': result['stderr']}
|
||||
return jsonify(result), 400
|
||||
except Exception as e:
|
||||
logger.error(f'install_service({service_id}): {e}')
|
||||
|
||||
Reference in New Issue
Block a user