119 lines
3.5 KiB
Go
119 lines
3.5 KiB
Go
package converter
|
|
|
|
const (
|
|
// base 10 (SI prefixes)
|
|
BitPerSecond float64 = 1e0
|
|
KilobitPerSecond = BitPerSecond * 1e3
|
|
MegabitPerSecond = BitPerSecond * 1e6
|
|
GigabitPerSecond = BitPerSecond * 1e9
|
|
TerabitPerSecond = BitPerSecond * 1e12
|
|
PetabitPerSecond = BitPerSecond * 1e15
|
|
ExabitPerSecond = BitPerSecond * 1e18
|
|
ZettabitPerSecond = BitPerSecond * 1e21
|
|
YottabitPerSecond = BitPerSecond * 1e24
|
|
|
|
BytePerSecond = BitPerSecond * 8
|
|
KilobytePerSecond = BytePerSecond * 1e3
|
|
MegabytePerSecond = BytePerSecond * 1e6
|
|
GigabytePerSecond = BytePerSecond * 1e9
|
|
TerabytePerSecond = BytePerSecond * 1e12
|
|
PetabytePerSecond = BytePerSecond * 1e15
|
|
ExabytePerSecond = BytePerSecond * 1e18
|
|
ZettabytePerSecond = BytePerSecond * 1e21
|
|
YottabytePerSecond = BytePerSecond * 1e24
|
|
|
|
// base 2 (IEC prefixes)
|
|
KibibitPerSecond = BitPerSecond * 1024
|
|
MebibitPerSecond = KibibitPerSecond * 1024
|
|
GibibitPerSecond = MebibitPerSecond * 1024
|
|
TebibitPerSecond = GibibitPerSecond * 1024
|
|
PebibitPerSecond = TebibitPerSecond * 1024
|
|
ExbibitPerSecond = PebibitPerSecond * 1024
|
|
ZebibitPerSecond = ExbibitPerSecond * 1024
|
|
YobibitPerSecond = ZebibitPerSecond * 1024
|
|
|
|
KibibytePerSecond = BytePerSecond * 1024
|
|
MebibytePerSecond = KibibytePerSecond * 1024
|
|
GibibytePerSecond = MebibytePerSecond * 1024
|
|
TebibytePerSecond = GibibytePerSecond * 1024
|
|
PebibytePerSecond = TebibytePerSecond * 1024
|
|
ExbibytePerSecond = PebibytePerSecond * 1024
|
|
ZebibytePerSecond = ExbibytePerSecond * 1024
|
|
YobibytePerSecond = ZebibytePerSecond * 1024
|
|
)
|
|
|
|
// dataRateConverter is a Converter implementation for data rates
|
|
type dataRateConverter struct {
|
|
}
|
|
|
|
func NewDataRateConverter() Converter {
|
|
return &dataRateConverter{}
|
|
}
|
|
|
|
func (*dataRateConverter) Name() string {
|
|
return "data_rate"
|
|
}
|
|
|
|
func FromDataRateUnit(u Unit) float64 {
|
|
// See https://github.com/SigNoz/signoz/blob/5a81f5f90b34845f5b4b3bdd46acf29d04bf3987/frontend/src/container/NewWidget/RightContainer/dataFormatCategories.ts#L62-L85
|
|
switch u {
|
|
case "binBps": // bytes/sec(IEC)
|
|
return BytePerSecond
|
|
case "Bps": // bytes/sec(SI)
|
|
return BytePerSecond
|
|
case "binbps": // bits/sec(IEC)
|
|
return BitPerSecond
|
|
case "bps": // bits/sec(SI)
|
|
return BitPerSecond
|
|
case "KiBs": // kibibytes/sec
|
|
return KibibytePerSecond
|
|
case "Kibits": // kibibits/sec
|
|
return KibibitPerSecond
|
|
case "KBs": // kilobytes/sec
|
|
return KilobytePerSecond
|
|
case "Kbits": // kilobits/sec
|
|
return KilobitPerSecond
|
|
case "MiBs": // mebibytes/sec
|
|
return MebibytePerSecond
|
|
case "Mibits": // mebibits/sec
|
|
return MebibitPerSecond
|
|
case "MBs": // megabytes/sec
|
|
return MegabytePerSecond
|
|
case "Mbits": // megabits/sec
|
|
return MegabitPerSecond
|
|
case "GiBs": // gibibytes/sec
|
|
return GibibytePerSecond
|
|
case "Gibits": // gibibits/sec
|
|
return GibibitPerSecond
|
|
case "GBs": // gigabytes/sec
|
|
return GigabytePerSecond
|
|
case "Gbits": // gigabits/sec
|
|
return GigabitPerSecond
|
|
case "TiBs": // tebibytes/sec
|
|
return TebibytePerSecond
|
|
case "Tibits": // tebibits/sec
|
|
return TebibitPerSecond
|
|
case "TBs": // terabytes/sec
|
|
return TerabytePerSecond
|
|
case "Tbits": // terabits/sec
|
|
return TerabitPerSecond
|
|
case "PiBs": // pebibytes/sec
|
|
return PebibytePerSecond
|
|
case "Pibits": // pebibits/sec
|
|
return PebibitPerSecond
|
|
case "PBs": // petabytes/sec
|
|
return PetabytePerSecond
|
|
case "Pbits": // petabits/sec
|
|
return PetabitPerSecond
|
|
default:
|
|
return 1
|
|
}
|
|
}
|
|
|
|
func (c *dataRateConverter) Convert(v Value, to Unit) Value {
|
|
return Value{
|
|
F: v.F * FromDataRateUnit(v.U) / FromDataRateUnit(to),
|
|
U: to,
|
|
}
|
|
}
|