aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-07-30 10:14:02 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-30 10:16:10 -0700
commit825b6105b146046045860dca91660cd45cc854ab (patch)
tree82fb7c26408caabc6e92c5f9eec700fcdcf0fd2b /src/tools
parentfe19ddc2591fec47d687b182dd75d847000160db (diff)
Expanding execution log parser to filter by runner type.
RELNOTES: Execution Log Parser can now, when printing it out, filter the log by runner type PiperOrigin-RevId: 206602183
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/execlog/src/main/java/com/google/devtools/build/execlog/ExecLogParser.java38
-rw-r--r--src/tools/execlog/src/main/java/com/google/devtools/build/execlog/ParserOptions.java10
-rw-r--r--src/tools/execlog/test/main/java/com/google/devtools/build/execlog/ExecLogParserTest.java141
3 files changed, 185 insertions, 4 deletions
diff --git a/src/tools/execlog/src/main/java/com/google/devtools/build/execlog/ExecLogParser.java b/src/tools/execlog/src/main/java/com/google/devtools/build/execlog/ExecLogParser.java
index 238a30be49..70c583a0cd 100644
--- a/src/tools/execlog/src/main/java/com/google/devtools/build/execlog/ExecLogParser.java
+++ b/src/tools/execlog/src/main/java/com/google/devtools/build/execlog/ExecLogParser.java
@@ -15,8 +15,8 @@ package com.google.devtools.build.execlog;
import com.google.devtools.build.lib.exec.Protos.SpawnExec;
import com.google.devtools.common.options.OptionsParser;
-
import java.io.FileInputStream;
+import java.io.IOException;
import java.io.InputStream;
/**
@@ -26,15 +26,45 @@ final class ExecLogParser {
static final String DELIMITER = "\n---------------------------------------------------------\n";
+ final InputStream in;
+ final String restrictToRunner;
+
+ ExecLogParser(InputStream in, String restrictToRunner) {
+ this.in = in;
+ this.restrictToRunner = restrictToRunner;
+ }
+
+ public SpawnExec getNext() throws IOException {
+ SpawnExec ex;
+ // Find the next record whose runner matches
+ do {
+ if (in.available() <= 0) {
+ // End of file
+ return null;
+ }
+ ex = SpawnExec.parseDelimitedFrom(in);
+ } while (restrictToRunner != null && !restrictToRunner.equals(ex.getRunner()));
+ return ex;
+ }
+
public static void main(String[] args) throws Exception {
OptionsParser op = OptionsParser.newOptionsParser(ParserOptions.class);
op.parseAndExitUponError(args);
+
ParserOptions options = op.getOptions(ParserOptions.class);
- InputStream in = new FileInputStream(options.logPath);
- while (in.available() > 0) {
- SpawnExec ex = SpawnExec.parseDelimitedFrom(in);
+ if (options.logPath == null) {
+ System.err.println("--log_path needs to be specified.");
+ System.exit(1);
+ }
+
+ ExecLogParser parser =
+ new ExecLogParser(new FileInputStream(options.logPath), options.restrictToRunner);
+
+ SpawnExec ex;
+ while ((ex = parser.getNext()) != null) {
System.out.println(ex);
System.out.println(DELIMITER);
}
}
}
+
diff --git a/src/tools/execlog/src/main/java/com/google/devtools/build/execlog/ParserOptions.java b/src/tools/execlog/src/main/java/com/google/devtools/build/execlog/ParserOptions.java
index 326cb43624..f2629bbd27 100644
--- a/src/tools/execlog/src/main/java/com/google/devtools/build/execlog/ParserOptions.java
+++ b/src/tools/execlog/src/main/java/com/google/devtools/build/execlog/ParserOptions.java
@@ -29,5 +29,15 @@ public class ParserOptions extends OptionsBase {
effectTags = {OptionEffectTag.UNKNOWN},
help = "Location of the log file to parse."
)
+
public String logPath;
+
+ @Option(
+ name = "restrict_to_runner",
+ defaultValue = "null",
+ category = "logging",
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ help = "If set, only output the executions that used the given runner.")
+ public String restrictToRunner;
}
diff --git a/src/tools/execlog/test/main/java/com/google/devtools/build/execlog/ExecLogParserTest.java b/src/tools/execlog/test/main/java/com/google/devtools/build/execlog/ExecLogParserTest.java
new file mode 100644
index 0000000000..51332c7434
--- /dev/null
+++ b/src/tools/execlog/test/main/java/com/google/devtools/build/execlog/ExecLogParserTest.java
@@ -0,0 +1,141 @@
+// Copyright 2018 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.execlog;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.devtools.build.lib.exec.Protos.SpawnExec;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/** Testing ExecLogParser */
+@RunWith(JUnit4.class)
+public final class ExecLogParserTest {
+
+ private InputStream toInputStream(List<SpawnExec> list) throws Exception {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ for (SpawnExec spawnExec : list) {
+ spawnExec.writeDelimitedTo(bos);
+ }
+
+ return new ByteArrayInputStream(bos.toByteArray());
+ }
+
+ @Test
+ public void getNextEmpty() throws Exception {
+ ExecLogParser p = new ExecLogParser(toInputStream(new ArrayList<SpawnExec>()), null);
+ assertThat(p.getNext()).isNull();
+ }
+
+ @Test
+ public void getNextEmptyWithRunner() throws Exception {
+ ExecLogParser p = new ExecLogParser(toInputStream(new ArrayList<SpawnExec>()), "local");
+ assertThat(p.getNext()).isNull();
+ }
+
+ @Test
+ public void getNextSingleSpawn() throws Exception {
+ SpawnExec e = SpawnExec.newBuilder().setRunner("runs").addCommandArgs("command").build();
+ ExecLogParser p = new ExecLogParser(toInputStream(Arrays.asList(e)), null);
+ assertThat(p.getNext()).isEqualTo(e);
+ assertThat(p.getNext()).isNull();
+ }
+
+ @Test
+ public void getNextSingleSpawnRunnerMatch() throws Exception {
+ SpawnExec e = SpawnExec.newBuilder().setRunner("runs").addCommandArgs("command").build();
+ ExecLogParser p = new ExecLogParser(toInputStream(Arrays.asList(e)), "runs");
+ assertThat(p.getNext()).isEqualTo(e);
+ assertThat(p.getNext()).isNull();
+ }
+
+ @Test
+ public void getNextSingleSpawnRunnerNoMatch() throws Exception {
+ SpawnExec e = SpawnExec.newBuilder().setRunner("runs").addCommandArgs("command").build();
+ ExecLogParser p = new ExecLogParser(toInputStream(Arrays.asList(e)), "run");
+ assertThat(p.getNext()).isNull();
+ }
+
+ @Test
+ public void getNextManyMatches() throws Exception {
+ SpawnExec e = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com1").build();
+ SpawnExec e2 = SpawnExec.newBuilder().setRunner("r").addCommandArgs("com2").build();
+ SpawnExec e3 = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com3").build();
+ SpawnExec e4 = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com4").build();
+ SpawnExec e5 = SpawnExec.newBuilder().setRunner("ru").addCommandArgs("com5").build();
+ ExecLogParser p = new ExecLogParser(toInputStream(Arrays.asList(e, e2, e3, e4, e5)), "run1");
+ assertThat(p.getNext()).isEqualTo(e);
+ assertThat(p.getNext()).isEqualTo(e3);
+ assertThat(p.getNext()).isEqualTo(e4);
+ assertThat(p.getNext()).isNull();
+ }
+
+ @Test
+ public void getNextManyMatches1() throws Exception {
+ SpawnExec e = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com1").build();
+ SpawnExec e2 = SpawnExec.newBuilder().setRunner("r").addCommandArgs("com2").build();
+ SpawnExec e3 = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com3").build();
+ SpawnExec e4 = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com4").build();
+ SpawnExec e5 = SpawnExec.newBuilder().setRunner("ru").addCommandArgs("com5").build();
+ ExecLogParser p = new ExecLogParser(toInputStream(Arrays.asList(e, e2, e3, e4, e5)), "r");
+ assertThat(p.getNext()).isEqualTo(e2);
+ assertThat(p.getNext()).isNull();
+ }
+
+ @Test
+ public void getNextManyMatches2() throws Exception {
+ SpawnExec e = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com1").build();
+ SpawnExec e2 = SpawnExec.newBuilder().setRunner("r").addCommandArgs("com2").build();
+ SpawnExec e3 = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com3").build();
+ SpawnExec e4 = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com4").build();
+ SpawnExec e5 = SpawnExec.newBuilder().setRunner("ru").addCommandArgs("com5").build();
+ ExecLogParser p = new ExecLogParser(toInputStream(Arrays.asList(e, e2, e3, e4, e5)), "ru");
+ assertThat(p.getNext()).isEqualTo(e5);
+ assertThat(p.getNext()).isNull();
+ }
+
+ @Test
+ public void getNextManyButNoMatch() throws Exception {
+ SpawnExec e = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com1").build();
+ SpawnExec e2 = SpawnExec.newBuilder().setRunner("r").addCommandArgs("com2").build();
+ SpawnExec e3 = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com3").build();
+ SpawnExec e4 = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com4").build();
+ SpawnExec e5 = SpawnExec.newBuilder().setRunner("ru").addCommandArgs("com5").build();
+ ExecLogParser p = new ExecLogParser(toInputStream(Arrays.asList(e, e2, e3, e4, e5)), "none");
+ assertThat(p.getNext()).isNull();
+ }
+
+ @Test
+ public void getNextManyNoMatcher() throws Exception {
+ SpawnExec e = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com1").build();
+ SpawnExec e2 = SpawnExec.newBuilder().setRunner("r").addCommandArgs("com2").build();
+ SpawnExec e3 = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com3").build();
+ SpawnExec e4 = SpawnExec.newBuilder().setRunner("run1").addCommandArgs("com4").build();
+ SpawnExec e5 = SpawnExec.newBuilder().setRunner("ru").addCommandArgs("com5").build();
+ ExecLogParser p = new ExecLogParser(toInputStream(Arrays.asList(e, e2, e3, e4, e5)), null);
+ assertThat(p.getNext()).isEqualTo(e);
+ assertThat(p.getNext()).isEqualTo(e2);
+ assertThat(p.getNext()).isEqualTo(e3);
+ assertThat(p.getNext()).isEqualTo(e4);
+ assertThat(p.getNext()).isEqualTo(e5);
+ assertThat(p.getNext()).isNull();
+ }
+}