-- import "github.com/aybabtme/iocontrol"
Package iocontrol offers io.Writer
, io.Reader
, io.WriterAt
, and io.ReaderAt
implementations that allow
one to measure and throttle the rate at which data is transferred.
const (
KiB = 1 << 10
MiB = 1 << 20
GiB = 1 << 30
)
Orders of magnitude of data, in kibibyte (powers of 2, or multiples of 1024). See https://en.wikipedia.org/wiki/Kibibyte.
For all of the exposed functionality, there are versions for all of io.{Reader,Writer}At
with intuitive naming conventions.
The io.{Reader,Writer}
implementations are documented below.
func ThrottledReader(r io.Reader, bytesPerSec int, maxBurst time.Duration) io.Reader
ThrottledReader ensures that reads to r
never exceeds a specified rate of
bytes per second. The maxBurst
duration changes how often the verification is
done. The smaller the value, the less bursty, but also the more overhead there
is to the throttling.
func ThrottledWriter(w io.Writer, bytesPerSec int, maxBurst time.Duration) io.Writer
ThrottledWriter ensures that writes to w
never exceeds a specified rate of
bytes per second. The maxBurst
duration changes how often the verification is
done. The smaller the value, the less bursty, but also the more overhead there
is to the throttling.
type MeasuredReader struct {
}
MeasuredReader wraps a reader and tracks how many bytes are read to it.
func NewMeasuredReader(r io.Reader) *MeasuredReader
NewMeasuredReader wraps a reader.
func (m *MeasuredReader) BytesPer(perPeriod time.Duration) uint64
BytesPer tells the rate per period at which bytes were read since last measurement.
func (m *MeasuredReader) BytesPerSec() uint64
BytesPerSec tells the rate per second at which bytes were read since last measurement.
func (m *MeasuredReader) Read(b []byte) (n int, err error)
func (m *MeasuredReader) Total() int
Total number of bytes that have been read.
type MeasuredWriter struct {
}
MeasuredWriter wraps a writer and tracks how many bytes are written to it.
func NewMeasuredWriter(w io.Writer) *MeasuredWriter
NewMeasuredWriter wraps a writer.
func (m *MeasuredWriter) BytesPer(perPeriod time.Duration) uint64
BytesPer tells the rate per period at which bytes were written since last measurement.
func (m *MeasuredWriter) BytesPerSec() uint64
BytesPerSec tells the rate per second at which bytes were written since last measurement.
func (m *MeasuredWriter) Total() int
Total number of bytes that have been written.
func (m *MeasuredWriter) Write(b []byte) (n int, err error)