service/ocm: only log new credential assignments and add websocket logging

This commit is contained in:
世界
2026-03-14 14:44:24 +08:00
parent 615a7e05b4
commit 25a9e4ce59
2 changed files with 34 additions and 23 deletions

View File

@@ -437,7 +437,7 @@ func (s *Service) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
if strings.EqualFold(r.Header.Get("Upgrade"), "websocket") && strings.HasPrefix(path, "/v1/responses") {
s.handleWebSocket(w, r, path, username, sessionID, userConfig, provider, selectedCredential, credentialFilter)
s.handleWebSocket(w, r, path, username, sessionID, userConfig, provider, selectedCredential, credentialFilter, isNew)
return
}
@@ -481,26 +481,22 @@ func (s *Service) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
}
var logParts []any
if isNew {
logParts = append(logParts, "assigned credential ")
} else {
logParts = append(logParts, "credential ")
logParts := []any{"assigned credential ", selectedCredential.tagName()}
if sessionID != "" {
logParts = append(logParts, " for session ", sessionID)
}
if username != "" {
logParts = append(logParts, " by user ", username)
}
if requestModel != "" {
logParts = append(logParts, ", model=", requestModel)
}
if requestServiceTier == "priority" {
logParts = append(logParts, ", fast")
}
s.logger.Debug(logParts...)
}
logParts = append(logParts, selectedCredential.tagName())
if sessionID != "" {
logParts = append(logParts, " for session ", sessionID)
}
if isNew && username != "" {
logParts = append(logParts, " by user ", username)
}
if requestModel != "" {
logParts = append(logParts, ", model=", requestModel)
}
if requestServiceTier == "priority" {
logParts = append(logParts, ", fast")
}
s.logger.Debug(logParts...)
requestContext := selectedCredential.wrapRequestContext(r.Context())
defer func() {

View File

@@ -91,7 +91,19 @@ func (s *Service) handleWebSocket(
provider credentialProvider,
selectedCredential credential,
credentialFilter func(credential) bool,
isNew bool,
) {
if isNew {
logParts := []any{"assigned credential ", selectedCredential.tagName()}
if sessionID != "" {
logParts = append(logParts, " for session ", sessionID)
}
if username != "" {
logParts = append(logParts, " by user ", username)
}
s.logger.Debug(logParts...)
}
var (
err error
upstreamConn net.Conn
@@ -264,15 +276,18 @@ func (s *Service) proxyWebSocketClientToUpstream(clientConn net.Conn, upstreamCo
return
}
if opCode == ws.OpText && selectedCredential.usageTrackerOrNil() != nil {
if opCode == ws.OpText {
var request struct {
Type string `json:"type"`
Model string `json:"model"`
}
if json.Unmarshal(data, &request) == nil && request.Type == "response.create" && request.Model != "" {
select {
case modelChannel <- request.Model:
default:
s.logger.Debug("model=", request.Model)
if selectedCredential.usageTrackerOrNil() != nil {
select {
case modelChannel <- request.Model:
default:
}
}
}
}