70 lines
2.1 KiB
Python
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() |