From 317f26f5095f2cb729033d63c4db21e102446e8f Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Tue, 5 Apr 2022 15:37:01 +0200 Subject: [PATCH] Support dates as milliseconds or seconds (#781) --- internal/fields/validate.go | 18 +++++++++++++++++- internal/fields/validate_test.go | 16 ++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/internal/fields/validate.go b/internal/fields/validate.go index 7a8ac84f2..afed35405 100644 --- a/internal/fields/validate.go +++ b/internal/fields/validate.go @@ -374,7 +374,7 @@ func (v *Validator) parseElementValue(key string, definition FieldDefinition, va if err := ensurePatternMatches(key, valStr, definition.Pattern); err != nil { return err } - case "date", "keyword", "text": + case "keyword", "text": var valStr string valStr, valid = val.(string) if !valid { @@ -384,6 +384,22 @@ func (v *Validator) parseElementValue(key string, definition FieldDefinition, va if err := ensurePatternMatches(key, valStr, definition.Pattern); err != nil { return err } + case "date": + switch val := val.(type) { + case string: + if err := ensurePatternMatches(key, val, definition.Pattern); err != nil { + return err + } + valid = true + case float64: + // date as seconds or milliseconds since epoch + if definition.Pattern != "" { + return fmt.Errorf("numeric date in field %q, but pattern defined", key) + } + valid = true + default: + valid = false + } case "ip": var valStr string valStr, valid = val.(string) diff --git a/internal/fields/validate_test.go b/internal/fields/validate_test.go index 1e142927c..26b352f8a 100644 --- a/internal/fields/validate_test.go +++ b/internal/fields/validate_test.go @@ -151,6 +151,22 @@ func Test_parseElementValue(t *testing.T) { Pattern: "^[0-9]{4}(-[0-9]{2}){2}[T ][0-9]{2}(:[0-9]{2}){2}Z$", }, }, + { + key: "date as milliseconds", + value: float64(1420070400001), + definition: FieldDefinition{ + Type: "date", + }, + }, + { + key: "date as milisecond with pattern", + value: float64(1420070400001), + definition: FieldDefinition{ + Type: "date", + Pattern: "^[0-9]{4}(-[0-9]{2}){2}[T ][0-9]{2}(:[0-9]{2}){2}Z$", + }, + fail: true, + }, { key: "bad date", value: "10 Oct 2020 3:42PM",