Add metrics for the new Check API

New metrics are necessary because the new API no longer wraps
an EPP flow, therefore does not get metrics for free.

Metrics include
 - An EventMetric for processing time
 - An IncrementableMetric for request count, with
   availability (available/reserved/registered) and
   pricing (standard/premium) fields

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=199708592
This commit is contained in:
Ben McIlwain 2018-06-07 15:39:55 -07:00
parent 1c71487e5d
commit 658f31933c
7 changed files with 391 additions and 30 deletions

View file

@ -0,0 +1,70 @@
// Copyright 2018 The Nomulus Authors. 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.
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.flows;
import static com.google.monitoring.metrics.EventMetric.DEFAULT_FITTER;
import com.google.common.collect.ImmutableSet;
import com.google.monitoring.metrics.EventMetric;
import com.google.monitoring.metrics.IncrementableMetric;
import com.google.monitoring.metrics.LabelDescriptor;
import com.google.monitoring.metrics.MetricRegistryImpl;
import google.registry.monitoring.whitebox.CheckApiMetric;
import google.registry.monitoring.whitebox.CheckApiMetric.Availability;
import google.registry.monitoring.whitebox.CheckApiMetric.Tier;
import javax.inject.Inject;
/** Helpers for updating domain check metrics. */
public class CheckApiMetrics {
private static final ImmutableSet<LabelDescriptor> LABEL_DESCRIPTORS =
ImmutableSet.of(
LabelDescriptor.create("tier", "Price tier of the domain name."),
LabelDescriptor.create("availability", "Availability of the domain name."),
LabelDescriptor.create("status", "The return status of the check."));
private static final IncrementableMetric requests =
MetricRegistryImpl.getDefault()
.newIncrementableMetric(
"/check_api/requests", "Count of CheckApi Requests", "count", LABEL_DESCRIPTORS);
private static final EventMetric processingTime =
MetricRegistryImpl.getDefault()
.newEventMetric(
"/check_api/processing_time",
"CheckApi Processing Time",
"milliseconds",
LABEL_DESCRIPTORS,
DEFAULT_FITTER);
@Inject
CheckApiMetrics() {}
public void incrementCheckApiRequest(CheckApiMetric metric) {
requests.increment(
metric.tier().map(Tier::getDisplayLabel).orElse(""),
metric.availability().map(Availability::getDisplayLabel).orElse(""),
metric.status().getDisplayLabel());
}
public void recordProcessingTime(CheckApiMetric metric) {
long elapsedTime = metric.endTimestamp().getMillis() - metric.startTimestamp().getMillis();
processingTime.record(
elapsedTime,
metric.tier().map(Tier::getDisplayLabel).orElse(""),
metric.availability().map(Availability::getDisplayLabel).orElse(""),
metric.status().getDisplayLabel());
}
}