Skip to content

Commit

Permalink
Add prometheus exporter for messages and events
Browse files Browse the repository at this point in the history
  • Loading branch information
DevChima committed Jan 8, 2025
1 parent 66654bf commit 096b429
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 74 deletions.
4 changes: 4 additions & 0 deletions turn_alerts/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -335,3 +335,7 @@ def get_state_reason(self):
def get_message_body(self):
message_body = self.validated_data["messages"][0]["text"]["body"]
return message_body

def get_author_id(self):
author_id = self.validated_data["messages"][0]["_vnd"]["v1"]["author"]["id"]
return author_id
134 changes: 60 additions & 74 deletions turn_alerts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,84 +12,74 @@
VendorPayloadSerializer,
)

from .models import TurnAlerts
from .tasks import start_turn_journey

request_count = Counter(
"turn_alerts_request_total", "Total number of requests to TurnAlertsLayerView"
# Prometheus counters for events and messages
message_requests_total = Counter(
"turn_alerts_message_requests_total",
"Total number of message requests",
[
"fallback_channel",
"direction",
"message_type",
"message_body",
"state_reason",
"state",
"chat_id",
"labels",
"assigned_to",
"permalink",
],
)


event_count = Counter(
"turn_alerts_event_count",
"Number of events",
["message_status", "error_code", "error_data"],
)

successful_event_count = Counter(
"turn_alerts_successful_event_count",
"Number of events",
["message_type", "message_status", "conversation_id"],
)


processing_time = Histogram(
"turn_alerts_request_processing_seconds", "Processing time of requests in seconds"
"turn_alerts_request_processing_seconds",
"Processing time of requests in seconds",
buckets=(0.005, 0.01, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10),
)


class TurnAlertsLayerView(generics.GenericAPIView):
permission_classes = (permissions.IsAuthenticated,)

def post(self, request, *args, **kwargs):
start_time = time.time() # Start time measurement
start_time = time.time()

body = request.data
request_type = list(body.keys())[0]
if request_type == "contacts":
serializer = ContactsPayloadSerializer(data=body)
serializer.is_valid(raise_exception=True)
whatsappid = serializer.get_recipient_id()
message_type = serializer.get_message_type()
assigned_to = serializer.get_assigned_to()
direction = serializer.get_direction()
fallback_channel = serializer.get_fallback_channel()
labels = serializer.get_labels()
chat_id = serializer.get_chat_id()
permalink = serializer.get_permalink()
state = serializer.get_state()
state_reason = serializer.get_state_reason()
message_body = serializer.get_message_body
store_url_entry = TurnAlerts(
whatsappid=whatsappid,
message_type=message_type,
chat_id=chat_id,
assigned_to=assigned_to,
message_direction=direction,
permalink=permalink,
message_body=message_body,
labels=labels,
fallback_channel=fallback_channel,
state=state,
state_reason=state_reason,
)
store_url_entry.save()

elif request_type == "_vnd":
serializer = VendorPayloadSerializer(data=body)

if request_type in ["contacts", "_vnd"]:
if request_type == "contacts":
serializer = ContactsPayloadSerializer(data=body)
else:
serializer = VendorPayloadSerializer(data=body)
serializer.is_valid(raise_exception=True)
whatsappid = serializer.get_recipient_id()
message_type = serializer.get_message_type()
message_body = serializer.get_message_body()
author_id = serializer.get_author_id()
chat_id = serializer.get_chat_id()
permalink = serializer.get_permalink()
state = serializer.get_state()
state_reason = serializer.get_state_reason()
direction = serializer.get_direction()
fallback_channel = serializer.get_fallback_channel()
labels = serializer.get_labels()
assigned_to = serializer.get_assigned_to()
store_url_entry = TurnAlerts(
whatsappid=whatsappid,
message_type=message_type,
chat_id=chat_id,
assigned_to=assigned_to,
author_id=author_id,
message_direction=direction,
permalink=permalink,
message_body=message_body,
labels=labels,
fallback_channel=fallback_channel,
state=state,
state_reason=state_reason,
)
store_url_entry.save()
message_requests_total.labels(
fallback_channel=serializer.get_fallback_channel(),
direction=serializer.get_direction(),
message_type=serializer.get_message_type(),
message_body=serializer.get_message_body(),
state_reason=serializer.get_state_reason(),
state=serializer.get_state(),
chat_id=serializer.get_chat_id(),
labels=serializer.get_labels(),
assigned_to=serializer.get_assigned_to(),
permalink=serializer.get_permalink(),
).inc()

else:
if body["statuses"][0]["status"].upper() == "FAILED":
Expand All @@ -99,13 +89,11 @@ def post(self, request, *args, **kwargs):
error_data = serializer.get_error_data()
message_status = serializer.get_message_status()
whatsappid = serializer.get_recipient_id()
store_url_entry = TurnAlerts(
whatsappid=whatsappid,
event_count.labels(
message_status=message_status,
error_data=error_data,
error_code=error_code,
)
store_url_entry.save()
error_data=error_data,
).inc()

if error_code == 131026:
match = re.match(
Expand All @@ -124,13 +112,11 @@ def post(self, request, *args, **kwargs):
message_type = serializer.get_message_type()
message_status = serializer.get_message_status()
conversation_id = serializer.get_conversation_id()
store_url_entry = TurnAlerts(
conversation_id=conversation_id,
whatsappid=whatsappid,
message_status=message_status,
successful_event_count.labels(
message_type=message_type,
)
store_url_entry.save()
message_status=message_status,
conversation_id=conversation_id,
).inc()

processing_time.observe(time.time() - start_time)

Expand Down

0 comments on commit 096b429

Please sign in to comment.