2025-08-20 04:04:50 +00:00

119 lines
3.6 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", "By/s": // bytes/sec(SI)
return BytePerSecond
case "binbps": // bits/sec(IEC)
return BitPerSecond
case "bps", "bit/s": // bits/sec(SI)
return BitPerSecond
case "KiBs": // kibibytes/sec
return KibibytePerSecond
case "Kibits": // kibibits/sec
return KibibitPerSecond
case "KBs", "kBy/s": // kilobytes/sec
return KilobytePerSecond
case "Kbits", "kbit/s": // kilobits/sec
return KilobitPerSecond
case "MiBs": // mebibytes/sec
return MebibytePerSecond
case "Mibits": // mebibits/sec
return MebibitPerSecond
case "MBs", "MBy/s": // megabytes/sec
return MegabytePerSecond
case "Mbits", "Mbit/s": // megabits/sec
return MegabitPerSecond
case "GiBs": // gibibytes/sec
return GibibytePerSecond
case "Gibits": // gibibits/sec
return GibibitPerSecond
case "GBs", "GBy/s": // gigabytes/sec
return GigabytePerSecond
case "Gbits", "Gbit/s": // gigabits/sec
return GigabitPerSecond
case "TiBs": // tebibytes/sec
return TebibytePerSecond
case "Tibits": // tebibits/sec
return TebibitPerSecond
case "TBs", "TBy/s": // terabytes/sec
return TerabytePerSecond
case "Tbits", "Tbit/s": // terabits/sec
return TerabitPerSecond
case "PiBs": // pebibytes/sec
return PebibytePerSecond
case "Pibits": // pebibits/sec
return PebibitPerSecond
case "PBs", "PBy/s": // petabytes/sec
return PetabytePerSecond
case "Pbits", "Pbit/s": // 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,
}
}