receiver/awsebsnvmereceiver/internal/nvme/util_unix.go (57 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT //go:build linux package nvme import ( "fmt" "os" "path/filepath" "strings" ) // For unit testing var osReadFile = os.ReadFile var osReadDir = os.ReadDir func (u *Util) GetAllDevices() ([]DeviceFileAttributes, error) { entries, err := osReadDir(devDirectoryPath) if err != nil { return nil, err } devices := []DeviceFileAttributes{} for _, entry := range entries { if !entry.IsDir() && strings.HasPrefix(entry.Name(), nvmeDevicePrefix) { device, err := ParseNvmeDeviceFileName(entry.Name()) if err == nil { devices = append(devices, device) } } } return devices, nil } func (u *Util) GetDeviceSerial(device *DeviceFileAttributes) (string, error) { deviceName, err := device.BaseDeviceName() if err != nil { return "", err } data, err := osReadFile(fmt.Sprintf("%s/%s/serial", nvmeSysDirectoryPath, deviceName)) if err != nil { return "", err } return strings.TrimSpace(string(data)), nil } func (u *Util) GetDeviceModel(device *DeviceFileAttributes) (string, error) { deviceName, err := device.BaseDeviceName() if err != nil { return "", err } data, err := osReadFile(fmt.Sprintf("%s/%s/model", nvmeSysDirectoryPath, deviceName)) if err != nil { return "", err } return strings.TrimSpace(string(data)), nil } func (u *Util) IsEbsDevice(device *DeviceFileAttributes) (bool, error) { model, err := u.GetDeviceModel(device) if err != nil { return false, err } return model == ebsNvmeModelName, nil } func (u *Util) DevicePath(device string) (string, error) { return filepath.Join(devDirectoryPath, device), nil }