Active status check

This commit is contained in:
2025-06-09 10:24:42 +02:00
parent 112a99ffcb
commit 2014c326b1
9 changed files with 227 additions and 33 deletions

View File

@@ -16,6 +16,8 @@ import csv
from flask_wtf.csrf import generate_csrf
import json
import smtplib
import requests
from functools import wraps
# Set up logging to show in console
logging.basicConfig(
@@ -332,6 +334,30 @@ def init_routes(main_bp):
is_admin=current_user.is_admin
)
def check_instance_status(instance):
"""Check the status of an instance by contacting its health endpoint"""
try:
# Construct the health check URL
health_url = f"{instance.main_url.rstrip('/')}/health"
response = requests.get(health_url, timeout=5)
if response.status_code == 200:
data = response.json()
return {
'status': 'active' if data.get('status') == 'healthy' else 'inactive',
'details': json.dumps(data) # Convert dictionary to JSON string
}
else:
return {
'status': 'inactive',
'details': f"Health check returned status code {response.status_code}"
}
except requests.RequestException as e:
return {
'status': 'inactive',
'details': str(e)
}
@main_bp.route('/instances')
@login_required
@require_password_change
@@ -341,6 +367,15 @@ def init_routes(main_bp):
return redirect(url_for('main.dashboard'))
instances = Instance.query.all()
# Check status for each instance
for instance in instances:
status_info = check_instance_status(instance)
instance.status = status_info['status']
instance.status_details = status_info['details']
db.session.commit()
return render_template('main/instances.html', instances=instances)
@main_bp.route('/instances/add', methods=['POST'])
@@ -431,6 +466,22 @@ def init_routes(main_bp):
db.session.rollback()
return jsonify({'error': str(e)}), 400
@main_bp.route('/instances/<int:instance_id>/status')
@login_required
def check_status(instance_id):
if not os.environ.get('MASTER', 'false').lower() == 'true':
return jsonify({'error': 'Access denied'}), 403
instance = Instance.query.get_or_404(instance_id)
status_info = check_instance_status(instance)
# Update instance status in database
instance.status = status_info['status']
instance.status_details = status_info['details']
db.session.commit()
return jsonify(status_info)
UPLOAD_FOLDER = '/app/uploads/profile_pics'
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)