/** * 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.frontend; 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; /** * Ambry frontend specific metrics tracking. * <p/> * Exports metrics that are triggered by the Ambry frontend to the provided {@link MetricRegistry}. */ class FrontendMetrics { 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; // POST public final RestRequestMetrics postBlobMetrics; public final RestRequestMetrics postBlobSSLMetrics; // Rates // AmbrySecurityService public final Meter securityServiceProcessRequestRate; public final Meter securityServiceProcessResponseRate; // AmbryIdConverter public final Meter idConverterRequestRate; // Latencies // AmbryBlobStorageService // DELETE public final Histogram deletePreProcessingTimeInMs; // HEAD public final Histogram headPreProcessingTimeInMs; // GET public final Histogram getPreProcessingTimeInMs; // POST public final Histogram blobPropsBuildTimeInMs; public final Histogram postPreProcessingTimeInMs; // 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; // PostCallback public final Histogram outboundIdConversionCallbackProcessingTimeInMs; public final Histogram outboundIdConversionTimeInMs; public final Histogram postCallbackProcessingTimeInMs; public final Histogram postTimeInMs; public final Histogram postSecurityResponseTimeInMs; public final Histogram postSecurityResponseCallbackProcessingTimeInMs; // 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 postSecurityRequestCallbackProcessingTimeInMs; public final Histogram deleteSecurityRequestTimeInMs; public final Histogram getSecurityRequestTimeInMs; public final Histogram headSecurityRequestTimeInMs; public final Histogram postSecurityRequestTimeInMs; // AmbrySecurityService public final Histogram securityServiceProcessRequestTimeInMs; public final Histogram securityServiceProcessResponseTimeInMs; // AmbryIdConverter public final Histogram idConverterProcessingTimeInMs; // Errors // AmbryBlobStorageService public final Counter responseSubmissionError; public final Counter resourceReleaseError; public final Counter routerCallbackError; public final Counter ttlTooLargeError; // DeleteCallback public final Counter deleteCallbackProcessingError; // HeadCallback public final Counter headCallbackProcessingError; // GetCallback public final Counter getCallbackProcessingError; public final Counter getSecurityResponseCallbackProcessingError; // PostCallback public final Counter postCallbackProcessingError; public final Counter outboundIdConversionCallbackProcessingError; // Other // AmbryBlobStorageService public final Histogram blobStorageServiceStartupTimeInMs; public final Histogram blobStorageServiceShutdownTimeInMs; /** * Creates an instance of FrontendMetrics using the given {@code metricRegistry}. * @param metricRegistry the {@link MetricRegistry} to use for the metrics. */ public FrontendMetrics(MetricRegistry metricRegistry) { // RestRequestMetrics instances // DELETE deleteBlobMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "DeleteBlob", metricRegistry); deleteBlobSSLMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "DeleteBlob" + SSL_SUFFIX, metricRegistry); // HEAD headBlobMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "HeadBlob", metricRegistry); headBlobSSLMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "HeadBlob" + SSL_SUFFIX, metricRegistry); // GET getBlobInfoMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "GetBlobInfo", metricRegistry); getBlobInfoSSLMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "GetBlobInfo" + SSL_SUFFIX, metricRegistry); getBlobMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "GetBlob", metricRegistry); getBlobSSLMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "GetBlob" + SSL_SUFFIX, metricRegistry); getUserMetadataMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "GetUserMetadata", metricRegistry); getUserMetadataSSLMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "GetUserMetadata" + SSL_SUFFIX, metricRegistry); // POST postBlobMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "PostBlob", metricRegistry); postBlobSSLMetrics = new RestRequestMetrics(AmbryBlobStorageService.class, "PostBlob" + SSL_SUFFIX, metricRegistry); // Rates // AmbrySecurityService securityServiceProcessRequestRate = metricRegistry.meter(MetricRegistry.name(AmbrySecurityService.class, "ProcessRequestRate")); securityServiceProcessResponseRate = metricRegistry.meter(MetricRegistry.name(AmbrySecurityService.class, "ProcessResponseRate")); // AmbryIdConverter idConverterRequestRate = metricRegistry.meter(MetricRegistry.name(AmbryIdConverterFactory.class, "RequestRate")); // Latencies // AmbryBlobStorageService // DELETE deletePreProcessingTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "DeletePreProcessingTimeInMs")); // HEAD headPreProcessingTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "HeadPreProcessingTimeInMs")); // GET getPreProcessingTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "GetPreProcessingTimeInMs")); // POST blobPropsBuildTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "BlobPropsBuildTimeInMs")); postPreProcessingTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "PostPreProcessingTimeInMs")); // DeleteCallback deleteCallbackProcessingTimeInMs = metricRegistry.histogram( MetricRegistry.name(AmbryBlobStorageService.class, "DeleteCallbackProcessingTimeInMs")); deleteTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "DeleteCallbackResultTimeInMs")); // HeadCallback headCallbackProcessingTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "HeadCallbackProcessingTimeInMs")); headTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "HeadCallbackResultTimeInMs")); headSecurityResponseCallbackProcessingTimeInMs = metricRegistry.histogram( MetricRegistry.name(AmbryBlobStorageService.class, "HeadSecurityResponseCallbackProcessingTimeInMs")); headSecurityResponseTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "HeadSecurityResponseTimeInMs")); // GetCallback getCallbackProcessingTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "GetCallbackProcessingTimeInMs")); getTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "GetCallbackResultTimeInMs")); getSecurityResponseCallbackProcessingTimeInMs = metricRegistry.histogram( MetricRegistry.name(AmbryBlobStorageService.class, "GetSecurityResponseCallbackProcessingTimeInMs")); getSecurityResponseTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "GetSecurityResponseTimeInMs")); // PostCallback outboundIdConversionCallbackProcessingTimeInMs = metricRegistry.histogram( MetricRegistry.name(AmbryBlobStorageService.class, "OutboundIdCallbackProcessingTimeInMs")); outboundIdConversionTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "OutboundIdConversionTimeInMs")); postCallbackProcessingTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "PostCallbackProcessingTimeInMs")); postTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "PostCallbackResultTimeInMs")); postSecurityResponseTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "PostSecurityResponseTimeInMs")); postSecurityResponseCallbackProcessingTimeInMs = metricRegistry.histogram( MetricRegistry.name(AmbryBlobStorageService.class, "PostSecurityResponseCallbackProcessingTimeInMs")); // InboundIdConverterCallback inboundIdConversionCallbackProcessingTimeInMs = metricRegistry.histogram( MetricRegistry.name(AmbryBlobStorageService.class, "InboundIdCallbackProcessingTimeInMs")); inboundIdConversionTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "InboundIdConversionTimeInMs")); // SecurityProcessRequestCallback deleteSecurityRequestCallbackProcessingTimeInMs = metricRegistry.histogram( MetricRegistry.name(AmbryBlobStorageService.class, "DeleteSecurityRequestCallbackProcessingTimeInMs")); deleteSecurityRequestTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "DeleteSecurityRequestTimeInMs")); headSecurityRequestCallbackProcessingTimeInMs = metricRegistry.histogram( MetricRegistry.name(AmbryBlobStorageService.class, "HeadSecurityRequestCallbackProcessingTimeInMs")); headSecurityRequestTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "HeadSecurityRequestTimeInMs")); getSecurityRequestCallbackProcessingTimeInMs = metricRegistry.histogram( MetricRegistry.name(AmbryBlobStorageService.class, "GetSecurityRequestCallbackProcessingTimeInMs")); getSecurityRequestTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "GetSecurityRequestTimeInMs")); postSecurityRequestCallbackProcessingTimeInMs = metricRegistry.histogram( MetricRegistry.name(AmbryBlobStorageService.class, "PostSecurityRequestCallbackProcessingTimeInMs")); postSecurityRequestTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "PostSecurityRequestTimeInMs")); // AmbrySecurityService securityServiceProcessRequestTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbrySecurityService.class, "RequestProcessingTimeInMs")); securityServiceProcessResponseTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbrySecurityService.class, "ResponseProcessingTimeInMs")); // AmbryIdConverter idConverterProcessingTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryIdConverterFactory.class, "ProcessingTimeInMs")); // Errors // AmbryBlobStorageService responseSubmissionError = metricRegistry.counter(MetricRegistry.name(AmbryBlobStorageService.class, "ResponseSubmissionError")); resourceReleaseError = metricRegistry.counter(MetricRegistry.name(AmbryBlobStorageService.class, "ResourceReleaseError")); routerCallbackError = metricRegistry.counter(MetricRegistry.name(AmbryBlobStorageService.class, "RouterCallbackError")); // DeleteCallback deleteCallbackProcessingError = metricRegistry.counter(MetricRegistry.name(AmbryBlobStorageService.class, "DeleteCallbackProcessingError")); // HeadCallback headCallbackProcessingError = metricRegistry.counter(MetricRegistry.name(AmbryBlobStorageService.class, "HeadCallbackProcessingError")); // GetCallback getCallbackProcessingError = metricRegistry.counter(MetricRegistry.name(AmbryBlobStorageService.class, "GetCallbackProcessingError")); getSecurityResponseCallbackProcessingError = metricRegistry.counter( MetricRegistry.name(AmbryBlobStorageService.class, "GetSecurityResponseCallbackProcessingError")); // PostCallback postCallbackProcessingError = metricRegistry.counter(MetricRegistry.name(AmbryBlobStorageService.class, "PostCallbackProcessingError")); outboundIdConversionCallbackProcessingError = metricRegistry.counter( MetricRegistry.name(AmbryBlobStorageService.class, "OutboundIdConversionCallbackProcessingError")); ttlTooLargeError = metricRegistry.counter(MetricRegistry.name(AmbryBlobStorageService.class, "TtlTooLargeError")); // Other blobStorageServiceStartupTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "StartupTimeInMs")); blobStorageServiceShutdownTimeInMs = metricRegistry.histogram(MetricRegistry.name(AmbryBlobStorageService.class, "ShutdownTimeInMs")); } }