/**
* Copyright 2016 LinkedIn Corp. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*/
package com.github.ambry.admin;
import com.codahale.metrics.Counter;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Meter;
import com.codahale.metrics.MetricRegistry;
import com.github.ambry.rest.RestRequestMetrics;
/**
* Admin specific metrics tracking.
* <p/>
* Exports metrics that are triggered by the Admin to the provided {@link MetricRegistry}.
*/
class AdminMetrics {
private static final String SSL_SUFFIX = "Ssl";
// RestRequestMetrics instances
// DELETE
public final RestRequestMetrics deleteBlobMetrics;
public final RestRequestMetrics deleteBlobSSLMetrics;
// HEAD
public final RestRequestMetrics headBlobMetrics;
public final RestRequestMetrics headBlobSSLMetrics;
// GET
public final RestRequestMetrics getBlobInfoMetrics;
public final RestRequestMetrics getBlobInfoSSLMetrics;
public final RestRequestMetrics getBlobMetrics;
public final RestRequestMetrics getBlobSSLMetrics;
public final RestRequestMetrics getUserMetadataMetrics;
public final RestRequestMetrics getUserMetadataSSLMetrics;
public final RestRequestMetrics getReplicasMetrics;
public final RestRequestMetrics getReplicasSSLMetrics;
// POST
public final RestRequestMetrics postBlobMetrics;
public final RestRequestMetrics postBlobSSLMetrics;
// Rates
// AdminSecurityService
public final Meter securityServiceProcessRequestRate;
public final Meter securityServiceProcessResponseRate;
// AdminIdConverter
public final Meter idConverterRequestRate;
// Latencies
// AdminBlobStorageService
// DELETE
public final Histogram deletePreProcessingTimeInMs;
// HEAD
public final Histogram headPreProcessingTimeInMs;
// GET
public final Histogram getPreProcessingTimeInMs;
// DeleteCallback
public final Histogram deleteCallbackProcessingTimeInMs;
public final Histogram deleteTimeInMs;
// HeadCallback
public final Histogram headCallbackProcessingTimeInMs;
public final Histogram headTimeInMs;
public final Histogram headSecurityResponseTimeInMs;
public final Histogram headSecurityResponseCallbackProcessingTimeInMs;
// GetCallback
public final Histogram getCallbackProcessingTimeInMs;
public final Histogram getTimeInMs;
public final Histogram getSecurityResponseCallbackProcessingTimeInMs;
public final Histogram getSecurityResponseTimeInMs;
// InboundIdConverterCallback
public final Histogram inboundIdConversionCallbackProcessingTimeInMs;
public final Histogram inboundIdConversionTimeInMs;
// SecurityProcessRequestCallback
public final Histogram deleteSecurityRequestCallbackProcessingTimeInMs;
public final Histogram getSecurityRequestCallbackProcessingTimeInMs;
public final Histogram headSecurityRequestCallbackProcessingTimeInMs;
public final Histogram deleteSecurityRequestTimeInMs;
public final Histogram getSecurityRequestTimeInMs;
public final Histogram headSecurityRequestTimeInMs;
// AdminSecurityService
public final Histogram securityServiceProcessRequestTimeInMs;
public final Histogram securityServiceProcessResponseTimeInMs;
// AdminIdConverter
public final Histogram idConverterProcessingTimeInMs;
// GetReplicasHandler
public final Histogram getReplicasProcessingTimeInMs;
// Errors
// AdminBlobStorageService
public final Counter responseSubmissionError;
public final Counter resourceReleaseError;
public final Counter routerCallbackError;
// DeleteCallback
public final Counter deleteCallbackProcessingError;
// HeadCallback
public final Counter headCallbackProcessingError;
// GetCallback
public final Counter getCallbackProcessingError;
public final Counter getSecurityResponseCallbackProcessingError;
// GetReplicasHandler
public final Counter invalidBlobIdError;
public final Counter responseConstructionError;
// Other
// AdminBlobStorageService
public final Histogram blobStorageServiceStartupTimeInMs;
public final Histogram blobStorageServiceShutdownTimeInMs;
/**
* Creates an instance of AdminMetrics using the given {@code metricRegistry}.
* @param metricRegistry the {@link MetricRegistry} to use for the metrics.
*/
public AdminMetrics(MetricRegistry metricRegistry) {
// RestRequestMetrics instances
// DELETE
deleteBlobMetrics = new RestRequestMetrics(AdminBlobStorageService.class, "DeleteBlob", metricRegistry);
deleteBlobSSLMetrics =
new RestRequestMetrics(AdminBlobStorageService.class, "DeleteBlob" + SSL_SUFFIX, metricRegistry);
// HEAD
headBlobMetrics = new RestRequestMetrics(AdminBlobStorageService.class, "HeadBlob", metricRegistry);
headBlobSSLMetrics = new RestRequestMetrics(AdminBlobStorageService.class, "HeadBlob" + SSL_SUFFIX, metricRegistry);
// GET
getBlobInfoMetrics = new RestRequestMetrics(AdminBlobStorageService.class, "GetBlobInfo", metricRegistry);
getBlobInfoSSLMetrics =
new RestRequestMetrics(AdminBlobStorageService.class, "GetBlobInfo" + SSL_SUFFIX, metricRegistry);
getBlobMetrics = new RestRequestMetrics(AdminBlobStorageService.class, "GetBlob", metricRegistry);
getBlobSSLMetrics = new RestRequestMetrics(AdminBlobStorageService.class, "GetBlob" + SSL_SUFFIX, metricRegistry);
getUserMetadataMetrics = new RestRequestMetrics(AdminBlobStorageService.class, "GetUserMetadata", metricRegistry);
getUserMetadataSSLMetrics =
new RestRequestMetrics(AdminBlobStorageService.class, "GetUserMetadata" + SSL_SUFFIX, metricRegistry);
getReplicasMetrics = new RestRequestMetrics(AdminBlobStorageService.class, "GetReplicas", metricRegistry);
getReplicasSSLMetrics =
new RestRequestMetrics(AdminBlobStorageService.class, "GetReplicas" + SSL_SUFFIX, metricRegistry);
// POST
postBlobMetrics = new RestRequestMetrics(AdminBlobStorageService.class, "PostBlob", metricRegistry);
postBlobSSLMetrics = new RestRequestMetrics(AdminBlobStorageService.class, "PostBlob" + SSL_SUFFIX, metricRegistry);
// Rates
// AdminSecurityService
securityServiceProcessRequestRate =
metricRegistry.meter(MetricRegistry.name(AdminSecurityService.class, "ProcessRequestRate"));
securityServiceProcessResponseRate =
metricRegistry.meter(MetricRegistry.name(AdminSecurityService.class, "ProcessResponseRate"));
// AdminIdConverter
idConverterRequestRate = metricRegistry.meter(MetricRegistry.name(AdminIdConverterFactory.class, "RequestRate"));
// Latencies
// AdminBlobStorageService
// DELETE
deletePreProcessingTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "DeletePreProcessingTimeInMs"));
// HEAD
headPreProcessingTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "HeadPreProcessingTimeInMs"));
// GET
getPreProcessingTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "GetPreProcessingTimeInMs"));
// DeleteCallback
deleteCallbackProcessingTimeInMs = metricRegistry.histogram(
MetricRegistry.name(AdminBlobStorageService.class, "DeleteCallbackProcessingTimeInMs"));
deleteTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "DeleteCallbackResultTimeInMs"));
// HeadCallback
headCallbackProcessingTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "HeadCallbackProcessingTimeInMs"));
headTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "HeadCallbackResultTimeInMs"));
headSecurityResponseCallbackProcessingTimeInMs = metricRegistry.histogram(
MetricRegistry.name(AdminBlobStorageService.class, "HeadSecurityResponseCallbackProcessingTimeInMs"));
headSecurityResponseTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "HeadSecurityResponseTimeInMs"));
// GetCallback
getCallbackProcessingTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "GetCallbackProcessingTimeInMs"));
getTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "GetCallbackResultTimeInMs"));
getSecurityResponseCallbackProcessingTimeInMs = metricRegistry.histogram(
MetricRegistry.name(AdminBlobStorageService.class, "GetSecurityResponseCallbackProcessingTimeInMs"));
getSecurityResponseTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "GetSecurityResponseTimeInMs"));
// InboundIdConverterCallback
inboundIdConversionCallbackProcessingTimeInMs = metricRegistry.histogram(
MetricRegistry.name(AdminBlobStorageService.class, "InboundIdCallbackProcessingTimeInMs"));
inboundIdConversionTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "InboundIdConversionTimeInMs"));
// SecurityProcessRequestCallback
deleteSecurityRequestCallbackProcessingTimeInMs = metricRegistry.histogram(
MetricRegistry.name(AdminBlobStorageService.class, "DeleteSecurityRequestCallbackProcessingTimeInMs"));
deleteSecurityRequestTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "DeleteSecurityRequestTimeInMs"));
headSecurityRequestCallbackProcessingTimeInMs = metricRegistry.histogram(
MetricRegistry.name(AdminBlobStorageService.class, "HeadSecurityRequestCallbackProcessingTimeInMs"));
headSecurityRequestTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "HeadSecurityRequestTimeInMs"));
getSecurityRequestCallbackProcessingTimeInMs = metricRegistry.histogram(
MetricRegistry.name(AdminBlobStorageService.class, "GetSecurityRequestCallbackProcessingTimeInMs"));
getSecurityRequestTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "GetSecurityRequestTimeInMs"));
// AdminSecurityService
securityServiceProcessRequestTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminSecurityService.class, "RequestProcessingTimeInMs"));
securityServiceProcessResponseTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminSecurityService.class, "ResponseProcessingTimeInMs"));
// AdminIdConverter
idConverterProcessingTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminIdConverterFactory.class, "ProcessingTimeInMs"));
// GetReplicasHandler
getReplicasProcessingTimeInMs =
metricRegistry.histogram(MetricRegistry.name(GetReplicasHandler.class, "ProcessingTimeInMs"));
// Errors
// AdminBlobStorageService
responseSubmissionError =
metricRegistry.counter(MetricRegistry.name(AdminBlobStorageService.class, "ResponseSubmissionError"));
resourceReleaseError =
metricRegistry.counter(MetricRegistry.name(AdminBlobStorageService.class, "ResourceReleaseError"));
routerCallbackError =
metricRegistry.counter(MetricRegistry.name(AdminBlobStorageService.class, "RouterCallbackError"));
// DeleteCallback
deleteCallbackProcessingError =
metricRegistry.counter(MetricRegistry.name(AdminBlobStorageService.class, "DeleteCallbackProcessingError"));
// HeadCallback
headCallbackProcessingError =
metricRegistry.counter(MetricRegistry.name(AdminBlobStorageService.class, "HeadCallbackProcessingError"));
// GetCallback
getCallbackProcessingError =
metricRegistry.counter(MetricRegistry.name(AdminBlobStorageService.class, "GetCallbackProcessingError"));
getSecurityResponseCallbackProcessingError = metricRegistry.counter(
MetricRegistry.name(AdminBlobStorageService.class, "GetSecurityResponseCallbackProcessingError"));
// GetReplicasHandler
invalidBlobIdError = metricRegistry.counter(MetricRegistry.name(GetReplicasHandler.class, "InvalidBlobIdError"));
responseConstructionError =
metricRegistry.counter(MetricRegistry.name(GetReplicasHandler.class, "ResponseConstructionError"));
// Other
blobStorageServiceStartupTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "StartupTimeInMs"));
blobStorageServiceShutdownTimeInMs =
metricRegistry.histogram(MetricRegistry.name(AdminBlobStorageService.class, "ShutdownTimeInMs"));
}
}