Files
git-pages/src/backend_observer.go

118 lines
3.3 KiB
Go

package main
import (
"context"
"io"
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
)
var (
blobsRetrievedCount = promauto.NewCounter(prometheus.CounterOpts{
Name: "git_pages_blobs_retrieved",
Help: "Count of blobs retrieved",
})
blobsRetrievedBytes = promauto.NewCounter(prometheus.CounterOpts{
Name: "git_pages_blobs_retrieved_bytes",
Help: "Total size in bytes of blobs retrieved",
})
blobsStoredCount = promauto.NewCounter(prometheus.CounterOpts{
Name: "git_pages_blobs_stored",
Help: "Count of blobs stored",
})
blobsStoredBytes = promauto.NewCounter(prometheus.CounterOpts{
Name: "git_pages_blobs_stored_bytes",
Help: "Total size in bytes of blobs stored",
})
manifestsRetrievedCount = promauto.NewCounter(prometheus.CounterOpts{
Name: "git_pages_manifests_retrieved",
Help: "Count of manifests retrieved",
})
)
type observedBackend struct {
inner Backend
}
var _ Backend = (*observedBackend)(nil)
func NewObservedBackend(backend Backend) Backend {
return &observedBackend{inner: backend}
}
func (backend *observedBackend) GetBlob(
ctx context.Context,
name string,
) (
reader io.ReadSeeker,
size uint64,
mtime time.Time,
err error,
) {
span, ctx := ObserveFunction(ctx, "GetBlob", "blob.name", name)
if reader, size, mtime, err = backend.inner.GetBlob(ctx, name); err == nil {
blobsRetrievedCount.Inc()
blobsRetrievedBytes.Add(float64(size))
}
span.Finish()
return
}
func (backend *observedBackend) PutBlob(ctx context.Context, name string, data []byte) (err error) {
span, ctx := ObserveFunction(ctx, "PutBlob", "blob.name", name, "blob.size", len(data))
if err = backend.inner.PutBlob(ctx, name, data); err == nil {
blobsStoredCount.Inc()
blobsStoredBytes.Add(float64(len(data)))
}
span.Finish()
return
}
func (backend *observedBackend) DeleteBlob(ctx context.Context, name string) (err error) {
span, ctx := ObserveFunction(ctx, "DeleteBlob", "blob.name", name)
err = backend.inner.DeleteBlob(ctx, name)
span.Finish()
return
}
func (backend *observedBackend) GetManifest(ctx context.Context, name string) (manifest *Manifest, err error) {
span, ctx := ObserveFunction(ctx, "GetManifest", "manifest.name", name)
if manifest, err = backend.inner.GetManifest(ctx, name); err == nil {
manifestsRetrievedCount.Inc()
}
span.Finish()
return
}
func (backend *observedBackend) StageManifest(ctx context.Context, manifest *Manifest) (err error) {
span, ctx := ObserveFunction(ctx, "StageManifest")
err = backend.inner.StageManifest(ctx, manifest)
span.Finish()
return
}
func (backend *observedBackend) CommitManifest(ctx context.Context, name string, manifest *Manifest) (err error) {
span, ctx := ObserveFunction(ctx, "CommitManifest", "manifest.name", name)
err = backend.inner.CommitManifest(ctx, name, manifest)
span.Finish()
return
}
func (backend *observedBackend) DeleteManifest(ctx context.Context, name string) (err error) {
span, ctx := ObserveFunction(ctx, "DeleteManifest", "manifest.name", name)
err = backend.inner.DeleteManifest(ctx, name)
span.Finish()
return
}
func (backend *observedBackend) CheckDomain(ctx context.Context, domain string) (found bool, err error) {
span, ctx := ObserveFunction(ctx, "CheckDomain", "manifest.domain", domain)
found, err = backend.inner.CheckDomain(ctx, domain)
span.Finish()
return
}