From 22acc12ecaab004cbbea9f37abf4d156db366337 Mon Sep 17 00:00:00 2001 From: Jean-Paul Calderone <exarkun@twistedmatrix.com> Date: Thu, 28 May 2020 09:52:38 -0400 Subject: [PATCH] Add logging to spending-related activity --- src/_zkapauthorizer/eliot.py | 26 +++++++++++++++++++++++++- src/_zkapauthorizer/spending.py | 13 +++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/_zkapauthorizer/eliot.py b/src/_zkapauthorizer/eliot.py index da3960d..a2e99d8 100644 --- a/src/_zkapauthorizer/eliot.py +++ b/src/_zkapauthorizer/eliot.py @@ -32,6 +32,12 @@ PRIVACYPASS_MESSAGE = Field( u"The PrivacyPass request-binding data associated with a pass.", ) +INVALID_REASON = Field( + u"reason", + unicode, + u"The reason given by the server for rejecting a pass as invalid.", +) + PASS_COUNT = Field( u"count", int, @@ -41,7 +47,25 @@ PASS_COUNT = Field( GET_PASSES = MessageType( u"zkapauthorizer:get-passes", [PRIVACYPASS_MESSAGE, PASS_COUNT], - u"Passes are being spent.", + u"An attempt to spend passes is beginning.", +) + +SPENT_PASSES = MessageType( + u"zkapauthorizer:spent-passes", + [PASS_COUNT], + u"An attempt to spend passes has succeeded.", +) + +INVALID_PASSES = MessageType( + u"zkapauthorizer:invalid-passes", + [INVALID_REASON, PASS_COUNT], + u"An attempt to spend passes has found some to be invalid.", +) + +RESET_PASSES = MessageType( + u"zkapauthorizer:reset-passes", + [PRIVACYPASS_MESSAGE, PASS_COUNT], + u"Some passes involved in a failed spending attempt have not definitely been spent and are being returned for future use.", ) SIGNATURE_CHECK_FAILED = MessageType( diff --git a/src/_zkapauthorizer/spending.py b/src/_zkapauthorizer/spending.py index 78fd726..20f0f77 100644 --- a/src/_zkapauthorizer/spending.py +++ b/src/_zkapauthorizer/spending.py @@ -26,6 +26,9 @@ import attr from .eliot import ( GET_PASSES, + SPENT_PASSES, + INVALID_PASSES, + RESET_PASSES, ) class IPassGroup(Interface): @@ -195,10 +198,20 @@ class SpendingController(object): return PassGroup(message, self, zip(unblinded_tokens, passes)) def _mark_spent(self, unblinded_tokens): + SPENT_PASSES.log( + count=len(unblinded_tokens), + ) self.discard_unblinded_tokens(unblinded_tokens) def _mark_invalid(self, reason, unblinded_tokens): + INVALID_PASSES.log( + reason=reason, + count=len(unblinded_tokens), + ) self.invalidate_unblinded_tokens(reason, unblinded_tokens) def _reset(self, unblinded_tokens): + RESET_PASSES.log( + count=len(unblinded_tokens), + ) self.reset_unblinded_tokens(unblinded_tokens) -- GitLab