-- 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.ReaderThrottledReader 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.WriterThrottledWriter 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) *MeasuredReaderNewMeasuredReader wraps a reader.
func (m *MeasuredReader) BytesPer(perPeriod time.Duration) uint64BytesPer tells the rate per period at which bytes were read since last measurement.
func (m *MeasuredReader) BytesPerSec() uint64BytesPerSec 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() intTotal 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) *MeasuredWriterNewMeasuredWriter wraps a writer.
func (m *MeasuredWriter) BytesPer(perPeriod time.Duration) uint64BytesPer tells the rate per period at which bytes were written since last measurement.
func (m *MeasuredWriter) BytesPerSec() uint64BytesPerSec tells the rate per second at which bytes were written since last measurement.
func (m *MeasuredWriter) Total() intTotal number of bytes that have been written.
func (m *MeasuredWriter) Write(b []byte) (n int, err error)