diff options
| -rw-r--r-- | cmd/server/main.go | 15 | ||||
| -rw-r--r-- | internal/server/server.go | 17 |
2 files changed, 25 insertions, 7 deletions
diff --git a/cmd/server/main.go b/cmd/server/main.go index ac2b91d..c5d11a8 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -9,6 +9,7 @@ import ( "os/signal" "path/filepath" "syscall" + "time" "github.com/kyren223/eko/internal/server" "github.com/kyren223/eko/internal/server/api" @@ -61,8 +62,8 @@ func setupLogging() { rotator := &lumberjack.Logger{ Filename: filepath.Join(logDir, "server.log"), - MaxSize: 1, // megabytes TODO: switch this to a more reasonable size (100?) - MaxAge: 28, // days + MaxSize: 100, // megabytes + MaxAge: 28, // days } level := slog.LevelDebug @@ -78,4 +79,14 @@ func setupLogging() { logger := slog.New(handler) slog.SetDefault(logger) slog.SetLogLoggerLevel(level) // TODO: remove me after fully migrating to slog + + go func() { + for { + now := time.Now() + next := now.Truncate(24 * time.Hour).Add(24 * time.Hour) + time.Sleep(time.Until(next)) // sleep until next midnight + + rotator.Rotate() + } + }() } diff --git a/internal/server/server.go b/internal/server/server.go index 41eab92..35cd0f3 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -235,6 +235,8 @@ func (server *server) handleConnection(conn net.Conn) { go func() { defer writerWg.Done() localCtx := context.WithoutCancel(ctx) + // Local context to not be effected by parent cancellation + // will still have a time limit upper bound, from timeout() for request := range framer.Out { processPacket(localCtx, sess, request) @@ -295,8 +297,8 @@ func processPacket(ctx context.Context, sess *session.Session, pkt packet.Packet func processRequest(ctx context.Context, sess *session.Session, request packet.Payload) packet.Payload { slog.InfoContext(ctx, "processing request", - ctxkeys.RequestType.String(), - request.Type(), ctxkeys.Request.String(), request, + ctxkeys.PayloadType.String(), + request.Type(), ctxkeys.Payload.String(), request, ) if !sess.IsTosAccepted() { @@ -408,12 +410,14 @@ func timeout[T packet.Payload]( ctx context.Context, sess *session.Session, request T, ) packet.Payload { // TODO: Remove the channel and just wait directly? + // No - We need to use a channel so timeout works properly responseChan := make(chan packet.Payload) - // FIXME: currently just ignoring the given context + // TODO: Check if this is now fixed after the rewrite: + // currently just ignoring the given context // this fixes the issue where the client disconnects so the server // doesn't bother and cancels the request - ctx, cancel := context.WithTimeout(context.Background(), timeoutDuration) + ctx, cancel := context.WithTimeout(ctx, timeoutDuration) // no longer ignoring defer cancel() go func() { @@ -424,7 +428,10 @@ func timeout[T packet.Payload]( case response := <-responseChan: return response case <-ctx.Done(): - log.Println(sess.Addr(), "timeout of", request.Type(), "request") + slog.WarnContext(ctx, "request timeout", + ctxkeys.Payload.String(), request, + ctxkeys.PayloadType.String(), request.Type(), + ) return &packet.Error{Error: "request timeout"} } } |
