Skip to content

Commit 5e1e08e

Browse files
committed
Added UsedVolumesSize and UsedStoreInBytes metric
1 parent 634f018 commit 5e1e08e

File tree

6 files changed

+85
-3
lines changed

6 files changed

+85
-3
lines changed

commands/clean.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,12 @@ var CleanCommand = cli.Command{
100100
logger.Error("getting-unused-volumes-size", err)
101101
}
102102
metricsEmitter.TryEmitUsage(logger, "UnusedLayersSize", unusedVolumesSize, "bytes")
103+
104+
usedVolumesSize, err := sm.UsedVolumesSize(logger)
105+
if err != nil {
106+
logger.Error("getting-used-volumes-size", err)
107+
}
108+
metricsEmitter.TryEmitUsage(logger, "UsedLayersSize", usedVolumesSize, "bytes")
103109
}()
104110

105111
noop, err := cleaner.Clean(logger, cfg.Clean.ThresholdBytes)

commands/create.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,19 +253,25 @@ var CreateCommand = cli.Command{
253253
}
254254
fmt.Println(string(jsonBytes))
255255

256-
emitMetrics(logger, metricsEmitter, sm, cfg.Create.WithClean)
256+
emitMetrics(logger, metricsEmitter, sm, cfg.Create.WithClean, storePath)
257257

258258
return nil
259259
},
260260
}
261261

