mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-18 17:46:37 +08:00
- Refactor constant definitions and organization - Clean up package level variables and functions - Introduce new `relaymode` and `apitype` packages for constant definitions - Refactor and simplify code in several packages including `openai`, `relay/channel/baidu`, `relay/util`, `relay/controller`, `relay/channeltype` - Add helper functions in `relay/channeltype` package to convert channel type constants to corresponding API type constants - Remove deprecated functions such as `ResponseText2Usage` from `relay/channel/openai/helper.go` - Modify code in `relay/util/validation.go` and related files to use new `validator.ValidateTextRequest` function - Rename `util` package to `relaymode` and update related imports in several packages
55 lines
2.2 KiB
Go
55 lines
2.2 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("渠道「%s」(#%d)已被禁用", channelName, channelId)
|
||
content := fmt.Sprintf("渠道「%s」(#%d)已被禁用,原因:%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("渠道 #%d 已被禁用", channelId)
|
||
content := fmt.Sprintf("该渠道(#%d)在最近 %d 次调用中成功率为 %.2f%%,低于阈值 %.2f%%,因此被系统自动禁用。",
|
||
channelId, config.MetricQueueSize, successRate*100, 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("渠道「%s」(#%d)已被启用", channelName, channelId)
|
||
content := fmt.Sprintf("渠道「%s」(#%d)已被启用", channelName, channelId)
|
||
notifyRootUser(subject, content)
|
||
}
|