scripts: sysmon: breakdown phosphorus subcommands

BUG=b:255782067
TEST=Ran the unit test.

Change-Id: I5df4391694dd8fd45fbfbd0dc0829458edc2d0c5
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4249802
Auto-Submit: Congbin Guo <guocb@chromium.org>
Reviewed-by: Sergey Fetisov <sfetisov@google.com>
Tested-by: Congbin Guo <guocb@chromium.org>
Commit-Queue: Sergey Fetisov <sfetisov@google.com>
diff --git a/scripts/sysmon/proc_metrics.py b/scripts/sysmon/proc_metrics.py
index 34d231c..eebf765 100644
--- a/scripts/sysmon/proc_metrics.py
+++ b/scripts/sysmon/proc_metrics.py
@@ -115,11 +115,45 @@
                 "lxc-start", test_func=partial(_is_process_name, "lxc-start")
             ),
             _ProcessMetric(
-                "podman-pull", test_func=partial(_is_podman, "pull")
+                "podman-pull",
+                test_func=partial(_is_cmd_with_subcmd, "podman", "pull"),
             ),
-            _ProcessMetric("podman-run", test_func=partial(_is_podman, "run")),
             _ProcessMetric(
-                "phosphorus", test_func=partial(_is_process_name, "phosphorus")
+                "podman-run",
+                test_func=partial(_is_cmd_with_subcmd, "podman", "run"),
+            ),
+            _ProcessMetric(
+                "phosphorus-fetch-crashes",
+                test_func=partial(
+                    _is_cmd_with_subcmd, "phosphorus", "fetch-crashes"
+                ),
+            ),
+            _ProcessMetric(
+                "phosphorus-prejob",
+                test_func=partial(_is_cmd_with_subcmd, "phosphorus", "prejob"),
+            ),
+            _ProcessMetric(
+                "phosphorus-run-test",
+                test_func=partial(
+                    _is_cmd_with_subcmd, "phosphorus", "run-test"
+                ),
+            ),
+            _ProcessMetric(
+                "phosphorus-upload-to-gs",
+                test_func=partial(
+                    _is_cmd_with_subcmd, "phosphorus", "upload-to-gs"
+                ),
+            ),
+            _ProcessMetric(
+                "phosphorus-upload-to-tko",
+                test_func=partial(
+                    _is_cmd_with_subcmd, "phosphorus", "upload-to-tko"
+                ),
+            ),
+            # Catch all phosphorus subcommands we missed.
+            _ProcessMetric(
+                "phosphorus-other",
+                test_func=partial(_is_process_name, "phosphorus"),
             ),
             _ProcessMetric("recipe", test_func=_is_recipe),
             _ProcessMetric("sshd", test_func=partial(_is_process_name, "sshd")),
@@ -386,16 +420,13 @@
     )
 
 
-def _is_podman(subcmd, proc):
-    """Return whiter proc is a podman process.
+def _is_cmd_with_subcmd(cmd, subcmd, proc):
+    """Return whiter proc is a subcommand of a command process.
 
-    A podman pull process is like
-    'podman pull image:tag'
-    A podman run process is like
-    'podman run --option ... image:tag'
+    For example: 'podman pull image:tag' or `phosphorus run-test ...`.
     """
     cmdline = proc.cmdline()
-    return proc.name() == "podman" and len(cmdline) > 1 and cmdline[1] == subcmd
+    return proc.name() == cmd and len(cmdline) > 1 and cmdline[1] == subcmd
 
 
 class _CPUTimes(object):