feat: 实现日志追踪链路 #185
@@ -10,8 +10,8 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/redis/go-redis/v9"
|
"github.com/redis/go-redis/v9"
|
||||||
|
|
||||||
"github.com/hhs/camtalk/internal/logger"
|
|
||||||
"github.com/hhs/camtalk/internal/models"
|
"github.com/hhs/camtalk/internal/models"
|
||||||
|
"github.com/hhs/camtalk/internal/trace"
|
||||||
"github.com/hhs/camtalk/internal/util"
|
"github.com/hhs/camtalk/internal/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -88,7 +88,8 @@ func (m *RedisManager) CreateWithID(ctx context.Context, id string, userID strin
|
|||||||
return "", fmt.Errorf("redis create session: %w", err)
|
return "", fmt.Errorf("redis create session: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Log.Debugw("redis session created", "session", id, "user_id", userID)
|
log := trace.FromContext(ctx)
|
||||||
|
log.Debugw("redis session created", "session_id", id, "user_id", userID)
|
||||||
return id, nil
|
return id, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,8 +98,11 @@ const placeholderHistoryMark = "__placeholder__"
|
|||||||
|
|
||||||
// Get 获取会话。
|
// Get 获取会话。
|
||||||
func (m *RedisManager) Get(ctx context.Context, sessionID string) (*models.Session, error) {
|
func (m *RedisManager) Get(ctx context.Context, sessionID string) (*models.Session, error) {
|
||||||
|
log := trace.FromContext(ctx)
|
||||||
|
|
||||||
vals, err := m.rdb.HGetAll(ctx, metaKey(sessionID)).Result()
|
vals, err := m.rdb.HGetAll(ctx, metaKey(sessionID)).Result()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Errorw("redis get session failed", "session_id", sessionID, "error", err)
|
||||||
return nil, fmt.Errorf("redis get session: %w", err)
|
return nil, fmt.Errorf("redis get session: %w", err)
|
||||||
}
|
}
|
||||||
if len(vals) == 0 {
|
if len(vals) == 0 {
|
||||||
@@ -116,6 +120,7 @@ func (m *RedisManager) Get(ctx context.Context, sessionID string) (*models.Sessi
|
|||||||
sess.Config.DetailLevel = vals["config.detail_level"]
|
sess.Config.DetailLevel = vals["config.detail_level"]
|
||||||
sess.Config.Language = vals["config.language"]
|
sess.Config.Language = vals["config.language"]
|
||||||
|
|
||||||
|
log.Debugw("redis session retrieved", "session_id", sessionID)
|
||||||
return sess, nil
|
return sess, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,7 +156,9 @@ func (m *RedisManager) UpdateConfig(ctx context.Context, sessionID string, patch
|
|||||||
|
|
||||||
// 刷新 TTL
|
// 刷新 TTL
|
||||||
m.rdb.Expire(ctx, metaKey(sessionID), m.ttl)
|
m.rdb.Expire(ctx, metaKey(sessionID), m.ttl)
|
||||||
logger.Log.Debugw("redis session config updated", "session", sessionID)
|
|
||||||
|
log := trace.FromContext(ctx)
|
||||||
|
log.Debugw("redis session config updated", "session_id", sessionID)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,7 +178,9 @@ func (m *RedisManager) UpdateTitle(ctx context.Context, sessionID string, title
|
|||||||
}
|
}
|
||||||
|
|
||||||
m.rdb.Expire(ctx, metaKey(sessionID), m.ttl)
|
m.rdb.Expire(ctx, metaKey(sessionID), m.ttl)
|
||||||
logger.Log.Debugw("redis session title updated", "session", sessionID, "title", title)
|
|
||||||
|
log := trace.FromContext(ctx)
|
||||||
|
log.Debugw("redis session title updated", "session_id", sessionID, "title", title)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,8 +295,9 @@ func (m *RedisManager) GetHistory(ctx context.Context, sessionID string, limit i
|
|||||||
}
|
}
|
||||||
var msg models.Message
|
var msg models.Message
|
||||||
if err := json.Unmarshal([]byte(raw), &msg); err != nil {
|
if err := json.Unmarshal([]byte(raw), &msg); err != nil {
|
||||||
logger.Log.Warnw("invalid history entry",
|
log := trace.FromContext(ctx)
|
||||||
"session", sessionID,
|
log.Warnw("invalid history entry",
|
||||||
|
"session_id", sessionID,
|
||||||
"raw_len", len(raw),
|
"raw_len", len(raw),
|
||||||
"raw_preview", util.Truncate(raw, 100))
|
"raw_preview", util.Truncate(raw, 100))
|
||||||
continue
|
continue
|
||||||
@@ -440,7 +450,8 @@ func (m *RedisManager) Destroy(ctx context.Context, sessionID string) error {
|
|||||||
m.rdb.SRem(ctx, userSessKey(userID), sessionID)
|
m.rdb.SRem(ctx, userSessKey(userID), sessionID)
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Log.Debugw("redis session destroyed", "session", sessionID)
|
log := trace.FromContext(ctx)
|
||||||
|
log.Debugw("redis session destroyed", "session_id", sessionID)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user