262-
func emitMetrics(logger lager.Logger, metricsEmitter *metrics.Emitter, sm *storepkg.StoreMeasurer, cleanOnCreate bool) {
262+
func emitMetrics(logger lager.Logger, metricsEmitter *metrics.Emitter, sm *storepkg.StoreMeasurer, cleanOnCreate bool, storePath string) {
263263
if !cleanOnCreate {
264264
unusedVolumesSize, err := sm.UnusedVolumesSize(logger)
265265
if err != nil {
266266
logger.Info(fmt.Sprintf("getting-unused-layers-size: %s", err))
267267
}
268268
metricsEmitter.TryEmitUsage(logger, "UnusedLayersSize", unusedVolumesSize, "bytes")
269+
270+
usedVolumesSize, err := sm.UsedVolumesSize(logger)
271+
if err != nil {
272+
logger.Info(fmt.Sprintf("getting-used-layers-size: %s", err))
273+
}
274+
metricsEmitter.TryEmitUsage(logger, "UsedLayersSize", usedVolumesSize, "bytes")
269275
}
270276

271277
totalVolumesSize, err := sm.TotalVolumesSize(logger)
@@ -279,6 +285,12 @@ func emitMetrics(logger lager.Logger, metricsEmitter *metrics.Emitter, sm *store
279285
logger.Info(fmt.Sprintf("getting-commited-quota: %s", err))
280286
}
281287
metricsEmitter.TryEmitUsage(logger, "CommittedQuotaInBytes", commitedQuota, "bytes")
288+
289+
_, usedBackingStore, err := sm.PathStats(storePath)
290+
if err != nil {
291+
logger.Info(fmt.Sprintf("getting-store-stats: %s", err))
292+
}
293+
metricsEmitter.TryEmitUsage(logger, "UsedBackingStoreInBytes", usedBackingStore, "bytes")
282294
}
283295

284296
func createFetcher(baseImageUrl *url.URL, systemContext types.SystemContext, createCfg config.Create) base_image_puller.Fetcher {

commands/delete.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ var DeleteCommand = cli.Command{
8282
logger.Error("getting-unused-layers-size", err)
8383
}
8484
metricsEmitter.TryEmitUsage(logger, "UnusedLayersSize", unusedVolumesSize, "bytes")
85+
86+
usedVolumesSize, err := sm.UsedVolumesSize(logger)
87+
if err != nil {
88+
logger.Error("getting-used-layers-size", err)
89+
}
90+
metricsEmitter.TryEmitUsage(logger, "UsedLayersSize", usedVolumesSize, "bytes")
8591
}()
8692

8793
err = deleter.Delete(logger, id)

groot/cleaner.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package groot
22

33
import (
44
"time"
5+
"fmt"
56

67
"code.cloudfoundry.org/lager"
78
errorspkg "github.com/pkg/errors"
@@ -42,10 +43,15 @@ func (c *cleaner) Clean(logger lager.Logger, threshold int64) (bool, error) {
4243
if err != nil {
4344
return false, errorspkg.Wrap(err, "failed to calculate committed quota")
4445
}
46+
logger.Debug(fmt.Sprintf("commitedQuota in bytes is: %d", committedQuota))
47+
4548
totalVolumesSize, err := c.storeMeasurer.TotalVolumesSize(logger)
4649
if err != nil {
4750
return false, errorspkg.Wrap(err, "failed to calculate total volumes size")
4851
}
52+
logger.Debug(fmt.Sprintf("totalVolumesSize in bytes is: %d", totalVolumesSize))
53+
logger.Debug(fmt.Sprintf("threshold in bytes is: %d", threshold))
54+
4955
if (committedQuota + totalVolumesSize) < threshold {
5056
return true, nil
5157
}

store/measurer_linux.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,20 @@ func (s *StoreMeasurer) UnusedVolumesSize(logger lager.Logger) (int64, error) {
4545
return s.countVolumesSize(logger, unusedVols)
4646
}
4747

48+
func (s *StoreMeasurer) UsedVolumesSize(logger lager.Logger) (int64, error) {
49+
50+
totalVolumesSize, err := s.TotalVolumesSize(logger)
51+
if err != nil {
52+
return 0, err
53+
}
54+
unusedVolumesSize, err := s.UnusedVolumesSize(logger)
55+
if err != nil {
56+
return 0, err
57+
}
58+
usedVolumesSize := totalVolumesSize - unusedVolumesSize
59+
return usedVolumesSize, nil
60+
}
61+
4862
func (s *StoreMeasurer) TotalVolumesSize(logger lager.Logger) (int64, error) {
4963
vols, err := s.volumeDriver.Volumes(logger)
5064
if err != nil {
@@ -114,7 +128,7 @@ func readImageQuota(imageDir string) (int64, error) {
114128
return imageQuota, nil
115129
}
116130

117-
func (s *StoreMeasurer) pathStats(path string) (totalBytes, UsedBytes int64, err error) {
131+
func (s *StoreMeasurer) PathStats(path string) (totalBytes, UsedBytes int64, err error) {
118132
stats := syscall.Statfs_t{}
119133
if err = syscall.Statfs(s.storePath, &stats); err != nil {
120134
return 0, 0, errorspkg.Wrapf(err, "Invalid path %s", s.storePath)
@@ -127,3 +141,5 @@ func (s *StoreMeasurer) pathStats(path string) (totalBytes, UsedBytes int64, err
127141

128142
return int64(total), used, nil
129143
}
144+
145+

store/measurer_linux_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,42 @@ var _ = Describe("Measurer", func() {
9595
})
9696
})
9797

98+
Describe("UsedVolumesSize", func() {
99+
BeforeEach(func() {
100+
volumeDriver.VolumeSizeReturns(1024, nil)
101+
unusedVolumeGetter.UnusedVolumesReturns([]string{"sha256:fake1", "sha256:fake2"}, nil)
102+
volumeDriver.VolumesReturns([]string{"sha256:fake1", "sha256:fake2"}, nil)
103+
})
104+
105+
It("measures the size of the used layers", func() {
106+
cacheUsage, err := storeMeasurer.UsedVolumesSize(logger)
107+
Expect(err).NotTo(HaveOccurred())
108+
Expect(cacheUsage).To(BeNumerically("==", 0))
109+
})
110+
111+
Context("when getting total volumes returns an error", func() {
112+
BeforeEach(func() {
113+
volumeDriver.VolumesReturns([]string{}, errors.New("failed here"))
114+
})
115+
116+
It("returns the error", func() {
117+
_, err := storeMeasurer.TotalVolumesSize(logger)
118+
Expect(err).To(HaveOccurred())
119+
})
120+
})
121+
122+
Context("when getting unused volumes returns an error", func() {
123+
BeforeEach(func() {
124+
unusedVolumeGetter.UnusedVolumesReturns([]string{}, errors.New("failed here"))
125+
})
126+
127+
It("returns the error", func() {
128+
_, err := storeMeasurer.UnusedVolumesSize(logger)
129+
Expect(err).To(HaveOccurred())
130+
})
131+
})
132+
})
133+
98134
Describe("UnusedVolumeSize", func() {
99135
BeforeEach(func() {
100136
volumeDriver.VolumeSizeReturns(1024, nil)

0 commit comments

Comments
 (0)