""" Example subscription function for System Errors. This is a template that can be used as a reference for creating other subscription functions. """ from typing import List from modules.datamodels.datamodelMessaging import ( MessagingEventParameters, MessagingSubscriptionExecutionResult, MessagingSubscriptionRegistration, MessagingChannel ) def execute( eventParameters: MessagingEventParameters, registrations: List[MessagingSubscriptionRegistration], messagingService ) -> MessagingSubscriptionExecutionResult: """ Subscription-Funktion für System-Errors. Erhält eventParameters vom Trigger und registrations bereits geholt. Args: eventParameters: Event-Parameter vom Trigger registrations: Liste der aktiven Registrierungen für diese Subscription messagingService: MessagingService-Instanz Returns: MessagingSubscriptionExecutionResult mit Status und Anzahl gesendeter Nachrichten """ # Gruppiere nach Channel emailRegistrations = [r for r in registrations if r.channel == MessagingChannel.EMAIL] smsRegistrations = [r for r in registrations if r.channel == MessagingChannel.SMS] # Bereite Nachrichten vor (können pro Channel unterschiedlich sein) triggerData = eventParameters.triggerData errors = triggerData.get('errors', []) timestamp = triggerData.get('timestamp', 'Unknown') emailSubject = "System Error Report" emailMessage = f"System errors detected at {timestamp}:\n\n{errors}" smsMessage = f"System Error: {len(errors)} errors detected at {timestamp}" messagesSent = 0 # Versende über sendMessage for reg in emailRegistrations: sendResult = messagingService.sendMessage( subject=emailSubject, message=emailMessage, registration=reg ) if sendResult.success: messagesSent += 1 for reg in smsRegistrations: sendResult = messagingService.sendMessage( subject="", # SMS hat kein Subject message=smsMessage, registration=reg ) if sendResult.success: messagesSent += 1 return MessagingSubscriptionExecutionResult( success=True, messagesSent=messagesSent )