97 lines
1.9 KiB
Go
97 lines
1.9 KiB
Go
package influxdb
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"code.google.com/p/log4go"
|
|
)
|
|
|
|
// TimePrecision represents a level of time precision.
|
|
type TimePrecision int
|
|
|
|
const (
|
|
// MicrosecondPrecision is 1/1,000,000 th of a second.
|
|
MicrosecondPrecision TimePrecision = iota
|
|
// MillisecondPrecision is 1/1,000 th of a second.
|
|
MillisecondPrecision
|
|
// SecondPrecision is 1 second precision.
|
|
SecondPrecision
|
|
)
|
|
|
|
func parseTimePrecision(s string) (TimePrecision, error) {
|
|
switch s {
|
|
case "u":
|
|
return MicrosecondPrecision, nil
|
|
case "m":
|
|
log4go.Warn("time_precision=m will be disabled in future release, use time_precision=ms instead")
|
|
fallthrough
|
|
case "ms":
|
|
return MillisecondPrecision, nil
|
|
case "s":
|
|
return SecondPrecision, nil
|
|
case "":
|
|
return MillisecondPrecision, nil
|
|
}
|
|
|
|
return 0, fmt.Errorf("Unknown time precision %s", s)
|
|
}
|
|
|
|
func hasDuplicates(ss []string) bool {
|
|
m := make(map[string]struct{}, len(ss))
|
|
for _, s := range ss {
|
|
if _, ok := m[s]; ok {
|
|
return true
|
|
}
|
|
m[s] = struct{}{}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func removeField(fields []string, name string) []string {
|
|
index := -1
|
|
for idx, field := range fields {
|
|
if field == name {
|
|
index = idx
|
|
break
|
|
}
|
|
}
|
|
|
|
if index == -1 {
|
|
return fields
|
|
}
|
|
|
|
return append(fields[:index], fields[index+1:]...)
|
|
}
|
|
|
|
func removeTimestampFieldDefinition(fields []string) []string {
|
|
fields = removeField(fields, "time")
|
|
return removeField(fields, "sequence_number")
|
|
}
|
|
|
|
func mapKeyList(m interface{}) []string {
|
|
|
|
switch m.(type) {
|
|
case map[string]string:
|
|
return mapStrStrKeyList(m.(map[string]string))
|
|
case map[string]uint32:
|
|
return mapStrUint32KeyList(m.(map[string]uint32))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func mapStrStrKeyList(m map[string]string) []string {
|
|
l := make([]string, 0, len(m))
|
|
for k := range m {
|
|
l = append(l, k)
|
|
}
|
|
return l
|
|
}
|
|
|
|
func mapStrUint32KeyList(m map[string]uint32) []string {
|
|
l := make([]string, 0, len(m))
|
|
for k := range m {
|
|
l = append(l, k)
|
|
}
|
|
return l
|
|
}
|