From 721d24e9b067e3bdb3922b7992c030fbccc05b41 Mon Sep 17 00:00:00 2001
From: Jean-Paul Calderone <exarkun@twistedmatrix.com>
Date: Mon, 6 Dec 2021 14:33:03 -0500
Subject: [PATCH] use observe_spending_successes

---
 src/_zkapauthorizer/_storage_server.py | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/_zkapauthorizer/_storage_server.py b/src/_zkapauthorizer/_storage_server.py
index e081a02..7d72edc 100644
--- a/src/_zkapauthorizer/_storage_server.py
+++ b/src/_zkapauthorizer/_storage_server.py
@@ -160,6 +160,10 @@ def observe_spending_successes(metric, observations):
     # type: (Histogram, Iterable[Tuple[int, int]]) -> None
     """
     Put some spending observations into a Histogram.
+
+    :param observations: The first element of each tuple is the size of a
+        share for which spending ocurred.  The second element of each tuple is
+        the number of passes spent on that share.
     """
     # After https://github.com/prometheus/client_python/pull/734 we can get
     # rid of the inner loop.
@@ -307,9 +311,16 @@ class ZKAPAuthorizerStorageServer(Referenceable):
             passes,
             self._signing_key,
         )
-        # xxx write a comment
-        for _ in range(len(validation.valid)):
-            self._metric_spending_successes.observe(allocated_size)
+        observe_spending_successes(
+            self._metric_spending_successes,
+            # All immutable shares are the same size so the metrics system can
+            # observe a single event for that size and the total number of
+            # spent passes.
+            #
+            # XXX Some shares may exist already so those passes aren't
+            # necessarily spent...
+            [(allocated_size, len(validation.valid))],
+        )
 
         # Note: The *allocate_buckets* protocol allows for some shares to
         # already exist on the server.  When this is the case, the cost of the
-- 
GitLab