summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhandingkang <[email protected]>2024-01-16 22:28:04 +0800
committerhandingkang <[email protected]>2024-01-16 22:28:04 +0800
commit71289c97a0a8f7c24005422dc7b6fa8082370656 (patch)
tree027ca352a69c4bb04450fb01d5bf0562ae3ac7eb
parent69791086af6f042c5d5ef3351ca72d87996f1ba6 (diff)
首页接口开发完成
-rw-r--r--app.py6
-rw-r--r--apps/apiv1.py9
-rw-r--r--apps/sysinfo.py30
-rw-r--r--script/schedule.py12
-rw-r--r--settings.py3
5 files changed, 39 insertions, 21 deletions
diff --git a/app.py b/app.py
index 82e372f..6f794c3 100644
--- a/app.py
+++ b/app.py
@@ -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"