1 Commits
Author SHA1 Message Date
schreifuchs fca1030e1a feat: limit image request
/ publish (push) Successful in 3m9s
2026-03-07 20:26:53 +01:00
3 changed files with 12 additions and 2 deletions
+7
View File
@@ -60,6 +60,13 @@ func (s *Service) getImage(uid string) (file []byte, mimeType string, err error)
}
func (s *Service) GetImage(ctx context.Context, uid string, options Options) (img io.Reader, mimeType string, err error) {
if err = s.seph.Acquire(ctx, 1); err != nil {
err = fmt.Errorf("could not Acquire semaphore: %w", err)
return
}
defer s.seph.Release(1)
rawImage, mimeType, err := s.getImage(uid)
if err != nil {
return
+4 -1
View File
@@ -4,6 +4,7 @@ import (
"os"
"github.com/valkey-io/valkey-go"
"golang.org/x/sync/semaphore"
)
type Options struct {
@@ -15,12 +16,14 @@ type Options struct {
type Service struct {
fs fileSystem
cache valkey.Client
seph *semaphore.Weighted
}
func New(fs fileSystem, cache valkey.Client) *Service {
func New(fs fileSystem, cache valkey.Client, maxConcurency int64) *Service {
return &Service{
fs: fs,
cache: cache,
seph: semaphore.NewWeighted(maxConcurency),
}
}
+1 -1
View File
@@ -50,7 +50,7 @@ func (s *Server) registerOther() (h http.Handler) {
}
_ = resthome.New(mux, page.New(fs))
_ = restimage.New(mux, images.New(fs, valkeyClient))
_ = restimage.New(mux, images.New(fs, valkeyClient, 4))
mux.Handle("/", http.FileServer(http.FS(web.GetStaticFS())))