Skip to content

Commit 7d5d180

Browse files
committed
feat(app):
- logger add rid and uid
1 parent b7ad105 commit 7d5d180

File tree

8 files changed

+75
-14
lines changed

8 files changed

+75
-14
lines changed

src/retk/controllers/account.py

+12
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ async def set_cookie_response(
2121
if "id" not in u:
2222
raise json_exception(
2323
request_id=req_id,
24+
uid=u.get("id", ""),
2425
code=const.CodeEnum.INVALID_AUTH,
2526
language=const.LanguageEnum.EN.value,
2627
log_msg="user id not found",
@@ -77,6 +78,7 @@ async def signup(
7778
if code != const.CodeEnum.OK:
7879
raise json_exception(
7980
request_id=req_id,
81+
uid='',
8082
code=code,
8183
language=req.language,
8284
)
@@ -89,6 +91,7 @@ async def signup(
8991
if code != const.CodeEnum.OK:
9092
raise json_exception(
9193
request_id=req_id,
94+
uid='',
9295
code=code,
9396
language=req.language,
9497
)
@@ -116,12 +119,14 @@ async def login(
116119
if code != const.CodeEnum.OK:
117120
raise json_exception(
118121
request_id=req_id,
122+
uid='',
119123
code=code,
120124
language=req.language,
121125
)
122126
if u["disabled"]:
123127
raise json_exception(
124128
request_id=req_id,
129+
uid='',
125130
code=const.CodeEnum.USER_DISABLED,
126131
language=req.language,
127132
)
@@ -134,6 +139,7 @@ async def login(
134139
code = const.CodeEnum.ACCOUNT_OR_PASSWORD_ERROR
135140
raise json_exception(
136141
request_id=req_id,
142+
uid='',
137143
code=code,
138144
language=req.language,
139145
)
@@ -211,20 +217,23 @@ async def forget(
211217
if code != const.CodeEnum.OK:
212218
raise json_exception(
213219
request_id=req_id,
220+
uid='',
214221
code=code,
215222
language=req.language,
216223
)
217224
u, code = await user.get_by_email(email=req.email)
218225
if code != const.CodeEnum.OK:
219226
raise json_exception(
220227
request_id=req_id,
228+
uid='',
221229
code=code,
222230
language=req.language,
223231
)
224232

225233
if u is None:
226234
raise json_exception(
227235
request_id=req_id,
236+
uid='',
228237
code=const.CodeEnum.INVALID_AUTH,
229238
language=req.language,
230239
)
@@ -236,6 +245,7 @@ async def forget(
236245
if code != const.CodeEnum.OK:
237246
raise json_exception(
238247
request_id=req_id,
248+
uid='',
239249
code=code,
240250
language=const.LanguageEnum.EN.value,
241251
)
@@ -290,6 +300,7 @@ async def email_send_code(
290300
if u is not None:
291301
raise json_exception(
292302
request_id=req_id,
303+
uid='',
293304
code=const.CodeEnum.ACCOUNT_EXIST_TRY_FORGET_PASSWORD,
294305
language=req.language,
295306
)
@@ -303,6 +314,7 @@ async def email_send_code(
303314
if code != const.CodeEnum.OK:
304315
raise json_exception(
305316
request_id=req_id,
317+
uid='',
306318
code=code,
307319
language=req.language,
308320
)

src/retk/controllers/manager.py

+3
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,14 @@ async def __get_then_set_github_user_id(au: AuthedUser, req: schemas.manager.Get
3333
) as e:
3434
raise json_exception(
3535
request_id=au.request_id,
36+
uid=au.u.id,
3637
code=const.CodeEnum.INVALID_PARAMS,
3738
log_msg=f"get github user info failed, error={e}",
3839
)
3940
if resp.status_code != 200:
4041
raise json_exception(
4142
request_id=au.request_id,
43+
uid=au.u.id,
4244
code=const.CodeEnum.INVALID_PARAMS,
4345
log_msg=f"get github user info failed, status_code={resp.status_code}",
4446
)
@@ -71,6 +73,7 @@ async def __check_user_uid(au: AuthedUser, req: schemas.manager.GetUserRequest)
7173
if all(v is None for v in req.dict().values()):
7274
raise json_exception(
7375
request_id=au.request_id,
76+
uid=au.u.id,
7477
code=const.CodeEnum.INVALID_PARAMS,
7578
log_msg="uid and email and github and google can't be all None",
7679
)

src/retk/controllers/oauth.py

+6
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ async def login_provider(provider_name: str) -> OAuthResponse:
5454
except KeyError:
5555
raise json_exception(
5656
request_id="",
57+
uid='',
5758
code=const.CodeEnum.OAUTH_PROVIDER_NOT_FOUND,
5859
language=const.LanguageEnum.EN.value,
5960
)
@@ -69,6 +70,7 @@ async def provider_callback(provider_name: str, req: Request) -> JSONResponse:
6970
except KeyError:
7071
raise json_exception(
7172
request_id="",
73+
uid="",
7274
code=const.CodeEnum.OAUTH_PROVIDER_NOT_FOUND,
7375
language=const.LanguageEnum.EN.value,
7476
)
@@ -77,11 +79,13 @@ async def provider_callback(provider_name: str, req: Request) -> JSONResponse:
7779
except SSOLoginError:
7880
raise json_exception(
7981
request_id="",
82+
uid="",
8083
code=const.CodeEnum.INVALID_AUTH,
8184
)
8285
if user is None:
8386
raise json_exception(
8487
request_id="",
88+
uid="",
8589
code=const.CodeEnum.INVALID_AUTH,
8690
)
8791
u, code = await core.user.get_account(account=user.id, source=user_source)
@@ -114,13 +118,15 @@ async def provider_callback(provider_name: str, req: Request) -> JSONResponse:
114118
if code != const.CodeEnum.OK:
115119
raise json_exception(
116120
request_id="",
121+
uid="",
117122
code=code,
118123
)
119124

120125
code = await core.node.new_user_add_default_nodes(language=language, uid=u["id"])
121126
if code != const.CodeEnum.OK:
122127
raise json_exception(
123128
request_id="",
129+
uid="",
124130
code=code,
125131
)
126132

src/retk/controllers/plugin.py

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ async def plugin_call(
101101
if not config.is_local_db():
102102
raise json_exception(
103103
request_id=req.requestId,
104+
uid="",
104105
code=const.CodeEnum.NOT_PERMITTED,
105106
language=const.LanguageEnum.EN.value,
106107
log_msg="plugin call is not allowed in production",

src/retk/controllers/statistic.py

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ async def add_user_behavior(
1313
except KeyError:
1414
raise json_exception(
1515
request_id=au.request_id,
16+
uid=au.u.id,
1617
code=const.CodeEnum.INVALID_PARAM,
1718
language=au.u.language,
1819
)

src/retk/controllers/utils.py

+17-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import inspect
2+
import os
23
from typing import Sequence
34
from urllib.parse import urlparse
45

@@ -26,6 +27,7 @@ def is_allowed_mime_type(data_url, allowed_mime_types: Sequence[str]):
2627

2728
def json_exception(
2829
request_id: str,
30+
uid: str,
2931
code: const.CodeEnum,
3032
language: str = const.LanguageEnum.EN.value,
3133
log_msg: str = None
@@ -37,8 +39,9 @@ def get_parent_function_info() -> str:
3739
previous_f_code = previous_frame.f_code
3840
caller = previous_f_code.co_name
3941
previous_frame_file = previous_f_code.co_filename
42+
rel_path = os.path.relpath(previous_frame_file, const.settings.RETHINK_DIR)
4043
previous_frame_line = previous_f_code.co_firstlineno
41-
return f"caller='{caller}' in {previous_frame_file}:{previous_frame_line}"
44+
return f"caller='{caller}' in {rel_path}:{previous_frame_line}"
4245

4346
if log_msg is not None:
4447
# get parent function name
@@ -47,12 +50,22 @@ def get_parent_function_info() -> str:
4750
ll = logger.info
4851
else:
4952
ll = logger.error
50-
ll(f"reqId='{request_id}' | {get_parent_function_info()} | err='{one_line_log}'")
53+
ll(
54+
f"rid='{request_id}' "
55+
f"| uid='{uid}' "
56+
f"| {get_parent_function_info()} "
57+
f"| err='{one_line_log}'"
58+
)
5159

5260
status_code = const.CODE2STATUS_CODE[code]
5361
if status_code == 500:
5462
one_line_log = const.get_msg_by_code(code, language).replace("\n", "\\n")
55-
logger.error(f"reqId='{request_id}' | {get_parent_function_info()} | err='{one_line_log}'")
63+
logger.error(
64+
f"rid='{request_id}' "
65+
f"| uid='{uid}' "
66+
f"| {get_parent_function_info()} "
67+
f"| err='{one_line_log}'"
68+
)
5669

5770
return HTTPException(
5871
status_code=status_code,
@@ -71,6 +84,7 @@ def maybe_raise_json_exception(
7184
if code != const.CodeEnum.OK:
7285
raise json_exception(
7386
request_id=au.request_id,
87+
uid=au.u.id,
7488
code=code,
7589
language=au.language,
7690
)

src/retk/core/ai/llm/knowledge/ops.py

+13-5
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,19 @@ async def _batch_send(
9797
oneline_s = _text.replace('\n', '\\n')
9898
phase = "extend" if is_extend else "summary"
9999
logger.debug(
100-
f"reqId={req_id} | knowledge {phase} "
101-
f"| {service} {model} | response='{oneline_s}'"
100+
f"rid='{req_id}' "
101+
f"| uid='{case.uid}' "
102+
f"| knowledge {phase} "
103+
f"| {service} {model} "
104+
f"| response='{oneline_s}'"
102105
)
103106
if code != const.CodeEnum.OK:
104107
logger.error(
105-
f"reqId={req_id} | knowledge {phase} "
106-
f"| {service} {model} | error: {code}"
108+
f"rid='{req_id}' "
109+
f"| uid='{case.uid}' "
110+
f"| knowledge {phase} "
111+
f"| {service} {model} "
112+
f"| error: {code}"
107113
)
108114
return cases
109115

@@ -141,7 +147,9 @@ async def batch_extend(
141147
oneline_e = case.extend.replace('\n', '\\n')
142148
oneline_s = case.summary.replace('\n', '\\n')
143149
logger.error(
144-
f"reqId={req_id} | {case.extend_service} {case.extend_model} "
150+
f"rid='{req_id}' "
151+
f"| uid='{case.uid}' "
152+
f"| {case.extend_service} {case.extend_model} "
145153
f"| parse_json_pattern error: {e} "
146154
f"| summary: {oneline_s} "
147155
f"| extension: {oneline_e}")

src/retk/routes/utils.py

+22-6
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,24 @@ async def wrapper(*args, **kwargs):
4343

4444
req_s = req_s[:200] + "..." if len(req_s) > 200 else req_s
4545
if func.__name__ not in ["login", "forget_password", "signup"]:
46-
logger.debug(f"REQ: reqId='{req_id}' | uid='{uid}' | api='{func.__name__}' | {req_s}")
46+
logger.debug(
47+
f"rid='{req_id}' "
48+
f"| uid='{uid}' "
49+
f"| api='{func.__name__}' "
50+
f"| request='{req_s}'"
51+
)
4752

4853
resp = await func(*args, **kwargs)
4954
t1 = time.perf_counter()
5055
try:
5156
req_id = resp.requestId
5257
except AttributeError:
5358
req_id = ""
54-
logger.debug(f"RESP: reqId='{req_id}' | uid='{uid}' | api='{func.__name__}' | spend={t1 - t0:.4f}s")
59+
logger.debug(
60+
f"rid='{req_id}' "
61+
f"| uid='{uid}' "
62+
f"| api='{func.__name__}' "
63+
f"| API spend={t1 - t0:.4f}s")
5564
return resp
5665

5766
return wrapper
@@ -118,11 +127,16 @@ async def __process_auth_headers(
118127
)
119128
) -> AuthedUser:
120129
if token is None or token == "":
121-
raise json_exception(
122-
request_id=request_id,
123-
code=const.CodeEnum.INVALID_AUTH if is_refresh_token else const.CodeEnum.EXPIRED_OR_NO_ACCESS_TOKEN,
124-
log_msg="EmptyToken",
130+
code = const.CodeEnum.INVALID_AUTH if is_refresh_token else const.CodeEnum.EXPIRED_OR_NO_ACCESS_TOKEN
131+
raise HTTPException(
132+
status_code=const.CODE2STATUS_CODE[code],
133+
detail={
134+
"code": code.value,
135+
"msg": const.get_msg_by_code(code, const.LanguageEnum.EN.value),
136+
"requestId": request_id,
137+
}
125138
)
139+
126140
au = AuthedUser(
127141
u=None,
128142
request_id=request_id,
@@ -162,6 +176,7 @@ async def __process_auth_headers(
162176
if code != const.CodeEnum.OK or u is None:
163177
raise json_exception(
164178
request_id=request_id,
179+
uid="",
165180
code=code,
166181
log_msg=err,
167182
)
@@ -217,6 +232,7 @@ async def process_admin_headers(
217232
if au.u is None or au.u.type != const.USER_TYPE.ADMIN.id:
218233
raise json_exception(
219234
request_id=au.request_id,
235+
uid=au.u.id if au.u is not None else "",
220236
code=const.CodeEnum.NOT_PERMITTED,
221237
)
222238
return au

0 commit comments

Comments
 (0)