Skip to content
Snippets Groups Projects
Commit 013a4757 authored by Travis Ralston's avatar Travis Ralston
Browse files

Ensure we join the worker queue for URL previews

parent 3571589a
No related branches found
No related tags found
No related merge requests found
...@@ -2,31 +2,50 @@ package url_preview ...@@ -2,31 +2,50 @@ package url_preview
import ( import (
"github.com/turt2live/matrix-media-repo/common/rcontext" "github.com/turt2live/matrix-media-repo/common/rcontext"
"github.com/turt2live/matrix-media-repo/pool"
"github.com/turt2live/matrix-media-repo/url_previewing/m" "github.com/turt2live/matrix-media-repo/url_previewing/m"
"github.com/turt2live/matrix-media-repo/url_previewing/p" "github.com/turt2live/matrix-media-repo/url_previewing/p"
) )
type generateResult struct {
preview m.PreviewResult
err error
}
func Preview(ctx rcontext.RequestContext, targetUrl *m.UrlPayload, languageHeader string) (m.PreviewResult, error) { func Preview(ctx rcontext.RequestContext, targetUrl *m.UrlPayload, languageHeader string) (m.PreviewResult, error) {
var preview m.PreviewResult ch := make(chan generateResult)
err := m.ErrPreviewUnsupported defer close(ch)
fn := func() {
var preview m.PreviewResult
err := m.ErrPreviewUnsupported
// Try oEmbed first // Try oEmbed first
if ctx.Config.UrlPreviews.OEmbed { if ctx.Config.UrlPreviews.OEmbed {
ctx.Log.Debug("Trying oEmbed previewer") ctx.Log.Debug("Trying oEmbed previewer")
preview, err = p.GenerateOEmbedPreview(targetUrl, languageHeader, ctx) preview, err = p.GenerateOEmbedPreview(targetUrl, languageHeader, ctx)
} }
// Try OpenGraph if that failed // Try OpenGraph if that failed
if err == m.ErrPreviewUnsupported { if err == m.ErrPreviewUnsupported {
ctx.Log.Debug("Trying OpenGraph previewer") ctx.Log.Debug("Trying OpenGraph previewer")
preview, err = p.GenerateOpenGraphPreview(targetUrl, languageHeader, ctx) preview, err = p.GenerateOpenGraphPreview(targetUrl, languageHeader, ctx)
} }
// Try scraping if that failed
if err == m.ErrPreviewUnsupported {
ctx.Log.Debug("Trying built-in previewer")
preview, err = p.GenerateCalculatedPreview(targetUrl, languageHeader, ctx)
}
// Try scraping if that failed ch <- generateResult{
if err == m.ErrPreviewUnsupported { preview: preview,
ctx.Log.Debug("Trying built-in previewer") err: err,
preview, err = p.GenerateCalculatedPreview(targetUrl, languageHeader, ctx) }
} }
return preview, err if err := pool.UrlPreviewQueue.Schedule(fn); err != nil {
return m.PreviewResult{}, err
}
res := <-ch
return res.preview, res.err
} }
...@@ -8,6 +8,7 @@ import ( ...@@ -8,6 +8,7 @@ import (
var DownloadQueue *Queue var DownloadQueue *Queue
var ThumbnailQueue *Queue var ThumbnailQueue *Queue
var UrlPreviewQueue *Queue
func Init() { func Init() {
var err error var err error
...@@ -21,14 +22,21 @@ func Init() { ...@@ -21,14 +22,21 @@ func Init() {
logrus.Error("Error setting up thumbnails queue") logrus.Error("Error setting up thumbnails queue")
logrus.Fatal(err) logrus.Fatal(err)
} }
if UrlPreviewQueue, err = NewQueue(config.Get().UrlPreviews.NumWorkers, "url_previews"); err != nil {
sentry.CaptureException(err)
logrus.Error("Error setting up url previews queue")
logrus.Fatal(err)
}
} }
func AdjustSize() { func AdjustSize() {
DownloadQueue.pool.Tune(config.Get().Downloads.NumWorkers) DownloadQueue.pool.Tune(config.Get().Downloads.NumWorkers)
ThumbnailQueue.pool.Tune(config.Get().Thumbnails.NumWorkers) ThumbnailQueue.pool.Tune(config.Get().Thumbnails.NumWorkers)
UrlPreviewQueue.pool.Tune(config.Get().UrlPreviews.NumWorkers)
} }
func Drain() { func Drain() {
DownloadQueue.pool.Release() DownloadQueue.pool.Release()
ThumbnailQueue.pool.Release() ThumbnailQueue.pool.Release()
UrlPreviewQueue.pool.Release()
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment