Implement last request time tracking for instance management

This commit is contained in:
2025-08-17 19:44:57 +02:00
parent ccffbca6b2
commit e4e7a82294
4 changed files with 19 additions and 1 deletions

View File

@@ -13,6 +13,7 @@ import (
"net/url"
"os/exec"
"sync"
"sync/atomic"
"time"
)
@@ -86,6 +87,9 @@ type Process struct {
// Restart control
restartCancel context.CancelFunc `json:"-"` // Cancel function for pending restarts
monitorDone chan struct{} `json:"-"` // Channel to signal monitor goroutine completion
// Timeout management
lastRequestTime atomic.Int64 // Unix timestamp of last request
}
// validateAndCopyOptions validates and creates a deep copy of the provided options

View File

@@ -140,6 +140,15 @@ 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()

View File

@@ -1 +0,0 @@
package instance

View File

@@ -472,6 +472,9 @@ func (h *Handler) ProxyToInstance() http.HandlerFunc {
proxyPath = "/" + proxyPath
}
// Update the last request time for the instance
inst.UpdateLastRequestTime()
// Modify the request to remove the proxy prefix
originalPath := r.URL.Path
r.URL.Path = proxyPath
@@ -582,6 +585,9 @@ func (h *Handler) OpenAIProxy() http.HandlerFunc {
return
}
// Update last request time for the instance
inst.UpdateLastRequestTime()
// Recreate the request body from the bytes we read
r.Body = io.NopCloser(bytes.NewReader(bodyBytes))
r.ContentLength = int64(len(bodyBytes))