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 }