Skip to content

Commit

Permalink
Add singleflight to grid generation
Browse files Browse the repository at this point in the history
  • Loading branch information
Wikidepia committed Jul 15, 2024
1 parent 4d6c7ee commit ff0d344
Showing 1 changed file with 52 additions and 42 deletions.
94 changes: 52 additions & 42 deletions handlers/grid.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ import (
"github.com/RyanCarrier/dijkstra/v2"
"github.com/rs/zerolog/log"
"golang.org/x/image/draw"
"golang.org/x/sync/singleflight"
)

var timeout = 60 * time.Second
var sflightGrid singleflight.Group

// getHeight returns the height of the rows, imagesWH [w,h]
func getHeight(imagesWH [][]float64, canvasWidth int) float64 {
Expand Down Expand Up @@ -149,54 +151,62 @@ func Grid(w http.ResponseWriter, r *http.Request) {
return
}

var wg sync.WaitGroup
images := make([]image.Image, len(mediaURLs))
for i, mediaURL := range mediaURLs {
wg.Add(1)

go func(i int, url string) {
defer wg.Done()
client := http.Client{Timeout: timeout}
req, err := http.NewRequest(http.MethodGet, url, http.NoBody)
if err != nil {
return
}

// Make request client.Get
res, err := client.Do(req)
if err != nil {
log.Error().Str("postID", postID).Err(err).Msg("Failed to get image")
return
}
defer res.Body.Close()

images[i], err = jpeg.Decode(res.Body)
if err != nil {
log.Error().Str("postID", postID).Err(err).Msg("Failed to decode image")
return
}
}(i, mediaURL)
}
wg.Wait()
_, err, _ = sflightGrid.Do(postID, func() (interface{}, error) {
var wg sync.WaitGroup
images := make([]image.Image, len(mediaURLs))
for i, mediaURL := range mediaURLs {
wg.Add(1)

go func(i int, url string) {
defer wg.Done()
client := http.Client{Timeout: timeout}
req, err := http.NewRequest(http.MethodGet, url, http.NoBody)
if err != nil {
return
}

// Make request client.Get
res, err := client.Do(req)
if err != nil {
log.Error().Str("postID", postID).Err(err).Msg("Failed to get image")
return
}
defer res.Body.Close()

images[i], err = jpeg.Decode(res.Body)
if err != nil {
log.Error().Str("postID", postID).Err(err).Msg("Failed to decode image")
return
}
}(i, mediaURL)
}
wg.Wait()

// Create grid Images
grid, err := GenerateGrid(images)
if err != nil {
return
}
// Create grid Images
grid, err := GenerateGrid(images)
if err != nil {
return false, err
}

// Write grid to static folder
f, err := os.Create(gridFname)
if err != nil {
return false, err
}
defer f.Close()

if err := jpeg.Encode(f, grid, &jpeg.Options{Quality: 80}); err != nil {
return false, err
}
scraper.LRU.Add(gridFname, true)
return true, nil
})

// Write grid to static folder
f, err := os.Create(gridFname)
if err != nil {
return
}
defer f.Close()

if err := jpeg.Encode(f, grid, &jpeg.Options{Quality: 80}); err != nil {
return
}
scraper.LRU.Add(gridFname, true)
f, err = os.Open(gridFname)
f, err := os.Open(gridFname)
if err != nil {
return
}
Expand Down

0 comments on commit ff0d344

Please sign in to comment.