in packages/http.go [95:143]
func ServePackageResource(logger *zap.Logger, w http.ResponseWriter, r *http.Request, p *Package, packageFilePath string) {
span, _ := apm.StartSpan(r.Context(), "ServePackage", "app")
defer span.End()
if p.RemoteResolver() != nil {
p.RemoteResolver().StaticHandler(w, r, p, packageFilePath)
metrics.StorageRequestsTotal.With(
prometheus.Labels{"location": remoteLocationPrometheusLabel, "component": staticComponentPrometheusLabel},
).Inc()
return
}
logger = logger.With(zap.String("file.name", packageFilePath))
fs, err := p.fs()
if os.IsNotExist(err) {
http.Error(w, "resource not found", http.StatusNotFound)
return
}
if err != nil {
logger.Error("failed to open filesystem", zap.Error(err))
http.Error(w, "internal server error", http.StatusInternalServerError)
return
}
stat, err := fs.Stat(packageFilePath)
if os.IsNotExist(err) {
http.Error(w, "resource not found", http.StatusNotFound)
return
}
if err != nil {
logger.Error("stat failed", zap.Error(err))
http.Error(w, "internal server error", http.StatusInternalServerError)
return
}
f, err := fs.Open(packageFilePath)
if err != nil {
logger.Error("failed to open file", zap.Error(err))
http.Error(w, "internal server error", http.StatusInternalServerError)
return
}
defer f.Close()
http.ServeContent(w, r, packageFilePath, stat.ModTime(), f)
metrics.StorageRequestsTotal.With(
prometheus.Labels{"location": localLocationPrometheusLabel, "component": staticComponentPrometheusLabel},
).Inc()
}