diff --git a/include/fluent-bit/flb_pack.h b/include/fluent-bit/flb_pack.h index 1abb9fda94a..953f12d5d10 100644 --- a/include/fluent-bit/flb_pack.h +++ b/include/fluent-bit/flb_pack.h @@ -40,6 +40,7 @@ #define FLB_PACK_JSON_DATE_ISO8601 1 #define FLB_PACK_JSON_DATE_EPOCH 2 #define FLB_PACK_JSON_DATE_JAVA_SQL_TIMESTAMP 3 +#define FLB_PACK_JSON_DATE_EPOCH_MS 4 /* Specific ISO8601 format */ #define FLB_PACK_JSON_DATE_ISO8601_FMT "%Y-%m-%dT%H:%M:%S" diff --git a/include/fluent-bit/flb_time.h b/include/fluent-bit/flb_time.h index 96f5d53e608..c3d5f9970b6 100644 --- a/include/fluent-bit/flb_time.h +++ b/include/fluent-bit/flb_time.h @@ -76,6 +76,7 @@ int flb_time_get(struct flb_time *tm); int flb_time_msleep(uint32_t ms); double flb_time_to_double(struct flb_time *tm); uint64_t flb_time_to_nanosec(struct flb_time *tm); +uint64_t flb_time_to_millisec(struct flb_time *tm); int flb_time_add(struct flb_time *base, struct flb_time *duration, struct flb_time *result); int flb_time_diff(struct flb_time *time1, diff --git a/src/flb_pack.c b/src/flb_pack.c index 06a5ee0950a..626f14cc06f 100644 --- a/src/flb_pack.c +++ b/src/flb_pack.c @@ -832,6 +832,11 @@ int flb_pack_to_json_date_type(const char *str) else if (strcasecmp(str, "epoch") == 0) { return FLB_PACK_JSON_DATE_EPOCH; } + else if (strcasecmp(str, "epoch_ms") == 0 || + strcasecmp(str, "epoch_millis") == 0 || + strcasecmp(str, "epoch_milliseconds") == 0) { + return FLB_PACK_JSON_DATE_EPOCH_MS; + } return -1; } @@ -986,6 +991,9 @@ flb_sds_t flb_pack_msgpack_to_json_format(const char *data, uint64_t bytes, case FLB_PACK_JSON_DATE_EPOCH: msgpack_pack_uint64(&tmp_pck, (long long unsigned)(tms.tm.tv_sec)); break; + case FLB_PACK_JSON_DATE_EPOCH_MS: + msgpack_pack_uint64(&tmp_pck, flb_time_to_millisec(&tms)); + break; } } diff --git a/src/flb_time.c b/src/flb_time.c index 978e79de1cf..92482124857 100644 --- a/src/flb_time.c +++ b/src/flb_time.c @@ -96,6 +96,11 @@ uint64_t flb_time_to_nanosec(struct flb_time *tm) return (((uint64_t)tm->tm.tv_sec * 1000000000L) + tm->tm.tv_nsec); } +uint64_t flb_time_to_millisec(struct flb_time *tm) +{ + return (((uint64_t)tm->tm.tv_sec * 1000L) + tm->tm.tv_nsec / 1000000L); +} + int flb_time_add(struct flb_time *base, struct flb_time *duration, struct flb_time *result) { if (base == NULL || duration == NULL|| result == NULL) {