Add goma log handling to the Sysroot.InstallPackages endpoint.

goma_lib.LogsArchiver.Archive was modified to return a namedtuple
instead of a list of strings.

BUG=chromium:1013499
TEST=run_tests

Change-Id: I7d52ff09be9f27a9db3063d1592d16125d64fe57
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2008388
Reviewed-by: Alex Klein <saklein@chromium.org>
Tested-by: Michael Mortensen <mmortensen@google.com>
Commit-Queue: Michael Mortensen <mmortensen@google.com>
diff --git a/api/controller/sysroot.py b/api/controller/sysroot.py
index 6fe5bee..6d79fae 100644
--- a/api/controller/sysroot.py
+++ b/api/controller/sysroot.py
@@ -15,6 +15,7 @@
 from chromite.lib import build_target_util
 from chromite.lib import cros_build_lib
 from chromite.lib import cros_logging as logging
+from chromite.lib import goma_lib
 from chromite.lib import portage_util
 from chromite.lib import sysroot_lib
 from chromite.service import sysroot
@@ -164,6 +165,21 @@
 
     return controller.RETURN_CODE_UNSUCCESSFUL_RESPONSE_AVAILABLE
 
+  # Copy goma logs to specified directory if there is a goma_config and
+  # it contains a log_dir to store artifacts.
+  if input_proto.goma_config.log_dir.dir:
+    archiver = goma_lib.LogsArchiver(
+        input_proto.goma_config.goma_dir,
+        dest_dir=input_proto.goma_config.log_dir.dir,
+        stats_file=input_proto.goma_config.stats_file,
+        counterz_file=input_proto.goma_config.counterz_file)
+    archiver_tuple = archiver.Archive()
+    if archiver_tuple.stats_file:
+      output_proto.goma_artifacts.stats_file = archiver_tuple.stats_file
+    if archiver_tuple.counterz_file:
+      output_proto.goma_artifacts.stats_file = archiver_tuple.counterz_file
+    output_proto.goma_artifacts.log_files[:] = archiver_tuple.log_files
+
   # Read metric events log and pipe them into output_proto.events.
   deserialize_metrics_log(output_proto.events, prefix=build_target.name)