Skip to content

Commit b5bc771

Browse files
committed
Improve hardware model detection
1 parent ad00039 commit b5bc771

1 file changed

Lines changed: 44 additions & 6 deletions

File tree

internal/fetcher/fetcher.go

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,15 +201,53 @@ func formatDuration(d time.Duration) string {
201201
}
202202

203203
func getModel() string {
204-
data, err := os.ReadFile("/sys/class/dmi/id/product_name")
205-
if err == nil {
204+
readFile := func(path string) string {
205+
data, err := os.ReadFile(path)
206+
if err != nil {
207+
return ""
208+
}
206209
return strings.TrimSpace(string(data))
207210
}
208-
data, err = os.ReadFile("/sys/class/dmi/id/board_name")
209-
if err == nil {
210-
return strings.TrimSpace(string(data))
211+
212+
vendor := readFile("/sys/class/dmi/id/sys_vendor")
213+
product := readFile("/sys/class/dmi/id/product_name")
214+
version := readFile("/sys/class/dmi/id/product_version")
215+
216+
if product == "" {
217+
product = readFile("/sys/class/dmi/id/board_name")
218+
}
219+
220+
var res string
221+
if product != "" && version != "" && product != version {
222+
// If product name is a short model ID (common on Lenovo), use version which often has the marketing name
223+
if len(product) < 6 || strings.Contains(version, product) {
224+
res = version
225+
} else {
226+
res = fmt.Sprintf("%s %s", product, version)
227+
}
228+
} else if product != "" {
229+
res = product
230+
} else if version != "" {
231+
res = version
232+
} else {
233+
return "Unknown"
234+
}
235+
236+
// Clean up "None", "Default string", etc.
237+
lowRes := strings.ToLower(res)
238+
if lowRes == "none" || lowRes == "default string" || lowRes == "not specified" {
239+
if vendor != "" {
240+
return vendor
241+
}
242+
return "Unknown"
211243
}
212-
return "Unknown"
244+
245+
// Add vendor prefix if missing
246+
if vendor != "" && !strings.HasPrefix(strings.ToLower(res), strings.ToLower(vendor)) {
247+
res = fmt.Sprintf("%s %s", vendor, res)
248+
}
249+
250+
return res
213251
}
214252

215253
func getGPU() []string {

0 commit comments

Comments
 (0)