mirror of
https://github.com/project-zot/zot.git
synced 2024-12-23 22:27:35 -05:00
127 lines
3.4 KiB
Go
127 lines
3.4 KiB
Go
|
//go:build extended
|
||
|
// +build extended
|
||
|
|
||
|
package monitoring_test
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"io/ioutil"
|
||
|
"net/http"
|
||
|
"os"
|
||
|
"path"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
. "github.com/smartystreets/goconvey/convey"
|
||
|
"gopkg.in/resty.v1"
|
||
|
"zotregistry.io/zot/pkg/api"
|
||
|
"zotregistry.io/zot/pkg/api/config"
|
||
|
extconf "zotregistry.io/zot/pkg/extensions/config"
|
||
|
"zotregistry.io/zot/pkg/extensions/monitoring"
|
||
|
. "zotregistry.io/zot/test"
|
||
|
)
|
||
|
|
||
|
func TestExtensionMetrics(t *testing.T) {
|
||
|
Convey("Make a new controller with explicitly enabled metrics", t, func() {
|
||
|
port := GetFreePort()
|
||
|
baseURL := GetBaseURL(port)
|
||
|
conf := config.New()
|
||
|
conf.HTTP.Port = port
|
||
|
|
||
|
rootDir, err := ioutil.TempDir("", "metrics-test")
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
defer os.RemoveAll(rootDir)
|
||
|
|
||
|
conf.Storage.RootDirectory = rootDir
|
||
|
conf.Extensions = &extconf.ExtensionConfig{}
|
||
|
conf.Extensions.Metrics = &extconf.MetricsConfig{
|
||
|
Enable: true,
|
||
|
Prometheus: &extconf.PrometheusConfig{Path: "/metrics"},
|
||
|
}
|
||
|
|
||
|
ctlr := api.NewController(conf)
|
||
|
So(ctlr, ShouldNotBeNil)
|
||
|
|
||
|
go startServer(ctlr)
|
||
|
defer stopServer(ctlr)
|
||
|
WaitTillServerReady(baseURL)
|
||
|
|
||
|
// improve code coverage
|
||
|
ctlr.Metrics.SendMetric(baseURL)
|
||
|
ctlr.Metrics.ForceSendMetric(baseURL)
|
||
|
|
||
|
So(ctlr.Metrics.IsEnabled(), ShouldBeTrue)
|
||
|
So(ctlr.Metrics.ReceiveMetrics(), ShouldBeNil)
|
||
|
|
||
|
monitoring.ObserveHTTPRepoLatency(ctlr.Metrics,
|
||
|
"/v2/alpine/blobs/uploads/299148f0-0e32-4830-90d2-a3fa744137d9", time.Millisecond)
|
||
|
monitoring.IncDownloadCounter(ctlr.Metrics, "alpine")
|
||
|
monitoring.IncUploadCounter(ctlr.Metrics, "alpine")
|
||
|
|
||
|
err = CopyFiles("../../../test/data/zot-test", path.Join(rootDir, "alpine"))
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
monitoring.SetStorageUsage(ctlr.Metrics, rootDir, "alpine")
|
||
|
|
||
|
monitoring.ObserveStorageLockLatency(ctlr.Metrics, time.Millisecond, rootDir, "RWLock")
|
||
|
|
||
|
resp, err := resty.R().Get(baseURL + "/metrics")
|
||
|
So(err, ShouldBeNil)
|
||
|
So(resp, ShouldNotBeNil)
|
||
|
So(resp.StatusCode(), ShouldEqual, http.StatusOK)
|
||
|
|
||
|
respStr := string(resp.Body())
|
||
|
So(respStr, ShouldContainSubstring, "zot_repo_downloads_total{repo=\"alpine\"} 1")
|
||
|
So(respStr, ShouldContainSubstring, "zot_repo_uploads_total{repo=\"alpine\"} 1")
|
||
|
So(respStr, ShouldContainSubstring, "zot_repo_storage_bytes{repo=\"alpine\"}")
|
||
|
So(respStr, ShouldContainSubstring, "zot_storage_lock_latency_seconds_bucket")
|
||
|
So(respStr, ShouldContainSubstring, "zot_storage_lock_latency_seconds_sum")
|
||
|
So(respStr, ShouldContainSubstring, "zot_storage_lock_latency_seconds_bucket")
|
||
|
})
|
||
|
Convey("Make a new controller with disabled metrics extension", t, func() {
|
||
|
port := GetFreePort()
|
||
|
baseURL := GetBaseURL(port)
|
||
|
conf := config.New()
|
||
|
conf.HTTP.Port = port
|
||
|
|
||
|
rootDir, err := ioutil.TempDir("", "metrics-test")
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
defer os.RemoveAll(rootDir)
|
||
|
|
||
|
conf.Storage.RootDirectory = rootDir
|
||
|
conf.Extensions = &extconf.ExtensionConfig{}
|
||
|
conf.Extensions.Metrics = &extconf.MetricsConfig{Enable: false}
|
||
|
|
||
|
ctlr := api.NewController(conf)
|
||
|
So(ctlr, ShouldNotBeNil)
|
||
|
|
||
|
go startServer(ctlr)
|
||
|
defer stopServer(ctlr)
|
||
|
WaitTillServerReady(baseURL)
|
||
|
|
||
|
So(ctlr.Metrics.IsEnabled(), ShouldBeFalse)
|
||
|
|
||
|
resp, err := resty.R().Get(baseURL + "/metrics")
|
||
|
So(err, ShouldBeNil)
|
||
|
So(resp, ShouldNotBeNil)
|
||
|
So(resp.StatusCode(), ShouldEqual, http.StatusNotFound)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func startServer(c *api.Controller) {
|
||
|
// this blocks
|
||
|
if err := c.Run(); err != nil {
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func stopServer(c *api.Controller) {
|
||
|
ctx := context.Background()
|
||
|
_ = c.Server.Shutdown(ctx)
|
||
|
}
|