feat (backend-http): CACHE_ASSETS env flag + logs on assets error
This commit is contained in:
parent
c689f81ccd
commit
74b1d37e54
8 changed files with 47 additions and 18 deletions
|
|
@ -4,15 +4,11 @@ RUN apk add --no-cache git openssh openssl-dev pkgconf gcc g++ make libc-dev bas
|
|||
|
||||
WORKDIR /root
|
||||
|
||||
COPY go.mod .
|
||||
COPY go.sum .
|
||||
COPY . .
|
||||
|
||||
RUN go mod download
|
||||
|
||||
COPY . .
|
||||
|
||||
ARG SERVICE_NAME
|
||||
|
||||
RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o service -tags musl openreplay/backend/services/$SERVICE_NAME
|
||||
|
||||
FROM alpine
|
||||
|
|
@ -39,6 +35,7 @@ ENV TZ=UTC \
|
|||
AWS_REGION_WEB=eu-central-1 \
|
||||
AWS_REGION_IOS=eu-west-1 \
|
||||
AWS_REGION_ASSETS=eu-central-1 \
|
||||
CACHE_ASSETS=true \
|
||||
ASSETS_SIZE_LIMIT=6291456
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ ENV TZ=UTC \
|
|||
AWS_REGION_WEB=eu-central-1 \
|
||||
AWS_REGION_IOS=eu-west-1 \
|
||||
AWS_REGION_ASSETS=eu-central-1 \
|
||||
CACHE_ASSETS=true \
|
||||
ASSETS_SIZE_LIMIT=6291456
|
||||
|
||||
RUN mkdir $FS_DIR
|
||||
|
|
|
|||
|
|
@ -51,13 +51,27 @@ func ExtractURLsFromCSS(css string) []string {
|
|||
return urls
|
||||
}
|
||||
|
||||
func (r *Rewriter) RewriteCSS(sessionID uint64, baseurl string, css string) string {
|
||||
func rewriteLinks(css string, rewrite func(rawurl string) string) string {
|
||||
for _, idx := range cssUrlsIndex(css) {
|
||||
f := idx[0]
|
||||
t := idx[1]
|
||||
rawurl, q := unquote(css[f:t])
|
||||
// why exactly quote back?
|
||||
css = css[:f] + q + r.RewriteURL(sessionID, baseurl, rawurl) + q + css[t:]
|
||||
css = css[:f] + q + rewrite(rawurl) + q + css[t:]
|
||||
}
|
||||
return css
|
||||
}
|
||||
|
||||
func ResolveCSS(baseURL string, css string) string {
|
||||
css = rewriteLinks(css, func(rawurl string) string {
|
||||
return ResolveURL(baseURL, rawurl)
|
||||
})
|
||||
return strings.Replace(css, ":hover", ".-asayer-hover", -1)
|
||||
}
|
||||
|
||||
func (r *Rewriter) RewriteCSS(sessionID uint64, baseurl string, css string) string {
|
||||
css = rewriteLinks(css, func(rawurl string) string {
|
||||
return r.RewriteURL(sessionID, baseurl, rawurl)
|
||||
})
|
||||
return strings.Replace(css, ":hover", ".-asayer-hover", -1)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ func GetFullCachableURL(baseURL string, relativeURL string) (string, bool) {
|
|||
}
|
||||
|
||||
|
||||
const ASAYER_QUERY_START = "ASAYER_QUERY_ESCtRT"
|
||||
const OPENREPLAY_QUERY_START = "OPENREPLAY_QUERY"
|
||||
|
||||
func getCachePath(rawurl string) string {
|
||||
u, _ := url.Parse(rawurl)
|
||||
|
|
@ -59,7 +59,7 @@ func getCachePath(rawurl string) string {
|
|||
if (s[len(s) - 1] != '/') {
|
||||
s += "/"
|
||||
}
|
||||
s += ASAYER_QUERY_START + url.PathEscape(u.RawQuery)
|
||||
s += OPENREPLAY_QUERY_START + url.PathEscape(u.RawQuery)
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,6 +64,8 @@ func main() {
|
|||
log.Printf("Caught signal %v: terminating\n", sig)
|
||||
consumer.Close()
|
||||
os.Exit(0)
|
||||
case err := <-cacher.Errors:
|
||||
log.Printf("Error while caching: %v", err)
|
||||
case <-tick:
|
||||
cacher.UpdateTimeouts()
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import (
|
|||
)
|
||||
|
||||
func sendAssetForCache(sessionID uint64, baseURL string, relativeURL string) {
|
||||
if fullURL, cachable := assets.GetFullCachableURL(baseURL, relativeURL); cachable {
|
||||
if fullURL, cacheable := assets.GetFullCachableURL(baseURL, relativeURL); cacheable {
|
||||
producer.Produce(topicTrigger, sessionID, messages.Encode(&messages.AssetCache{
|
||||
URL: fullURL,
|
||||
}))
|
||||
|
|
@ -17,4 +17,20 @@ func sendAssetsForCacheFromCSS(sessionID uint64, baseURL string, css string) {
|
|||
for _, u := range assets.ExtractURLsFromCSS(css) { // TODO: in one shot with rewriting
|
||||
sendAssetForCache(sessionID, baseURL, u)
|
||||
}
|
||||
}
|
||||
|
||||
func handleURL(sessionID uint64, baseURL string, url string) string {
|
||||
if cacheAssets {
|
||||
sendAssetForCache(sessionID, baseURL, url)
|
||||
return rewriter.RewriteURL(sessionID, baseURL, url)
|
||||
}
|
||||
return assets.ResolveURL(baseURL, url)
|
||||
}
|
||||
|
||||
func handleCSS(sessionID uint64, baseURL string, css string) string {
|
||||
if cacheAssets {
|
||||
sendAssetsForCacheFromCSS(sessionID, baseURL, css)
|
||||
return rewriter.RewriteCSS(sessionID, baseURL, css)
|
||||
}
|
||||
return assets.ResolveCSS(baseURL, css)
|
||||
}
|
||||
|
|
@ -174,32 +174,28 @@ func pushMessagesSeparatelyHandler(w http.ResponseWriter, r *http.Request) {
|
|||
switch m := msg.(type) {
|
||||
case *SetNodeAttributeURLBased:
|
||||
if m.Name == "src" || m.Name == "href" {
|
||||
sendAssetForCache(sessionData.ID, m.BaseURL, m.Value)
|
||||
msg = &SetNodeAttribute{
|
||||
ID: m.ID,
|
||||
Name: m.Name,
|
||||
Value: rewriter.RewriteURL(sessionData.ID, m.BaseURL, m.Value),
|
||||
Value: handleURL(sessionData.ID, m.BaseURL, m.Value),
|
||||
}
|
||||
} else if m.Name == "style" {
|
||||
sendAssetsForCacheFromCSS(sessionData.ID, m.BaseURL, m.Value)
|
||||
msg = &SetNodeAttribute{
|
||||
ID: m.ID,
|
||||
Name: m.Name,
|
||||
Value: rewriter.RewriteCSS(sessionData.ID, m.BaseURL, m.Value),
|
||||
Value: handleCSS(sessionData.ID, m.BaseURL, m.Value),
|
||||
}
|
||||
}
|
||||
case *SetCSSDataURLBased:
|
||||
sendAssetsForCacheFromCSS(sessionData.ID, m.BaseURL, m.Data)
|
||||
msg = &SetCSSData{
|
||||
ID: m.ID,
|
||||
Data: rewriter.RewriteCSS(sessionData.ID, m.BaseURL, m.Data),
|
||||
Data: handleCSS(sessionData.ID, m.BaseURL, m.Data),
|
||||
}
|
||||
case *CSSInsertRuleURLBased:
|
||||
sendAssetsForCacheFromCSS(sessionData.ID, m.BaseURL, m.Rule)
|
||||
msg = &CSSInsertRule{
|
||||
ID: m.ID,
|
||||
Index: m.Index,
|
||||
Rule: rewriter.RewriteCSS(sessionData.ID, m.BaseURL, m.Rule),
|
||||
Rule: handleCSS(sessionData.ID, m.BaseURL, m.Rule),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ var topicRaw string
|
|||
var topicTrigger string
|
||||
var topicAnalytics string
|
||||
// var kafkaTopicEvents string
|
||||
var cacheAssets bool
|
||||
|
||||
func main() {
|
||||
log.SetFlags(log.LstdFlags | log.LUTC | log.Llongfile)
|
||||
|
|
@ -52,6 +53,8 @@ func main() {
|
|||
uaParser = uaparser.NewUAParser(env.String("UAPARSER_FILE"))
|
||||
geoIP = geoip.NewGeoIP(env.String("MAXMINDDB_FILE"))
|
||||
flaker = flakeid.NewFlaker(env.WorkerID())
|
||||
cacheAssets = env.Bool("CACHE_ASSETS")
|
||||
|
||||
HTTP_PORT := env.String("HTTP_PORT")
|
||||
|
||||
server := &http.Server{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue