Skip to content

Commit 0320f13

Browse files
committed
refactor: Add logs to the system operation method
1 parent 15cecdb commit 0320f13

File tree

17 files changed

+138
-19
lines changed

17 files changed

+138
-19
lines changed

backend/apps/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from apps.system.api import login, user, aimodel, workspace, assistant, parameter, apikey
99
from apps.terminology.api import terminology
1010
from apps.settings.api import base
11-
#from apps.audit.api import audit_api
11+
#from audit.api import audit_api
1212

1313

1414
api_router = APIRouter()

backend/apps/chat/api/chat.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ def inner():
7171

7272

7373
@router.post("/rename", response_model=str, summary=f"{PLACEHOLDER_PREFIX}rename_chat")
74+
@system_log(LogConfig(
75+
operation_type=OperationType.UPDATE,
76+
module=OperationModules.CHAT,
77+
resource_id_expr="chat.id"
78+
))
7479
async def rename(session: SessionDep, chat: RenameChat):
7580
try:
7681
return rename_chat(session=session, rename_object=chat)

backend/apps/dashboard/api/dashboard_api.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ async def create_resource_api(session: SessionDep, user: CurrentUser, dashboard:
2626

2727

2828
@router.post("/update_resource", response_model=BaseDashboard)
29+
@system_log(LogConfig(
30+
operation_type=OperationType.UPDATE,
31+
module=OperationModules.DASHBOARD,
32+
resource_id_expr="dashboard.id"
33+
))
2934
async def update_resource_api(session: SessionDep, user: CurrentUser, dashboard: QueryDashboard):
3035
return update_resource(session=session, user=user, dashboard=dashboard)
3136

backend/apps/data_training/api/data_training.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
from common.core.deps import SessionDep, CurrentUser, Trans
2020
from common.utils.data_format import DataFormat
2121
from common.utils.excel import get_excel_column_count
22+
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
23+
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log
2224

2325
router = APIRouter(tags=["SQL Examples"], prefix="/system/data-training")
2426

@@ -40,6 +42,7 @@ async def pager(session: SessionDep, current_user: CurrentUser, current_page: in
4042

4143

4244
@router.put("", response_model=int, summary=f"{PLACEHOLDER_PREFIX}create_or_update_dt")
45+
@system_log(LogConfig(operation_type=OperationType.CREATE_OR_UPDATE, module=OperationModules.DATA_TRAINING,resource_id_expr='info.id', result_id_expr="result_self"))
4346
async def create_or_update(session: SessionDep, current_user: CurrentUser, trans: Trans, info: DataTrainingInfo):
4447
oid = current_user.oid
4548
if info.id:
@@ -49,16 +52,19 @@ async def create_or_update(session: SessionDep, current_user: CurrentUser, trans
4952

5053

5154
@router.delete("", summary=f"{PLACEHOLDER_PREFIX}delete_dt")
55+
@system_log(LogConfig(operation_type=OperationType.DELETE, module=OperationModules.DATA_TRAINING,resource_id_expr='id_list'))
5256
async def delete(session: SessionDep, id_list: list[int]):
5357
delete_training(session, id_list)
5458

5559

5660
@router.get("/{id}/enable/{enabled}", summary=f"{PLACEHOLDER_PREFIX}enable_dt")
61+
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.DATA_TRAINING,resource_id_expr='id'))
5762
async def enable(session: SessionDep, id: int, enabled: bool, trans: Trans):
5863
enable_training(session, id, enabled, trans)
5964

6065

6166
@router.get("/export", summary=f"{PLACEHOLDER_PREFIX}export_dt")
67+
@system_log(LogConfig(operation_type=OperationType.EXPORT, module=OperationModules.DATA_TRAINING))
6268
async def export_excel(session: SessionDep, trans: Trans, current_user: CurrentUser,
6369
question: Optional[str] = Query(None, description="搜索术语(可选)")):
6470
def inner():
@@ -148,6 +154,7 @@ def inner():
148154

149155

150156
@router.post("/uploadExcel", summary=f"{PLACEHOLDER_PREFIX}upload_excel_dt")
157+
@system_log(LogConfig(operation_type=OperationType.IMPORT, module=OperationModules.DATA_TRAINING))
151158
async def upload_excel(trans: Trans, current_user: CurrentUser, file: UploadFile = File(...)):
152159
ALLOWED_EXTENSIONS = {"xlsx", "xls"}
153160
if not file.filename.lower().endswith(tuple(ALLOWED_EXTENSIONS)):

backend/apps/datasource/api/recommended_problem.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
save_recommended_problem, get_datasource_recommended_base
66
from apps.datasource.models.datasource import RecommendedProblemBase
77
from common.core.deps import SessionDep, CurrentUser
8+
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
9+
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log
810

911
router = APIRouter(tags=["recommended_problem"], prefix="/recommended_problem")
1012

@@ -19,6 +21,8 @@ async def datasource_recommended(session: SessionDep, ds_id: int):
1921

2022

2123
@router.post("/save_recommended_problem")
24+
@system_log(
25+
LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.DATASOURCE, resource_id_expr="data_info.datasource_id"))
2226
async def datasource_recommended(session: SessionDep, user: CurrentUser, data_info: RecommendedProblemBase):
2327
update_ds_recommended_config(session, data_info.datasource_id, data_info.recommended_config)
2428
return save_recommended_problem(session, user, data_info)

