From 9edc16e4d664f569b6f40acadf706e94a8752785 Mon Sep 17 00:00:00 2001 From: Makeev Ivan Date: Tue, 28 Aug 2018 14:08:55 +0400 Subject: [PATCH] Adding {when_unix_ms} requests placeholder (unix timestamp with a milliseconds precision) (#2260) --- caddyhttp/httpserver/replacer.go | 8 +++++++- caddyhttp/httpserver/replacer_test.go | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/caddyhttp/httpserver/replacer.go b/caddyhttp/httpserver/replacer.go index 295c54ed..945b93ef 100644 --- a/caddyhttp/httpserver/replacer.go +++ b/caddyhttp/httpserver/replacer.go @@ -372,6 +372,8 @@ func (r *replacer) getSubstitution(key string) string { return now().UTC().Format(timeFormatISOUTC) case "{when_unix}": return strconv.FormatInt(now().Unix(), 10) + case "{when_unix_ms}": + return strconv.FormatInt(nanoToMilliseconds(now().UnixNano()), 10) case "{file}": _, file := path.Split(r.request.URL.Path) return file @@ -521,9 +523,13 @@ func (r *replacer) getSubstitution(key string) string { return r.emptyValue } +func nanoToMilliseconds(d int64) int64 { + return d / 1e6 +} + // convertToMilliseconds returns the number of milliseconds in the given duration func convertToMilliseconds(d time.Duration) int64 { - return d.Nanoseconds() / 1e6 + return nanoToMilliseconds(d.Nanoseconds()) } // Set sets key to value in the r.customReplacements map. diff --git a/caddyhttp/httpserver/replacer_test.go b/caddyhttp/httpserver/replacer_test.go index 6d05e192..936f9618 100644 --- a/caddyhttp/httpserver/replacer_test.go +++ b/caddyhttp/httpserver/replacer_test.go @@ -86,7 +86,7 @@ func TestReplace(t *testing.T) { old := now now = func() time.Time { - return time.Date(2006, 1, 2, 15, 4, 5, 02, time.FixedZone("hardcoded", -7)) + return time.Date(2006, 1, 2, 15, 4, 5, 99999999, time.FixedZone("hardcoded", -7)) } defer func() { now = old @@ -102,6 +102,7 @@ func TestReplace(t *testing.T) { {"{when}", "02/Jan/2006:15:04:05 +0000"}, {"{when_iso}", "2006-01-02T15:04:12Z"}, {"{when_unix}", "1136214252"}, + {"{when_unix_ms}", "1136214252099"}, {"The Custom header is {>Custom}.", "The Custom header is foobarbaz."}, {"The CustomAdd header is {>CustomAdd}.", "The CustomAdd header is caddy."}, {"The Custom response header is {