From 49f9dc0b401df782d2883701bd87f77a56f9fd23 Mon Sep 17 00:00:00 2001
From: Etienne Carriere <etienne.carriere@datadome.co>
Date: Wed, 17 Jan 2018 13:43:24 +0100
Subject: [PATCH] MINOR: sample: add date_us sample

Add date_us sample that returns the microsecond part of the timeval
structure representing the date of the structure. The "second" part of
the timeval can already be fetched by the "date" sample
---
 doc/configuration.txt |  5 +++++
 src/sample.c          | 12 ++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/doc/configuration.txt b/doc/configuration.txt
index 8275067..ed16472 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -13503,6 +13503,11 @@ date([<offset>]) : integer
      # set an expires header to now+1 hour in every response
      http-response set-header Expires %[date(3600),http_date]
 
+date_us : integer
+  Return the microseconds part of the date (the "second" part is returned by 
+  date sample). This sample is coherent with the date sample as it is comes 
+  from the same timeval structure
+
 distcc_body(<token>[,<occ>]) : binary
   Parses a distcc message and returns the body associated to occurrence #<occ>
   of the token <token>. Occurrences start at 1, and when unspecified, any may
diff --git a/src/sample.c b/src/sample.c
index ed2aee0..442dc70 100644
--- a/src/sample.c
+++ b/src/sample.c
@@ -2575,6 +2575,17 @@ smp_fetch_date(const struct arg *args, struct sample *smp, const char *kw, void
 	return 1;
 }
 
+/* retrieve the current microsecond part of the date  */
+static int
+smp_fetch_date_us(const struct arg *args, struct sample *smp, const char *kw, void *private)
+{
+	smp->data.u.sint = date.tv_usec;
+	smp->data.type = SMP_T_SINT;
+	smp->flags |= SMP_F_VOL_TEST | SMP_F_MAY_CHANGE;
+	return 1;
+}
+
+
 /* returns the hostname */
 static int
 smp_fetch_hostname(const struct arg *args, struct sample *smp, const char *kw, void *private)
@@ -2768,6 +2779,7 @@ static struct sample_fetch_kw_list smp_kws = {ILH, {
 	{ "always_true",  smp_fetch_true,  0,            NULL, SMP_T_BOOL, SMP_USE_INTRN },
 	{ "env",          smp_fetch_env,   ARG1(1,STR),  NULL, SMP_T_STR,  SMP_USE_INTRN },
 	{ "date",         smp_fetch_date,  ARG1(0,SINT), NULL, SMP_T_SINT, SMP_USE_INTRN },
+	{ "date_us",      smp_fetch_date_us,  0,         NULL, SMP_T_SINT, SMP_USE_INTRN },
 	{ "hostname",     smp_fetch_hostname, 0,         NULL, SMP_T_STR,  SMP_USE_INTRN },
 	{ "nbproc",       smp_fetch_nbproc,0,            NULL, SMP_T_SINT, SMP_USE_INTRN },
 	{ "proc",         smp_fetch_proc,  0,            NULL, SMP_T_SINT, SMP_USE_INTRN },
-- 
2.7.4

