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) +}