[reclient] Add cred cache status as a metrics label

This will help analyze startup metrics

Bug: b/294945709
Change-Id: Ia397dbebef7cc30b49c614dda51e56f482b6145b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4847325
Commit-Queue: Ben Segall <bentekkie@google.com>
Auto-Submit: Ben Segall <bentekkie@google.com>
Reviewed-by: Junji Watanabe <jwata@google.com>
diff --git a/reclient_helper.py b/reclient_helper.py
index 05fdc3b..0e38776 100644
--- a/reclient_helper.py
+++ b/reclient_helper.py
@@ -94,6 +94,26 @@
     return os.path.join(tmp_dir, 'cache')
 
 
+def auth_cache_status():
+    cred_file = os.path.join(os.environ["RBE_cache_dir"], "reproxy.creds")
+    if not os.path.isfile(cred_file):
+        return "missing", "UNSPECIFIED"
+    try:
+        with open(cred_file) as f:
+            status = "valid"
+            mechanism = "UNSPECIFIED"
+            for line in f.readlines():
+                if "seconds:" in line:
+                    exp = int(line.strip()[len("seconds:"):].strip())
+                    if exp < (time.time() + 5 * 60):
+                        status = "expired"
+                elif "mechanism:" in line:
+                    mechanism = line.strip()[len("mechanism:"):].strip()
+            return status, mechanism
+    except OSError:
+        return "missing", "UNSPECIFIED"
+
+
 def set_reproxy_metrics_flags(tool):
     """Helper to setup metrics collection flags for reproxy.
 
@@ -109,7 +129,11 @@
         os.environ.setdefault("RBE_invocation_id", autoninja_id)
     os.environ.setdefault("RBE_metrics_project", "chromium-reclient-metrics")
     os.environ.setdefault("RBE_metrics_table", "rbe_metrics.builds")
-    os.environ.setdefault("RBE_metrics_labels", "source=developer,tool=" + tool)
+    labels = "source=developer,tool=" + tool
+    auth_status, auth_mechanism = auth_cache_status()
+    labels += ",creds_cache_status=" + auth_status
+    labels += ",creds_cache_mechanism=" + auth_mechanism
+    os.environ.setdefault("RBE_metrics_labels", labels)
     os.environ.setdefault("RBE_metrics_prefix", "go.chromium.org")