diff options
| author | handingkang <[email protected]> | 2024-01-16 22:28:04 +0800 |
|---|---|---|
| committer | handingkang <[email protected]> | 2024-01-16 22:28:04 +0800 |
| commit | 71289c97a0a8f7c24005422dc7b6fa8082370656 (patch) | |
| tree | 027ca352a69c4bb04450fb01d5bf0562ae3ac7eb | |
| parent | 69791086af6f042c5d5ef3351ca72d87996f1ba6 (diff) | |
首页接口开发完成
| -rw-r--r-- | app.py | 6 | ||||
| -rw-r--r-- | apps/apiv1.py | 9 | ||||
| -rw-r--r-- | apps/sysinfo.py | 30 | ||||
| -rw-r--r-- | script/schedule.py | 12 | ||||
| -rw-r--r-- | settings.py | 3 |
5 files changed, 39 insertions, 21 deletions
@@ -1,5 +1,6 @@ from apiflask import APIFlask +from apps.apiv1 import Response from apps.apiv1 import bp as apiv1_bp from script.schedule import run from util import log @@ -7,6 +8,9 @@ from util import log # 注册蓝图 app = APIFlask(__name__, template_folder='./static/templates') app.register_blueprint(apiv1_bp) +# 响应格式定义 +app.config['BASE_RESPONSE_SCHEMA'] = Response +app.config['BASE_RESPONSE_DATA_KEY '] = 'data' @app.get('/') @@ -19,4 +23,4 @@ if __name__ == '__main__': log.info("数据缓存服务启动") run() log.info("flask主服务启动") - app.run(host="0.0.0.0", debug=False, port=8484) + app.run(host="0.0.0.0", port=8484) diff --git a/apps/apiv1.py b/apps/apiv1.py index 178902a..05d3435 100644 --- a/apps/apiv1.py +++ b/apps/apiv1.py @@ -1,4 +1,5 @@ -from apiflask import APIBlueprint +from apiflask import APIBlueprint, Schema +from apiflask.fields import Integer, String, Field from .data import bp as databp from .stats import bp as statsbp @@ -8,3 +9,9 @@ bp = APIBlueprint('apiv1', __name__, url_prefix="/api") bp.register_blueprint(statsbp) bp.register_blueprint(databp) bp.register_blueprint(sysbp) + + +class Response(Schema): + code = Integer() + msg = String() + data = Field() diff --git a/apps/sysinfo.py b/apps/sysinfo.py index 6e53e87..496e851 100644 --- a/apps/sysinfo.py +++ b/apps/sysinfo.py @@ -1,5 +1,6 @@ # 获取系统运行时间、v6&双栈数据总数、每日增长 import datetime +import json import pymysql from apiflask import APIBlueprint @@ -12,8 +13,8 @@ bp = APIBlueprint('sys', __name__, url_prefix='/sys') class DataAccess(): def __init__(self): # mysql连接 - dbname = MYSQL_SYSDB - self.tabname = MYSQL_SYSDB_CONFIGTAB + dbname = MYSQL_DATADB + self.tabname = MYSQL_DATADB_CONFIGTAB self.conn = pymysql.connect(host=MYSQL_HOST, user='root', password=MYSQL_PAWD, port=MYSQL_PORT) self.cursor = self.conn.cursor() @@ -36,17 +37,13 @@ class DataAccess(): # 获取一般数据 def getcommondata(self, colname): - datadb = MYSQL_DATADB - self.conn.select_db(datadb) - sql = "SELECT data FROM %s WHERE name=%s " % (MYSQL_DATADB_COMDATATAB, colname) + sql = "SELECT data FROM %s WHERE name='%s' " % (MYSQL_DATADB_COMDATATAB, colname) self.cursor.execute(sql) return self.cursor.fetchall() # 获取时序数据 def get_date_data(self, tabname): - datadb = MYSQL_DATADB - self.conn.select_db(datadb) - sql = "SELECT date,data FROM %s ORDER BY DATE(date)" % (tabname) + sql = "SELECT DATE(date),data FROM %s ORDER BY DATE(date)" % (tabname) self.cursor.execute(sql) return self.cursor.fetchall() @@ -57,16 +54,18 @@ da = DataAccess() # 运行时间获取接口 @bp.get("/startday") def sysdays(): - sql = "SELECT info FROM %s WHERE name=%s" % (da.tabname, "startday") + sql = "SELECT info FROM %s WHERE name='%s'" % (da.tabname, "startday") da.cursor.execute(sql) result = da.cursor.fetchall() # 不存在结果,插入当天日期 if len(result) == 0: - sql = "INSERT INTO %s(name,info) VALUES (%s,%s)" % (da.tabname, "startday", str(datetime.date.today())) + sql = "INSERT INTO %s(id,name,info) VALUES (1,'%s',str_to_date('%s','%%Y-%%m-%%d'))" % ( + da.tabname, "startday", str(datetime.date.today())) da.cursor.execute(sql) + da.conn.commit() sday = datetime.date.today() else: - sday = datetime.date.strftime(str(result[0][0])) + sday = datetime.datetime.strptime(result[0][0], '%Y-%m-%d').date() # 计算相距时间并返回 difftime = (datetime.date.today() - sday).days return {"code": 0, "data": {"count": difftime if difftime > 0 else 1}, "msg": "success"} @@ -81,15 +80,18 @@ def sysv6count(): @bp.get("/dual") def sysdualcount(): + # 获取json字符串 count = da.getcommondata("dualcount")[0][0] - return {"code": 0, "data": {"count": count}, "msg": "success"} + # 解析为字典 + c = json.loads(count) + return {"code": 0, "data": {"count": c['count']}, "msg": "success"} @bp.get("/dcount") def sysdatecount(): - countlist = da.get_date_data("v6data") + countlist = da.get_date_data(MYSQL_DATADB_DATETAB) datecount = [] for c in countlist: - datecount.append({"date": c[0], "count": c[1]}) + datecount.append({"date": c[0].strftime('%Y年%m月%d日'), "count": c[1]}) # 返回datecount列表 return {"code": 0, "data": {"list": datecount}, "msg": "success"} diff --git a/script/schedule.py b/script/schedule.py index 37c94ff..54b67c5 100644 --- a/script/schedule.py +++ b/script/schedule.py @@ -1,10 +1,12 @@ import datetime +import json import threading import time import pymysql from neomodel import config, db from neomodel.integration.pandas import to_dataframe +from pymysql.converters import escape_string from schedule import repeat, every, run_pending, run_all, idle_seconds from apps.model import NodeResolver53 @@ -70,8 +72,12 @@ def refresh_neo4j(): # 双栈计数 dual_countresult = db.cypher_query(dualcountcypher, retry_on_session_expire=True)[0][0] - sql = "REPLACE INTO %s(id,name,data) VALUES (1,'%s','{\"%s\":\"%s\"}')" % ( - da.tabname, "dualcount", "count", str(dual_countresult[0])) + # 将结果包装为json字符串 + param = {'count': dual_countresult[0]} + d_param = json.dumps(param) + + sql = "REPLACE INTO %s(id,name,data) VALUES (1,'%s','%s')" % ( + da.tabname, "dualcount", escape_string(d_param)) try: da.cursor.execute(sql) da.conn.commit() @@ -82,7 +88,7 @@ def refresh_neo4j(): # 双栈信息 dual_dataresult = to_dataframe(db.cypher_query(dualdatacypher, retry_on_session_expire=True)) res = dual_dataresult.to_json(orient="index") - sql = "REPLACE INTO %s(id,name,data) VALUES (2,'%s','%s')" % (da.tabname, "dualdata", res) + sql = "REPLACE INTO %s(id,name,data) VALUES (2,'%s','%s')" % (da.tabname, "dualdata", escape_string(res)) try: da.cursor.execute(sql) da.conn.commit() diff --git a/settings.py b/settings.py index 74abf6b..673b70e 100644 --- a/settings.py +++ b/settings.py @@ -3,8 +3,7 @@ MYSQL_HOST = '124.221.228.62' MYSQL_PORT = 6033 MYSQL_PAWD = 'Diamondv77' -MYSQL_SYSDB = "v6dnsminer" -MYSQL_SYSDB_CONFIGTAB = "config" +MYSQL_DATADB_CONFIGTAB = "config" MYSQL_DATADB = "v6dnsminerdata" MYSQL_DATADB_COMDATATAB = "data" |
