1/* 2 * 3 * Copyright 2016 gRPC authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 19package main 20 21import ( 22 "context" 23 "flag" 24 "fmt" 25 "io" 26 27 "google.golang.org/grpc" 28 "google.golang.org/grpc/grpclog" 29 metricspb "google.golang.org/grpc/stress/grpc_testing" 30) 31 32var ( 33 metricsServerAddress = flag.String("metrics_server_address", "", "The metrics server addresses in the fomrat <hostname>:<port>") 34 totalOnly = flag.Bool("total_only", false, "If true, this prints only the total value of all gauges") 35) 36 37func printMetrics(client metricspb.MetricsServiceClient, totalOnly bool) { 38 stream, err := client.GetAllGauges(context.Background(), &metricspb.EmptyMessage{}) 39 if err != nil { 40 grpclog.Fatalf("failed to call GetAllGuages: %v", err) 41 } 42 43 var ( 44 overallQPS int64 45 rpcStatus error 46 ) 47 for { 48 gaugeResponse, err := stream.Recv() 49 if err != nil { 50 rpcStatus = err 51 break 52 } 53 if _, ok := gaugeResponse.GetValue().(*metricspb.GaugeResponse_LongValue); !ok { 54 panic(fmt.Sprintf("gauge %s is not a long value", gaugeResponse.Name)) 55 } 56 v := gaugeResponse.GetLongValue() 57 if !totalOnly { 58 grpclog.Infof("%s: %d", gaugeResponse.Name, v) 59 } 60 overallQPS += v 61 } 62 if rpcStatus != io.EOF { 63 grpclog.Fatalf("failed to finish server streaming: %v", rpcStatus) 64 } 65 grpclog.Infof("overall qps: %d", overallQPS) 66} 67 68func main() { 69 flag.Parse() 70 if *metricsServerAddress == "" { 71 grpclog.Fatalf("Metrics server address is empty.") 72 } 73 74 conn, err := grpc.Dial(*metricsServerAddress, grpc.WithInsecure()) 75 if err != nil { 76 grpclog.Fatalf("cannot connect to metrics server: %v", err) 77 } 78 defer conn.Close() 79 80 c := metricspb.NewMetricsServiceClient(conn) 81 printMetrics(c, *totalOnly) 82} 83