Files
road_pov_template/server.py
2023-10-17 00:04:15 +08:00

146 lines
4.0 KiB
Python

from flask import Flask, request, make_response, send_file
from flask_cors import *
from gevent import pywsgi
from urllib import parse
from main.main import *
from main.distance import *
from main.sa_pa import *
from settings import *
import json
import os
import logging
import sqlite3
import time
app = Flask(__name__)
app.logger.setLevel(logging.INFO)
handler = logging.FileHandler('flask.log')
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
app.logger.addHandler(handler)
CORS(app)
db_conn = sqlite3.connect('dashboard.db')
@app.route('/api/pov-element/common', methods=["GET"])
def common():
query_data = request.args.get('data')
json_data = json.loads(query_data)
theme = request.args.get('theme')
app.logger.info('[{}] {}'.format(request.remote_addr, parse.unquote(query_data)))
track_request(request.remote_addr, '直行和出口预告', parse.unquote(query_data))
data, path = gen_common(json_data, theme)
res = {
'code': 0,
'image': data,
}
response = make_response(res)
AUTO_CLEAN and os.remove(path)
return response
@app.route('/api/pov-element/distance', methods=["GET"])
def distance():
query_data = request.args.get('data')
json_data = json.loads(query_data)
theme = request.args.get('theme')
app.logger.info('[{}] {}'.format(request.remote_addr, parse.unquote(query_data)))
track_request(request.remote_addr, '地点距离预告', parse.unquote(query_data))
data, path = gen_distance(json_data, theme)
res = {
'code': 0,
'image': data,
}
response = make_response(res)
AUTO_CLEAN and os.remove(path)
return response
@app.route('/api/pov-element/service', methods=["GET"])
def service():
query_data = request.args.get('data')
json_data = json.loads(query_data)
app.logger.info('[{}] {}'.format(request.remote_addr, parse.unquote(query_data)))
track_request(request.remote_addr, '服务区预告', parse.unquote(query_data))
data, path = gen_service(json_data)
res = {
'code': 0,
'image': data,
}
response = make_response(res)
AUTO_CLEAN and os.remove(path)
return response
@app.route('/api/pov-element/dashboard', methods=["GET"])
def dashboard():
start_time = request.args.get('start_time')
end_time = request.args.get('end_time')
data = fetch_dashboard(start_time, end_time)
res = {
'code': 0,
'image': data,
}
response = make_response(res)
return response
@app.route('/api/pov-element/database', methods=["GET"])
def database():
return send_file('dashboard.db')
def track_request(ip, type, data):
cursor = db_conn.cursor()
sql = """
INSERT INTO POV(TIME, IP, TYPE, DATA) VALUES(?, ?, ?, ?);
"""
param = (time.strftime('%Y-%m-%d %H:%M:%S'), ip, type, data)
try:
cursor.execute(sql, param)
except sqlite3.OperationalError as e:
app.logger.info(e)
finally:
cursor.close()
db_conn.commit()
def fetch_dashboard(start_time, end_time):
cursor = db_conn.cursor()
sql = """
SELECT TIME, TYPE, COUNT(*) FROM POV WHERE TIME BETWEEN ? AND ? GROUP BY TYPE, TIME;
"""
param = (start_time, end_time)
try:
cursor.execute(sql, param)
result = cursor.fetchall()
app.logger.info(result)
except sqlite3.OperationalError as e:
app.logger.info(e)
finally:
cursor.close()
db_conn.commit()
def init_dashboard():
cursor = db_conn.cursor()
sql = """
CREATE TABLE IF NOT EXISTS POV(
TIME TEXT,
IP TEXT,
TYPE INTEGER,
DATA TEXT
);
"""
try:
cursor.execute(sql)
except sqlite3.OperationalError as e:
app.logger.info(e)
finally:
cursor.close()
db_conn.commit()
if __name__ == '__main__':
init_dashboard()
server = pywsgi.WSGIServer(('0.0.0.0', 5000), app)
server.serve_forever()