From c734bcae4ad36374d8f75101032d427e3e5b6aaf Mon Sep 17 00:00:00 2001 From: LordMathis Date: Sun, 17 Aug 2025 20:37:20 +0200 Subject: [PATCH] Move UpdateLastRequestTime method to timeout.go and add ShouldTimeout method for idle timeout handling --- pkg/instance/lifecycle.go | 9 --------- pkg/instance/timeout.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 pkg/instance/timeout.go diff --git a/pkg/instance/lifecycle.go b/pkg/instance/lifecycle.go index 58b52eb..1442b6e 100644 --- a/pkg/instance/lifecycle.go +++ b/pkg/instance/lifecycle.go @@ -140,15 +140,6 @@ func (i *Process) Stop() error { return nil } -// UpdateLastRequestTime updates the last request access time for the instance via proxy -func (i *Process) UpdateLastRequestTime() { - i.mu.Lock() - defer i.mu.Unlock() - - lastRequestTime := time.Now().Unix() - i.lastRequestTime.Store(lastRequestTime) -} - func (i *Process) monitorProcess() { defer func() { i.mu.Lock() diff --git a/pkg/instance/timeout.go b/pkg/instance/timeout.go new file mode 100644 index 0000000..fd9eeb5 --- /dev/null +++ b/pkg/instance/timeout.go @@ -0,0 +1,28 @@ +package instance + +import "time" + +// UpdateLastRequestTime updates the last request access time for the instance via proxy +func (i *Process) UpdateLastRequestTime() { + i.mu.Lock() + defer i.mu.Unlock() + + lastRequestTime := time.Now().Unix() + i.lastRequestTime.Store(lastRequestTime) +} + +func (i *Process) ShouldTimeout() bool { + i.mu.RLock() + defer i.mu.RUnlock() + + // If idle timeout is not set, no timeout + if i.options.IdleTimeout == nil || *i.options.IdleTimeout <= 0 { + return false + } + + // Check if the last request time exceeds the idle timeout + lastRequest := i.lastRequestTime.Load() + idleTimeout := *i.options.IdleTimeout + + return (time.Now().Unix() - lastRequest) > int64(idleTimeout) +}