mirror of
https://github.com/google/nomulus.git
synced 2025-05-14 00:17:20 +02:00
Automated g4 rollback of changelist 212879670.
*** Reason for rollback *** Automated tools sometimes don't have default credentials, and can't set them up. We should redo this CL once we figure out the credential thing. *** Original change description *** Add metrics for the command used in the registry CLI tool Puts the metric in <project>/tools/commands_called It counts the use of the tool, with the following labels: - environment - tool (nomulus/gtech) - command called (class name) - success true/false - from the shell true/false *** ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=214048616
This commit is contained in:
parent
89c942b0d9
commit
c89cb6a3f3
6 changed files with 4 additions and 145 deletions
|
@ -26,19 +26,10 @@ import com.beust.jcommander.Parameter;
|
|||
import com.beust.jcommander.ParameterException;
|
||||
import com.beust.jcommander.Parameters;
|
||||
import com.beust.jcommander.ParametersDelegate;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.monitoring.metrics.IncrementableMetric;
|
||||
import com.google.monitoring.metrics.LabelDescriptor;
|
||||
import com.google.monitoring.metrics.Metric;
|
||||
import com.google.monitoring.metrics.MetricPoint;
|
||||
import com.google.monitoring.metrics.MetricRegistryImpl;
|
||||
import com.google.monitoring.metrics.MetricWriter;
|
||||
import google.registry.model.ofy.ObjectifyService;
|
||||
import google.registry.tools.params.ParameterFactory;
|
||||
import java.io.IOException;
|
||||
import java.security.Security;
|
||||
import java.util.Map;
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
|
@ -62,9 +53,6 @@ final class RegistryCli implements AutoCloseable, CommandRunner {
|
|||
description = "Returns all command names.")
|
||||
private boolean showAllCommands;
|
||||
|
||||
@VisibleForTesting
|
||||
boolean uploadMetrics = true;
|
||||
|
||||
// Do not make this final - compile-time constant inlining may interfere with JCommander.
|
||||
@ParametersDelegate
|
||||
private AppEngineConnectionFlags appEngineConnectionFlags =
|
||||
|
@ -85,24 +73,6 @@ final class RegistryCli implements AutoCloseable, CommandRunner {
|
|||
// "shell".
|
||||
private boolean isFirstUse = true;
|
||||
|
||||
private static final ImmutableSet<LabelDescriptor> LABEL_DESCRIPTORS_FOR_COMMANDS =
|
||||
ImmutableSet.of(
|
||||
LabelDescriptor.create("program", "The program used - e.g. nomulus or gtech_tool"),
|
||||
LabelDescriptor.create("environment", "The environment used - e.g. sandbox"),
|
||||
LabelDescriptor.create("command", "The command used"),
|
||||
LabelDescriptor.create("success", "Whether the command succeeded"),
|
||||
LabelDescriptor.create("shell", "Whether the command was called from the nomulus shell"));
|
||||
|
||||
private static final IncrementableMetric commandsCalledCount =
|
||||
MetricRegistryImpl.getDefault()
|
||||
.newIncrementableMetric(
|
||||
"/tools/commands_called",
|
||||
"Count of tool commands called",
|
||||
"count",
|
||||
LABEL_DESCRIPTORS_FOR_COMMANDS);
|
||||
|
||||
private MetricWriter metricWriter = null;
|
||||
|
||||
Map<String, ? extends Class<? extends Command>> commands;
|
||||
String programName;
|
||||
|
||||
|
@ -124,13 +94,9 @@ final class RegistryCli implements AutoCloseable, CommandRunner {
|
|||
// http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#FAQ104
|
||||
@Override
|
||||
public void run(String[] args) throws Exception {
|
||||
boolean inShell = !isFirstUse;
|
||||
isFirstUse = false;
|
||||
|
||||
// Create the JCommander instance.
|
||||
// If we're in the shell, we don't want to update the RegistryCli's parameters (so we give a
|
||||
// dummy object to update)
|
||||
JCommander jcommander = new JCommander(inShell ? new Object() : this);
|
||||
JCommander jcommander = new JCommander(this);
|
||||
jcommander.addConverterFactory(new ParameterFactory());
|
||||
jcommander.setProgramName(programName);
|
||||
|
||||
|
@ -149,8 +115,8 @@ final class RegistryCli implements AutoCloseable, CommandRunner {
|
|||
// Create the "help" and "shell" commands (these are special in that they don't have a default
|
||||
// constructor).
|
||||
jcommander.addCommand("help", new HelpCommand(jcommander));
|
||||
if (!inShell) {
|
||||
// If we aren't inside a shell, then we want to add the shell command.
|
||||
if (isFirstUse) {
|
||||
isFirstUse = false;
|
||||
ShellCommand shellCommand = new ShellCommand(this);
|
||||
// We have to build the completions based on the jcommander *before* we add the "shell"
|
||||
// command - to avoid completion for the "shell" command itself.
|
||||
|
@ -192,31 +158,17 @@ final class RegistryCli implements AutoCloseable, CommandRunner {
|
|||
jcommander.getCommands().get(jcommander.getParsedCommand()).getObjects());
|
||||
loggingParams.configureLogging(); // Must be called after parameters are parsed.
|
||||
|
||||
boolean success = false;
|
||||
try {
|
||||
runCommand(command);
|
||||
success = true;
|
||||
} catch (AuthModule.LoginRequiredException ex) {
|
||||
System.err.println("===================================================================");
|
||||
System.err.println("You must login using 'nomulus login' prior to running this command.");
|
||||
System.err.println("===================================================================");
|
||||
} finally {
|
||||
commandsCalledCount.increment(
|
||||
programName,
|
||||
environment.toString(),
|
||||
command.getClass().getSimpleName(),
|
||||
String.valueOf(success),
|
||||
String.valueOf(inShell));
|
||||
exportMetrics();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
exportMetrics();
|
||||
if (metricWriter != null) {
|
||||
metricWriter = null;
|
||||
}
|
||||
if (installer != null) {
|
||||
installer.uninstall();
|
||||
installer = null;
|
||||
|
@ -233,14 +185,6 @@ final class RegistryCli implements AutoCloseable, CommandRunner {
|
|||
|
||||
private void runCommand(Command command) throws Exception {
|
||||
injectReflectively(RegistryToolComponent.class, component, command);
|
||||
if (metricWriter == null && uploadMetrics) {
|
||||
try {
|
||||
metricWriter = component.metricWriter();
|
||||
} catch (Exception e) {
|
||||
System.err.format("Failed to get metricWriter. Got error:\n%s\n\n", e);
|
||||
uploadMetrics = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (command instanceof CommandWithConnection) {
|
||||
((CommandWithConnection) command).setConnection(getConnection());
|
||||
|
@ -272,25 +216,6 @@ final class RegistryCli implements AutoCloseable, CommandRunner {
|
|||
command.run();
|
||||
}
|
||||
|
||||
private void exportMetrics() {
|
||||
if (metricWriter == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
for (Metric<?> metric : MetricRegistryImpl.getDefault().getRegisteredMetrics()) {
|
||||
for (MetricPoint<?> point : metric.getTimestampedValues()) {
|
||||
metricWriter.write(point);
|
||||
}
|
||||
}
|
||||
metricWriter.flush();
|
||||
} catch (IOException e) {
|
||||
System.err.format("Failed to export metrics. Got error:\n%s\n\n", e);
|
||||
System.err.println("Maybe you need to login? Try calling:");
|
||||
System.err.println(" gcloud auth application-default login");
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void setEnvironment(RegistryToolEnvironment environment) {
|
||||
this.environment = environment;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue