mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-17 17:16:38 +08:00
57 lines
2.3 KiB
Go
57 lines
2.3 KiB
Go
package monitor
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/songquanpeng/one-api/common/config"
|
|
"github.com/songquanpeng/one-api/common/logger"
|
|
"github.com/songquanpeng/one-api/common/message"
|
|
"github.com/songquanpeng/one-api/model"
|
|
)
|
|
|
|
func notifyRootUser(subject string, content string) {
|
|
if config.MessagePusherAddress != "" {
|
|
err := message.SendMessage(subject, content, content)
|
|
if err != nil {
|
|
logger.SysError(fmt.Sprintf("failed to send message: %s", err.Error()))
|
|
} else {
|
|
return
|
|
}
|
|
}
|
|
if config.RootUserEmail == "" {
|
|
config.RootUserEmail = model.GetRootUserEmail()
|
|
}
|
|
err := message.SendEmail(subject, config.RootUserEmail, content)
|
|
if err != nil {
|
|
logger.SysError(fmt.Sprintf("failed to send email: %s", err.Error()))
|
|
}
|
|
}
|
|
|
|
// DisableChannel disable & notify
|
|
func DisableChannel(channelId int, channelName string, reason string) {
|
|
model.UpdateChannelStatusById(channelId, model.ChannelStatusAutoDisabled)
|
|
logger.SysLog(fmt.Sprintf("channel #%d has been disabled: %s", channelId, reason))
|
|
subject := fmt.Sprintf("Channel %s (#%d) has been disabled", channelName, channelId)
|
|
content := fmt.Sprintf("Channel %s (#%d) has been disabled, reason: %s", channelName, channelId, reason)
|
|
notifyRootUser(subject, content)
|
|
}
|
|
|
|
func MetricDisableChannel(channelId int, successRate float64) {
|
|
model.UpdateChannelStatusById(channelId, model.ChannelStatusAutoDisabled)
|
|
logger.SysLog(fmt.Sprintf("channel #%d has been disabled due to low success rate: %.2f", channelId, successRate*100))
|
|
subject := fmt.Sprintf("Channel #%d has been disabled", channelId)
|
|
content := fmt.Sprintf("The channel (#%d) has been automatically disabled by the system due to "+
|
|
"a success rate of %.2f%% over the last %d calls, which is below the threshold of %.2f%%.",
|
|
channelId, successRate*100, config.MetricQueueSize, config.MetricSuccessRateThreshold*100)
|
|
notifyRootUser(subject, content)
|
|
}
|
|
|
|
// EnableChannel enable & notify
|
|
func EnableChannel(channelId int, channelName string) {
|
|
model.UpdateChannelStatusById(channelId, model.ChannelStatusEnabled)
|
|
logger.SysLog(fmt.Sprintf("channel #%d has been enabled", channelId))
|
|
subject := fmt.Sprintf("Channel %s (#%d) has been enabled", channelName, channelId)
|
|
content := fmt.Sprintf("Channel %s (#%d) has been enabled", channelName, channelId)
|
|
notifyRootUser(subject, content)
|
|
}
|