diff options
author | Jaime Martinez <jmartinez@gitlab.com> | 2020-09-21 09:01:18 +0300 |
---|---|---|
committer | Jaime Martinez <jmartinez@gitlab.com> | 2020-09-24 03:22:45 +0300 |
commit | a451e2b0683d46e2ce2d7a92181eb4379dddf866 (patch) | |
tree | 5548742c7f69b93eaef9ac1d56b02cdb5cc30201 /internal | |
parent | 27adbbac6de8473a78b39799cef2d8873beef91a (diff) |
Add Name to the VFS interface to use with metrics
Diffstat (limited to 'internal')
-rw-r--r-- | internal/serving/disk/local/serving.go | 2 | ||||
-rw-r--r-- | internal/serving/disk/reader.go | 6 | ||||
-rw-r--r-- | internal/serving/disk/serving.go | 2 | ||||
-rw-r--r-- | internal/serving/disk/symlink/path_test.go | 2 | ||||
-rw-r--r-- | internal/serving/disk/zip/serving.go | 2 | ||||
-rw-r--r-- | internal/testhelpers/tmpdir.go | 2 | ||||
-rw-r--r-- | internal/vfs/local/vfs.go | 15 | ||||
-rw-r--r-- | internal/vfs/local/vfs_test.go | 2 | ||||
-rw-r--r-- | internal/vfs/vfs.go | 9 | ||||
-rw-r--r-- | internal/vfs/zip/vfs.go | 18 | ||||
-rw-r--r-- | internal/vfs/zip/vfs_test.go | 2 |
11 files changed, 43 insertions, 19 deletions
diff --git a/internal/serving/disk/local/serving.go b/internal/serving/disk/local/serving.go index d4a882bc..2882a301 100644 --- a/internal/serving/disk/local/serving.go +++ b/internal/serving/disk/local/serving.go @@ -8,7 +8,7 @@ import ( "gitlab.com/gitlab-org/gitlab-pages/metrics" ) -var instance = disk.New(vfs.Instrumented(&local.VFS{}, "local"), metrics.DiskServingFileSize) +var instance = disk.New(vfs.Instrumented(local.New("local")), metrics.VFSServingFileSize) // Instance returns a serving instance that is capable of reading files // from the disk diff --git a/internal/serving/disk/reader.go b/internal/serving/disk/reader.go index 5b34c556..559d332c 100644 --- a/internal/serving/disk/reader.go +++ b/internal/serving/disk/reader.go @@ -20,7 +20,7 @@ import ( // Reader is a disk access driver type Reader struct { - fileSizeMetric prometheus.Histogram + fileSizeMetric *prometheus.HistogramVec vfs vfs.VFS } @@ -196,7 +196,7 @@ func (reader *Reader) serveFile(ctx context.Context, w http.ResponseWriter, r *h w.Header().Set("Content-Type", contentType) - reader.fileSizeMetric.Observe(float64(fi.Size())) + reader.fileSizeMetric.WithLabelValues(reader.vfs.Name()).Observe(float64(fi.Size())) // Support vfs.SeekableFile if available (uncompressed files) if rs, ok := file.(vfs.SeekableFile); ok { @@ -231,7 +231,7 @@ func (reader *Reader) serveCustomFile(ctx context.Context, w http.ResponseWriter return err } - reader.fileSizeMetric.Observe(float64(fi.Size())) + reader.fileSizeMetric.WithLabelValues(reader.vfs.Name()).Observe(float64(fi.Size())) w.Header().Set("Content-Type", contentType) w.Header().Set("Content-Length", strconv.FormatInt(fi.Size(), 10)) diff --git a/internal/serving/disk/serving.go b/internal/serving/disk/serving.go index 94ea3f23..312ed093 100644 --- a/internal/serving/disk/serving.go +++ b/internal/serving/disk/serving.go @@ -43,7 +43,7 @@ func (s *Disk) ServeNotFoundHTTP(h serving.Handler) { // New returns a serving instance that is capable of reading files // from the VFS -func New(vfs vfs.VFS, fileSizeMetric prometheus.Histogram) serving.Serving { +func New(vfs vfs.VFS, fileSizeMetric *prometheus.HistogramVec) serving.Serving { return &Disk{ reader: Reader{ fileSizeMetric: fileSizeMetric, diff --git a/internal/serving/disk/symlink/path_test.go b/internal/serving/disk/symlink/path_test.go index 8c1d19b3..5e7ea16d 100644 --- a/internal/serving/disk/symlink/path_test.go +++ b/internal/serving/disk/symlink/path_test.go @@ -21,7 +21,7 @@ import ( "gitlab.com/gitlab-org/gitlab-pages/internal/vfs/local" ) -var fs = vfs.Instrumented(&local.VFS{}, "local") +var fs = vfs.Instrumented(local.New("local")) type EvalSymlinksTest struct { // If dest is empty, the path is created; otherwise the dest is symlinked to the path. diff --git a/internal/serving/disk/zip/serving.go b/internal/serving/disk/zip/serving.go index 42cc8f0c..63578379 100644 --- a/internal/serving/disk/zip/serving.go +++ b/internal/serving/disk/zip/serving.go @@ -8,7 +8,7 @@ import ( "gitlab.com/gitlab-org/gitlab-pages/metrics" ) -var instance = disk.New(vfs.Instrumented(zip.New(), "zip"), metrics.ZipServingFileSize) +var instance = disk.New(vfs.Instrumented(zip.New("zip")), metrics.VFSServingFileSize) // Instance returns a serving instance that is capable of reading files // from a zip archives opened from a URL, most likely stored in object storage diff --git a/internal/testhelpers/tmpdir.go b/internal/testhelpers/tmpdir.go index 85201238..89223621 100644 --- a/internal/testhelpers/tmpdir.go +++ b/internal/testhelpers/tmpdir.go @@ -13,7 +13,7 @@ import ( "gitlab.com/gitlab-org/gitlab-pages/internal/vfs/local" ) -var fs = vfs.Instrumented(&local.VFS{}, "local") +var fs = vfs.Instrumented(local.New("local")) func TmpDir(t *testing.T, pattern string) (vfs.Root, string, func()) { tmpDir, err := ioutil.TempDir("", pattern) diff --git a/internal/vfs/local/vfs.go b/internal/vfs/local/vfs.go index a2eb14f7..0ece253d 100644 --- a/internal/vfs/local/vfs.go +++ b/internal/vfs/local/vfs.go @@ -11,7 +11,16 @@ import ( var errNotDirectory = errors.New("path needs to be a directory") -type VFS struct{} +type VFS struct { + name string +} + +// New instance of VFS +func New(name string) *VFS { + return &VFS{ + name: name, + } +} func (fs VFS) Root(ctx context.Context, path string) (vfs.Root, error) { rootPath, err := filepath.Abs(path) @@ -35,3 +44,7 @@ func (fs VFS) Root(ctx context.Context, path string) (vfs.Root, error) { return &Root{rootPath: rootPath}, nil } + +func (fs *VFS) Name() string { + return fs.name +} diff --git a/internal/vfs/local/vfs_test.go b/internal/vfs/local/vfs_test.go index ec67d595..0c56cbbc 100644 --- a/internal/vfs/local/vfs_test.go +++ b/internal/vfs/local/vfs_test.go @@ -11,7 +11,7 @@ import ( "github.com/stretchr/testify/require" ) -var localVFS = &VFS{} +var localVFS = New("local_test") func tmpDir(t *testing.T) (string, func()) { tmpDir, err := ioutil.TempDir("", "vfs") diff --git a/internal/vfs/vfs.go b/internal/vfs/vfs.go index 9d9551a1..bd87dc7c 100644 --- a/internal/vfs/vfs.go +++ b/internal/vfs/vfs.go @@ -12,10 +12,11 @@ import ( // VFS abstracts the things Pages needs to serve a static site from disk. type VFS interface { Root(ctx context.Context, path string) (Root, error) + Name() string } -func Instrumented(fs VFS, name string) VFS { - return &instrumentedVFS{fs: fs, name: name} +func Instrumented(fs VFS) VFS { + return &instrumentedVFS{fs: fs, name: fs.Name()} } type instrumentedVFS struct { @@ -46,3 +47,7 @@ func (i *instrumentedVFS) Root(ctx context.Context, path string) (Root, error) { return &instrumentedRoot{root: root, name: i.name, rootPath: path}, nil } + +func (i *instrumentedVFS) Name() string { + return i.name +} diff --git a/internal/vfs/zip/vfs.go b/internal/vfs/zip/vfs.go index dfa2f38e..b3d4429b 100644 --- a/internal/vfs/zip/vfs.go +++ b/internal/vfs/zip/vfs.go @@ -23,9 +23,19 @@ var ( // zipVFS is a simple cached implementation of the vfs.VFS interface type zipVFS struct { + name string cache *cache.Cache } +// New creates a zipVFS instance that can be used by a serving request +func New(name string) vfs.VFS { + return &zipVFS{ + name: name, + // TODO: add cache operation callbacks https://gitlab.com/gitlab-org/gitlab-pages/-/issues/465 + cache: cache.New(cacheExpirationInterval, cacheRefreshInterval), + } +} + // Root opens an archive given a URL path and returns an instance of zipArchive // that implements the vfs.VFS interface. // To avoid using locks, the findOrOpenArchive function runs inside of a for @@ -45,12 +55,8 @@ func (fs *zipVFS) Root(ctx context.Context, path string) (vfs.Root, error) { } } -// New creates a zipVFS instance that can be used by a serving request -func New() vfs.VFS { - return &zipVFS{ - // TODO: add cache operation callbacks https://gitlab.com/gitlab-org/gitlab-pages/-/issues/465 - cache: cache.New(cacheExpirationInterval, cacheRefreshInterval), - } +func (fs *zipVFS) Name() string { + return fs.name } // findOrOpenArchive if found in fs.cache refresh if needed and return it. diff --git a/internal/vfs/zip/vfs_test.go b/internal/vfs/zip/vfs_test.go index 5e1e8b65..7b27b632 100644 --- a/internal/vfs/zip/vfs_test.go +++ b/internal/vfs/zip/vfs_test.go @@ -25,7 +25,7 @@ func TestVFSRoot(t *testing.T) { }, } - testZipVFS := New() + testZipVFS := New("zip_test") for name, tt := range tests { t.Run(name, func(t *testing.T) { |