diff options
author | 2017-05-11 11:24:09 -0400 | |
---|---|---|
committer | 2017-05-11 14:41:14 -0400 | |
commit | 1d287fc8582a693fe1b2b673663ab9952417e87c (patch) | |
tree | 01a12512962f66eee1773fceeedaf9c379cba517 /src/main/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransport.java | |
parent | 34195c5caa1522a3d8452f7ab96ab81760917f6b (diff) |
BEP: add a JSON transport
As JSON is a widely supported format, also add a transport writing
the build events in JSON format. This will allow more tools to get
status reports about builds.
Change-Id: I7e5901cc65d927b93c8fc9bcd2d2baa7e707f09e
PiperOrigin-RevId: 155750964
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransport.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransport.java | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransport.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransport.java new file mode 100644 index 0000000000..469319f6bb --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransport.java @@ -0,0 +1,69 @@ +// Copyright 2017 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.buildeventstream.transports; + +import com.google.devtools.build.lib.buildeventstream.ArtifactGroupNamer; +import com.google.devtools.build.lib.buildeventstream.BuildEvent; +import com.google.devtools.build.lib.buildeventstream.BuildEventConverters; +import com.google.devtools.build.lib.buildeventstream.BuildEventTransport; +import com.google.devtools.build.lib.buildeventstream.PathConverter; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.util.JsonFormat; +import java.io.IOException; + +/** + * A simple {@link BuildEventTransport} that writes the JSON representation of the protocol-buffer + * representation of the events to a file. + */ +public final class JsonFormatFileTransport extends FileTransport { + + private final PathConverter pathConverter; + + JsonFormatFileTransport(String path, PathConverter pathConverter) throws IOException { + super(path); + this.pathConverter = pathConverter; + } + + @Override + public String name() { + return this.getClass().getSimpleName(); + } + + @Override + public synchronized void sendBuildEvent(BuildEvent event, final ArtifactGroupNamer namer) { + BuildEventConverters converters = + new BuildEventConverters() { + @Override + public PathConverter pathConverter() { + return pathConverter; + } + + @Override + public ArtifactGroupNamer artifactGroupNamer() { + return namer; + } + }; + String protoJsonRepresentation; + try { + protoJsonRepresentation = JsonFormat.printer().print(event.asStreamProto(converters)) + "\n"; + } catch (InvalidProtocolBufferException e) { + // We don't expect any unknown Any fields in our protocol buffer. Nevertheless, handle + // the exception gracefully and, at least, return valid JSON with an id field. + protoJsonRepresentation = + "{\"id\" : \"unknown\", \"exception\" : \"InvlaidProtocolBufferException\"}\n"; + } + writeData(protoJsonRepresentation.getBytes()); + } +} |