e0281dc609
gofumpt (https://github.com/mvdan/gofumpt) provides a supserset of `gofmt` / `go fmt`, and addresses various formatting issues that linters may be checking for. We can consider enabling the `gofumpt` linter to verify the formatting in CI, although not every developer may have it installed, so for now this runs it once to get formatting in shape. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
73 lines
2 KiB
Go
73 lines
2 KiB
Go
package proxy
|
|
|
|
import (
|
|
"expvar"
|
|
"sync/atomic"
|
|
)
|
|
|
|
// Metrics is used to hold metric counters
|
|
// related to the proxy
|
|
type Metrics struct {
|
|
Requests uint64
|
|
Hits uint64
|
|
Misses uint64
|
|
BytesPulled uint64
|
|
BytesPushed uint64
|
|
}
|
|
|
|
type proxyMetricsCollector struct {
|
|
blobMetrics Metrics
|
|
manifestMetrics Metrics
|
|
}
|
|
|
|
// BlobPull tracks metrics about blobs pulled into the cache
|
|
func (pmc *proxyMetricsCollector) BlobPull(bytesPulled uint64) {
|
|
atomic.AddUint64(&pmc.blobMetrics.Misses, 1)
|
|
atomic.AddUint64(&pmc.blobMetrics.BytesPulled, bytesPulled)
|
|
}
|
|
|
|
// BlobPush tracks metrics about blobs pushed to clients
|
|
func (pmc *proxyMetricsCollector) BlobPush(bytesPushed uint64) {
|
|
atomic.AddUint64(&pmc.blobMetrics.Requests, 1)
|
|
atomic.AddUint64(&pmc.blobMetrics.Hits, 1)
|
|
atomic.AddUint64(&pmc.blobMetrics.BytesPushed, bytesPushed)
|
|
}
|
|
|
|
// ManifestPull tracks metrics related to Manifests pulled into the cache
|
|
func (pmc *proxyMetricsCollector) ManifestPull(bytesPulled uint64) {
|
|
atomic.AddUint64(&pmc.manifestMetrics.Misses, 1)
|
|
atomic.AddUint64(&pmc.manifestMetrics.BytesPulled, bytesPulled)
|
|
}
|
|
|
|
// ManifestPush tracks metrics about manifests pushed to clients
|
|
func (pmc *proxyMetricsCollector) ManifestPush(bytesPushed uint64) {
|
|
atomic.AddUint64(&pmc.manifestMetrics.Requests, 1)
|
|
atomic.AddUint64(&pmc.manifestMetrics.Hits, 1)
|
|
atomic.AddUint64(&pmc.manifestMetrics.BytesPushed, bytesPushed)
|
|
}
|
|
|
|
// proxyMetrics tracks metrics about the proxy cache. This is
|
|
// kept globally and made available via expvar.
|
|
var proxyMetrics = &proxyMetricsCollector{}
|
|
|
|
func init() {
|
|
registry := expvar.Get("registry")
|
|
if registry == nil {
|
|
registry = expvar.NewMap("registry")
|
|
}
|
|
|
|
pm := registry.(*expvar.Map).Get("proxy")
|
|
if pm == nil {
|
|
pm = &expvar.Map{}
|
|
pm.(*expvar.Map).Init()
|
|
registry.(*expvar.Map).Set("proxy", pm)
|
|
}
|
|
|
|
pm.(*expvar.Map).Set("blobs", expvar.Func(func() interface{} {
|
|
return proxyMetrics.blobMetrics
|
|
}))
|
|
|
|
pm.(*expvar.Map).Set("manifests", expvar.Func(func() interface{} {
|
|
return proxyMetrics.manifestMetrics
|
|
}))
|
|
}
|