Skip to content

Commit 8b711fb

Browse files
authored
Create a metric for counting new users. (#827)
* Create a metric for counting new users. * Lazily initialize the meter and counter creation. * Avoid global call. * Change the strategy to acquire the new user creation metric. * Reset the ContextVar on each request.
1 parent 4082742 commit 8b711fb

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

deploy/clowdapp.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1256,7 +1256,7 @@ parameters:
12561256
value: "/api/pulp/assets/"
12571257
- name: PULP_MIDDLEWARE
12581258
description: List of Middleware
1259-
value: "@merge ['pulp_service.app.middleware.ActiveConnectionsMetricMiddleware', 'pulp_service.app.middleware.ProfilerMiddleware', 'pulp_service.app.middleware.RhEdgeHostMiddleware', 'pulp_service.app.middleware.RHSamlAuthHeaderMiddleware']"
1259+
value: "@merge ['pulp_service.app.middleware.RequestPathMiddleware', 'pulp_service.app.middleware.ActiveConnectionsMetricMiddleware', 'pulp_service.app.middleware.ProfilerMiddleware', 'pulp_service.app.middleware.RhEdgeHostMiddleware', 'pulp_service.app.middleware.RHSamlAuthHeaderMiddleware']"
12601260
- name: PULP_PYPI_API_HOSTNAME
12611261
description: The hostname used to form the distribution's `base_url`.
12621262
value: "http://pulp-content:8000"

pulp_service/pulp_service/app/middleware.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
repository_name_var = ContextVar('repository_name')
2525
x_quay_auth_var = ContextVar('x_quay_auth')
2626
x_task_diagnostics_var = ContextVar('x_profile_task')
27+
request_path_var = ContextVar('request_path', default=None)
2728

2829

2930
class ProfilerMiddleware(MiddlewareMixin):
@@ -99,6 +100,24 @@ def process_view(self, request, *args, **kwargs):
99100
_logger.warning("Failed to authenticate user from RH Identity header")
100101

101102

103+
class RequestPathMiddleware(MiddlewareMixin):
104+
"""
105+
Middleware to store the request path in a context variable.
106+
107+
This allows signals to access the request path when processing model changes.
108+
"""
109+
110+
def process_view(self, request, *args, **kwargs):
111+
request_path_var.set(request.get_full_path())
112+
113+
def process_response(self, request, response):
114+
request_path_var.set(None)
115+
return response
116+
117+
def process_exception(self, request, exception):
118+
request_path_var.set(None)
119+
120+
102121
class ActiveConnectionsMetricMiddleware(MiddlewareMixin):
103122
"""
104123
Middleware to track the number of active/concurrent HTTP connections to the API.

pulp_service/pulp_service/app/signals.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import logging
2+
3+
from django.conf import settings
14
from django.db.models.signals import post_save
25
from django.dispatch import receiver
36
from django.contrib.auth import get_user_model
@@ -7,6 +10,21 @@
710
from pulp_service.app.models import DomainOrg
811

912

13+
_logger = logging.getLogger(__name__)
14+
15+
16+
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
17+
def log_new_user(sender, instance, created, **kwargs):
18+
"""Log when a new user is created, including the route they first accessed."""
19+
if created:
20+
from pulp_service.app.middleware import request_path_var
21+
22+
request_path = request_path_var.get(None)
23+
_logger.info(
24+
f"New user created: username={instance.username}, route={request_path or 'unknown'}"
25+
)
26+
27+
1028
@receiver(post_save, sender=Domain)
1129
def post_create_domain(sender, **kwargs):
1230
if kwargs['created']:

0 commit comments

Comments
 (0)