backend/apps/system/api/aimodel.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
from common.utils.utils import SQLBotLogUtil, prepare_model_arg
1717

1818
router = APIRouter(tags=["system_model"], prefix="/system/aimodel")
19+
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
20+
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log
1921

2022
@router.post("/status", include_in_schema=False)
2123
@require_permissions(permission=SqlbotPermission(role=['admin']))
@@ -54,7 +56,8 @@ async def check_default(session: SessionDep, trans: Trans):
5456
raise Exception(trans('i18n_llm.miss_default'))
5557

5658
@router.put("/default/{id}", summary=f"{PLACEHOLDER_PREFIX}system_model_default", description=f"{PLACEHOLDER_PREFIX}system_model_default")
57-
@require_permissions(permission=SqlbotPermission(role=['admin']))
59+
@require_permissions(permission=SqlbotPermission(role=['admin']))
60+
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.AI_MODEL, resource_id_expr="id"))
5861
async def set_default(session: SessionDep, id: int = Path(description="ID")):
5962
db_model = session.get(AiModelDetail, id)
6063
if not db_model:
@@ -122,7 +125,8 @@ async def get_model_by_id(
122125
return AiModelEditor(**data)
123126

124127
@router.post("", summary=f"{PLACEHOLDER_PREFIX}system_model_create", description=f"{PLACEHOLDER_PREFIX}system_model_create")
125-
@require_permissions(permission=SqlbotPermission(role=['admin']))
128+
@require_permissions(permission=SqlbotPermission(role=['admin']))
129+
@system_log(LogConfig(operation_type=OperationType.CREATE, module=OperationModules.AI_MODEL, result_id_expr="id"))
126130
async def add_model(
127131
session: SessionDep,
128132
creator: AiModelCreator
@@ -137,9 +141,11 @@ async def add_model(
137141
detail.default_model = True
138142
session.add(detail)
139143
session.commit()
144+
return detail
140145

141146
@router.put("", summary=f"{PLACEHOLDER_PREFIX}system_model_update", description=f"{PLACEHOLDER_PREFIX}system_model_update")
142-
@require_permissions(permission=SqlbotPermission(role=['admin']))
147+
@require_permissions(permission=SqlbotPermission(role=['admin']))
148+
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.AI_MODEL, resource_id_expr="editor.id"))
143149
async def update_model(
144150
session: SessionDep,
145151
editor: AiModelEditor
@@ -155,7 +161,8 @@ async def update_model(
155161
session.commit()
156162

157163
@router.delete("/{id}", summary=f"{PLACEHOLDER_PREFIX}system_model_del", description=f"{PLACEHOLDER_PREFIX}system_model_del")
158-
@require_permissions(permission=SqlbotPermission(role=['admin']))
164+
@require_permissions(permission=SqlbotPermission(role=['admin']))
165+
@system_log(LogConfig(operation_type=OperationType.DELETE, module=OperationModules.AI_MODEL, resource_id_expr="id"))
159166
async def delete_model(
160167
session: SessionDep,
161168
trans: Trans,

backend/apps/system/api/apikey.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@
99
import secrets
1010

1111
router = APIRouter(tags=["system_apikey"], prefix="/system/apikey", include_in_schema=False)
12+
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
13+
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log
1214

1315
@router.get("")
1416
async def grid(session: SessionDep, current_user: CurrentUser) -> list[ApikeyGridItem]:
1517
query = select(ApiKeyModel).where(ApiKeyModel.uid == current_user.id).order_by(ApiKeyModel.create_time.desc())
1618
return session.exec(query).all()
1719

1820
@router.post("")
21+
@system_log(LogConfig(operation_type=OperationType.CREATE, module=OperationModules.API_KEY,result_id_expr='result.self'))
1922
async def create(session: SessionDep, current_user: CurrentUser):
2023
count = session.exec(select(func.count()).select_from(ApiKeyModel)).one()
2124
if count >= 5:
@@ -34,6 +37,7 @@ async def create(session: SessionDep, current_user: CurrentUser):
3437
return api_key.id
3538

3639
@router.put("/status")
40+
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.API_KEY,resource_id_expr='id'))
3741
async def status(session: SessionDep, current_user: CurrentUser, dto: ApikeyStatus):
3842
api_key = session.get(ApiKeyModel, dto.id)
3943
if not api_key:
@@ -48,6 +52,7 @@ async def status(session: SessionDep, current_user: CurrentUser, dto: ApikeyStat
4852
session.commit()
4953

5054
@router.delete("/{id}")
55+
@system_log(LogConfig(operation_type=OperationType.DELETE, module=OperationModules.API_KEY,resource_id_expr='id'))
5156
async def delete(session: SessionDep, current_user: CurrentUser, id: int):
5257
api_key = session.get(ApiKeyModel, id)
5358
if not api_key:

backend/apps/system/api/assistant.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
from common.utils.utils import get_origin_from_referer, origin_match_domain
2222

2323
router = APIRouter(tags=["system_assistant"], prefix="/system/assistant")
24+
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
25+
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log
2426

2527

2628
@router.get("/info/{id}", include_in_schema=False)
@@ -168,12 +170,14 @@ async def query_advanced_application(session: SessionDep):
168170

169171

170172
@router.post("", summary=f"{PLACEHOLDER_PREFIX}assistant_create_api", description=f"{PLACEHOLDER_PREFIX}assistant_create_api")
173+
@system_log(LogConfig(operation_type=OperationType.CREATE, module=OperationModules.APPLICATION, result_id_expr="id"))
171174
async def add(request: Request, session: SessionDep, creator: AssistantBase):
172-
await save(request, session, creator)
175+
return await save(request, session, creator)
173176

174177

175178
@router.put("", summary=f"{PLACEHOLDER_PREFIX}assistant_update_api", description=f"{PLACEHOLDER_PREFIX}assistant_update_api")
176179
@clear_cache(namespace=CacheNamespace.EMBEDDED_INFO, cacheName=CacheName.ASSISTANT_INFO, keyExpression="editor.id")
180+
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.APPLICATION, resource_id_expr="editor.id"))
177181
async def update(request: Request, session: SessionDep, editor: AssistantDTO):
178182
id = editor.id
179183
db_model = session.get(AssistantModel, id)
@@ -197,6 +201,7 @@ async def get_one(session: SessionDep, id: int = Path(description="ID")):
197201

198202
@router.delete("/{id}", summary=f"{PLACEHOLDER_PREFIX}assistant_del_api", description=f"{PLACEHOLDER_PREFIX}assistant_del_api")
199203
@clear_cache(namespace=CacheNamespace.EMBEDDED_INFO, cacheName=CacheName.ASSISTANT_INFO, keyExpression="id")
204+
@system_log(LogConfig(operation_type=OperationType.DELETE, module=OperationModules.APPLICATION, resource_id_expr="id"))
200205
async def delete(request: Request, session: SessionDep, id: int = Path(description="ID")):
201206
db_model = session.get(AssistantModel, id)
202207
if not db_model:

backend/apps/system/api/parameter.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
from common.core.deps import SessionDep
77

88
router = APIRouter(tags=["system/parameter"], prefix="/system/parameter", include_in_schema=False)
9-
9+
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
10+
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log
1011

1112
@router.get("/login")
1213
async def get_login_args(session: SessionDep) -> list[SysArgModel]:
@@ -21,6 +22,7 @@ async def get_args(session: SessionDep) -> list[SysArgModel]:
2122

2223
@router.post("", )
2324
@require_permissions(permission=SqlbotPermission(role=['admin']))
25+
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.PARAMS_SETTING))
2426
async def save_args(session: SessionDep, request: Request):
2527
return await save_parameter_args(session=session, request=request)
2628

