Files
cpa-plugin/internal/plugin/event_management.go
T

101 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package plugin
import (
"context"
"encoding/json"
"fmt"
"net/http"
"net/url"
"strconv"
"strings"
"time"
)
func (a *App) businessEvents(query url.Values) ManagementResponse {
limit, _ := strconv.Atoi(query.Get("limit"))
store, ok := a.currentStore()
if !ok {
return managementError(http.StatusServiceUnavailable, "database_unavailable", "业务日志数据库尚未初始化")
}
events, err := store.ListBusinessEvents(context.Background(), limit)
if err != nil {
return managementError(http.StatusInternalServerError, "database_error", err.Error())
}
return jsonManagementResponse(http.StatusOK, map[string]any{"events": events})
}
func (a *App) auditFailedManagement(response ManagementResponse, event string) ManagementResponse {
if response.StatusCode < http.StatusBadRequest {
return response
}
store, ok := a.currentStore()
if !ok {
return response
}
status := "失败"
var payload struct {
Error struct {
Message string `json:"message"`
} `json:"error"`
}
if json.Unmarshal(response.Body, &payload) == nil {
message := strings.TrimSpace(payload.Error.Message)
message = strings.Join(strings.Fields(message), " ")
if len([]rune(message)) > 160 {
message = string([]rune(message)[:160])
}
if message != "" {
status += "" + message
}
}
_ = store.RecordBusinessEvent(context.Background(), event, status, time.Now().UTC())
return response
}
func keyEvent(body []byte, action string) string {
var value struct {
ID string `json:"id"`
Name string `json:"name"`
}
_ = json.Unmarshal(body, &value)
target := strings.TrimSpace(value.Name)
if target == "" {
target = strings.TrimSpace(value.ID)
}
if target == "" {
return "管理员" + action + "用户 Key"
}
return fmt.Sprintf("管理员%s用户 `%s` 的 Key", action, safeEventValue(target))
}
func priceEvent(body []byte, action string) string {
var value struct {
Model string `json:"model"`
}
_ = json.Unmarshal(body, &value)
model := strings.TrimSpace(value.Model)
if model == "" {
return "管理员" + action + "模型价格"
}
return fmt.Sprintf("管理员%s模型 `%s` 的价格", action, safeEventValue(model))
}
func billingResetEvent(body []byte) string {
var value struct {
ID string `json:"id"`
All bool `json:"all"`
}
_ = json.Unmarshal(body, &value)
if value.All {
return "管理员手动重置全部用户额度"
}
if strings.TrimSpace(value.ID) == "" {
return "管理员手动重置用户额度"
}
return fmt.Sprintf("管理员手动重置用户 `%s` 的额度", safeEventValue(value.ID))
}
func safeEventValue(value string) string {
return strings.ReplaceAll(strings.TrimSpace(value), "`", "")
}