contentfulproxy/proxy/jobs.go
2021-11-15 16:03:59 +01:00

54 lines
1.0 KiB
Go

package proxy
import "net/http"
type requestJobDone struct {
cachedResponse *cachedResponse
err error
id cacheID
}
type requestJob struct {
request *http.Request
chanDone chan requestJobDone
}
type jobRunner func(job requestJob, id cacheID)
func getJobRunner(c *Cache, backendURL func() string, chanJobDone chan requestJobDone) jobRunner {
return func(job requestJob, id cacheID) {
req, err := http.NewRequest("GET", backendURL()+job.request.URL.RequestURI(), nil)
if err != nil {
chanJobDone <- requestJobDone{
id: id,
err: err,
}
return
}
for k, v := range job.request.Header {
req.Header.Set(k, v[0])
}
client := http.Client{}
resp, err := client.Do(req)
if err != nil {
chanJobDone <- requestJobDone{
id: id,
err: err,
}
return
}
cachedResponse, err := c.set(id, resp)
if err != nil {
chanJobDone <- requestJobDone{
id: id,
err: err,
}
return
}
chanJobDone <- requestJobDone{
id: id,
cachedResponse: cachedResponse,
}
}
}