This commit refactors the logging mechanism across the application by replacing direct logger calls with a centralized logging approach using the `common` package. Key changes include: - Replaced instances of `logger.SysLog` and `logger.FatalLog` with `common.SysLog` and `common.FatalLog` for consistent logging practices. - Updated resource initialization error handling to utilize the new logging structure, enhancing maintainability and readability. - Minor adjustments to improve code clarity and organization throughout various modules. This change aims to streamline logging and improve the overall architecture of the codebase.
67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
package service
|
|
|
|
import (
|
|
"fmt"
|
|
"one-api/common"
|
|
"one-api/dto"
|
|
"one-api/model"
|
|
"strings"
|
|
)
|
|
|
|
func NotifyRootUser(t string, subject string, content string) {
|
|
user := model.GetRootUser().ToBaseUser()
|
|
err := NotifyUser(user.Id, user.Email, user.GetSetting(), dto.NewNotify(t, subject, content, nil))
|
|
if err != nil {
|
|
common.SysLog(fmt.Sprintf("failed to notify root user: %s", err.Error()))
|
|
}
|
|
}
|
|
|
|
func NotifyUser(userId int, userEmail string, userSetting dto.UserSetting, data dto.Notify) error {
|
|
notifyType := userSetting.NotifyType
|
|
if notifyType == "" {
|
|
notifyType = dto.NotifyTypeEmail
|
|
}
|
|
|
|
// Check notification limit
|
|
canSend, err := CheckNotificationLimit(userId, data.Type)
|
|
if err != nil {
|
|
common.SysLog(fmt.Sprintf("failed to check notification limit: %s", err.Error()))
|
|
return err
|
|
}
|
|
if !canSend {
|
|
return fmt.Errorf("notification limit exceeded for user %d with type %s", userId, notifyType)
|
|
}
|
|
|
|
switch notifyType {
|
|
case dto.NotifyTypeEmail:
|
|
// check setting email
|
|
userEmail = userSetting.NotificationEmail
|
|
if userEmail == "" {
|
|
common.SysLog(fmt.Sprintf("user %d has no email, skip sending email", userId))
|
|
return nil
|
|
}
|
|
return sendEmailNotify(userEmail, data)
|
|
case dto.NotifyTypeWebhook:
|
|
webhookURLStr := userSetting.WebhookUrl
|
|
if webhookURLStr == "" {
|
|
common.SysLog(fmt.Sprintf("user %d has no webhook url, skip sending webhook", userId))
|
|
return nil
|
|
}
|
|
|
|
// 获取 webhook secret
|
|
webhookSecret := userSetting.WebhookSecret
|
|
return SendWebhookNotify(webhookURLStr, webhookSecret, data)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func sendEmailNotify(userEmail string, data dto.Notify) error {
|
|
// make email content
|
|
content := data.Content
|
|
// 处理占位符
|
|
for _, value := range data.Values {
|
|
content = strings.Replace(content, dto.ContentValueParam, fmt.Sprintf("%v", value), 1)
|
|
}
|
|
return common.SendEmail(data.Title, userEmail, content)
|
|
}
|