github.com/openebs/node-disk-manager@v1.9.1-0.20230225014141-4531f06ffa1e/api-service/node/services/listBlockDeviceDetails.go (about)

     1  /*
     2  Copyright 2020 The OpenEBS Authors
     3  Licensed under the Apache License, Version 2.0 (the "License");
     4  you may not use this file except in compliance with the License.
     5  You may obtain a copy of the License at
     6      http://www.apache.org/licenses/LICENSE-2.0
     7  Unless required by applicable law or agreed to in writing, software
     8  distributed under the License is distributed on an "AS IS" BASIS,
     9  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    10  See the License for the specific language governing permissions and
    11  limitations under the License.
    12  */
    13  
    14  package services
    15  
    16  import (
    17  	"context"
    18  
    19  	"github.com/openebs/node-disk-manager/pkg/smart"
    20  	protos "github.com/openebs/node-disk-manager/spec/ndm"
    21  
    22  	"google.golang.org/grpc/codes"
    23  	"google.golang.org/grpc/status"
    24  	"k8s.io/klog/v2"
    25  )
    26  
    27  // ListBlockDeviceDetails gives the details about the disk from SMART
    28  func (n *Node) ListBlockDeviceDetails(ctx context.Context, bd *protos.BlockDevice) (*protos.BlockDeviceDetails, error) {
    29  
    30  	klog.Info("Listing Device Details")
    31  
    32  	device := smart.Identifier{
    33  		DevPath: bd.Name,
    34  	}
    35  	info, err := device.SCSIBasicDiskInfo()
    36  	if len(err) != 0 {
    37  		klog.Errorf("Error fetching block device details %v", err)
    38  		return nil, status.Errorf(codes.Internal, "Error fetching disk details")
    39  	}
    40  	klog.V(4).Info(info.BasicDiskAttr)
    41  	klog.V(4).Info(info.ATADiskAttr)
    42  
    43  	return &protos.BlockDeviceDetails{
    44  		Compliance:       info.BasicDiskAttr.Compliance,
    45  		Vendor:           info.BasicDiskAttr.Vendor,
    46  		Model:            info.BasicDiskAttr.ModelNumber,
    47  		SerialNumber:     info.BasicDiskAttr.SerialNumber,
    48  		FirmwareRevision: info.BasicDiskAttr.FirmwareRevision,
    49  		WWN:              info.BasicDiskAttr.WWN,
    50  		Capacity:         info.BasicDiskAttr.Capacity,
    51  		LBSize:           info.BasicDiskAttr.LBSize,
    52  		PBSize:           info.BasicDiskAttr.PBSize,
    53  		RotationRate:     uint32(info.BasicDiskAttr.RotationRate),
    54  		ATAMajorVersion:  info.ATADiskAttr.ATAMajorVersion,
    55  		ATAMinorVersion:  info.ATADiskAttr.ATAMinorVersion,
    56  		AtaTransport:     info.ATADiskAttr.AtaTransport,
    57  	}, nil
    58  
    59  }