24e8161262
- add base structure - unify the proto metrics creation and propagation - implement arp and openvpn - refactor to meet the prom exporter standart - add instance label to the metrics - refactor the call chain - add gateway, unbound_dns and openvpn implementations - add gateway stuff - structure refactor; mod clean; cron implementation - implement cron in the collector; refactor utils in the opnsense package refactor names and implement option functions to disable collectorInstances add GH action workflows Create codeql.yml - clean fix stuff
50 lines
1.8 KiB
Go
50 lines
1.8 KiB
Go
package units
|
|
|
|
// SI units.
|
|
type SI int64
|
|
|
|
// SI unit multiples.
|
|
const (
|
|
Kilo SI = 1000
|
|
Mega = Kilo * 1000
|
|
Giga = Mega * 1000
|
|
Tera = Giga * 1000
|
|
Peta = Tera * 1000
|
|
Exa = Peta * 1000
|
|
)
|
|
|
|
func MakeUnitMap(suffix, shortSuffix string, scale int64) map[string]float64 {
|
|
res := map[string]float64{
|
|
shortSuffix: 1,
|
|
// see below for "k" / "K"
|
|
"M" + suffix: float64(scale * scale),
|
|
"G" + suffix: float64(scale * scale * scale),
|
|
"T" + suffix: float64(scale * scale * scale * scale),
|
|
"P" + suffix: float64(scale * scale * scale * scale * scale),
|
|
"E" + suffix: float64(scale * scale * scale * scale * scale * scale),
|
|
}
|
|
|
|
// Standard SI prefixes use lowercase "k" for kilo = 1000.
|
|
// For compatibility, and to be fool-proof, we accept both "k" and "K" in metric mode.
|
|
//
|
|
// However, official binary prefixes are always capitalized - "KiB" -
|
|
// and we specifically never parse "kB" as 1024B because:
|
|
//
|
|
// (1) people pedantic enough to use lowercase according to SI unlikely to abuse "k" to mean 1024 :-)
|
|
//
|
|
// (2) Use of capital K for 1024 was an informal tradition predating IEC prefixes:
|
|
// "The binary meaning of the kilobyte for 1024 bytes typically uses the symbol KB, with an
|
|
// uppercase letter K."
|
|
// -- https://en.wikipedia.org/wiki/Kilobyte#Base_2_(1024_bytes)
|
|
// "Capitalization of the letter K became the de facto standard for binary notation, although this
|
|
// could not be extended to higher powers, and use of the lowercase k did persist.[13][14][15]"
|
|
// -- https://en.wikipedia.org/wiki/Binary_prefix#History
|
|
// See also the extensive https://en.wikipedia.org/wiki/Timeline_of_binary_prefixes.
|
|
if scale == 1024 {
|
|
res["K"+suffix] = float64(scale)
|
|
} else {
|
|
res["k"+suffix] = float64(scale)
|
|
res["K"+suffix] = float64(scale)
|
|
}
|
|
return res
|
|
}
|