19744: Add --enable/disable-usage-report
[arvados.git] / sdk / cwl / arvados_cwl / arvcontainer.py
index 534f940b03f46298f41afbe775bec3cdfa8475eb..d4b1e0050dda2a35a2e007bf47bff1c4d4fd1c3f 100644 (file)
@@ -28,6 +28,7 @@ from cwltool.job import JobBase
 import arvados.collection
 
 import crunchstat_summary.summarizer
+import crunchstat_summary.reader
 
 from .arvdocker import arv_docker_get_image
 from . import done
@@ -533,14 +534,26 @@ class ArvadosContainer(JobBase):
                 body={"container_request": {"properties": properties}}
             ).execute(num_retries=self.arvrunner.num_retries)
 
-            if logc is not None:
-                summerizer = crunchstat_summary.summarizer.NewSummarizer(self.uuid)
-                summerizer.run()
-                with logc.open("metrics_report.txt", "wt") as mr:
-                    mr.write(summerizer.text_report())
-                with logc.open("metrics_report.html", "wt") as mr:
-                    mr.write(summerizer.html_report())
-                logc.save()
+            if logc is not None and self.job_runtime.enable_usage_report is not False:
+                try:
+                    summarizer = crunchstat_summary.summarizer.ContainerRequestSummarizer(
+                        record,
+                        collection_object=logc,
+                        label=self.name,
+                        arv=self.arvrunner.api)
+                    summarizer.run()
+                    with logc.open("usage_report.html", "wt") as mr:
+                        mr.write(summarizer.html_report())
+                    logc.save()
+
+                    # Post warnings about nodes that are under-utilized.
+                    for rc in summarizer._recommend_gen(lambda x: x):
+                        logger.warning(x)
+
+                except Exception as e:
+                    logger.warning("%s unable to generate resource usage report",
+                                 self.arvrunner.label(self),
+                                 exc_info=(e if self.arvrunner.debug else False))
 
         except WorkflowException as e:
             # Only include a stack trace if in debug mode.
@@ -719,6 +732,12 @@ class RunnerContainer(Runner):
         if runtimeContext.prefer_cached_downloads:
             command.append("--prefer-cached-downloads")
 
+        if runtimeContext.enable_usage_report is True:
+            command.append("--enable-usage-report")
+
+        if runtimeContext.enable_usage_report is False:
+            command.append("--disable-usage-report")
+
         if self.fast_parser:
             command.append("--fast-parser")