massage 1

This commit is contained in:
0xbovs1
2024-12-21 12:38:57 +00:00
parent 8c6bcd76d0
commit f5d2051360
23 changed files with 623 additions and 0 deletions

118
app/mongodb1.py Normal file
View File

@@ -0,0 +1,118 @@
import os
import logging
from flask import Flask, jsonify, request
from motor.motor_asyncio import AsyncIOMotorClient
from bson import ObjectId
from flask.logging import default_handler
import asyncio
app = Flask(__name__)
# Настройки логирования
logger = logging.getLogger("MongoDBRepository")
logger.setLevel(logging.DEBUG)
logger.addHandler(default_handler)
# Настройки MongoDB из переменных окружения
mongo_uri = os.getenv("MONGO_URL", "mongodb://localhost:27017")
database_name = os.getenv("DB_NAME", "mydatabase")
server_collection = os.getenv("SERVER_COLLECTION", "servers")
plan_collection = os.getenv("PLAN_COLLECTION", "plans")
# Подключение к базе данных
client = AsyncIOMotorClient(mongo_uri)
db = client[database_name]
servers = db[server_collection]
plans = db[plan_collection]
@app.route('/plans', methods=['POST'])
async def add_subscription_plan():
plan_data = request.json
result = await plans.insert_one(plan_data)
logger.debug(f"Тарифный план добавлен с ID: {result.inserted_id}")
return jsonify({"inserted_id": str(result.inserted_id)}), 201
@app.route('/plans/<plan_id>', methods=['GET'])
async def get_subscription_plan(plan_id):
plan = await plans.find_one({"_id": ObjectId(plan_id)})
if plan:
logger.debug(f"Найден тарифный план: {plan}")
plan["_id"] = str(plan["_id"])
return jsonify(plan)
else:
logger.error(f"Тарифный план {plan_id} не найден.")
return jsonify({"error": "Plan not found"}), 404
@app.route('/servers', methods=['POST'])
async def add_server():
server_data = request.json
result = await servers.insert_one(server_data)
logger.debug(f"VPN сервер добавлен с ID: {result.inserted_id}")
return jsonify({"inserted_id": str(result.inserted_id)}), 201
@app.route('/servers/<server_name>', methods=['GET'])
async def get_server(server_name):
server = await servers.find_one({"server.name": server_name})
if server:
logger.debug(f"Найден VPN сервер: {server}")
server["_id"] = str(server["_id"])
return jsonify(server)
else:
logger.debug(f"VPN сервер с именем {server_name} не найден.")
return jsonify({"error": "Server not found"}), 404
@app.route('/servers/least_clients', methods=['GET'])
async def get_server_with_least_clients():
pipeline = [
{"$addFields": {"current_clients": {"$size": {"$ifNull": ["$clients", []]}}}},
{"$sort": {"current_clients": 1}},
{"$limit": 1}
]
result = await servers.aggregate(pipeline).to_list(length=1)
if result:
server = result[0]
server["_id"] = str(server["_id"])
logger.debug(f"Найден сервер с наименьшим количеством клиентов: {server}")
return jsonify(server)
else:
logger.debug("Не найдено серверов.")
return jsonify({"error": "No servers found"}), 404
@app.route('/servers/<server_id>', methods=['PUT'])
async def update_server(server_id):
update_data = request.json
result = await servers.update_one({"_id": ObjectId(server_id)}, {"$set": update_data})
if result.matched_count > 0:
logger.debug(f"VPN сервер с ID {server_id} обновлен.")
return jsonify({"updated": True})
else:
logger.debug(f"VPN сервер с ID {server_id} не найден.")
return jsonify({"error": "Server not found"}), 404
@app.route('/servers/<server_id>', methods=['DELETE'])
async def delete_server(server_id):
result = await servers.delete_one({"_id": ObjectId(server_id)})
if result.deleted_count > 0:
logger.debug(f"VPN сервер с ID {server_id} удален.")
return jsonify({"deleted": True})
else:
logger.debug(f"VPN сервер с ID {server_id} не найден.")
return jsonify({"error": "Server not found"}), 404
@app.route('/servers', methods=['GET'])
async def list_servers():
server_list = await servers.find().to_list(length=1000)
for server in server_list:
server["_id"] = str(server["_id"])
logger.debug(f"Найдено {len(server_list)} VPN серверов.")
return jsonify(server_list)
@app.route('/shutdown', methods=['POST'])
async def close_connection():
client.close()
logger.debug("Подключение к MongoDB закрыто.")
return jsonify({"message": "Connection closed"}), 200
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(app.run(debug=True))