build api metrics: ingest metrics from build_image

Set up required environment variables and deserialize metrics events log
into output proto for downstream ingestion by Recipes layer.

BUG=chromium:1000449
TEST=./run_tests

Change-Id: Id5e73f88bc00ff6b5ae28297fa20dec67b0ed816
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1853685
Tested-by: Will Bradley <wbbradley@chromium.org>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/image.py b/api/controller/image.py
index 6a2dcf0..6296599 100644
--- a/api/controller/image.py
+++ b/api/controller/image.py
@@ -16,10 +16,12 @@
 from chromite.api import faux
 from chromite.api import validate
 from chromite.api.gen.chromiumos import common_pb2
+from chromite.api.metrics import deserialize_metrics_log
 from chromite.lib import cros_build_lib
 from chromite.lib import constants
 from chromite.lib import image_lib
 from chromite.service import image
+from chromite.utils import metrics
 
 # The image.proto ImageType enum ids.
 _BASE_ID = common_pb2.BASE
@@ -56,6 +58,7 @@
 @faux.all_empty
 @validate.require('build_target.name')
 @validate.validation_complete
+@metrics.collect_metrics
 def Create(input_proto, output_proto, _config):
   """Build an image.
 
@@ -111,6 +114,9 @@
   new_image.type = vm_type
   new_image.build_target.name = board
 
+  # Read metric events log and pipe them into output_proto.events.
+  deserialize_metrics_log(output_proto.events, prefix=board)
+
 
 def _ParseImagesToCreate(to_build):
   """Helper function to parse the image types to build.