mirror of
https://github.com/Gouryella/drip.git
synced 2026-02-23 21:00:44 +00:00
- Introduce pooled tunnel sessions (TunnelID/DataConnect) on client/server - Proxy HTTP/HTTPS via raw HTTP over yamux streams; pipe TCP streams directly - Move UI/stats into internal/shared; refactor CLI tunnel helpers; drop msgpack/hpack legacy
78 lines
1.4 KiB
Go
78 lines
1.4 KiB
Go
package stats
|
|
|
|
// FormatBytes formats bytes to human readable string
|
|
func FormatBytes(bytes int64) string {
|
|
const (
|
|
KB = 1024
|
|
MB = KB * 1024
|
|
GB = MB * 1024
|
|
)
|
|
|
|
switch {
|
|
case bytes >= GB:
|
|
return formatFloat(float64(bytes)/float64(GB)) + " GB"
|
|
case bytes >= MB:
|
|
return formatFloat(float64(bytes)/float64(MB)) + " MB"
|
|
case bytes >= KB:
|
|
return formatFloat(float64(bytes)/float64(KB)) + " KB"
|
|
default:
|
|
return formatInt(bytes) + " B"
|
|
}
|
|
}
|
|
|
|
// FormatSpeed formats speed (bytes per second) to human readable string
|
|
func FormatSpeed(bytesPerSec int64) string {
|
|
if bytesPerSec == 0 {
|
|
return "0 B/s"
|
|
}
|
|
return FormatBytes(bytesPerSec) + "/s"
|
|
}
|
|
|
|
func formatFloat(f float64) string {
|
|
if f >= 100 {
|
|
return formatInt(int64(f))
|
|
} else if f >= 10 {
|
|
return formatOneDecimal(f)
|
|
}
|
|
return formatTwoDecimal(f)
|
|
}
|
|
|
|
func formatInt(i int64) string {
|
|
return intToStr(i)
|
|
}
|
|
|
|
func formatOneDecimal(f float64) string {
|
|
i := int64(f * 10)
|
|
whole := i / 10
|
|
frac := i % 10
|
|
return intToStr(whole) + "." + intToStr(frac)
|
|
}
|
|
|
|
func formatTwoDecimal(f float64) string {
|
|
i := int64(f * 100)
|
|
whole := i / 100
|
|
frac := i % 100
|
|
if frac < 10 {
|
|
return intToStr(whole) + ".0" + intToStr(frac)
|
|
}
|
|
return intToStr(whole) + "." + intToStr(frac)
|
|
}
|
|
|
|
func intToStr(i int64) string {
|
|
if i == 0 {
|
|
return "0"
|
|
}
|
|
if i < 0 {
|
|
return "-" + intToStr(-i)
|
|
}
|
|
|
|
var buf [20]byte
|
|
pos := len(buf)
|
|
for i > 0 {
|
|
pos--
|
|
buf[pos] = byte('0' + i%10)
|
|
i /= 10
|
|
}
|
|
return string(buf[pos:])
|
|
}
|