logs-analyzer/signoz/pkg/query-service/converter/data_rate.go
2024-09-02 22:47:30 +03:00

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,
}
}