diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamerModule.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamerModule.java | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamerModule.java b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamerModule.java new file mode 100644 index 0000000000..b405c79b38 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamerModule.java @@ -0,0 +1,79 @@ +// Copyright 2016 The Bazel 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 com.google.devtools.build.lib.runtime; + +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; +import static com.google.devtools.build.lib.buildeventstream.transports.BuildEventTransportFactory.createFromOptions; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.devtools.build.lib.buildeventstream.BuildEventTransport; +import com.google.devtools.build.lib.buildeventstream.transports.BuildEventStreamOptions; +import com.google.devtools.build.lib.util.AbruptExitException; +import com.google.devtools.build.lib.util.ExitCode; +import com.google.devtools.common.options.OptionsBase; +import com.google.devtools.common.options.OptionsProvider; +import java.io.IOException; + + +/** Module responsible for configuring BuildEventStreamer and transports. */ +public class BuildEventStreamerModule extends BlazeModule { + + private CommandEnvironment commandEnvironment; + + @Override + public Iterable<Class<? extends OptionsBase>> getCommandOptions(Command command) { + return ImmutableList.<Class<? extends OptionsBase>>of(BuildEventStreamOptions.class); + } + + @Override + public void beforeCommand(Command command, CommandEnvironment commandEnvironment) + throws AbruptExitException { + this.commandEnvironment = commandEnvironment; + } + + @Override + public void handleOptions(OptionsProvider optionsProvider) { + checkState(commandEnvironment != null, "Methods called out of order"); + Optional<BuildEventStreamer> streamer = + tryCreateStreamer(optionsProvider, commandEnvironment.getBlazeModuleEnvironment()); + if (streamer.isPresent()) { + commandEnvironment.getReporter().addHandler(streamer.get()); + commandEnvironment.getEventBus().register(streamer.get()); + } + } + + @VisibleForTesting + Optional<BuildEventStreamer> tryCreateStreamer( + OptionsProvider optionsProvider, ModuleEnvironment moduleEnvironment) { + try { + BuildEventStreamOptions besOptions = + checkNotNull( + optionsProvider.getOptions(BuildEventStreamOptions.class), + "Could not get BuildEventStreamOptions"); + ImmutableSet<BuildEventTransport> buildEventTransports = createFromOptions(besOptions); + if (!buildEventTransports.isEmpty()) { + BuildEventStreamer streamer = new BuildEventStreamer(buildEventTransports); + return Optional.of(streamer); + } + } catch (IOException e) { + moduleEnvironment.exit(new AbruptExitException(ExitCode.LOCAL_ENVIRONMENTAL_ERROR, e)); + } + return Optional.absent(); + } +} |