mDownloadBackendSpeed: prometheus.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "arvados",
Subsystem: "keepweb",
- Name: "download_limiting_backend_speed",
- Help: "Limiting backend speed (bytes per second) when serving file downloads, bucketed by transfer size range",
+ Name: "download_apparent_backend_speed",
+ Help: "Apparent download speed from the backend (bytes per second) when serving file downloads, bucketed by transfer size range (see https://dev.arvados.org/projects/arvados/wiki/WebDAV_performance_metrics for explanation)",
Buckets: []float64{10_000, 1_000_000, 10_000_000, 100_000_000, 1_000_000_000, math.Inf(+1)},
}, []string{"size_range"}),
mUploadSpeed: prometheus.NewHistogramVec(prometheus.HistogramOpts{
// transfer).
func sizeRange(size int64) string {
switch {
- case size <= 1_000_000:
+ case size < 1_000_000:
return "0"
- case size <= 10_000_000:
+ case size < 10_000_000:
return "1M"
- case size <= 100_000_000:
+ case size < 100_000_000:
return "10M"
default:
return "100M"
func newDownloadTracker(w http.ResponseWriter) *downloadTracker {
return &downloadTracker{ResponseWriter: w, t0: time.Now()}
}
+
func (dt *downloadTracker) Write(p []byte) (int, error) {
if dt.lastByte.IsZero() {
dt.backendWait += time.Since(dt.t0)