Add metrics to PublishDnsUpdatesAction

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131190862
This commit is contained in:
shikhman 2016-08-24 10:49:25 -07:00 committed by Ben McIlwain
parent 8f0f701ff7
commit 1c5b4e16c6
6 changed files with 132 additions and 0 deletions

View file

@ -38,6 +38,7 @@ java_library(
"//java/google/registry/config",
"//java/google/registry/dns/writer",
"//java/google/registry/model",
"//java/google/registry/monitoring/metrics",
"//java/google/registry/request",
"//java/google/registry/util",
],

View file

@ -0,0 +1,68 @@
// Copyright 2016 The Domain Registry 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.dns;
import com.google.common.collect.ImmutableSet;
import google.registry.monitoring.metrics.IncrementableMetric;
import google.registry.monitoring.metrics.LabelDescriptor;
import google.registry.monitoring.metrics.MetricRegistryImpl;
/**
* DNS instrumentation.
*/
public class DnsMetrics {
private static final ImmutableSet<LabelDescriptor> LABEL_DESCRIPTORS =
ImmutableSet.of(
LabelDescriptor.create("tld", "TLD"),
LabelDescriptor.create(
"status", "Whether the publish request was accepted or rejected."));
private static final IncrementableMetric publishDomainRequests =
MetricRegistryImpl.getDefault()
.newIncrementableMetric(
"/dns/publish_domain_requests",
"count of publishDomain requests",
"count",
LABEL_DESCRIPTORS);
private static final IncrementableMetric publishHostRequests =
MetricRegistryImpl.getDefault()
.newIncrementableMetric(
"/dns/publish_host_requests",
"count of publishHost requests",
"count",
LABEL_DESCRIPTORS);
/**
* Increment a monotonic counter that tracks calls to {@link
* google.registry.dns.writer.DnsWriter#publishDomain(String)}, per TLD.
*/
public void incrementPublishDomainRequests(String tld, Status status) {
publishDomainRequests.increment(tld, status.name());
}
/**
* Increment a monotonic counter that tracks calls to {@link
* google.registry.dns.writer.DnsWriter#publishHost(String)}, per TLD.
*/
public void incrementPublishHostRequests(String tld, Status status) {
publishHostRequests.increment(tld, status.name());
}
/** Enum to encode the disposition of a publish request. */
public enum Status {
ACCEPTED,
REJECTED
}
}

View file

@ -20,6 +20,7 @@ import static google.registry.util.CollectionUtils.nullToEmpty;
import com.google.common.net.InternetDomainName;
import google.registry.config.ConfigModule.Config;
import google.registry.dns.DnsMetrics.Status;
import google.registry.dns.writer.DnsWriter;
import google.registry.request.Action;
import google.registry.request.HttpException.ServiceUnavailableException;
@ -44,6 +45,7 @@ public final class PublishDnsUpdatesAction implements Runnable, Callable<Void> {
@Inject DnsQueue dnsQueue;
@Inject DnsWriterProxy dnsWriterProxy;
@Inject DnsMetrics dnsMetrics;
@Inject @Config("dnsWriteLockTimeout") Duration timeout;
@Inject @Parameter(RequestParameters.PARAM_TLD) String tld;
@Inject @Parameter(DOMAINS_PARAM) Set<String> domains;
@ -76,16 +78,20 @@ public final class PublishDnsUpdatesAction implements Runnable, Callable<Void> {
for (String domain : nullToEmpty(domains)) {
if (!DomainNameUtils.isUnder(
InternetDomainName.from(domain), InternetDomainName.from(tld))) {
dnsMetrics.incrementPublishDomainRequests(tld, Status.REJECTED);
logger.severefmt("%s: skipping domain %s not under tld", tld, domain);
} else {
dnsMetrics.incrementPublishDomainRequests(tld, Status.ACCEPTED);
writer.publishDomain(domain);
}
}
for (String host : nullToEmpty(hosts)) {
if (!DomainNameUtils.isUnder(
InternetDomainName.from(host), InternetDomainName.from(tld))) {
dnsMetrics.incrementPublishHostRequests(tld, Status.REJECTED);
logger.severefmt("%s: skipping host %s not under tld", tld, host);
} else {
dnsMetrics.incrementPublishHostRequests(tld, Status.ACCEPTED);
writer.publishHost(host);
}
}

View file

@ -47,6 +47,7 @@ import javax.inject.Singleton;
@Component(
modules = {
AppIdentityCredentialModule.class,
BackendMetricsModule.class,
BigqueryModule.class,
ConfigModule.class,
DatastoreServiceModule.class,

View file

@ -0,0 +1,34 @@
// Copyright 2016 The Domain Registry 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.module.backend;
import dagger.Module;
import dagger.Provides;
import google.registry.dns.DnsMetrics;
import javax.inject.Singleton;
/**
* Dagger module for injecting metrics. All metrics should have {@link Singleton} scope to avoid
* being recreated per-request, as the metrics generally track cumulative values.
*/
@Module
public class BackendMetricsModule {
@Provides
@Singleton
static DnsMetrics provideDnsMetrics() {
return new DnsMetrics();
}
}