1 /* 2 * Copyright 2022 The gRPC Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package io.grpc.services; 18 19 import static com.google.common.base.Preconditions.checkNotNull; 20 21 import com.google.common.base.MoreObjects; 22 import io.grpc.ExperimentalApi; 23 import java.util.Map; 24 25 /** 26 * A gRPC object of orca load report. LB policies listening at per-rpc or oob orca load reports 27 * will be notified of the metrics data in this data format. 28 */ 29 @ExperimentalApi("https://github.com/grpc/grpc-java/issues/9381") 30 public final class MetricReport { 31 private double cpuUtilization; 32 private double applicationUtilization; 33 private double memoryUtilization; 34 private double qps; 35 private double eps; 36 private Map<String, Double> requestCostMetrics; 37 private Map<String, Double> utilizationMetrics; 38 MetricReport(double cpuUtilization, double applicationUtilization, double memoryUtilization, double qps, double eps, Map<String, Double> requestCostMetrics, Map<String, Double> utilizationMetrics)39 MetricReport(double cpuUtilization, double applicationUtilization, double memoryUtilization, 40 double qps, double eps, Map<String, Double> requestCostMetrics, 41 Map<String, Double> utilizationMetrics) { 42 this.cpuUtilization = cpuUtilization; 43 this.applicationUtilization = applicationUtilization; 44 this.memoryUtilization = memoryUtilization; 45 this.qps = qps; 46 this.eps = eps; 47 this.requestCostMetrics = checkNotNull(requestCostMetrics, "requestCostMetrics"); 48 this.utilizationMetrics = checkNotNull(utilizationMetrics, "utilizationMetrics"); 49 } 50 getCpuUtilization()51 public double getCpuUtilization() { 52 return cpuUtilization; 53 } 54 getApplicationUtilization()55 public double getApplicationUtilization() { 56 return applicationUtilization; 57 } 58 getMemoryUtilization()59 public double getMemoryUtilization() { 60 return memoryUtilization; 61 } 62 getRequestCostMetrics()63 public Map<String, Double> getRequestCostMetrics() { 64 return requestCostMetrics; 65 } 66 getUtilizationMetrics()67 public Map<String, Double> getUtilizationMetrics() { 68 return utilizationMetrics; 69 } 70 getQps()71 public double getQps() { 72 return qps; 73 } 74 getEps()75 public double getEps() { 76 return eps; 77 } 78 79 @Override toString()80 public String toString() { 81 return MoreObjects.toStringHelper(this) 82 .add("cpuUtilization", cpuUtilization) 83 .add("applicationUtilization", applicationUtilization) 84 .add("memoryUtilization", memoryUtilization) 85 .add("requestCost", requestCostMetrics) 86 .add("utilization", utilizationMetrics) 87 .add("qps", qps) 88 .add("eps", eps) 89 .toString(); 90 } 91 } 92