oncall-engine/engine/apps/mattermost/events/event_manager.py
Matias Bordese dcae98b02a
feat: add support for mattermost chatops (#5321)
Related to https://github.com/grafana/oncall/issues/96

---------

Co-authored-by: Ravishankar <ravishankar.gnanaprakasam@gmail.com>
2025-04-21 14:23:37 -03:00

37 lines
1.1 KiB
Python

import logging
import typing
from rest_framework.request import Request
from apps.mattermost.events.event_handler import MattermostEventHandler
from apps.mattermost.events.types import MattermostEvent
from apps.user_management.models import User
logger = logging.getLogger(__name__)
class EventManager:
"""
Manager for mattermost events
"""
@classmethod
def process_request(cls, request: Request):
user = request.user
event = request.data
handler = cls.select_event_handler(user=user, event=event)
if handler is None:
logger.info("No event handler found")
return
logger.info(f"Processing mattermost event with handler: {handler.__class__.__name__}")
handler.process()
@staticmethod
def select_event_handler(user: User, event: MattermostEvent) -> typing.Optional[MattermostEventHandler]:
handler_classes = MattermostEventHandler.__subclasses__()
for handler_class in handler_classes:
handler = handler_class(user=user, event=event)
if handler.is_match():
return handler
return None