diff options
| author | handingkang <[email protected]> | 2024-04-16 11:05:48 +0800 |
|---|---|---|
| committer | handingkang <[email protected]> | 2024-04-16 11:05:48 +0800 |
| commit | 489a2e4fc8a4f230f284010e843dbcb01c41b3dc (patch) | |
| tree | fcd59873212d5fe058d35bf51d8b62426e83021c | |
| parent | d654065108c59275c7eef140f71c8bb02d5b681d (diff) | |
所有接口新增响应码字段code
| -rw-r--r-- | server/apps/agentcomm.py | 8 | ||||
| -rw-r--r-- | server/apps/sysinfo.py | 17 | ||||
| -rw-r--r-- | server/apps/sysmange.py | 18 | ||||
| -rw-r--r-- | server/apps/target.py | 25 | ||||
| -rw-r--r-- | server/apps/task.py | 68 |
5 files changed, 91 insertions, 45 deletions
diff --git a/server/apps/agentcomm.py b/server/apps/agentcomm.py index cf71e28..ab50797 100644 --- a/server/apps/agentcomm.py +++ b/server/apps/agentcomm.py @@ -4,8 +4,8 @@ import random from apiflask import APIBlueprint, Schema from apiflask.fields import String, Integer, List, Nested, Boolean, DateTime from apiflask.validators import OneOf -from apps.util import fake +from apps.util import fake bp = APIBlueprint("代理管理接口集合", __name__, url_prefix="/agent") @@ -58,7 +58,9 @@ def task_ret(): "per_page": Integer(load_default=10) }, location="query") @bp.output({ - "agent_data": List(Nested(agent())) + "code": Integer(), + "agent_data": List(Nested(agent())), + "total": Integer() }) def agent_info(query_data): per_page = query_data["per_page"] @@ -79,4 +81,4 @@ def agent_info(query_data): '{:.2f}'.format(100 * random.random())) + "%可用)", "start_time": fake.date_time_between(start_date="-1y")}) - return {"agent_data": agent_list} + return {"code": 200, "agent_data": agent_list, "total": 10 * per_page} diff --git a/server/apps/sysinfo.py b/server/apps/sysinfo.py index 3cab7fd..49a6031 100644 --- a/server/apps/sysinfo.py +++ b/server/apps/sysinfo.py @@ -1,13 +1,13 @@ # 系统信息接口 import datetime -# 测试用 -from apps.util import fake - from apiflask import APIBlueprint, Schema from apiflask.fields import Date, Integer, Nested, Dict, DateTime, String, List from apiflask.validators import OneOf +# 测试用 +from apps.util import fake + bp = APIBlueprint("仪表盘接口", __name__, url_prefix="/sys") @@ -30,6 +30,7 @@ class LogOut(Schema): @bp.get("/num") @bp.doc("系统信息获取接口", "返回当前系统状态,包括已部署代理节点数量、已执行任务次数、系统已运行天数以及已探测目标统计") @bp.output({ + "code": Integer(), "agent_num": Integer(), "task_num": Integer(), "workday": Integer(), @@ -50,6 +51,7 @@ def systate(): dot_num = fake.random.randint(10, 100) # 返回结果 return { + "code": 200, "agent_num": agent_num, "task_num": task_num, "workday": workday, @@ -65,6 +67,7 @@ def systate(): @bp.get("/num/date") @bp.doc("仪表盘柱状图数据获取接口", "返回当前不同探测目标在一周内的数量变化情况") @bp.output({ + "code": Integer(), "date_data": Dict(Date(), Nested(TargetOut())) }) def target_date(): @@ -81,7 +84,7 @@ def target_date(): "dot": fake.random.randint(10, 20) * day } day += 1 - return {"date_data": dates} + return {"code": 200, "date_data": dates} @bp.get("/log") @@ -91,7 +94,9 @@ def target_date(): }, location="query") @bp.doc("系统操作日志获取接口", "返回系统的操作日志") @bp.output({ - "log_data": List(Nested(LogOut())) + "code": Integer(), + "log_data": List(Nested(LogOut())), + "total": Integer() }) def sys_log(query_data): # 每页显示多少项 @@ -108,4 +113,4 @@ def sys_log(query_data): "user": fake.name(), "ip": fake.ipv4() }) - return {"log_data": log_list} + return {"code": 200, "log_data": log_list, "total": 10 * per_page} diff --git a/server/apps/sysmange.py b/server/apps/sysmange.py index f140506..7921077 100644 --- a/server/apps/sysmange.py +++ b/server/apps/sysmange.py @@ -1,5 +1,4 @@ # 系统管理——用户管理 -import datetime from apiflask import APIBlueprint, Schema from apiflask.fields import String, Integer, DateTime, List, Nested @@ -24,16 +23,17 @@ class User(Schema): "page": Integer(load_default=1) }, location='query') @bp.output({ + "code": Integer(), "data": List(Nested(User())) }) def list_user(query_data): - if query_data['page']==1: + if query_data['page'] == 1: user_list = [ - {"account": "Root", "username": "管理员", "time": fake.date_time_between(start_date='-10y', end_date='-9y'), - "created_by": "", "group": "Admin"}] + {"account": "Root", "username": "管理员", "time": fake.date_time_between(start_date='-10y', end_date='-9y'), + "created_by": "", "group": "Admin"}] else: user_list = [] - for _ in range(query_data["per_page"]-len(user_list)): + for _ in range(query_data["per_page"] - len(user_list)): user_list.append({ "account": fake.vin(), "username": fake.name(), @@ -41,7 +41,7 @@ def list_user(query_data): "created_by": "管理员", "group": "Admin" }) - return {"data": user_list} + return {"code": 200, "data": user_list} @bp.post("/") @@ -52,6 +52,10 @@ def list_user(query_data): "pwd": String(required=True), "cur_user": String(load_default="Root") }) + "code": Integer(), + "msg": String() +}) def create_user(json_data): print(json_data) - return {"msg": "ok"} + return {"code": 200, "msg": "ok"} diff --git a/server/apps/target.py b/server/apps/target.py index a091173..d11d479 100644 --- a/server/apps/target.py +++ b/server/apps/target.py @@ -6,10 +6,11 @@ import threading import pandas as pd import requests from apiflask import APIBlueprint, Schema -from apiflask.fields import Integer, String, List, Nested, IP, DateTime -from apps.util import fake +from apiflask.fields import Integer, String, List, Nested, IP, DateTime, Dict from requests.exceptions import Timeout +from apps.util import fake + bp = APIBlueprint("目标信息及状态接口集合", __name__, url_prefix="/target") icmp_delaytable = {} @@ -46,7 +47,8 @@ class Delay(Schema): class DelayOut(Schema): - delay_data = List(Nested(Delay)) + code = Integer() + delay_data = List(Nested(Delay())) @bp.get("/delay/<string:type>") @@ -66,7 +68,7 @@ def get_pernode_delay(query_data, type): threads.append(mythread) for t in threads: t.join() - return {'delay_data': ans} + return {"code": 200, 'delay_data': ans} threadLock = threading.Lock() @@ -155,6 +157,8 @@ from apiflask.fields import String from apiflask.validators import OneOf from dns import resolver +rrest_key = "rrset" + @bp.get("/check") @bp.doc("通过指定的解析器获取指定域名的A/AAAA记录", hide=True) @@ -163,6 +167,10 @@ from dns import resolver 'domain': String(required=True), 'qtype': String(required=True, validate=OneOf(['A', 'AAAA', "CNAME", "NS"])) }, location='query') + "code": Integer(), + "ans": List(Dict(String(validate=OneOf([rrest_key])), String())) +}) def record(query_data): # 特殊协议头 protols = ["https", "tls"] @@ -194,8 +202,8 @@ def record(query_data): myAnswers = myResolver.resolve(domain, qtype) if myAnswers.rrset is not None: for r in myAnswers.rrset: - ans.append({"rrset": str(r)}) - return {'ans': ans} + ans.append({rrest_key: str(r)}) + return {"code": 200, 'ans': ans} @bp.get("/") @@ -206,6 +214,7 @@ def record(query_data): "ip": IP(load_default=None) }, location='query') @bp.output({ + "code": Integer(), "data": List(Nested(Target())) }) def target_info(query_data): @@ -227,7 +236,7 @@ def target_info(query_data): "isp": fake.company(), "time": fake.date_time_between('-2y'), }) - return {"data": target_list} + return {"code": 200, "data": target_list} # 查询目标 else: lat, lng, _, cou, _ = fake.location_on_land() @@ -241,4 +250,4 @@ def target_info(query_data): "lng": lng, "isp": fake.company(), "time": fake.date_time_between('-2y'), }] - return {"data": target} + return {"code": 200, "data": target} diff --git a/server/apps/task.py b/server/apps/task.py index 3905df4..3567248 100644 --- a/server/apps/task.py +++ b/server/apps/task.py @@ -45,8 +45,8 @@ class TaskState(Schema): policy_name = String() # 策略参数 policy_param = String() - # 执行输出 - policy_output = List(Nested(TaskLog())) + # 执行策略编号 + policy_id = String() # 效果评估 policy_status = String() @@ -76,10 +76,14 @@ class TaskState(Schema): # 运行配置 "run_flag": String(validate=OneOf(["now", "man"])) }) + "code": Integer(), + "msg": String(), +}) # TODO:创建任务接口具体实现 def make_task(json_data): print(json_data) - return {"msg": "ok"} + return {"code": 200, "msg": "ok"} opsmap = {"start": "开始", "stop": "暂停", "cancel": "停止"} @@ -92,10 +96,14 @@ opsmap = {"start": "开始", "stop": "暂停", "cancel": "停止"} "taskid": String(required=True), "ops": String(required=True, validate=OneOf(["start", "stop", "cancel"])) }) + "code": Integer(), + "msg": String(), +}) # TODO:操作任务开始停止控制接口具体实现 def ops_task(json_data): ops = opsmap[json_data["ops"]] - return {"msg": "任务" + json_data["taskid"] + "已" + ops} + return {"code": 200, "msg": "任务" + json_data["taskid"] + "已" + ops} # 查询任务列表接口 @@ -106,12 +114,15 @@ def ops_task(json_data): "per_page": Integer(load_default=10) }, location="query") @bp.output({ - "data": List(Nested(Task())) + "code": Integer(), + "data": List(Nested(Task())), + "total": Integer() }) # TODO:查询任务状态接口具体实现 def tasks_state(query_data): + per_page = query_data["per_page"] task_list = [] - for _ in range(query_data["per_page"]): + for _ in range(per_page): task_list.append({ "id": fake.random.randint(1, 10000), "target": fake.ipv4(), @@ -123,7 +134,7 @@ def tasks_state(query_data): "create_time": fake.date_time_between(start_date="-1y"), "status": random.choice(["working", "stop", "finish"]) }) - return {"data": task_list} + return {"code": 200, "data": task_list, "total": 10 * per_page} # 任务详情接口 @@ -133,6 +144,7 @@ def tasks_state(query_data): "taskid": String(required=True), }, location="query") @bp.output({ + "code": Integer(), "data": List(Nested(TaskState())) }) # TODO:任务详情接口具体实现 @@ -146,13 +158,7 @@ def task_info(query_data): "start_time": fake.date_time_between(start_date="-1y"), "policy_name": random.choice(["IPv6", "DNSSEC", "DoT", "DoH"]) + " " + random.choice(["DDoS", "数据欺骗"]), "policy_param": random.choice(["攻击速率: 1000pps", "目标域名: www.google.com | 目标记录: NS attack.com"]), - "policy_output": [{ - "time": fake.date_time_between(start_date="-1y"), - "ip": "192.168.1.1", - "targetip": "2406:1234:1234:1234:1234:1234:1234:1234", - "level": random.choice(["INFO", "WARNING", "ERROR"]), - "info": fake.text(max_nb_chars=20, ext_word_list=None) - } for _ in range(20)], + "policy_id": str(fake.random.randint(1, 10000)), "policy_status": "无效;原因为:超时未成功" }) # 当前正在执行的策略 @@ -160,13 +166,33 @@ def task_info(query_data): "start_time": datetime.datetime.now(), "policy_name": random.choice(["IPv6", "DNSSEC", "DoT", "DoH"]) + " " + random.choice(["DDoS", "数据欺骗"]), "policy_param": random.choice(["攻击速率: 1000pps", "目标域名: www.google.com | 目标记录: NS attack.com"]), - "policy_output": [{ - "time": fake.date_time_between(start_date="-1y"), - "ip": "192.168.1.1", - "targetip": "2406:1234:1234:1234:1234:1234:1234:1234", - "level": random.choice(["INFO", "WARNING", "ERROR"]), - "info": fake.text(max_nb_chars=20, ext_word_list=None) - } for _ in range(20)], + "policy_id": str(fake.random.randint(1, 10000)), "policy_status": "评估中" }) return {"data": task_state_list} + + [email protected]("/tp") [email protected]("任务策略执行日志获取接口") + "id": String(required=True), + "per_page": Integer(load_default=10), + "page": Integer(load_default=1) +}) + "code": Integer(), + "data": List(Nested(TaskLog())), + "total": Integer() +}) +def taskpolicy_log(query_data): + per_page = query_data["per_page"] + page = query_data["page"] + policy_output = [{ + "time": fake.date_time_between(start_date="-1y"), + "ip": "192.168.1.1", + "targetip": "2406:1234:1234:1234:1234:1234:1234:1234", + "level": random.choice(["INFO", "WARNING", "ERROR"]), + "info": fake.text(max_nb_chars=20, ext_word_list=None) + } for _ in range(20)] + + return {"code": 200, "data": policy_output, "total": 10 * per_page} |
