You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.7 KiB
85 lines
2.7 KiB
from flask import Flask, jsonify, request
|
|
from flask_cors import CORS
|
|
from version import version
|
|
from active_connector import Connector
|
|
import json
|
|
import argparse
|
|
import threading
|
|
|
|
#region 全局
|
|
|
|
app = Flask(__name__)
|
|
CORS(app)
|
|
server_cfg = None
|
|
data_dict = dict()
|
|
# 线程锁
|
|
data_lock = threading.Lock()
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--cfg', default='server_config.json', type=str, help='the path of config json.')
|
|
args = parser.parse_args()
|
|
# 加载配置文件
|
|
cfg_path = args.cfg
|
|
with open(cfg_path, 'r') as f:
|
|
server_cfg = json.load(f)
|
|
api_name = server_cfg['api_name']
|
|
|
|
#endregion
|
|
|
|
#region 接口
|
|
|
|
# 测试用
|
|
@app.route(f'/{api_name}')
|
|
def hello():
|
|
return 'hi. —— CheckGPUsWeb'
|
|
|
|
@app.route(f'/{api_name}/get_data', methods=['GET'])
|
|
def get_data():
|
|
with data_lock:
|
|
return jsonify(data_dict)
|
|
|
|
@app.route(f'/{api_name}/update_data', methods=['POST'])
|
|
def receive_data():
|
|
data = request.json
|
|
# 如果存在对应标题则更新记录
|
|
if data['title'] in server_cfg['server_list']:
|
|
with data_lock:
|
|
data_dict['server_dict'][data['title']] = data
|
|
# 合并显示信息
|
|
if data['title'] in server_cfg['note_dict']:
|
|
client_note = data_dict['server_dict'][data['title']]['note']
|
|
server_note = server_cfg['note_dict'][data['title']]
|
|
note = server_note if client_note == '' \
|
|
else server_note + '\n' + client_note
|
|
data_dict['server_dict'][data['title']]['note'] = note
|
|
return jsonify({"status": "success"})
|
|
|
|
#endregion
|
|
|
|
def init():
|
|
with data_lock:
|
|
data_dict['server_dict'] = dict()
|
|
data_dict['version'] = version
|
|
for server_name in server_cfg['server_list']:
|
|
if server_name in server_cfg['note_dict']:
|
|
data_dict['server_dict'][server_name] = dict()
|
|
data_dict['server_dict'][server_name]['note'] = server_cfg['note_dict'][server_name]
|
|
else:
|
|
data_dict['server_dict'][server_name] = None
|
|
|
|
def main():
|
|
init()
|
|
|
|
# 主动连接
|
|
if 'connect_server' in server_cfg and len(server_cfg['connect_server']) > 0:
|
|
connector = Connector(data_dict['server_dict'], server_cfg['connect_server'], server_cfg['note_dict'], data_lock, server_cfg['connect_check_interval'], server_cfg['reconnect_interval'])
|
|
connector.run()
|
|
print('开启主动服务器主动连接 : ' + '、'.join([s['title'] for s in server_cfg['connect_server']]))
|
|
else:
|
|
print('未设置主动连接的服务器')
|
|
|
|
# flask
|
|
app.run(debug=False, host=server_cfg['host'], port=server_cfg['port'])
|
|
|
|
if __name__ == '__main__':
|
|
main()
|