func ServePackageResource()

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()
}