rename old
This commit is contained in:
0
old_py12306/web/handler/__init__.py
Normal file
0
old_py12306/web/handler/__init__.py
Normal file
55
old_py12306/web/handler/app.py
Normal file
55
old_py12306/web/handler/app.py
Normal file
@@ -0,0 +1,55 @@
|
||||
import json
|
||||
import re
|
||||
|
||||
from flask import Blueprint, request, send_file
|
||||
from flask.json import jsonify
|
||||
from flask_jwt_extended import (jwt_required)
|
||||
|
||||
from py12306.config import Config
|
||||
from py12306.query.query import Query
|
||||
from py12306.user.user import User
|
||||
|
||||
app = Blueprint('app', __name__)
|
||||
|
||||
|
||||
@app.route('/', methods=['GET', 'POST'])
|
||||
def index():
|
||||
file = Config().WEB_ENTER_HTML_PATH
|
||||
result = ''
|
||||
with open(file, 'r', encoding='utf-8') as f:
|
||||
result = f.read()
|
||||
config = {
|
||||
'API_BASE_URL': '' # TODO 自定义 Host
|
||||
}
|
||||
result = re.sub(r'<script>[\s\S]*?<\/script>', '<script>window.config={}</script>'.format(json.dumps(config)),
|
||||
result)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
@app.route('/app/menus', methods=['GET'])
|
||||
@jwt_required
|
||||
def menus():
|
||||
"""
|
||||
菜单列表
|
||||
"""
|
||||
menus = [
|
||||
{"id": 10, "name": "首页", "url": "/", "icon": "fa fa-tachometer-alt"},
|
||||
{"id": 20, "name": "用户管理", "url": "/user", "icon": "fa fa-user"},
|
||||
{"id": 30, "name": "查询任务", "url": "/query", "icon": "fa fa-infinity"},
|
||||
{"id": 40, "name": "实时日志", "url": "/log/realtime", "icon": "fa fa-signature"},
|
||||
{"id": 50, "name": "帮助", "url": "/help", "icon": "fa fa-search"}
|
||||
]
|
||||
return jsonify(menus)
|
||||
|
||||
|
||||
@app.route('/app/actions', methods=['GET'])
|
||||
@jwt_required
|
||||
def actions():
|
||||
"""
|
||||
操作列表
|
||||
"""
|
||||
actions = [
|
||||
{"text": "退出登录", "key": 'logout', "link": "", "icon": "fa fa-sign-out-alt"}
|
||||
]
|
||||
return jsonify(actions)
|
||||
51
old_py12306/web/handler/log.py
Normal file
51
old_py12306/web/handler/log.py
Normal file
@@ -0,0 +1,51 @@
|
||||
import linecache
|
||||
|
||||
from flask import Blueprint, request
|
||||
from flask.json import jsonify
|
||||
from flask_jwt_extended import (jwt_required)
|
||||
|
||||
from py12306.config import Config
|
||||
from py12306.helpers.func import get_file_total_line_num, pick_file_lines
|
||||
from py12306.log.common_log import CommonLog
|
||||
from py12306.query.query import Query
|
||||
from py12306.user.user import User
|
||||
|
||||
log = Blueprint('log', __name__)
|
||||
|
||||
|
||||
@log.route('/log/output', methods=['GET'])
|
||||
@jwt_required
|
||||
def log_output():
|
||||
"""
|
||||
日志
|
||||
:return:
|
||||
"""
|
||||
last_line = int(request.args.get('line', 0))
|
||||
limit = int(request.args.get('limit', 10))
|
||||
max_old = 200 # 取最新时 往后再取的数
|
||||
file = Config().OUT_PUT_LOG_TO_FILE_PATH
|
||||
res = []
|
||||
|
||||
if last_line == -1:
|
||||
total_line = get_file_total_line_num(file)
|
||||
last_line = total_line - max_old if total_line > max_old else 0
|
||||
ranges = range(last_line, last_line + max_old + limit)
|
||||
# limit = max_old + limit
|
||||
else:
|
||||
ranges = range(last_line, last_line + limit)
|
||||
|
||||
if Config().OUT_PUT_LOG_TO_FILE_ENABLED:
|
||||
with open(Config().OUT_PUT_LOG_TO_FILE_PATH, 'r', encoding='utf-8') as f:
|
||||
res = pick_file_lines(f, ranges)
|
||||
|
||||
# linecache.updatecache(file) # 使用 linecache windows 平台会出来编码问题 暂时弃用
|
||||
# for i in ranges:
|
||||
# tmp = linecache.getline(file, last_line + i)
|
||||
# if tmp != '': res.append(tmp)
|
||||
last_line += len(res)
|
||||
else:
|
||||
res = CommonLog.MESSAGE_OUTPUT_TO_FILE_IS_UN_ENABLE
|
||||
return jsonify({
|
||||
'last_line': last_line,
|
||||
'data': res
|
||||
})
|
||||
36
old_py12306/web/handler/query.py
Normal file
36
old_py12306/web/handler/query.py
Normal file
@@ -0,0 +1,36 @@
|
||||
from flask import Blueprint, request
|
||||
from flask.json import jsonify
|
||||
from flask_jwt_extended import (jwt_required)
|
||||
|
||||
from py12306.config import Config
|
||||
from py12306.query.job import Job
|
||||
from py12306.query.query import Query
|
||||
|
||||
query = Blueprint('query', __name__)
|
||||
|
||||
|
||||
@query.route('/query', methods=['GET'])
|
||||
@jwt_required
|
||||
def query_lists():
|
||||
"""
|
||||
查询任务列表
|
||||
:return:
|
||||
"""
|
||||
jobs = Query().jobs
|
||||
result = list(map(convert_job_to_info, jobs))
|
||||
return jsonify(result)
|
||||
|
||||
|
||||
def convert_job_to_info(job: Job):
|
||||
return {
|
||||
'name': job.job_name,
|
||||
'left_dates': job.left_dates,
|
||||
'stations': job.stations,
|
||||
'members': job.members,
|
||||
'member_num': job.member_num,
|
||||
'allow_seats': job.allow_seats,
|
||||
'allow_train_numbers': job.allow_train_numbers,
|
||||
'except_train_numbers': job.except_train_numbers,
|
||||
'allow_less_member': job.allow_less_member,
|
||||
'passengers': job.passengers,
|
||||
}
|
||||
55
old_py12306/web/handler/stat.py
Normal file
55
old_py12306/web/handler/stat.py
Normal file
@@ -0,0 +1,55 @@
|
||||
from flask import Blueprint, request
|
||||
from flask.json import jsonify
|
||||
from flask_jwt_extended import (jwt_required)
|
||||
|
||||
from py12306.config import Config
|
||||
from py12306.query.query import Query
|
||||
from py12306.user.user import User
|
||||
|
||||
stat = Blueprint('stat', __name__)
|
||||
|
||||
|
||||
@stat.route('/stat/dashboard', methods=['GET'])
|
||||
@jwt_required
|
||||
def dashboard():
|
||||
"""
|
||||
状态统计
|
||||
任务数量,用户数量,查询次数
|
||||
节点信息(TODO)
|
||||
:return:
|
||||
"""
|
||||
from py12306.log.query_log import QueryLog
|
||||
query_job_count = len(Query().jobs)
|
||||
user_job_count = len(User().users)
|
||||
query_count = QueryLog().data.get('query_count')
|
||||
res = {
|
||||
'query_job_count': query_job_count,
|
||||
'user_job_count': user_job_count,
|
||||
'query_count': query_count,
|
||||
}
|
||||
if Config().CDN_ENABLED:
|
||||
from py12306.helpers.cdn import Cdn
|
||||
res['cdn_count'] = len(Cdn().available_items)
|
||||
return jsonify(res)
|
||||
|
||||
|
||||
@stat.route('/stat/cluster', methods=['GET'])
|
||||
@jwt_required
|
||||
def clusters():
|
||||
"""
|
||||
节点统计
|
||||
节点数量,主节点,子节点列表
|
||||
:return:
|
||||
"""
|
||||
from py12306.cluster.cluster import Cluster
|
||||
nodes = Cluster().nodes
|
||||
count = len(nodes)
|
||||
node_lists = list(nodes)
|
||||
master = [key for key, val in nodes.items() if int(val) == Cluster.KEY_MASTER]
|
||||
master = master[0] if master else ''
|
||||
|
||||
return jsonify({
|
||||
'master': master,
|
||||
'count': count,
|
||||
'node_lists': ', '.join(node_lists)
|
||||
})
|
||||
62
old_py12306/web/handler/user.py
Normal file
62
old_py12306/web/handler/user.py
Normal file
@@ -0,0 +1,62 @@
|
||||
from flask import Blueprint, request
|
||||
from flask.json import jsonify
|
||||
from flask_jwt_extended import (jwt_required, create_access_token)
|
||||
|
||||
from py12306.config import Config
|
||||
from py12306.helpers.func import str_to_time, timestamp_to_time
|
||||
from py12306.user.job import UserJob
|
||||
from py12306.user.user import User
|
||||
|
||||
user = Blueprint('user', __name__)
|
||||
|
||||
|
||||
@user.route('/login', methods=['POST'])
|
||||
def login():
|
||||
"""
|
||||
用户登录
|
||||
:return:
|
||||
"""
|
||||
username = request.json.get('username', None)
|
||||
password = request.json.get('password', None)
|
||||
if username and password and username == Config().WEB_USER.get('username') and password == Config().WEB_USER.get(
|
||||
'password'):
|
||||
access_token = create_access_token(identity=username)
|
||||
return jsonify(access_token=access_token)
|
||||
return jsonify({"msg": "用户名或密码错误"}), 422
|
||||
|
||||
|
||||
@user.route('/users', methods=['GET'])
|
||||
@jwt_required
|
||||
def users():
|
||||
"""
|
||||
用户任务列表
|
||||
:return:
|
||||
"""
|
||||
jobs = User().users
|
||||
result = list(map(convert_job_to_info, jobs))
|
||||
return jsonify(result)
|
||||
|
||||
|
||||
@user.route('/user/info', methods=['GET'])
|
||||
@jwt_required
|
||||
def user_info():
|
||||
"""
|
||||
获取用户信息
|
||||
:return:
|
||||
"""
|
||||
result = {
|
||||
'name': Config().WEB_USER.get('username')
|
||||
}
|
||||
return jsonify(result)
|
||||
|
||||
|
||||
def convert_job_to_info(job: UserJob):
|
||||
return {
|
||||
'key': job.key,
|
||||
'user_name': job.user_name,
|
||||
'name': job.get_name(),
|
||||
'is_ready': job.is_ready,
|
||||
'is_loaded': job.user_loaded, # 是否成功加载 ready 是当前是否可用
|
||||
'last_heartbeat': timestamp_to_time(job.last_heartbeat) if job.last_heartbeat else '-',
|
||||
'login_num': job.login_num
|
||||
}
|
||||
Reference in New Issue
Block a user