19744: Run summarizer at end of container
authorPeter Amstutz <peter.amstutz@curii.com>
Fri, 9 Feb 2024 22:56:28 +0000 (17:56 -0500)
committerPeter Amstutz <peter.amstutz@curii.com>
Fri, 9 Feb 2024 22:56:28 +0000 (17:56 -0500)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

build/build-dev-docker-jobs-image.sh
sdk/cwl/arvados_cwl/arvcontainer.py
sdk/cwl/setup.py
sdk/dev-jobs.dockerfile
tools/crunchstat-summary/crunchstat_summary/command.py

index b0990d0c49e6dd5e4335797ff0de193457671620..583b7a54f7e015d4d071c0b6c1042703c95327b6 100755 (executable)
@@ -30,7 +30,7 @@ fi
 context_dir="$(mktemp --directory --tmpdir dev-jobs.XXXXXXXX)"
 trap 'rm -rf "$context_dir"' EXIT INT TERM QUIT
 
-for src_dir in "$WORKSPACE/sdk/python" "${CWLTOOL:-}" "${CWL_UTILS:-}" "${SALAD:-}" "$WORKSPACE/sdk/cwl"; do
+for src_dir in "$WORKSPACE/sdk/python" "${CWLTOOL:-}" "${CWL_UTILS:-}" "${SALAD:-}" "$WORKSPACE/tools/crunchstat-summary" "$WORKSPACE/sdk/cwl"; do
     if [[ -z "$src_dir" ]]; then
         continue
     fi
index 584ca1713abfbcd74d3bd845f8bd8101ea283cd0..534f940b03f46298f41afbe775bec3cdfa8475eb 100644 (file)
@@ -27,6 +27,8 @@ from cwltool.job import JobBase
 
 import arvados.collection
 
+import crunchstat_summary.summarizer
+
 from .arvdocker import arv_docker_get_image
 from . import done
 from .runner import Runner, arvados_jobs_image, packed_workflow, trim_anonymous_location, remove_redundant_fields, make_builder
@@ -497,11 +499,14 @@ class ArvadosContainer(JobBase):
             else:
                 processStatus = "permanentFail"
 
-            if processStatus == "permanentFail" and record["log_uuid"]:
-                logc = arvados.collection.CollectionReader(record["log_uuid"],
-                                                           api_client=self.arvrunner.api,
-                                                           keep_client=self.arvrunner.keep_client,
-                                                           num_retries=self.arvrunner.num_retries)
+            logc = None
+            if record["log_uuid"]:
+                logc = arvados.collection.Collection(record["log_uuid"],
+                                                     api_client=self.arvrunner.api,
+                                                     keep_client=self.arvrunner.keep_client,
+                                                     num_retries=self.arvrunner.num_retries)
+
+            if processStatus == "permanentFail" and logc is not None:
                 label = self.arvrunner.label(self)
                 done.logtail(
                     logc, logger.error,
@@ -527,6 +532,16 @@ class ArvadosContainer(JobBase):
                 uuid=self.uuid,
                 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()
+
         except WorkflowException as e:
             # Only include a stack trace if in debug mode.
             # A stack trace may obfuscate more useful output about the workflow.
index 223af951596e3d47c3073c0b74733b3a549acc20..043b52cb814067f573423044a88d34b823f72d20 100644 (file)
@@ -39,6 +39,7 @@ setup(name='arvados-cwl-runner',
           'cwltool==3.1.20230601100705',
           'schema-salad==8.4.20230601112322',
           'arvados-python-client{}'.format(pysdk_dep),
+          'crunchstat-summary{}'.format(pysdk_dep),
           'ciso8601 >= 2.0.0',
           'networkx < 2.6',
           'msgpack==1.0.3',
index 0169b947066df7a8e37f2224c5c3e5f5548621f3..f66f670d815d1936d88ee079e842ebadf8094a0f 100644 (file)
@@ -24,7 +24,7 @@ RUN python3 -m pip install --no-cache-dir setuptools wheel
 # packages to install.
 COPY . /usr/local/src/
 # Run a-c-r afterward to check for a successful install.
-RUN python3 -m pip install --no-cache-dir /usr/local/src/* && arvados-cwl-runner --version
+RUN python3 -m pip install --no-cache-dir /usr/local/src/* && arvados-cwl-runner --version && crunchstat-summary --version
 
 RUN /usr/sbin/adduser --disabled-password \
       --gecos 'Crunch execution user' crunch && \
index ec7acb8083928f6f35f2af7835ee92f8a4a895dc..71eae519969bf1f34ec10b491c3885c1425596df 100644 (file)
@@ -9,6 +9,7 @@ import logging
 import sys
 
 from crunchstat_summary import logger, summarizer
+from crunchstat_summary._version import __version__
 
 
 class ArgumentParser(argparse.ArgumentParser):
@@ -46,6 +47,9 @@ class ArgumentParser(argparse.ArgumentParser):
         self.add_argument(
             '--verbose', '-v', action='count', default=0,
             help='Log more information (once for progress, twice for debug)')
+        self.add_argument('--version', action='version',
+                         version="%s %s" % (sys.argv[0], __version__),
+                         help='Print version and exit.')
 
 
 class UTF8Decode(object):