diff --git a/sysom_server/sysom_diagnosis/service_scripts/virtnet_hang_post.py b/sysom_server/sysom_diagnosis/service_scripts/virtnet_hang_post.py new file mode 100644 index 0000000000000000000000000000000000000000..6fdc77a5621f36cec71ac71fc077c19d32f57a4f --- /dev/null +++ b/sysom_server/sysom_diagnosis/service_scripts/virtnet_hang_post.py @@ -0,0 +1,60 @@ +""" +Time 2024/01/29 17:32 +Author: chengshuyi +Email chengshuyi@linux.alibaba.com +File virtnet_hang_post.py +Description: +""" +import os +import re +import zipfile +from typing import List +import json + +from .base import DiagnosisJobResult, DiagnosisPostProcessor, PostProcessResult + + +def data2json(data): + try: + # 尝试将数据转换为JSON + js = json.loads(data) + return True, js + except (TypeError, OverflowError) as e: + # 如果转换失败,表明数据不满足JSON格式要求 + return False, {} + +class PostProcessor(DiagnosisPostProcessor): + def parse_diagnosis_result(self, results: List[DiagnosisJobResult]) -> PostProcessResult: + + ok, vjson = data2json(results[0].stdout) + + postprocess_result = PostProcessResult( + code=0, + err_msg="", + result={}, + ) + + if not ok: + postprocess_result.code = 1 + postprocess_result.err_msg = "暂时不支持当前内核版本" + return postprocess_result + + + summary_status = "normal" + summary_cause = "" + summary_suggestion = "" + + for iface in vjson["result"]: + if len(iface["errors"]) != 0: + summary_cause += "网卡" + iface["iface"] + "队列hang住了;" + + if len(summary_cause) != 0: + summary_status = "error" + + vjson["summary"] = { + "status" : summary_status, + "cause": summary_cause, + "suggestion": summary_suggestion, + } + postprocess_result.result = vjson + return postprocess_result \ No newline at end of file diff --git a/sysom_server/sysom_diagnosis/service_scripts/virtnet_hang_pre.py b/sysom_server/sysom_diagnosis/service_scripts/virtnet_hang_pre.py new file mode 100644 index 0000000000000000000000000000000000000000..049142fa30585bbbd986d6053e7a6b68a21720d5 --- /dev/null +++ b/sysom_server/sysom_diagnosis/service_scripts/virtnet_hang_pre.py @@ -0,0 +1,24 @@ +""" +Time 2024/01/29 17:32 +Author: chengshuyi +Email chengshuyi@linux.alibaba.com +File virtnet_hang_pre.py +Description: +""" +from .base import DiagnosisJob, DiagnosisPreProcessor, DiagnosisTask + + +class PreProcessor(DiagnosisPreProcessor): + """virtio_net hang diagnosis + """ + + def get_diagnosis_cmds(self, params: dict) -> DiagnosisTask: + instance = params.get("instance", "") + command = "mkdir -p /var/log/sysak && sysak -g rtrace --virtio --period 1s -c 2 -i any --json > /var/log/sysak/rtrace_virtio_net.json && cat /var/log/sysak/rtrace_virtio_net.json" + print (command) + return DiagnosisTask( + jobs=[ + DiagnosisJob(instance=instance, cmd=command) + ], + in_order=False, + )