zrepl/daemon/logging/trace/trace_genID.go

36 lines
630 B
Go
Raw Normal View History

package trace
import (
"crypto/rand"
"encoding/base64"
"strings"
"github.com/zrepl/zrepl/util/envconst"
)
var genIdNumBytes = envconst.Int("ZREPL_TRACE_ID_NUM_BYTES", 3)
func init() {
if genIdNumBytes < 1 {
panic("trace node id byte length must be at least 1")
}
}
func genID() string {
var out strings.Builder
enc := base64.NewEncoder(base64.RawStdEncoding, &out)
buf := make([]byte, genIdNumBytes)
_, err := rand.Read(buf)
if err != nil {
panic(err)
}
n, err := enc.Write(buf[:])
if err != nil || n != len(buf) {
panic(err)
}
if err := enc.Close(); err != nil {
panic(err)
}
return out.String()
}