mirror of
https://github.com/restic/rest-server.git
synced 2025-10-19 07:33:21 +00:00
Prometheus: add user label and delete blob metrics
This commit is contained in:
parent
14f8cd5bca
commit
d1504d7d66
2 changed files with 59 additions and 6 deletions
37
handlers.go
37
handlers.go
|
@ -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.
|
||||||
|
|
28
metrics.go
28
metrics.go
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue