Skip to content

Commit c4fa5f7

Browse files
committed
fix: counted-usage with session-hour
1 parent cb5797b commit c4fa5f7

3 files changed

Lines changed: 23 additions & 10 deletions

File tree

api/metrics/serializers.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class PageviewInfoSerializer(ser.Serializer):
4646

4747

4848
class CountedAuthUsageSerializer(ser.Serializer):
49-
item_guid = ser.CharField(max_length=255, required=False)
49+
item_guid = ser.CharField(max_length=255, required=True)
5050
client_session_id = ser.CharField(max_length=255, required=False)
5151
provider_id = ser.CharField(max_length=255, required=False)
5252

@@ -73,12 +73,16 @@ def create(self, validated_data):
7373
pageview_info = PageviewInfo(**pageview_info_data)
7474
pageview_info_es8 = PageviewInfoEs8(**pageview_info_data)
7575
OsfCountedUsageRecord.record(
76-
item_osfid=validated_data.get('item_guid'),
77-
client_session_id=validated_data['session_id'],
76+
item_osfid=validated_data['item_guid'],
7877
action_labels=validated_data.get('action_labels'),
78+
provider_id=validated_data.get('provider_id'),
7979
pageview_info=pageview_info_es8,
80+
# used to create a COUNTER session-hour id, not stored:
81+
client_session_id=validated_data.get('client_session_id'),
82+
user_id=self.context.get('user_id'),
83+
request_host=self.context.get('request_host'),
84+
request_useragent=self.context.get('request_useragent'),
8085
)
81-
8286
return CountedAuthUsage.record(
8387
platform_iri=website_settings.DOMAIN,
8488
provider_id=validated_data.get('provider_id'),

api/metrics/views.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,14 @@ class CountedAuthUsageView(JSONAPIBaseView):
394394
serializer_class = CountedAuthUsageSerializer
395395

396396
def post(self, request, *args, **kwargs):
397-
serializer = self.serializer_class(data=request.data)
397+
serializer = self.serializer_class(
398+
data=request.data,
399+
context={
400+
'user_id': request.user._id if request.user.is_authenticated else None,
401+
'request_host': request.get_host(),
402+
'request_useragent': request.META.get('HTTP_USER_AGENT', ''),
403+
},
404+
)
398405
serializer.is_valid(raise_exception=True)
399406
session_id, user_is_authenticated = self._get_session_id(
400407
request,
@@ -404,6 +411,8 @@ def post(self, request, *args, **kwargs):
404411
return HttpResponse(status=201)
405412

406413
def _get_session_id(self, request, client_session_id=None):
414+
# NOTE: to remove after osfmetrics 6to8 migration -- logic moved to djelme
415+
407416
# get a session id as described in the COUNTER code of practice:
408417
# https://cop5.projectcounter.org/en/5.0.2/07-processing/03-counting-unique-items.html
409418
# -- different from the "login session" tracked by `osf.models.Session` (which

api_tests/metrics/test_counted_usage.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ def test_preprint_file(self, app, mock_save, preprint, item_public):
287287
item_guid=preprint._id,
288288
action_labels=['view', 'web'],
289289
)
290-
resp = app.post_json_api(COUNTED_USAGE_URL, payload)
290+
resp = app.post_json_api(COUNTED_USAGE_URL, payload, headers={'User-Agent': 'blarg'})
291291
assert resp.status_code == 201
292292
assert_saved_with(
293293
mock_save,
@@ -306,7 +306,7 @@ def test_preprint_file(self, app, mock_save, preprint, item_public):
306306
item_guid=preprint.primary_file.get_guid(create=True)._id,
307307
action_labels=['view', 'web'],
308308
)
309-
resp = app.post_json_api(COUNTED_USAGE_URL, payload)
309+
resp = app.post_json_api(COUNTED_USAGE_URL, payload, headers={'User-Agent': 'blarg'})
310310
assert resp.status_code == 201
311311
assert_saved_with(
312312
mock_save,
@@ -325,7 +325,7 @@ def test_child_registration_file(self, app, mock_save, child_reg_file_guid, chil
325325
item_guid=child_reg_file_guid,
326326
action_labels=['view', 'web'],
327327
)
328-
resp = app.post_json_api(COUNTED_USAGE_URL, payload)
328+
resp = app.post_json_api(COUNTED_USAGE_URL, payload, headers={'User-Agent': 'blarg'})
329329
assert resp.status_code == 201
330330
assert_saved_with(
331331
mock_save,
@@ -348,7 +348,7 @@ def test_child_registration_file(self, app, mock_save, child_reg_file_guid, chil
348348
item_guid=child_reg._id,
349349
action_labels=['view', 'web'],
350350
)
351-
resp = app.post_json_api(COUNTED_USAGE_URL, payload)
351+
resp = app.post_json_api(COUNTED_USAGE_URL, payload, headers={'User-Agent': 'blarg'})
352352
assert resp.status_code == 201
353353
assert_saved_with(
354354
mock_save,
@@ -370,7 +370,7 @@ def test_child_registration_file(self, app, mock_save, child_reg_file_guid, chil
370370
item_guid=parent_reg._id,
371371
action_labels=['view', 'web'],
372372
)
373-
resp = app.post_json_api(COUNTED_USAGE_URL, payload)
373+
resp = app.post_json_api(COUNTED_USAGE_URL, payload, headers={'User-Agent': 'blarg'})
374374
assert resp.status_code == 201
375375
assert_saved_with(
376376
mock_save,

0 commit comments

Comments
 (0)