153 lines
3.1 KiB
Go
153 lines
3.1 KiB
Go
|
package istr
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
const SEPERATOR = "/"
|
||
|
|
||
|
var bufferPool = sync.Pool{New: func() interface{} { return new(bytes.Buffer) }}
|
||
|
|
||
|
//strs目前有三种类别
|
||
|
// endpoint/metric/tags
|
||
|
// endpoint/counter
|
||
|
// metric/tags
|
||
|
// strs 参数必须按照上面的顺序来入参
|
||
|
// func PK(strs ...string) string {
|
||
|
// ret := bufferPool.Get().(*bytes.Buffer)
|
||
|
// ret.Reset()
|
||
|
// defer bufferPool.Put(ret)
|
||
|
// count := len(strs)
|
||
|
// if count == 0 {
|
||
|
// return ""
|
||
|
// }
|
||
|
|
||
|
// ret.WriteString(strs[0])
|
||
|
// for i := 1; i < count-1; i++ {
|
||
|
// ret.WriteString(SEPERATOR)
|
||
|
// ret.WriteString(strs[i])
|
||
|
// }
|
||
|
|
||
|
// if strs[count-1] != "" {
|
||
|
// ret.WriteString(SEPERATOR)
|
||
|
// ret.WriteString(strs[count-1])
|
||
|
// }
|
||
|
|
||
|
// return ret.String()
|
||
|
// }
|
||
|
|
||
|
// func UUID(endpoint, metric, tags, dstype string, step int) string {
|
||
|
// ret := bufferPool.Get().(*bytes.Buffer)
|
||
|
// ret.Reset()
|
||
|
// defer bufferPool.Put(ret)
|
||
|
|
||
|
// if tags == "" {
|
||
|
// ret.WriteString(endpoint)
|
||
|
// ret.WriteString(SEPERATOR)
|
||
|
// ret.WriteString(metric)
|
||
|
// ret.WriteString(SEPERATOR)
|
||
|
// ret.WriteString(dstype)
|
||
|
// ret.WriteString(SEPERATOR)
|
||
|
// ret.WriteString(strconv.Itoa(step))
|
||
|
|
||
|
// return ret.String()
|
||
|
// }
|
||
|
// ret.WriteString(endpoint)
|
||
|
// ret.WriteString(SEPERATOR)
|
||
|
// ret.WriteString(metric)
|
||
|
// ret.WriteString(SEPERATOR)
|
||
|
// ret.WriteString(tags)
|
||
|
// ret.WriteString(SEPERATOR)
|
||
|
// ret.WriteString(dstype)
|
||
|
// ret.WriteString(SEPERATOR)
|
||
|
// ret.WriteString(strconv.Itoa(step))
|
||
|
|
||
|
// return ret.String()
|
||
|
// }
|
||
|
|
||
|
// func XXhash(strs ...string) uint64 {
|
||
|
// ret := bufferPool.Get().(*bytes.Buffer)
|
||
|
// ret.Reset()
|
||
|
// defer bufferPool.Put(ret)
|
||
|
// count := len(strs)
|
||
|
// if count == 0 {
|
||
|
// return 0
|
||
|
// }
|
||
|
|
||
|
// ret.WriteString(strs[0])
|
||
|
// for i := 1; i < count-1; i++ {
|
||
|
// ret.WriteString(SEPERATOR)
|
||
|
// ret.WriteString(strs[i])
|
||
|
// }
|
||
|
|
||
|
// if strs[count-1] != "" {
|
||
|
// ret.WriteString(SEPERATOR)
|
||
|
// ret.WriteString(strs[count-1])
|
||
|
// }
|
||
|
|
||
|
// return xxhash.Sum64(ret.Bytes())
|
||
|
// }
|
||
|
|
||
|
// func ToMD5(endpoint string, metric string, tags string) string {
|
||
|
// return str.MD5(PK(endpoint, metric, tags))
|
||
|
// }
|
||
|
|
||
|
// func SortedTags(tags map[string]string) string {
|
||
|
// if tags == nil {
|
||
|
// return ""
|
||
|
// }
|
||
|
|
||
|
// size := len(tags)
|
||
|
|
||
|
// if size == 0 {
|
||
|
// return ""
|
||
|
// }
|
||
|
|
||
|
// ret := bufferPool.Get().(*bytes.Buffer)
|
||
|
// ret.Reset()
|
||
|
// defer bufferPool.Put(ret)
|
||
|
|
||
|
// if size == 1 {
|
||
|
// for k, v := range tags {
|
||
|
// ret.WriteString(k)
|
||
|
// ret.WriteString("=")
|
||
|
// ret.WriteString(v)
|
||
|
// }
|
||
|
// return ret.String()
|
||
|
// }
|
||
|
|
||
|
// keys := make([]string, size)
|
||
|
// i := 0
|
||
|
// for k := range tags {
|
||
|
// keys[i] = k
|
||
|
// i++
|
||
|
// }
|
||
|
|
||
|
// sort.Strings(keys)
|
||
|
|
||
|
// for j, key := range keys {
|
||
|
// ret.WriteString(key)
|
||
|
// ret.WriteString("=")
|
||
|
// ret.WriteString(tags[key])
|
||
|
// if j != size-1 {
|
||
|
// ret.WriteString(",")
|
||
|
// }
|
||
|
// }
|
||
|
|
||
|
// return ret.String()
|
||
|
// }
|
||
|
|
||
|
// func UnixTsFormat(ts int64) string {
|
||
|
// return time.Unix(ts, 0).Format("2006-01-02 15:04:05")
|
||
|
// }
|
||
|
|
||
|
// func IdsString(ids []int) string {
|
||
|
// count := len(ids)
|
||
|
// arr := make([]string, count)
|
||
|
// for i := 0; i < count; i++ {
|
||
|
// arr[i] = fmt.Sprintf("%d", ids[i])
|
||
|
// }
|
||
|
// return strings.Join(arr, ",")
|
||
|
// }
|