Prometheus: add user label and delete blob metrics

This commit is contained in:
Konrad Wojas 2017-10-29 22:19:11 +08:00 committed by Zlatko Čalušić
parent 14f8cd5bca
commit d1504d7d66
2 changed files with 59 additions and 6 deletions

View file

@ -103,6 +103,25 @@ func getFilePath(r *http.Request, fileType, name string) (string, error) {
return join(Config.Path, getRepo(r), fileType, name) return join(Config.Path, getRepo(r), fileType, name)
} }
// getUser returns the username from the request, or an empty string if none.
func getUser(r *http.Request) string {
username, _, ok := r.BasicAuth()
if !ok {
return ""
}
return username
}
// getMetricLabels returns the prometheus labels from the request.
func getMetricLabels(r *http.Request) prometheus.Labels {
labels := prometheus.Labels{
"user": getUser(r),
"repo": getRepo(r),
"type": pat.Param(r, "type"),
}
return labels
}
// AuthHandler wraps h with a http.HandlerFunc that performs basic authentication against the user/passwords pairs // AuthHandler wraps h with a http.HandlerFunc that performs basic authentication against the user/passwords pairs
// stored in f and returns the http.HandlerFunc. // stored in f and returns the http.HandlerFunc.
func AuthHandler(f *HtpasswdFile, h http.Handler) http.HandlerFunc { func AuthHandler(f *HtpasswdFile, h http.Handler) http.HandlerFunc {
@ -329,7 +348,7 @@ func GetBlob(w http.ResponseWriter, r *http.Request) {
} }
if Config.Prometheus { if Config.Prometheus {
labels := prometheus.Labels{"repo": getRepo(r), "type": pat.Param(r, "type")} labels := getMetricLabels(r)
metricBlobReadTotal.With(labels).Inc() metricBlobReadTotal.With(labels).Inc()
metricBlobReadBytesTotal.With(labels).Add(float64(wc.Count())) metricBlobReadBytesTotal.With(labels).Add(float64(wc.Count()))
} }
@ -387,7 +406,7 @@ func SaveBlob(w http.ResponseWriter, r *http.Request) {
} }
if Config.Prometheus { if Config.Prometheus {
labels := prometheus.Labels{"repo": getRepo(r), "type": pat.Param(r, "type")} labels := getMetricLabels(r)
metricBlobWriteTotal.With(labels).Inc() metricBlobWriteTotal.With(labels).Inc()
metricBlobWriteBytesTotal.With(labels).Add(float64(written)) metricBlobWriteBytesTotal.With(labels).Add(float64(written))
} }
@ -410,6 +429,14 @@ func DeleteBlob(w http.ResponseWriter, r *http.Request) {
return return
} }
var size int64
if Config.Prometheus {
stat, err := os.Stat(path)
if err != nil {
size = stat.Size()
}
}
if err := os.Remove(path); err != nil { if err := os.Remove(path); err != nil {
if Config.Debug { if Config.Debug {
log.Print(err) log.Print(err)
@ -421,6 +448,12 @@ func DeleteBlob(w http.ResponseWriter, r *http.Request) {
} }
return return
} }
if Config.Prometheus {
labels := getMetricLabels(r)
metricBlobDeleteTotal.With(labels).Inc()
metricBlobDeleteBytesTotal.With(labels).Add(float64(size))
}
} }
// CreateRepo creates repository directories. // CreateRepo creates repository directories.

View file

@ -2,12 +2,14 @@ package restserver
import "github.com/prometheus/client_golang/prometheus" import "github.com/prometheus/client_golang/prometheus"
var metricLabelList = []string{"user", "repo", "type"}
var metricBlobWriteTotal = prometheus.NewCounterVec( var metricBlobWriteTotal = prometheus.NewCounterVec(
prometheus.CounterOpts{ prometheus.CounterOpts{
Name: "rest_server_blob_write_total", Name: "rest_server_blob_write_total",
Help: "Total number of blobs written", Help: "Total number of blobs written",
}, },
[]string{"repo", "type"}, metricLabelList,
) )
var metricBlobWriteBytesTotal = prometheus.NewCounterVec( var metricBlobWriteBytesTotal = prometheus.NewCounterVec(
@ -15,7 +17,7 @@ var metricBlobWriteBytesTotal = prometheus.NewCounterVec(
Name: "rest_server_blob_write_bytes_total", Name: "rest_server_blob_write_bytes_total",
Help: "Total number of bytes written to blobs", Help: "Total number of bytes written to blobs",
}, },
[]string{"repo", "type"}, metricLabelList,
) )
var metricBlobReadTotal = prometheus.NewCounterVec( var metricBlobReadTotal = prometheus.NewCounterVec(
@ -23,7 +25,7 @@ var metricBlobReadTotal = prometheus.NewCounterVec(
Name: "rest_server_blob_read_total", Name: "rest_server_blob_read_total",
Help: "Total number of blobs read", Help: "Total number of blobs read",
}, },
[]string{"repo", "type"}, metricLabelList,
) )
var metricBlobReadBytesTotal = prometheus.NewCounterVec( var metricBlobReadBytesTotal = prometheus.NewCounterVec(
@ -31,7 +33,23 @@ var metricBlobReadBytesTotal = prometheus.NewCounterVec(
Name: "rest_server_blob_read_bytes_total", Name: "rest_server_blob_read_bytes_total",
Help: "Total number of bytes read from blobs", Help: "Total number of bytes read from blobs",
}, },
[]string{"repo", "type"}, metricLabelList,
)
var metricBlobDeleteTotal = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "rest_server_blob_delete_total",
Help: "Total number of blobs deleted",
},
metricLabelList,
)
var metricBlobDeleteBytesTotal = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "rest_server_blob_delete_bytes_total",
Help: "Total number of bytes of blobs deleted",
},
metricLabelList,
) )
func init() { func init() {
@ -40,4 +58,6 @@ func init() {
prometheus.MustRegister(metricBlobWriteBytesTotal) prometheus.MustRegister(metricBlobWriteBytesTotal)
prometheus.MustRegister(metricBlobReadTotal) prometheus.MustRegister(metricBlobReadTotal)
prometheus.MustRegister(metricBlobReadBytesTotal) prometheus.MustRegister(metricBlobReadBytesTotal)
prometheus.MustRegister(metricBlobDeleteTotal)
prometheus.MustRegister(metricBlobDeleteBytesTotal)
} }