github.com/Cloud-Foundations/Dominator@v0.3.4/lib/fsrateio/api.go (about) 1 package fsrateio 2 3 import ( 4 "io" 5 6 "github.com/Cloud-Foundations/Dominator/lib/rateio" 7 "github.com/Cloud-Foundations/tricorder/go/tricorder" 8 "github.com/Cloud-Foundations/tricorder/go/tricorder/units" 9 ) 10 11 type ReaderContext struct { 12 maxBytesPerSecond uint64 13 maxBlocksPerSecond uint64 14 ctx *rateio.ReaderContext 15 } 16 17 func NewReaderContext(maxBytesPerSecond uint64, 18 maxBlocksPerSecond uint64, speedPercent uint64) *ReaderContext { 19 return newReaderContext(maxBytesPerSecond, maxBlocksPerSecond, speedPercent) 20 } 21 22 func (ctx *ReaderContext) GetContext() *rateio.ReaderContext { return ctx.ctx } 23 24 func (ctx *ReaderContext) NewReader(rd io.Reader) *rateio.Reader { 25 return ctx.ctx.NewReader(rd) 26 } 27 28 func (ctx *ReaderContext) RegisterMetrics(dir *tricorder.DirectorySpec) error { 29 if ctx.maxBlocksPerSecond > 0 { 30 return ctx.ctx.RegisterMetrics(dir, units.None, 31 "file-system speed in blocks per second") 32 } 33 return ctx.ctx.RegisterMetrics(dir, units.BytePerSecond, 34 "file-system speed") 35 } 36 37 func (ctx *ReaderContext) String() string { 38 return ctx.format() 39 }