github.com/openebs/node-disk-manager@v1.9.1-0.20230225014141-4531f06ffa1e/api-service/node/services/iscsiStatus.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  	"strings"
    19  
    20  	protos "github.com/openebs/node-disk-manager/spec/ndm"
    21  
    22  	"github.com/mitchellh/go-ps"
    23  	"google.golang.org/grpc/codes"
    24  	"google.golang.org/grpc/status"
    25  	"k8s.io/klog/v2"
    26  )
    27  
    28  const iscsiServiceName = "iscsid"
    29  
    30  // ISCSIStatus gives the status of iSCSI service
    31  func (n *Node) ISCSIStatus(ctx context.Context, null *protos.Null) (*protos.Status, error) {
    32  
    33  	klog.Info("Finding ISCSI status")
    34  
    35  	// This will fetch the processes regardless of which OS is being used
    36  	processList, err := ps.Processes()
    37  	if err != nil {
    38  		klog.Error(err)
    39  		return nil, status.Errorf(codes.Internal, "Error fetching the processes")
    40  	}
    41  
    42  	var found bool
    43  
    44  	for _, p := range processList {
    45  
    46  		if strings.Contains(p.Executable(), iscsiServiceName) {
    47  			klog.Infof("%v is running with process id %v", p.Executable(), p.Pid())
    48  			found = true
    49  		}
    50  	}
    51  
    52  	if !found {
    53  		// Note: When using clients like grpcurl, they might return empty output as response when converting to json
    54  		// Set the appropriate flags to avoid that. In case of grpcurl, it is -emit-defaults
    55  		return &protos.Status{Status: false}, nil
    56  	}
    57  
    58  	return &protos.Status{Status: true}, nil
    59  
    60  }