1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.rest;
21
22 import java.io.IOException;
23
24 import javax.ws.rs.GET;
25 import javax.ws.rs.Produces;
26 import javax.ws.rs.core.CacheControl;
27 import javax.ws.rs.core.Context;
28 import javax.ws.rs.core.Response;
29 import javax.ws.rs.core.Response.ResponseBuilder;
30 import javax.ws.rs.core.UriInfo;
31
32 import org.apache.commons.logging.Log;
33 import org.apache.commons.logging.LogFactory;
34
35 import org.apache.hadoop.hbase.classification.InterfaceAudience;
36 import org.apache.hadoop.hbase.ClusterStatus;
37 import org.apache.hadoop.hbase.ServerLoad;
38 import org.apache.hadoop.hbase.RegionLoad;
39 import org.apache.hadoop.hbase.ServerName;
40 import org.apache.hadoop.hbase.rest.model.StorageClusterStatusModel;
41
42 @InterfaceAudience.Private
43 public class StorageClusterStatusResource extends ResourceBase {
44 private static final Log LOG =
45 LogFactory.getLog(StorageClusterStatusResource.class);
46
47 static CacheControl cacheControl;
48 static {
49 cacheControl = new CacheControl();
50 cacheControl.setNoCache(true);
51 cacheControl.setNoTransform(false);
52 }
53
54
55
56
57
58 public StorageClusterStatusResource() throws IOException {
59 super();
60 }
61
62 @GET
63 @Produces({MIMETYPE_TEXT, MIMETYPE_XML, MIMETYPE_JSON, MIMETYPE_PROTOBUF,
64 MIMETYPE_PROTOBUF_IETF})
65 public Response get(final @Context UriInfo uriInfo) {
66 if (LOG.isTraceEnabled()) {
67 LOG.trace("GET " + uriInfo.getAbsolutePath());
68 }
69 servlet.getMetrics().incrementRequests(1);
70 try {
71 ClusterStatus status = servlet.getAdmin().getClusterStatus();
72 StorageClusterStatusModel model = new StorageClusterStatusModel();
73 model.setRegions(status.getRegionsCount());
74 model.setRequests(status.getRequestsCount());
75 model.setAverageLoad(status.getAverageLoad());
76 for (ServerName info: status.getServers()) {
77 ServerLoad load = status.getLoad(info);
78 StorageClusterStatusModel.Node node =
79 model.addLiveNode(
80 info.getHostname() + ":" +
81 Integer.toString(info.getPort()),
82 info.getStartcode(), load.getUsedHeapMB(),
83 load.getMaxHeapMB());
84 node.setRequests(load.getNumberOfRequests());
85 for (RegionLoad region: load.getRegionsLoad().values()) {
86 node.addRegion(region.getName(), region.getStores(),
87 region.getStorefiles(), region.getStorefileSizeMB(),
88 region.getMemStoreSizeMB(), region.getStorefileIndexSizeMB(),
89 region.getReadRequestsCount(), region.getWriteRequestsCount(),
90 region.getRootIndexSizeKB(), region.getTotalStaticIndexSizeKB(),
91 region.getTotalStaticBloomSizeKB(), region.getTotalCompactingKVs(),
92 region.getCurrentCompactedKVs());
93 }
94 }
95 for (ServerName name: status.getDeadServerNames()) {
96 model.addDeadNode(name.toString());
97 }
98 ResponseBuilder response = Response.ok(model);
99 response.cacheControl(cacheControl);
100 servlet.getMetrics().incrementSucessfulGetRequests(1);
101 return response.build();
102 } catch (IOException e) {
103 servlet.getMetrics().incrementFailedGetRequests(1);
104 return Response.status(Response.Status.SERVICE_UNAVAILABLE)
105 .type(MIMETYPE_TEXT).entity("Unavailable" + CRLF)
106 .build();
107 }
108 }
109 }