Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-pages.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaime Martinez <jmartinez@gitlab.com>2020-09-21 09:01:18 +0300
committerJaime Martinez <jmartinez@gitlab.com>2020-09-24 03:22:45 +0300
commita451e2b0683d46e2ce2d7a92181eb4379dddf866 (patch)
tree5548742c7f69b93eaef9ac1d56b02cdb5cc30201 /internal
parent27adbbac6de8473a78b39799cef2d8873beef91a (diff)
Add Name to the VFS interface to use with metrics
Diffstat (limited to 'internal')
-rw-r--r--internal/serving/disk/local/serving.go2
-rw-r--r--internal/serving/disk/reader.go6
-rw-r--r--internal/serving/disk/serving.go2
-rw-r--r--internal/serving/disk/symlink/path_test.go2
-rw-r--r--internal/serving/disk/zip/serving.go2
-rw-r--r--internal/testhelpers/tmpdir.go2
-rw-r--r--internal/vfs/local/vfs.go15
-rw-r--r--internal/vfs/local/vfs_test.go2
-rw-r--r--internal/vfs/vfs.go9
-rw-r--r--internal/vfs/zip/vfs.go18
-rw-r--r--internal/vfs/zip/vfs_test.go2
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) {