backend/apps/system/api/user.py

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
from apps.system.schemas.auth import CacheName, CacheNamespace
1010
from apps.system.schemas.permission import SqlbotPermission, require_permissions
1111
from apps.system.schemas.system_schema import PwdEditor, UserCreator, UserEditor, UserGrid, UserInfoDTO, UserLanguage, UserStatus, UserWs
12+
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
13+
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log
1214
from common.core.deps import CurrentUser, SessionDep, Trans
1315
from common.core.pagination import Paginator
1416
from common.core.schemas import PaginatedResponse, PaginationParams
@@ -117,6 +119,11 @@ async def ws_options(session: SessionDep, current_user: CurrentUser, trans: Tran
117119

118120
@router.put("/ws/{oid}", summary=f"{PLACEHOLDER_PREFIX}switch_oid_api", description=f"{PLACEHOLDER_PREFIX}switch_oid_api")
119121
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id")
122+
@system_log(LogConfig(
123+
operation_type=OperationType.UPDATE,
124+
module=OperationModules.USER,
125+
resource_id_expr="editor.id"
126+
))
120127
async def ws_change(session: SessionDep, current_user: CurrentUser, trans:Trans, oid: int = Path(description=f"{PLACEHOLDER_PREFIX}oid")):
121128
ws_list: list[UserWs] = await user_ws_options(session, current_user.id)
122129
if not any(x.id == oid for x in ws_list):
@@ -141,8 +148,13 @@ async def query(session: SessionDep, trans: Trans, id: int = Path(description=f"
141148

142149
@router.post("", summary=f"{PLACEHOLDER_PREFIX}user_create_api", description=f"{PLACEHOLDER_PREFIX}user_create_api")
143150
@require_permissions(permission=SqlbotPermission(role=['admin']))
151+
@system_log(LogConfig(
152+
operation_type=OperationType.CREATE,
153+
module=OperationModules.USER,
154+
result_id_expr="id"
155+
))
144156
async def user_create(session: SessionDep, creator: UserCreator, trans: Trans):
145-
await create(session=session, creator=creator, trans=trans)
157+
return await create(session=session, creator=creator, trans=trans)
146158

147159
async def create(session: SessionDep, creator: UserCreator, trans: Trans):
148160
if check_account_exists(session=session, account=creator.account):
@@ -169,11 +181,17 @@ async def create(session: SessionDep, creator: UserCreator, trans: Trans):
169181
session.add_all(db_model_list)
170182
user_model.oid = creator.oid_list[0]
171183
session.add(user_model)
184+
return user_model
172185

173186

174187
@router.put("", summary=f"{PLACEHOLDER_PREFIX}user_update_api", description=f"{PLACEHOLDER_PREFIX}user_update_api")
175188
@require_permissions(permission=SqlbotPermission(role=['admin']))
176189
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="editor.id")
190+
@system_log(LogConfig(
191+
operation_type=OperationType.UPDATE,
192+
module=OperationModules.USER,
193+
resource_id_expr="editor.id"
194+
))
177195
async def update(session: SessionDep, editor: UserEditor, trans: Trans):
178196
user_model: UserModel = get_db_user(session = session, user_id = editor.id)
179197
if not user_model:
@@ -207,7 +225,12 @@ async def update(session: SessionDep, editor: UserEditor, trans: Trans):
207225
session.add(user_model)
208226

209227
@router.delete("/{id}", summary=f"{PLACEHOLDER_PREFIX}user_del_api", description=f"{PLACEHOLDER_PREFIX}user_del_api")
210-
@require_permissions(permission=SqlbotPermission(role=['admin']))
228+
@require_permissions(permission=SqlbotPermission(role=['admin']))
229+
@system_log(LogConfig(
230+
operation_type=OperationType.DELETE,
231+
module=OperationModules.USER,
232+
resource_id_expr="id"
233+
))
211234
async def delete(session: SessionDep, id: int = Path(description=f"{PLACEHOLDER_PREFIX}uid")):
212235
await single_delete(session, id)
213236

@@ -231,6 +254,11 @@ async def langChange(session: SessionDep, current_user: CurrentUser, trans: Tran
231254
@router.patch("/pwd/{id}", summary=f"{PLACEHOLDER_PREFIX}reset_pwd", description=f"{PLACEHOLDER_PREFIX}reset_pwd")
232255
@require_permissions(permission=SqlbotPermission(role=['admin']))
233256
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="id")
257+
@system_log(LogConfig(
258+
operation_type=OperationType.UPDATE,
259+
module=OperationModules.USER,
260+
resource_id_expr="id"
261+
))
234262
async def pwdReset(session: SessionDep, current_user: CurrentUser, trans: Trans, id: int = Path(description=f"{PLACEHOLDER_PREFIX}uid")):
235263
if not current_user.isAdmin:
236264
raise Exception(trans('i18n_permission.no_permission', url = " patch[/user/pwd/id],", msg = trans('i18n_permission.only_admin')))
@@ -240,6 +268,11 @@ async def pwdReset(session: SessionDep, current_user: CurrentUser, trans: Trans,
240268

241269
@router.put("/pwd", summary=f"{PLACEHOLDER_PREFIX}update_pwd", description=f"{PLACEHOLDER_PREFIX}update_pwd")
242270
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id")
271+
@system_log(LogConfig(
272+
operation_type=OperationType.UPDATE,
273+
module=OperationModules.USER,
274+
result_id_expr="id"
275+
))
243276
async def pwdUpdate(session: SessionDep, current_user: CurrentUser, trans: Trans, editor: PwdEditor):
244277
new_pwd = editor.new_pwd
245278
if not check_pwd_format(new_pwd):
@@ -249,11 +282,17 @@ async def pwdUpdate(session: SessionDep, current_user: CurrentUser, trans: Trans
249282
raise Exception(trans('i18n_error', key = trans('i18n_user.password')))
250283
db_user.password = md5pwd(new_pwd)
251284
session.add(db_user)
285+
return db_user
252286

253287

254288
@router.patch("/status", summary=f"{PLACEHOLDER_PREFIX}update_status", description=f"{PLACEHOLDER_PREFIX}update_status")
255289
@require_permissions(permission=SqlbotPermission(role=['admin']))
256290
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="statusDto.id")
291+
@system_log(LogConfig(
292+
operation_type=OperationType.UPDATE,
293+
module=OperationModules.USER,
294+
resource_id_expr="statusDto.id"
295+
))
257296
async def statusChange(session: SessionDep, current_user: CurrentUser, trans: Trans, statusDto: UserStatus):
258297
if not current_user.isAdmin:
259298
raise Exception(trans('i18n_permission.no_permission', url = ", ", msg = trans('i18n_permission.only_admin')))

0 commit comments

Comments
 (0)