Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 30 additions & 16 deletions backend/biz/host/handler/v1/internal.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"github.com/chaitin/MonkeyCode/backend/pkg/entx"
"github.com/chaitin/MonkeyCode/backend/pkg/lifecycle"
"github.com/chaitin/MonkeyCode/backend/pkg/taskflow"
"github.com/chaitin/MonkeyCode/backend/pkg/telemetry"
"github.com/chaitin/MonkeyCode/backend/pkg/ws"
)

Expand Down Expand Up @@ -115,17 +116,19 @@ type VMActivityReq struct {

// ReportHostInfo 上报宿主机信息
func (h *InternalHostHandler) ReportHostInfo(c *web.Context, host taskflow.Host) error {
if err := h.repo.UpsertHost(context.Background(), &host); err != nil {
h.logger.ErrorContext(context.Background(), "upsert host failed", "error", err)
ctx := c.Request().Context()
if err := h.repo.UpsertHost(ctx, &host); err != nil {
h.logger.ErrorContext(ctx, "upsert host failed", "error", err)
return err
}
return c.Success(nil)
}

// ReportVirtualMachine 上报虚拟机信息
func (h *InternalHostHandler) ReportVirtualMachine(c *web.Context, vm taskflow.VirtualMachine) error {
if err := h.repo.UpsertVirtualMachine(context.Background(), &vm); err != nil {
h.logger.ErrorContext(context.Background(), "upsert virtual machine failed", "error", err)
ctx := telemetry.WithVMID(c.Request().Context(), vm.ID)
if err := h.repo.UpsertVirtualMachine(ctx, &vm); err != nil {
h.logger.ErrorContext(ctx, "upsert virtual machine failed", "error", err)
return err
}
return c.Success(nil)
Expand All @@ -139,7 +142,7 @@ func (h *InternalHostHandler) VMActivity(c *web.Context, req VMActivityReq) erro
return errors.New("last_active_at is required")
}

ctx := c.Request().Context()
ctx := telemetry.WithVMID(c.Request().Context(), req.VMID)
activeAt := time.Unix(req.LastActiveAt, 0)
if now := time.Now(); activeAt.After(now) {
h.logger.WarnContext(ctx, "vm activity timestamp is in the future", "vm_id", req.VMID, "last_active_at", req.LastActiveAt)
Expand All @@ -162,14 +165,15 @@ func (h *InternalHostHandler) VMActivity(c *web.Context, req VMActivityReq) erro

// ListLLM 列出虚拟机关联的 LLM
func (h *InternalHostHandler) ListLLM(c *web.Context, req taskflow.ListLLMReq) error {
vm, err := h.repo.GetVirtualMachine(c.Request().Context(), req.VmID)
ctx := telemetry.WithVMID(c.Request().Context(), req.VmID)
vm, err := h.repo.GetVirtualMachine(ctx, req.VmID)
if err != nil {
h.logger.ErrorContext(c.Request().Context(), "get virtual machine failed", "error", err)
h.logger.ErrorContext(ctx, "get virtual machine failed", "error", err)
return err
}

if vm.HostID != req.HostID {
h.logger.ErrorContext(c.Request().Context(), "host id mismatch", "vm_host_id", vm.HostID, "req_host_id", req.HostID)
h.logger.ErrorContext(ctx, "host id mismatch", "vm_host_id", vm.HostID, "req_host_id", req.HostID)
return errors.New("host id mismatch")
}

Expand Down Expand Up @@ -256,14 +260,19 @@ func (h *InternalHostHandler) CheckToken(c *web.Context, req taskflow.CheckToken
h.logCheckTokenError(c.Request().Context(), logger, err)
return err
}
ctx := c.Request().Context()
ctx = telemetry.WithTaskID(ctx, tk.TaskID.String())
ctx = telemetry.WithVMID(ctx, tk.Token)
ctx = telemetry.WithAgentSessionID(ctx, tk.SessionID)

logger.With("kind", tk.Kind, "vm_id", tk.Token).DebugContext(c.Request().Context(), "check token success")
logger.With("kind", tk.Kind, "vm_id", tk.Token).DebugContext(ctx, "check token success")

return c.Success(tk)
}

func (h *InternalHostHandler) GetTaskLogStore(c *web.Context, req taskflow.GetTaskLogStoreReq) error {
store, err := h.taskRepo.GetLogStore(c.Request().Context(), req.TaskID)
ctx := telemetry.WithTaskID(c.Request().Context(), req.TaskID.String())
store, err := h.taskRepo.GetLogStore(ctx, req.TaskID)
if err != nil {
return err
}
Expand Down Expand Up @@ -429,24 +438,26 @@ return nil

// VmReady VM 就绪回调
func (h *InternalHostHandler) VmReady(c *web.Context, req taskflow.VirtualMachine) error {
h.logger.With("req", req).DebugContext(c.Request().Context(), "recv vm ready req")
ctx := telemetry.WithVMID(c.Request().Context(), req.ID)
h.logger.With("req", req).DebugContext(ctx, "recv vm ready req")

vm, err := h.repo.GetVirtualMachine(c.Request().Context(), req.ID)
vm, err := h.repo.GetVirtualMachine(ctx, req.ID)
if err != nil {
return err
}

for _, t := range vm.Edges.Tasks {
h.logger.With("task", t).DebugContext(c.Request().Context(), "vm-ready")
taskCtx := telemetry.WithTaskID(ctx, t.ID.String())
h.logger.With("task", t).DebugContext(taskCtx, "vm-ready")
if t.Status == consts.TaskStatusProcessing {
continue
}

if err := h.taskLifecycle.Transition(c.Request().Context(), t.ID, consts.TaskStatusProcessing, lifecycle.TaskMetadata{
if err := h.taskLifecycle.Transition(taskCtx, t.ID, consts.TaskStatusProcessing, lifecycle.TaskMetadata{
TaskID: t.ID,
UserID: t.UserID,
}); err != nil {
h.logger.With("task", t, "error", err).ErrorContext(c.Request().Context(), "failed to transition task to processing")
h.logger.With("task", t, "error", err).ErrorContext(taskCtx, "failed to transition task to processing")
}
}

Expand Down Expand Up @@ -504,7 +515,8 @@ func (h *InternalHostHandler) VmConditions(c *web.Context, req taskflow.VirtualM

// GitCredential 获取 git 凭证
func (h *InternalHostHandler) GitCredential(c *web.Context, req taskflow.GitCredentialRequest) error {
ctx := c.Request().Context()
ctx := telemetry.WithTaskID(c.Request().Context(), req.TaskID)
ctx = telemetry.WithVMID(ctx, req.VMID)
logger := h.logger.With("fn", "GitCredential", "task_id", req.TaskID, "vm_id", req.VMID)

// 1. 有 task_id 时按任务链路取 token
Expand Down Expand Up @@ -561,6 +573,8 @@ func (h *InternalHostHandler) GitCredential(c *web.Context, req taskflow.GitCred

// GetTaskStreamIPs 获取任务 WebSocket 连接的客户端 IP
func (h *InternalHostHandler) GetTaskStreamIPs(c *web.Context, req taskflow.GetTaskStreamIPsReq) error {
ctx := telemetry.WithTaskID(c.Request().Context(), req.TaskID)
c.SetRequest(c.Request().WithContext(ctx))
var ips []string
if wsConn, ok := h.taskConns.Get(req.TaskID); ok {
addr := wsConn.RemoteAddr()
Expand Down
15 changes: 14 additions & 1 deletion backend/cmd/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/chaitin/MonkeyCode/backend/pkg"
"github.com/chaitin/MonkeyCode/backend/pkg/service"
"github.com/chaitin/MonkeyCode/backend/pkg/store"
"github.com/chaitin/MonkeyCode/backend/pkg/telemetry"
)

func main() {
Expand All @@ -39,6 +40,19 @@ func main() {

l := do.MustInvoke[*slog.Logger](injector)
l.With("config", cfg).Debug("print config")
w := do.MustInvoke[*web.Web](injector)
shutdownTelemetry, err := telemetry.Setup(context.Background(), cfg.Telemetry)
if err != nil {
l.Warn("failed to setup telemetry, tracing disabled", "error", err)
shutdownTelemetry = func(context.Context) error { return nil }
}
defer func() {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := shutdownTelemetry(ctx); err != nil {
l.Warn("failed to shutdown telemetry", "error", err)
}
}()

// 运行数据库迁移
if err := store.MigrateSQL(cfg, l); err != nil {
Expand All @@ -53,7 +67,6 @@ func main() {
biz.InvokeOpenSource(injector)

// 获取 web 实例并启动服务
w := do.MustInvoke[*web.Web](injector)
w.PrintRoutes()
svc := service.NewService(
service.WithPprof(),
Expand Down
16 changes: 12 additions & 4 deletions backend/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

"github.com/chaitin/MonkeyCode/backend/consts"
"github.com/chaitin/MonkeyCode/backend/pkg/logger"
"github.com/chaitin/MonkeyCode/backend/pkg/telemetry"
)

type Config struct {
Expand Down Expand Up @@ -41,10 +42,11 @@ type Config struct {
RequestLogPath string `mapstructure:"request_log_path"`
} `mapstructure:"llm_proxy"`

RootPath string `mapstructure:"root_path"`
Logger logger.Config `mapstructure:"logger"`
AdminToken string `mapstructure:"admin_token"`
Proxies []string `mapstructure:"proxies"`
RootPath string `mapstructure:"root_path"`
Logger logger.Config `mapstructure:"logger"`
Telemetry telemetry.Config `mapstructure:"telemetry"`
AdminToken string `mapstructure:"admin_token"`
Proxies []string `mapstructure:"proxies"`

TaskFlow TaskFlow `mapstructure:"taskflow"`
MCPHub MCPHub `mapstructure:"mcp_hub"`
Expand Down Expand Up @@ -344,6 +346,12 @@ func Init(dir string) (*Config, error) {
v.SetDefault("database.conn_max_lifetime", 30)
v.SetDefault("root_path", "/app")
v.SetDefault("logger.level", "info")
v.SetDefault("telemetry.enabled", false)
v.SetDefault("telemetry.endpoint", "")
v.SetDefault("telemetry.insecure", true)
v.SetDefault("telemetry.service_name", "monkeycode-backend")
v.SetDefault("telemetry.service_version", "")
v.SetDefault("telemetry.environment", "")
v.SetDefault("session.expire_day", 30)
v.SetDefault("smtp.host", "")
v.SetDefault("smtp.port", 587)
Expand Down
20 changes: 15 additions & 5 deletions backend/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,12 @@ require (
github.com/samber/do v1.6.0
github.com/sashabaranov/go-openai v1.41.2
github.com/spf13/viper v1.21.0
gitlab.com/gitlab-org/api/client-go v1.46.0
gitlab.com/gitlab-org/api/client-go v1.8.1
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0
go.opentelemetry.io/otel v1.42.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0
go.opentelemetry.io/otel/sdk v1.42.0
go.opentelemetry.io/otel/trace v1.42.0
golang.org/x/crypto v0.49.0
golang.org/x/oauth2 v0.36.0
golang.org/x/sync v0.20.0
Expand Down Expand Up @@ -66,8 +71,10 @@ require (
github.com/bmatcuk/doublestar v1.3.4 // indirect
github.com/bradleyfalzon/ghinstallation/v2 v2.17.0 // indirect
github.com/buger/jsonparser v1.1.2 // indirect
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.13 // indirect
github.com/go-faster/city v1.0.1 // indirect
Expand All @@ -85,6 +92,7 @@ require (
github.com/google/go-github/v75 v75.0.0 // indirect
github.com/google/go-querystring v1.2.0 // indirect
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
Expand Down Expand Up @@ -134,18 +142,20 @@ require (
github.com/zclconf/go-cty-yaml v1.1.0 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho v0.67.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect
go.opentelemetry.io/otel v1.42.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect
go.opentelemetry.io/otel/metric v1.42.0 // indirect
go.opentelemetry.io/otel/sdk v1.42.0 // indirect
go.opentelemetry.io/otel/trace v1.42.0 // indirect
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/mod v0.33.0 // indirect
golang.org/x/net v0.52.0 // indirect
golang.org/x/sys v0.42.0 // indirect
golang.org/x/time v0.15.0 // indirect
golang.org/x/tools v0.42.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
google.golang.org/grpc v1.75.1 // indirect
google.golang.org/protobuf v1.36.10 // indirect
gopkg.in/ini.v1 v1.66.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
28 changes: 24 additions & 4 deletions backend/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
github.com/buger/jsonparser v1.1.2 h1:frqHqw7otoVbk5M8LlE/L7HTnIq2v9RX6EJ48i9AxJk=
github.com/buger/jsonparser v1.1.2/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
Expand Down Expand Up @@ -158,6 +160,8 @@ github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w
github.com/golang-migrate/migrate/v4 v4.19.0 h1:RcjOnCGz3Or6HQYEJ/EEVLfWnmw9KnoigPSjzhCuaSE=
github.com/golang-migrate/migrate/v4 v4.19.0/go.mod h1:9dyEcu+hO+G9hPSw8AIg50yg622pXJsoHItQnDGZkI0=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
Expand All @@ -177,10 +181,10 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORR
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/graph-gophers/graphql-go v1.9.0 h1:yu0ucKHLc5qGpRwLYKIWtr9bOoxovkWasuBrPQwlHls=
github.com/graph-gophers/graphql-go v1.9.0/go.mod h1:23olKZ7duEvHlF/2ELEoSZaY1aNPfShjP782SOoNTyM=
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
Expand Down Expand Up @@ -364,8 +368,8 @@ github.com/zclconf/go-cty-yaml v1.1.0 h1:nP+jp0qPHv2IhUVqmQSzjvqAWcObN0KBkUl2rWB
github.com/zclconf/go-cty-yaml v1.1.0/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs=
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
gitlab.com/gitlab-org/api/client-go v1.46.0 h1:YxBWFZIFYKcGESCb9fpkwzouo+apyB9pr/XTWzNoL24=
gitlab.com/gitlab-org/api/client-go v1.46.0/go.mod h1:FtgyU6g2HS5+fMhw6nLK96GBEEBx5MzntOiJWfIaiN8=
gitlab.com/gitlab-org/api/client-go v1.8.1 h1:YQyAh2Gd+NzcbRWWgDIi/pX0wLlm7QEZWtc0FikQRs4=
gitlab.com/gitlab-org/api/client-go v1.8.1/go.mod h1:tVIvZPcBPFPGYtLZOUIUafaZMmomCS0W81eACbn4Egw=
go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g=
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
Expand All @@ -377,6 +381,10 @@ go.opentelemetry.io/contrib/propagators/b3 v1.42.0 h1:B2Pew5ufEtgkjLF+tSkXjgYZXQ
go.opentelemetry.io/contrib/propagators/b3 v1.42.0/go.mod h1:iPgUcSEF5DORW6+yNbdw/YevUy+QqJ508ncjhrRSCjc=
go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho=
go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk=
go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4=
go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI=
go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo=
Expand All @@ -385,6 +393,8 @@ go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9
go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc=
go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY=
go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc=
go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4=
go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
Expand Down Expand Up @@ -448,8 +458,18 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY=
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
Expand Down
3 changes: 3 additions & 0 deletions backend/pkg/logger/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package logger
import (
"context"
"log/slog"

"github.com/chaitin/MonkeyCode/backend/pkg/telemetry"
)

type contextKey string
Expand Down Expand Up @@ -38,6 +40,7 @@ func (c *ContextLogger) Handle(ctx context.Context, r slog.Record) error {
if i, ok := ctx.Value(UserIDKey).(string); ok {
newRecord.AddAttrs(slog.String("user_id", i))
}
newRecord.AddAttrs(telemetry.LogAttrs(ctx)...)

return c.Handler.Handle(ctx, newRecord)
}
2 changes: 1 addition & 1 deletion backend/pkg/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func NewLogger(cfg *Config) *slog.Logger {
ReplaceAttr: replaceAttr,
})
handler := &ContextLogger{Handler: base}
return slog.New(handler)
return slog.New(handler).With("service.name", "monkeycode-backend")
}

func replaceAttr(_ []string, attr slog.Attr) slog.Attr {
Expand Down
Loading