HBASE-5433 [REST] Add metrics to keep track of success/failure count (Mubarak Seyed)
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1303536 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
865b14133b
commit
4ba5a9d29e
|
@ -91,8 +91,10 @@ public class MultiRowResource extends ResourceBase {
|
|||
|
||||
model.addRow(rowModel);
|
||||
}
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
return Response.ok(model).build();
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
|
|
@ -102,10 +102,13 @@ public class RegionsResource extends ResourceBase {
|
|||
}
|
||||
ResponseBuilder response = Response.ok(model);
|
||||
response.cacheControl(cacheControl);
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
return response.build();
|
||||
} catch (TableNotFoundException e) {
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(Response.Status.NOT_FOUND);
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
|
|
@ -82,8 +82,10 @@ public class RootResource extends ResourceBase {
|
|||
try {
|
||||
ResponseBuilder response = Response.ok(getTableList());
|
||||
response.cacheControl(cacheControl);
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
return response.build();
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
|
|
@ -107,8 +107,10 @@ public class RowResource extends ResourceBase {
|
|||
value = generator.next();
|
||||
} while (value != null);
|
||||
model.addRow(rowModel);
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
return Response.ok(model).build();
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
@ -135,8 +137,10 @@ public class RowResource extends ResourceBase {
|
|||
KeyValue value = generator.next();
|
||||
ResponseBuilder response = Response.ok(value.getValue());
|
||||
response.header("X-Timestamp", value.getTimestamp());
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
return response.build();
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
@ -188,8 +192,10 @@ public class RowResource extends ResourceBase {
|
|||
table.put(puts);
|
||||
table.flushCommits();
|
||||
ResponseBuilder response = Response.ok();
|
||||
servlet.getMetrics().incrementSucessfulPutRequests(1);
|
||||
return response.build();
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedPutRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
} finally {
|
||||
|
@ -248,8 +254,10 @@ public class RowResource extends ResourceBase {
|
|||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("PUT " + put.toString());
|
||||
}
|
||||
servlet.getMetrics().incrementSucessfulPutRequests(1);
|
||||
return Response.ok().build();
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedPutRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
} finally {
|
||||
|
@ -340,10 +348,12 @@ public class RowResource extends ResourceBase {
|
|||
try {
|
||||
table = pool.getTable(tableResource.getName());
|
||||
table.delete(delete);
|
||||
servlet.getMetrics().incrementSucessfulDeleteRequests(1);
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("DELETE " + delete.toString());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedDeleteRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
} finally {
|
||||
|
|
|
@ -88,7 +88,12 @@ public class ScannerInstanceResource extends ResourceBase {
|
|||
try {
|
||||
value = generator.next();
|
||||
} catch (IllegalStateException e) {
|
||||
ScannerResource.delete(id);
|
||||
if (ScannerResource.delete(id)) {
|
||||
servlet.getMetrics().incrementSucessfulDeleteRequests(1);
|
||||
} else {
|
||||
servlet.getMetrics().incrementFailedDeleteRequests(1);
|
||||
}
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(Response.Status.GONE);
|
||||
}
|
||||
if (value == null) {
|
||||
|
@ -124,6 +129,7 @@ public class ScannerInstanceResource extends ResourceBase {
|
|||
model.addRow(rowModel);
|
||||
ResponseBuilder response = Response.ok(model);
|
||||
response.cacheControl(cacheControl);
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
return response.build();
|
||||
}
|
||||
|
||||
|
@ -148,9 +154,15 @@ public class ScannerInstanceResource extends ResourceBase {
|
|||
Base64.encodeBytes(
|
||||
KeyValue.makeColumn(value.getFamily(), value.getQualifier())));
|
||||
response.header("X-Timestamp", value.getTimestamp());
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
return response.build();
|
||||
} catch (IllegalStateException e) {
|
||||
ScannerResource.delete(id);
|
||||
if (ScannerResource.delete(id)) {
|
||||
servlet.getMetrics().incrementSucessfulDeleteRequests(1);
|
||||
} else {
|
||||
servlet.getMetrics().incrementFailedDeleteRequests(1);
|
||||
}
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(Response.Status.GONE);
|
||||
}
|
||||
}
|
||||
|
@ -164,7 +176,11 @@ public class ScannerInstanceResource extends ResourceBase {
|
|||
if (servlet.isReadOnly()) {
|
||||
throw new WebApplicationException(Response.Status.FORBIDDEN);
|
||||
}
|
||||
ScannerResource.delete(id);
|
||||
if (ScannerResource.delete(id)) {
|
||||
servlet.getMetrics().incrementSucessfulDeleteRequests(1);
|
||||
} else {
|
||||
servlet.getMetrics().incrementFailedDeleteRequests(1);
|
||||
}
|
||||
return Response.ok().build();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,10 +65,13 @@ public class ScannerResource extends ResourceBase {
|
|||
this.tableResource = tableResource;
|
||||
}
|
||||
|
||||
static void delete(final String id) {
|
||||
static boolean delete(final String id) {
|
||||
ScannerInstanceResource instance = scanners.remove(id);
|
||||
if (instance != null) {
|
||||
instance.generator.close();
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -96,16 +99,20 @@ public class ScannerResource extends ResourceBase {
|
|||
}
|
||||
UriBuilder builder = uriInfo.getAbsolutePathBuilder();
|
||||
URI uri = builder.path(id).build();
|
||||
servlet.getMetrics().incrementSucessfulPutRequests(1);
|
||||
return Response.created(uri).build();
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedPutRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
} catch (RuntimeException e) {
|
||||
servlet.getMetrics().incrementFailedPutRequests(1);
|
||||
if (e.getCause() instanceof TableNotFoundException) {
|
||||
throw new WebApplicationException(e, Response.Status.NOT_FOUND);
|
||||
}
|
||||
throw new WebApplicationException(e, Response.Status.BAD_REQUEST);
|
||||
} catch (Exception e) {
|
||||
servlet.getMetrics().incrementFailedPutRequests(1);
|
||||
throw new WebApplicationException(e, Response.Status.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
|
@ -135,7 +142,10 @@ public class ScannerResource extends ResourceBase {
|
|||
final @PathParam("scanner") String id) {
|
||||
ScannerInstanceResource instance = scanners.get(id);
|
||||
if (instance == null) {
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(Response.Status.NOT_FOUND);
|
||||
} else {
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
|
|
@ -98,10 +98,13 @@ public class SchemaResource extends ResourceBase {
|
|||
ResponseBuilder response =
|
||||
Response.ok(new TableSchemaModel(getTableSchema()));
|
||||
response.cacheControl(cacheControl);
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
return response.build();
|
||||
} catch (TableNotFoundException e) {
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(Response.Status.NOT_FOUND);
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
@ -128,8 +131,10 @@ public class SchemaResource extends ResourceBase {
|
|||
admin.disableTable(name);
|
||||
admin.modifyTable(name, htd);
|
||||
admin.enableTable(name);
|
||||
servlet.getMetrics().incrementSucessfulPutRequests(1);
|
||||
} else try {
|
||||
admin.createTable(htd);
|
||||
servlet.getMetrics().incrementSucessfulPutRequests(1);
|
||||
} catch (TableExistsException e) {
|
||||
// race, someone else created a table with the same name
|
||||
throw new WebApplicationException(e, Response.Status.NOT_MODIFIED);
|
||||
|
@ -167,6 +172,7 @@ public class SchemaResource extends ResourceBase {
|
|||
} finally {
|
||||
admin.enableTable(tableResource.getName());
|
||||
}
|
||||
servlet.getMetrics().incrementSucessfulPutRequests(1);
|
||||
return Response.ok().build();
|
||||
} catch (IOException e) {
|
||||
throw new WebApplicationException(e,
|
||||
|
@ -185,6 +191,7 @@ public class SchemaResource extends ResourceBase {
|
|||
return update(name, model, uriInfo, admin);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedPutRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
@ -231,10 +238,13 @@ public class SchemaResource extends ResourceBase {
|
|||
throw new IOException("could not disable table");
|
||||
}
|
||||
admin.deleteTable(tableResource.getName());
|
||||
servlet.getMetrics().incrementSucessfulDeleteRequests(1);
|
||||
return Response.ok().build();
|
||||
} catch (TableNotFoundException e) {
|
||||
servlet.getMetrics().incrementFailedDeleteRequests(1);
|
||||
throw new WebApplicationException(Response.Status.NOT_FOUND);
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedDeleteRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
|
|
@ -95,8 +95,10 @@ public class StorageClusterStatusResource extends ResourceBase {
|
|||
}
|
||||
ResponseBuilder response = Response.ok(model);
|
||||
response.cacheControl(cacheControl);
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
return response.build();
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
|
|
@ -71,8 +71,10 @@ public class StorageClusterVersionResource extends ResourceBase {
|
|||
model.setVersion(admin.getClusterStatus().getHBaseVersion());
|
||||
ResponseBuilder response = Response.ok(model);
|
||||
response.cacheControl(cacheControl);
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
return response.build();
|
||||
} catch (IOException e) {
|
||||
servlet.getMetrics().incrementFailedGetRequests(1);
|
||||
throw new WebApplicationException(e,
|
||||
Response.Status.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
|
|
@ -81,6 +81,7 @@ public class VersionResource extends ResourceBase {
|
|||
servlet.getMetrics().incrementRequests(1);
|
||||
ResponseBuilder response = Response.ok(new VersionModel(context));
|
||||
response.cacheControl(cacheControl);
|
||||
servlet.getMetrics().incrementSucessfulGetRequests(1);
|
||||
return response.build();
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,19 @@ public class RESTMetrics implements Updater {
|
|||
private final RESTStatistics restStatistics;
|
||||
|
||||
private MetricsRate requests = new MetricsRate("requests", registry);
|
||||
private MetricsRate sucessfulGetCount =
|
||||
new MetricsRate("sucessful.get.count", registry);
|
||||
private MetricsRate sucessfulPutCount =
|
||||
new MetricsRate("sucessful.put.count", registry);
|
||||
private MetricsRate sucessfulDeleteCount =
|
||||
new MetricsRate("sucessful.delete.count", registry);
|
||||
|
||||
private MetricsRate failedGetCount =
|
||||
new MetricsRate("failed.get.count", registry);
|
||||
private MetricsRate failedPutCount =
|
||||
new MetricsRate("failed.put.count", registry);
|
||||
private MetricsRate failedDeleteCount =
|
||||
new MetricsRate("failed.delete.count", registry);
|
||||
|
||||
public RESTMetrics() {
|
||||
MetricsContext context = MetricsUtil.getContext("rest");
|
||||
|
@ -64,6 +77,12 @@ public class RESTMetrics implements Updater {
|
|||
public void doUpdates(MetricsContext unused) {
|
||||
synchronized (this) {
|
||||
requests.pushMetric(metricsRecord);
|
||||
sucessfulGetCount.pushMetric(metricsRecord);
|
||||
sucessfulPutCount.pushMetric(metricsRecord);
|
||||
sucessfulDeleteCount.pushMetric(metricsRecord);
|
||||
failedGetCount.pushMetric(metricsRecord);
|
||||
failedPutCount.pushMetric(metricsRecord);
|
||||
failedDeleteCount.pushMetric(metricsRecord);
|
||||
}
|
||||
this.metricsRecord.update();
|
||||
}
|
||||
|
@ -85,5 +104,89 @@ public class RESTMetrics implements Updater {
|
|||
public void incrementRequests(final int inc) {
|
||||
requests.inc(inc);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Count of sucessfulGetCount.
|
||||
*/
|
||||
public float getSucessfulGetCount() {
|
||||
return sucessfulGetCount.getPreviousIntervalValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param inc How much to add to sucessfulGetCount.
|
||||
*/
|
||||
public void incrementSucessfulGetRequests(final int inc) {
|
||||
sucessfulGetCount.inc(inc);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Count of sucessfulGetCount.
|
||||
*/
|
||||
public float getSucessfulPutCount() {
|
||||
return sucessfulPutCount.getPreviousIntervalValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param inc How much to add to sucessfulPutCount.
|
||||
*/
|
||||
public void incrementSucessfulPutRequests(final int inc) {
|
||||
sucessfulPutCount.inc(inc);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Count of failedPutCount.
|
||||
*/
|
||||
public float getFailedPutCount() {
|
||||
return failedPutCount.getPreviousIntervalValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param inc How much to add to failedPutCount.
|
||||
*/
|
||||
public void incrementFailedPutRequests(final int inc) {
|
||||
failedPutCount.inc(inc);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Count of failedGetCount.
|
||||
*/
|
||||
public float getFailedGetCount() {
|
||||
return failedGetCount.getPreviousIntervalValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param inc How much to add to failedGetCount.
|
||||
*/
|
||||
public void incrementFailedGetRequests(final int inc) {
|
||||
failedGetCount.inc(inc);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Count of sucessfulGetCount.
|
||||
*/
|
||||
public float getSucessfulDeleteCount() {
|
||||
return sucessfulDeleteCount.getPreviousIntervalValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param inc How much to add to sucessfulDeleteCount.
|
||||
*/
|
||||
public void incrementSucessfulDeleteRequests(final int inc) {
|
||||
sucessfulDeleteCount.inc(inc);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Count of failedDeleteCount.
|
||||
*/
|
||||
public float getFailedDeleteCount() {
|
||||
return failedDeleteCount.getPreviousIntervalValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param inc How much to add to failedDeleteCount.
|
||||
*/
|
||||
public void incrementFailedDeleteRequests(final int inc) {
|
||||
failedDeleteCount.inc(inc);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue