aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransport.java
diff options
context:
space:
mode:
authorGravatar Klaus Aehlig <aehlig@google.com>2017-05-11 11:24:09 -0400
committerGravatar Kristina Chodorow <kchodorow@google.com>2017-05-11 14:41:14 -0400
commit1d287fc8582a693fe1b2b673663ab9952417e87c (patch)
tree01a12512962f66eee1773fceeedaf9c379cba517 /src/main/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransport.java
parent34195c5caa1522a3d8452f7ab96ab81760917f6b (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.java69
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());
+ }
+}