79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
package influxdb
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"runtime"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
// ErrFieldsRequired is returned when a point does not any fields.
|
|
ErrFieldsRequired = errors.New("fields required")
|
|
|
|
// ErrFieldTypeConflict is returned when a new field already exists with a different type.
|
|
ErrFieldTypeConflict = errors.New("field type conflict")
|
|
)
|
|
|
|
func ErrDatabaseNotFound(name string) error { return fmt.Errorf("database not found: %s", name) }
|
|
|
|
func ErrMeasurementNotFound(name string) error { return fmt.Errorf("measurement not found: %s", name) }
|
|
|
|
func Errorf(format string, a ...interface{}) (err error) {
|
|
if _, file, line, ok := runtime.Caller(2); ok {
|
|
a = append(a, file, line)
|
|
err = fmt.Errorf(format+" (%s:%d)", a...)
|
|
} else {
|
|
err = fmt.Errorf(format, a...)
|
|
}
|
|
return
|
|
}
|
|
|
|
// IsClientError indicates whether an error is a known client error.
|
|
func IsClientError(err error) bool {
|
|
if err == nil {
|
|
return false
|
|
}
|
|
|
|
if err == ErrFieldsRequired {
|
|
return true
|
|
}
|
|
if err == ErrFieldTypeConflict {
|
|
return true
|
|
}
|
|
|
|
if strings.Contains(err.Error(), ErrFieldTypeConflict.Error()) {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// mustMarshal encodes a value to JSON.
|
|
// This will panic if an error occurs. This should only be used internally when
|
|
// an invalid marshal will cause corruption and a panic is appropriate.
|
|
func mustMarshalJSON(v interface{}) []byte {
|
|
b, err := json.Marshal(v)
|
|
if err != nil {
|
|
panic("marshal: " + err.Error())
|
|
}
|
|
return b
|
|
}
|
|
|
|
// mustUnmarshalJSON decodes a value from JSON.
|
|
// This will panic if an error occurs. This should only be used internally when
|
|
// an invalid unmarshal will cause corruption and a panic is appropriate.
|
|
func mustUnmarshalJSON(b []byte, v interface{}) {
|
|
if err := json.Unmarshal(b, v); err != nil {
|
|
panic("unmarshal: " + err.Error())
|
|
}
|
|
}
|
|
|
|
// assert will panic with a given formatted message if the given condition is false.
|
|
func assert(condition bool, msg string, v ...interface{}) {
|
|
if !condition {
|
|
panic(fmt.Sprintf("assert failed: "+msg, v...))
|
|
}
|
|
}
|