Merge ~stanley31/bugit/+git/bugit:240222_fix-unexpected-crash into bugit:master

Proposed by StanleyHuang
Status: Merged
Approved by: StanleyHuang
Approved revision: 1f7a5b13593861e42cb7c50709a9adfef83228c6
Merged at revision: 9f348dc533e9af3bb78d0d9c6e33981abc6afef8
Proposed branch: ~stanley31/bugit/+git/bugit:240222_fix-unexpected-crash
Merge into: bugit:master
Diff against target: 111 lines (+46/-37)
1 file modified
bugit/bug_assistant.py (+46/-37)
Reviewer Review Type Date Requested Status
Weichen Wu Approve
Review via email: mp+461011@code.launchpad.net

Commit message

fixed bugit crash issue while collecting Nvidia GPU log

Description of the change

I don't have the system with Nvdia GPU, but I have tested the bugit with my changes as following screen log

┌───────────────────────────────────────── Bug Title ────────────────────────────────────────┐
│ │
└────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────── Description (including steps to reproduce) ────────────────────────┐
│[Summary] │
│ │
│[Steps to reproduce] │
│ │
│[Expected result] │
│ │
│[Actual result] │
│ │
│[Failure rate] │
│ │
│[Additional information] │
│CID: │
│SKU: │
│Image: iot-murcia-classic-2204-3200-server22-x01-20240103-8 │
│system-manufacturer: Dell EMC │
│system-product-name: Edge Gateway 3200 │
│bios-version: 2.00.10 │
│CPU: Intel Atom(R) x6425RE Processor @ 1.90GHz (4x) │
│GPU: 00:02.0 VGA compatible controller [0300]: Intel Corporation Device [8086:4571] (rev 01)│
│kernel-version: 5.15.0-1048-intel-iotg │
└────────────────────────────────────────────────────────────────────────────────────────────┘

To post a comment you must log in.
Revision history for this message
Weichen Wu (weichenwu) wrote :

LGTM +1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/bugit/bug_assistant.py b/bugit/bug_assistant.py
2index bc529e7..400c201 100644
3--- a/bugit/bug_assistant.py
4+++ b/bugit/bug_assistant.py
5@@ -480,56 +480,54 @@ class AttachmentAssistant:
6 ]
7 for path in buildstamp_paths:
8 if os.path.isfile(path):
9- standard_info["Image"] = (
10- subprocess.check_output(["tail", "-n", "1", path])
11- .decode(sys.stdout.encoding)
12- .strip()
13- )
14- break
15+ log = issue_commands(["tail", "-n", "1", path])
16+ if log is not None:
17+ standard_info["Image"] = log
18+ break
19 if "Image" not in standard_info:
20 print("WARNING: Fail to get buildstamp")
21
22 command = ["dmidecode", "-s"]
23- for dmi_value in ["system-manufacturer", "system-product-name", "bios-version"]:
24- standard_info[dmi_value] = (
25- subprocess.check_output(command + [dmi_value])
26- .decode(sys.stdout.encoding)
27- .strip()
28- )
29+ for dmi_value in [
30+ "system-manufacturer",
31+ "system-product-name",
32+ "bios-version"]:
33+ log = issue_commands(command + [dmi_value])
34+ if log is not None:
35+ standard_info[dmi_value] = log
36
37 standard_info["CPU"] = AttachmentAssistant.get_cpu_info()
38
39 command = ["lspci", "-nn"]
40- process = subprocess.run(
41- command, stdout=subprocess.PIPE, stderr=subprocess.PIPE
42- )
43- if process.returncode == 0:
44- lspci_output = process.stdout.decode(sys.stdout.encoding).splitlines()
45+ lspci_log = issue_commands(command)
46+ if lspci_log is not None:
47+ lspci_output = lspci_log.splitlines()
48 # '03' is the PCI class for display controllers
49 standard_info["GPU"] = "\n".join(
50 [line for line in lspci_output if "[03" in line]
51 )
52- if "NVIDIA" in standard_info["GPU"]:
53- command = ["nvidia-smi", "-q"]
54- process = subprocess.run(
55- command, stdout=subprocess.PIPE, stderr=subprocess.PIPE
56- )
57- if process.returncode == 0:
58- smi_output = process.stdout.decode(sys.stdout.encoding)
59- try:
60- standard_info["nvidia-driver"] = re.search('Driver Version\s*:\s(\d*\.\d*[\.\d*]*)\s*', smi_output).group(1)
61- standard_info["nvidia-vbios"] = re.search('VBIOS Version\s*:\s([\w\d]*[\.\w\d]*)\s*', smi_output).group(1)
62- except:
63- standard_info["nvidia-info"] = "Cannot capture driver or VBIOS version"
64- else:
65- standard_info["nvidia-info"] = "Cannot capture driver or VBIOS version"
66- else:
67- print("Error while running lspci:")
68- print(process.stderr)
69
70- standard_info["kernel-version"] = (
71- subprocess.check_output(["uname", "-r"]).decode(sys.stdout.encoding).strip()
72- )
73+ if "NVIDIA" in standard_info["GPU"]:
74+ nvidia_err = "Cannot capture driver or VBIOS version"
75+ command = ["nvidia-smi", "-q"]
76+ nvidia_log = issue_commands(command)
77+ if nvidia_log is not None:
78+ try:
79+ standard_info["nvidia-driver"] = re.search(
80+ r'Driver Version\s*:\s(\d*\.\d*[\.\d*]*)\s*',
81+ nvidia_log).group(1)
82+ standard_info["nvidia-vbios"] = re.search(
83+ r'VBIOS Version\s*:\s([\w\d]*[\.\w\d]*)\s*',
84+ nvidia_log).group(1)
85+ except Exception:
86+ standard_info["nvidia-info"] = nvidia_err
87+ else:
88+ standard_info["nvidia-info"] = nvidia_err
89+
90+ log = issue_commands(["uname", "-r"])
91+ if log is not None:
92+ standard_info["kernel-version"] = log
93+
94 return standard_info
95
96 @staticmethod
97@@ -564,3 +562,14 @@ class AttachmentAssistant:
98 ]
99
100 return "\n".join(cpu_names_str)
101+
102+
103+def issue_commands(command: list) -> str:
104+
105+ process = subprocess.run(
106+ command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=False)
107+ if process.returncode == 0:
108+ return process.stdout.decode(sys.stdout.encoding).strip()
109+
110+ print("Error while running {}:".format(" ".join(command)))
111+ print(process.stderr)

Subscribers

People subscribed via source and target branches

to all changes: