Skip to content

Commit 4e0032b

Browse files
committed
fix:修复执行日志时间时区显示
1 parent 4f83ce8 commit 4e0032b

File tree

3 files changed

+33
-8
lines changed

3 files changed

+33
-8
lines changed

apps/node_man/handlers/job.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from apps.utils import APIModel
3838
from apps.utils.basic import filter_values, to_int_or_default
3939
from apps.utils.local import get_request_username, get_tenant_id
40-
from apps.utils.time_tools import local_dt_str2utc_dt
40+
from apps.utils.time_tools import format_log_time, local_dt_str2utc_dt
4141
from common.api import NodeApi
4242
from common.api.exception import DataAPIException
4343

@@ -910,7 +910,7 @@ def retrieve(self, params: Dict[str, Any], user_timezone):
910910
return job_detail
911911

912912
@staticmethod
913-
def get_log_base(subscription_id: int, task_id_list: List[int], instance_id: str) -> list:
913+
def get_log_base(subscription_id: int, task_id_list: List[int], instance_id: str, user_timezone) -> list:
914914
"""
915915
根据订阅任务ID,实例ID,获取日志
916916
:param subscription_id: 订阅任务ID
@@ -928,21 +928,21 @@ def get_log_base(subscription_id: int, task_id_list: List[int], instance_id: str
928928
{
929929
"step": step["node_name"],
930930
"status": step["status"],
931-
"log": step["log"],
932-
"start_time": step.get("start_time"),
933-
"finish_time": step.get("finish_time"),
931+
"log": format_log_time(step["log"], target_timezone=user_timezone),
932+
"start_time": format_log_time(step.get("start_time"), target_timezone=user_timezone),
933+
"finish_time": format_log_time(step.get("finish_time"), target_timezone=user_timezone),
934934
}
935935
)
936936
return logs
937937

938-
def get_log(self, instance_id: str) -> list:
938+
def get_log(self, instance_id: str, user_timezone) -> list:
939939
"""
940940
获得日志
941941
:param instance_id: 实例ID
942942
:return: 日志列表
943943
"""
944944
# 获得并返回日志
945-
return JobHandler.get_log_base(self.data.subscription_id, self.data.task_id_list, instance_id)
945+
return JobHandler.get_log_base(self.data.subscription_id, self.data.task_id_list, instance_id, user_timezone)
946946

947947
def collect_log(self, instance_id: int) -> list:
948948
return NodeApi.collect_subscription_task_detail({"job_id": self.job_id, "instance_id": instance_id})

apps/node_man/views/job.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,8 @@ def log(self, request, *args, **kwargs):
276276
"""
277277
job_id = kwargs["pk"]
278278
JobTools.isolate_tenant_job(job_id)
279-
return Response(JobHandler(job_id).get_log(request.query_params["instance_id"]))
279+
user_timezone = get_user_timezone(request)
280+
return Response(JobHandler(job_id).get_log(request.query_params["instance_id"]), user_timezone)
280281

281282
@swagger_auto_schema(
282283
operation_summary="查询日志",

apps/utils/time_tools.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from __future__ import absolute_import, unicode_literals
1313

1414
import datetime
15+
import re
1516
import time
1617
from functools import partial
1718
from typing import Optional
@@ -298,3 +299,26 @@ def get_user_timezone(request):
298299
return default_tz
299300
except Exception:
300301
return default_tz
302+
303+
def format_log_time(
304+
log_content,
305+
original_timezone="Asia/Shanghai",
306+
target_timezone="UTC",
307+
output_format="%Y-%m-%d %H:%M:%S%z"
308+
):
309+
pattern = r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})'
310+
311+
orig_tz = pytz.timezone(original_timezone)
312+
tgt_tz = pytz.timezone(target_timezone)
313+
314+
def replace_match(match):
315+
time_str = match.group(1)
316+
try:
317+
dt_naive = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
318+
dt_orig = orig_tz.localize(dt_naive)
319+
dt_target = dt_orig.astimezone(tgt_tz)
320+
return dt_target.strftime(output_format)
321+
except ValueError as e:
322+
return time_str
323+
324+
return re.sub(pattern, replace_match, log_content)

0 commit comments

Comments
 (0)