Skip to content

Commit

Permalink
Added more descriptive analytics for GSR booking. Also added analytic…
Browse files Browse the repository at this point in the history
…s for fitness data (which will be posted hourly)
  • Loading branch information
jonathanmelitski committed Sep 4, 2024
1 parent 1e21aa9 commit bebdcfc
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 4 deletions.
9 changes: 8 additions & 1 deletion backend/gsr_booking/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
GSRSerializer,
UserSerializer,
)
from datetime import datetime
from pennmobile.analytics import Metric, record_analytics


Expand Down Expand Up @@ -253,7 +254,13 @@ def post(self, request):
request.user.booking_groups.filter(name="Penn Labs").first(),
)

record_analytics(Metric.GSR_BOOK, request.user.username)
date_format = "%Y-%m-%dT%H:%M:%S%z"
start_date_obj = datetime.strptime(start, date_format)
end_date_obj = datetime.strptime(end, date_format)

gsr_analytic = Metric.GSR_BOOK + "." + str(room_id).replace(" ", "").upper() + "." + str(room_name).replace(" ", "").upper()
record_analytics(gsr_analytic + ".start", request.user.username, start)
record_analytics(gsr_analytic + ".duration", request.user.username, (end_date_obj-start_date_obj).total_seconds() / 60)

return Response({"detail": "success"})
except APIError as e:
Expand Down
22 changes: 22 additions & 0 deletions backend/penndata/analytics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from enum import Enum

from analytics.analytics import AnalyticsTxn, LabsAnalytics, Product


try:
AnalyticsEngine = LabsAnalytics()
except Exception as e:
print("Error initializing AnalyticsEngine: ", e)
AnalyticsEngine = None


class Metric(str, Enum):
FITNESS = "fitness"

# TODO: Support multiple data objects in a single transaction
def record_analytics(metric, username=None, value="1"):
if not AnalyticsEngine:
print("AnalyticsEngine not initialized")
return
txn = AnalyticsTxn(Product.MOBILE_BACKEND, None, data=[{"key": metric, "value": value}])
AnalyticsEngine.submit(txn)
3 changes: 3 additions & 0 deletions backend/penndata/management/commands/get_fitness_snapshot.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from django.utils import timezone

from penndata.models import FitnessRoom, FitnessSnapshot
from penndata.analytics import Metric, record_analytics


def cap_string(s):
Expand Down Expand Up @@ -56,6 +57,8 @@ def get_usages():
count = int(cells[1].getText())
capacity = float(cells[2].getText().strip("%"))
usages[location] = {"count": count, "capacity": capacity}

record_analytics(Metric.FITNESS + "." + str(location).replace(" ","").upper(), None, str(count))
except ValueError:
pass
else:
Expand Down
6 changes: 3 additions & 3 deletions backend/pennmobile/analytics.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ class Metric(str, Enum):

PORTAL_POLL_VOTED = "portal.poll.voted"


def record_analytics(metric: Metric, username=None):
# TODO: Support multiple data objects in a single transaction
def record_analytics(metric, username=None, value="1"):
if not AnalyticsEngine:
print("AnalyticsEngine not initialized")
return
txn = AnalyticsTxn(Product.MOBILE_BACKEND, username, data=[{"key": metric, "value": "1"}])
txn = AnalyticsTxn(Product.MOBILE_BACKEND, username, data=[{"key": metric, "value": value}])
AnalyticsEngine.submit(txn)

0 comments on commit bebdcfc

Please sign in to comment.