146 lines
4.0 KiB
Python
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()
|