From 163aa33717b0c156eaeb788b97be33161f98febb Mon Sep 17 00:00:00 2001 From: WeebDataHoarder <57538841+WeebDataHoarder@users.noreply.github.com> Date: Tue, 18 Jan 2022 11:30:11 +0100 Subject: [PATCH] Better align Server-Timing headers --- OrbitalBeat.go | 56 ++++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/OrbitalBeat.go b/OrbitalBeat.go index 873f185..ec95619 100644 --- a/OrbitalBeat.go +++ b/OrbitalBeat.go @@ -121,15 +121,13 @@ func handleQueryRequest(ctx *RequestContext, identifier cid.Cid, extraArguments if entry != nil { cacheEntry = getCacheEntryForContentEntry(entry, identifier) } - - pTime := cTime - cTime = time.Now() - addServerTimingMetric(ctx, "e", "Content Entry (MISS)", cTime.Sub(pTime)) + addServerTimingMetricInformational(ctx, "ec", "Content Cache MISS") } else { - pTime := cTime - cTime = time.Now() - addServerTimingMetric(ctx, "e", "Content Entry (HIT)", cTime.Sub(pTime)) + addServerTimingMetricInformational(ctx, "ec", "Content Cache HIT") } + pTime := cTime + cTime = time.Now() + addServerTimingMetric(ctx, "e", "Content Entry", cTime.Sub(pTime)) if cacheEntry == nil { var origin string @@ -166,7 +164,6 @@ func handleQueryRequest(ctx *RequestContext, identifier cid.Cid, extraArguments if mh.Code == multihash.SHA2_256 { ctx.setResponseHeader("Digest", fmt.Sprintf("sha-256=%s", base64.StdEncoding.EncodeToString(mh.Digest))) } - //ctx.setResponseHeader("X-IPFS-Path", fmt.Sprintf("/ipfs/%s", cacheEntry.Entry.Identifier.String())) ctx.setResponseHeader("Cache-Control", "public, max-age=2592000, immutable") filename := path.Base(cacheEntry.Entry.Path) @@ -174,7 +171,7 @@ func handleQueryRequest(ctx *RequestContext, identifier cid.Cid, extraArguments //TODO: setting to hide filename ctx.setResponseHeader("Content-Disposition", fmt.Sprintf("inline; filename*=utf-8''%s", url.PathEscape(filename))) - pTime := cTime + pTime = cTime cTime = time.Now() addServerTimingMetric(ctx, "s", "Content Serve", cTime.Sub(pTime)) @@ -277,20 +274,22 @@ func addServerTimingMetric(ctx *RequestContext, name string, desc string, d time d = 0 } - v := ctx.getResponseHeader("Server-Timing") - if len(v) > 0 { - ctx.setResponseHeader("Server-Timing", fmt.Sprintf("%s, %s;desc=\"%s\";dur=%.6F", v, name, desc, float64(d.Nanoseconds())/1e6)) - } else { - ctx.setResponseHeader("Server-Timing", fmt.Sprintf("%s;desc=\"%s\";dur=%.6F", name, desc, float64(d.Nanoseconds())/1e6)) - } + ctx.addResponseHeader("Server-Timing", fmt.Sprintf("%d_%s;desc=\"%s\";dur=%.6F", ctx.TimingEvents, name, desc, float64(d.Nanoseconds())/1e6)) + ctx.TimingEvents++ +} + +func addServerTimingMetricInformational(ctx *RequestContext, name string, desc string) { + ctx.addResponseHeader("Server-Timing", fmt.Sprintf("%d_%s;desc=\"%s\"", ctx.TimingEvents, name, desc)) + ctx.TimingEvents++ } type RequestContext struct { - fasthttp *fasthttp.RequestCtx - httpWriter *http.ResponseWriter - httpRequest *http.Request - connTime time.Time - requestTime time.Time + fasthttp *fasthttp.RequestCtx + httpWriter *http.ResponseWriter + httpRequest *http.Request + connTime time.Time + requestTime time.Time + TimingEvents uint } func NewRequestContextFromFastHttp(ctx *fasthttp.RequestCtx) RequestContext { @@ -362,6 +361,14 @@ func (c *RequestContext) getResponseHeader(name string) string { return "" } +func (c *RequestContext) addResponseHeader(name string, value string) { + if c.fasthttp != nil { + c.fasthttp.Response.Header.Add(name, value) + } else if c.httpWriter != nil { + (*c.httpWriter).Header().Add(name, value) + } +} + func (c *RequestContext) setResponseHeader(name string, value string) { if c.fasthttp != nil { c.fasthttp.Response.Header.Set(name, value) @@ -427,7 +434,7 @@ func (c *RequestContext) isHead() bool { } func handle(ctx RequestContext) { - if len(ctx.getRequestHeader("Host")) > 0 && string(ctx.getRequestHeader("Host")) == ctx.getTLSServerName() { //Prevents rebinding / DNS stuff + if len(ctx.getRequestHeader("Host")) > 0 && ctx.getRequestHeader("Host") == ctx.getTLSServerName() { //Prevents rebinding / DNS stuff ctx.setResponseCode(http.StatusNotFound) ctx.setResponseCode(http.StatusNotFound) return @@ -476,10 +483,11 @@ func handle(ctx RequestContext) { pTime = cTime cTime = time.Now() if cacheHit { - addServerTimingMetric(&ctx, "v", "Ed25519 Verify (HIT)", cTime.Sub(pTime)) + addServerTimingMetricInformational(&ctx, "vc", "Ed25519 Cache HIT") } else { - addServerTimingMetric(&ctx, "v", "Ed25519 Verify (MISS)", cTime.Sub(pTime)) + addServerTimingMetricInformational(&ctx, "vc", "Ed25519 Cache MISS") } + addServerTimingMetric(&ctx, "v", "Ed25519 Verify", cTime.Sub(pTime)) if !result { ctx.setResponseCode(http.StatusForbidden) @@ -890,7 +898,7 @@ func main() { "http/1.1", } } else { - extraHeaders["Connection"] = "Close" + extraHeaders["Connection"] = "close" } var wg sync.WaitGroup