navidrome/core/metrics/insights_windows.go
Deluan 99dfb832eb fix(insights): get Windows version
Signed-off-by: Deluan <deluan@navidrome.org>
2024-12-21 14:54:14 -05:00

53 lines
1 KiB
Go

package metrics
import (
"os/exec"
"regexp"
"golang.org/x/sys/windows"
)
// Ex: Microsoft Windows [Version 10.0.26100.1742]
var winVerRegex = regexp.MustCompile(`Microsoft Windows \[.+\s([\d\.]+)\]`)
func getOSVersion() (version string, _ string) {
cmd := exec.Command("cmd", "/c", "ver")
output, err := cmd.Output()
if err != nil {
return "", ""
}
matches := winVerRegex.FindStringSubmatch(string(output))
if len(matches) != 2 {
return string(output), ""
}
return matches[1], ""
}
func getFilesystemType(path string) (string, error) {
pathPtr, err := windows.UTF16PtrFromString(path)
if err != nil {
return "", err
}
var volumeName, filesystemName [windows.MAX_PATH + 1]uint16
var serialNumber uint32
var maxComponentLen, filesystemFlags uint32
err = windows.GetVolumeInformation(
pathPtr,
&volumeName[0],
windows.MAX_PATH,
&serialNumber,
&maxComponentLen,
&filesystemFlags,
&filesystemName[0],
windows.MAX_PATH)
if err != nil {
return "", err
}
return windows.UTF16ToString(filesystemName[:]), nil
}