HBASE-26481 Consider rolling upgrading from old region replication framework (#3880)
[hbase.git] / hbase-client / src / main / java / org / apache / hadoop / hbase / UserMetricsBuilder.java
blob70d28883c269ab2d2aa32c186133681ea4495354
1 /**
2 * Copyright The Apache Software Foundation
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
21 package org.apache.hadoop.hbase;
23 import java.util.HashMap;
24 import java.util.Map;
26 import org.apache.hadoop.hbase.util.Strings;
27 import org.apache.yetus.audience.InterfaceAudience;
29 import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;
31 import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;
33 @InterfaceAudience.Private
34 public final class UserMetricsBuilder {
36 public static UserMetrics toUserMetrics(ClusterStatusProtos.UserLoad userLoad) {
37 UserMetricsBuilder builder = UserMetricsBuilder.newBuilder(userLoad.getUserName().getBytes());
38 userLoad.getClientMetricsList().stream().map(
39 clientMetrics -> new ClientMetricsImpl(clientMetrics.getHostName(),
40 clientMetrics.getReadRequestsCount(), clientMetrics.getWriteRequestsCount(),
41 clientMetrics.getFilteredRequestsCount())).forEach(builder::addClientMetris);
42 return builder.build();
45 public static ClusterStatusProtos.UserLoad toUserMetrics(UserMetrics userMetrics) {
46 ClusterStatusProtos.UserLoad.Builder builder =
47 ClusterStatusProtos.UserLoad.newBuilder().setUserName(userMetrics.getNameAsString());
48 userMetrics.getClientMetrics().values().stream().map(
49 clientMetrics -> ClusterStatusProtos.ClientMetrics.newBuilder()
50 .setHostName(clientMetrics.getHostName())
51 .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())
52 .setReadRequestsCount(clientMetrics.getReadRequestsCount())
53 .setFilteredRequestsCount(clientMetrics.getFilteredReadRequestsCount()).build())
54 .forEach(builder::addClientMetrics);
55 return builder.build();
58 public static UserMetricsBuilder newBuilder(byte[] name) {
59 return new UserMetricsBuilder(name);
63 private final byte[] name;
64 private Map<String, UserMetrics.ClientMetrics> clientMetricsMap = new HashMap<>();
65 private UserMetricsBuilder(byte[] name) {
66 this.name = name;
69 public UserMetricsBuilder addClientMetris(UserMetrics.ClientMetrics clientMetrics) {
70 clientMetricsMap.put(clientMetrics.getHostName(), clientMetrics);
71 return this;
74 public UserMetrics build() {
75 return new UserMetricsImpl(name, clientMetricsMap);
78 public static class ClientMetricsImpl implements UserMetrics.ClientMetrics {
79 private final long filteredReadRequestsCount;
80 private final String hostName;
81 private final long readRequestCount;
82 private final long writeRequestCount;
84 public ClientMetricsImpl(String hostName, long readRequest, long writeRequest,
85 long filteredReadRequestsCount) {
86 this.hostName = hostName;
87 this.readRequestCount = readRequest;
88 this.writeRequestCount = writeRequest;
89 this.filteredReadRequestsCount = filteredReadRequestsCount;
92 @Override public String getHostName() {
93 return hostName;
96 @Override public long getReadRequestsCount() {
97 return readRequestCount;
100 @Override public long getWriteRequestsCount() {
101 return writeRequestCount;
104 @Override public long getFilteredReadRequestsCount() {
105 return filteredReadRequestsCount;
109 private static class UserMetricsImpl implements UserMetrics {
110 private final byte[] name;
111 private final Map<String, ClientMetrics> clientMetricsMap;
113 UserMetricsImpl(byte[] name, Map<String, ClientMetrics> clientMetricsMap) {
114 this.name = Preconditions.checkNotNull(name);
115 this.clientMetricsMap = clientMetricsMap;
118 @Override public byte[] getUserName() {
119 return name;
122 @Override public long getReadRequestCount() {
123 return clientMetricsMap.values().stream().map(c -> c.getReadRequestsCount())
124 .reduce(0L, Long::sum);
127 @Override public long getWriteRequestCount() {
128 return clientMetricsMap.values().stream().map(c -> c.getWriteRequestsCount())
129 .reduce(0L, Long::sum);
132 @Override public Map<String, ClientMetrics> getClientMetrics() {
133 return this.clientMetricsMap;
136 @Override public long getFilteredReadRequests() {
137 return clientMetricsMap.values().stream().map(c -> c.getFilteredReadRequestsCount())
138 .reduce(0L, Long::sum);
141 @Override
142 public String toString() {
143 StringBuilder sb = Strings
144 .appendKeyValue(new StringBuilder(), "readRequestCount", this.getReadRequestCount());
145 Strings.appendKeyValue(sb, "writeRequestCount", this.getWriteRequestCount());
146 Strings.appendKeyValue(sb, "filteredReadRequestCount", this.getFilteredReadRequests());
147 return sb.toString();