From: Michael Tremer Date: Thu, 22 Feb 2024 19:09:08 +0000 (+0000) Subject: nopaste: Correctly count views X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5482e5f2e43986ce4e018b3246e95716caae3656;p=ipfire.org.git nopaste: Correctly count views Signed-off-by: Michael Tremer --- diff --git a/src/backend/nopaste.py b/src/backend/nopaste.py index b5a81e70..a4b964e2 100644 --- a/src/backend/nopaste.py +++ b/src/backend/nopaste.py @@ -129,10 +129,6 @@ class Nopaste(Object): if res: return bytes(res.content) - def _update_lastseen(self, uuid): - self.db.execute("UPDATE nopaste SET time_lastseen = NOW(), views = views + 1 \ - WHERE uuid = %s", uuid) - def cleanup(self): """ Removes all expired pastes and removes any unneeded blobs @@ -245,6 +241,23 @@ class Paste(Object): def account(self): return None + # Viewed? + + def viewed(self): + """ + Call this when this paste has been viewed/downloaded/etc. + """ + self.db.execute(""" + UPDATE + nopaste + SET + last_accessed_at = CURRENT_TIMESTAMP, + views = views + 1 + WHERE + id = %s + """, self.id, + ) + class Service(tornado.tcpserver.TCPServer): def __init__(self, config, **kwargs): diff --git a/src/web/nopaste.py b/src/web/nopaste.py index 4791e9b9..36b35675 100644 --- a/src/web/nopaste.py +++ b/src/web/nopaste.py @@ -64,9 +64,13 @@ class CreateHandler(base.AnalyticsMixin, base.BaseHandler): class RawHandler(base.AnalyticsMixin, base.BaseHandler): def get(self, uid): - entry = self.backend.nopaste.get(uid) - if not entry: - raise tornado.web.HTTPError(404) + with self.db.transaction(): + entry = self.backend.nopaste.get(uid) + if not entry: + raise tornado.web.HTTPError(404) + + # This has received a view + entry.viewed() # Set the filename self.set_header("Content-Disposition", "inline; filename=\"%s\"" % entry.subject) @@ -84,9 +88,13 @@ class RawHandler(base.AnalyticsMixin, base.BaseHandler): class ViewHandler(base.AnalyticsMixin, base.BaseHandler): def get(self, uid): - entry = self.backend.nopaste.get(uid) - if not entry: - raise tornado.web.HTTPError(404) + with self.db.transaction(): + entry = self.backend.nopaste.get(uid) + if not entry: + raise tornado.web.HTTPError(404) + + # This has received a view + entry.viewed() # Fetch the content if the output should be displayed if entry.mimetype.startswith("text/"):