online/server-list.py

70 lines
2.1 KiB
Python

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime, timedelta
import threading
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///servers.db'
db = SQLAlchemy(app)
class Server(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
description = db.Column(db.String(100))
ip = db.Column(db.String(15), nullable=False)
port = db.Column(db.Integer, nullable=False)
last_updated = db.Column(db.DateTime, nullable=False)
def __init__(self, name, description, ip, port):
self.name = name
self.description = description
self.ip = ip
self.port = port
self.last_updated = datetime.utcnow()
def update_last_updated(self):
self.last_updated = datetime.utcnow()
@app.route('/servers', methods=['POST'])
def add_server():
data = request.get_json()
server = Server(data['name'], data['description'], data['ip'], data['port'])
db.session.add(server)
db.session.commit()
return jsonify({'message': 'Server added successfully'}), 201
@app.route('/servers', methods=['GET'])
def get_servers():
servers = Server.query.all()
server_list = []
for server in servers:
server_data = {
'name': server.name,
'description': server.description,
'ip': server.ip,
'port': server.port
}
server_list.append(server_data)
return jsonify(server_list)
def remove_inactive_servers():
inactive_threshold = datetime.utcnow() - timedelta(minutes=5)
inactive_servers = Server.query.filter(Server.last_updated < inactive_threshold).all()
for server in inactive_servers:
db.session.delete(server)
db.session.commit()
def check_inactive_servers():
while True:
remove_inactive_servers()
# Sleep for 5 minutes before checking again
time.sleep(300)
if __name__ == '__main__':
db.create_all()
# Start a separate thread for checking inactive servers
checker_thread = threading.Thread(target=check_inactive_servers)
checker_thread.start()
app.run()