Files
2026-07-13 12:31:02 +08:00

61 lines
1.7 KiB
Go

package notification
import (
"log"
"time"
"service-operation/pocketbase"
"service-operation/types"
)
// ServiceNotifier provides an easy interface to send notifications for service events
type ServiceNotifier struct {
manager *NotificationManager
}
// NewServiceNotifier creates a new service notifier
func NewServiceNotifier(pbClient *pocketbase.PocketBaseClient) *ServiceNotifier {
return &ServiceNotifier{
manager: NewNotificationManager(pbClient),
}
}
// NotifyServiceStatus sends a notification for service status change
func (sn *ServiceNotifier) NotifyServiceStatus(service pocketbase.Service, result *types.OperationResult) {
// Check if service has notification configured
if service.NotificationID == "" {
return
}
// Create notification payload
payload := &NotificationPayload{
ServiceName: service.Name,
Status: service.Status,
Host: service.Host,
Port: service.Port,
ServiceType: service.ServiceType,
ResponseTime: result.ResponseTime.Milliseconds(),
Timestamp: time.Now(),
ErrorMessage: result.Error,
}
// Send notification
if err := sn.manager.SendServiceNotification(payload, service.NotificationID, service.TemplateID); err != nil {
log.Printf("Failed to send notification for service %s: %v", service.Name, err)
} else {
log.Printf("Notification sent successfully for service %s", service.Name)
}
}
// NotifyCustom sends a custom notification
func (sn *ServiceNotifier) NotifyCustom(notificationID, templateID, serviceName, status, message string) error {
payload := &NotificationPayload{
ServiceName: serviceName,
Status: status,
Message: message,
Timestamp: time.Now(),
}
return sn.manager.SendServiceNotification(payload, notificationID, templateID)
}