Active status check
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user