diff --git a/internal/httpapp/api_handlers.go b/internal/httpapp/api_handlers.go index d9ced1a..6649d2b 100644 --- a/internal/httpapp/api_handlers.go +++ b/internal/httpapp/api_handlers.go @@ -40,6 +40,12 @@ func (a *App) handleListPools(w http.ResponseWriter, r *http.Request) { if pools == nil { pools = []models.Pool{} } + + // Set cache-control headers to prevent caching - pools list changes frequently + w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") + w.Header().Set("Pragma", "no-cache") + w.Header().Set("Expires", "0") + writeJSON(w, http.StatusOK, pools) } @@ -114,6 +120,11 @@ func (a *App) handleDeletePool(w http.ResponseWriter, r *http.Request) { return } + // Set cache-control headers to prevent caching of this response + w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") + w.Header().Set("Pragma", "no-cache") + w.Header().Set("Expires", "0") + writeJSON(w, http.StatusOK, map[string]string{"message": "pool destroyed", "name": name}) } diff --git a/internal/httpapp/cache_middleware.go b/internal/httpapp/cache_middleware.go index 81c883a..ce4fbc1 100644 --- a/internal/httpapp/cache_middleware.go +++ b/internal/httpapp/cache_middleware.go @@ -4,6 +4,7 @@ import ( "crypto/sha256" "encoding/hex" "net/http" + "strings" "sync" "time" ) @@ -230,7 +231,7 @@ func (rw *cacheResponseWriter) Write(b []byte) (int, error) { // shouldSkipCache determines if a path should skip caching func (a *App) shouldSkipCache(path string) bool { - // Skip caching for dynamic endpoints + // Skip caching for dynamic endpoints and ZFS/storage endpoints that change frequently skipPaths := []string{ "/metrics", "/healthz", @@ -238,10 +239,20 @@ func (a *App) shouldSkipCache(path string) bool { "/api/v1/system/info", "/api/v1/system/logs", "/api/v1/dashboard", + "/api/v1/pools", + "/api/v1/pools/available", + "/api/v1/datasets", + "/api/v1/zvols", + "/api/v1/disks", + "/api/v1/shares/smb", + "/api/v1/exports/nfs", + "/api/v1/iscsi/targets", + "/api/v1/snapshots", + "/api/v1/snapshot-policies", } for _, skipPath := range skipPaths { - if path == skipPath { + if path == skipPath || strings.HasPrefix(path, skipPath+"/") { return true } }