github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/cli/cmd/bench/util.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 This file is part of KubeBlocks project 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package bench 21 22 import ( 23 "fmt" 24 "net" 25 "strconv" 26 27 corev1 "k8s.io/api/core/v1" 28 29 appsv1alpha1 "github.com/1aal/kubeblocks/apis/apps/v1alpha1" 30 "github.com/1aal/kubeblocks/pkg/cli/cluster" 31 ) 32 33 func getDriverAndHostAndPort(c *appsv1alpha1.Cluster, svcList *corev1.ServiceList) (driver string, host string, port int, err error) { 34 var internalEndpoints []string 35 var externalEndpoints []string 36 37 if c == nil { 38 return "", "", 0, fmt.Errorf("cluster is nil") 39 } 40 41 for _, comp := range c.Spec.ComponentSpecs { 42 driver = comp.Name 43 internalEndpoints, externalEndpoints = cluster.GetComponentEndpoints(svcList, &comp) 44 if len(internalEndpoints) > 0 || len(externalEndpoints) > 0 { 45 break 46 } 47 } 48 switch { 49 case len(internalEndpoints) > 0: 50 host, port, err = parseHostAndPort(internalEndpoints[0]) 51 case len(externalEndpoints) > 0: 52 host, port, err = parseHostAndPort(externalEndpoints[0]) 53 default: 54 err = fmt.Errorf("no endpoints found") 55 } 56 57 return 58 } 59 60 func parseHostAndPort(s string) (string, int, error) { 61 host, port, err := net.SplitHostPort(s) 62 if err != nil { 63 return "", 0, err 64 } 65 portInt, err := strconv.Atoi(port) 66 if err != nil { 67 return "", 0, err 68 } 69 return host, portInt, nil 70 }