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
;
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
) {
69 public UserMetricsBuilder
addClientMetris(UserMetrics
.ClientMetrics clientMetrics
) {
70 clientMetricsMap
.put(clientMetrics
.getHostName(), clientMetrics
);
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() {
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() {
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
);
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();