Commit e03aea6d authored by Geoff Simmons's avatar Geoff Simmons

implement and test formatters for %T

parent b38ed7c9
......@@ -225,26 +225,33 @@ format_b_##dir(tx_t *tx, char *name, enum VSL_tag_e tag, char **s, \
FORMAT_b(client, ReqAcct)
FORMAT_b(backend, BereqAcct)
static void
format_DT(tx_t *tx, vre_t *time_re, int m, char **s, size_t *len)
{
char *t;
double d;
char *f = get_hdr(tx, SLT_Timestamp, time_re);
t = get_fld(f, 1);
errno = 0;
d = strtod(t, NULL);
if (errno != 0)
scratch[0] = '\0';
else
sprintf(scratch, "%d", (int) (d * m));
*s = scratch;
*len = strlen(scratch);
}
#define FORMAT_D(dir, ts) \
void \
format_D_##dir(tx_t *tx, char *name, enum VSL_tag_e tag, char **s, \
size_t *len) \
{ \
char *t; \
double d; \
(void) name; \
(void) tag; \
\
char *f = get_hdr(tx, SLT_Timestamp, time_##ts##_re); \
t = get_fld(f, 1); \
errno = 0; \
d = strtod(t, NULL); \
if (errno != 0) \
scratch[0] = '\0'; \
else \
sprintf(scratch, "%d", (int) (d * 1e6)); \
*s = scratch; \
*len = strlen(scratch); \
format_DT(tx, time_##ts##_re, 1e6, s, len); \
}
FORMAT_D(client, resp)
......@@ -430,6 +437,20 @@ format_##ltr(tx_t *tx, char *name, enum VSL_tag_e tag, \
FORMAT_tim(t, "[%d/%b/%Y:%T %z]", (void) name)
#define FORMAT_T(dir, ts) \
void \
format_T_##dir(tx_t *tx, char *name, enum VSL_tag_e tag, char **s, \
size_t *len) \
{ \
(void) name; \
(void) tag; \
\
format_DT(tx, time_##ts##_re, 1, s, len); \
}
FORMAT_T(client, resp)
FORMAT_T(backend, beresp_body)
#if 0
#define FORMAT_U(dir, dx) \
......
......@@ -88,3 +88,6 @@ formatter_f format_s_client;
formatter_f format_s_backend;
formatter_f format_t;
formatter_f format_T_client;
formatter_f format_T_backend;
......@@ -829,6 +829,33 @@ static const char
return NULL;
}
static const char
*test_format_T(void)
{
tx_t tx;
logline_t rec;
chunk_t chunk;
char *str;
size_t len;
printf("... testing format_T_*()\n");
init_tx_rec_chunk(&tx, &rec, &chunk);
MAN(chunk.data);
set_record_data(&rec, &chunk, TS_RESP_PAYLOAD, SLT_Timestamp);
format_T_client(&tx, NULL, SLT__Bogus, &str, &len);
MASSERT(strcmp(str, "0") == 0);
MASSERT(len == 1);
set_record_data(&rec, &chunk, TS_BERESP_PAYLOAD, SLT_Timestamp);
format_T_backend(&tx, NULL, SLT__Bogus, &str, &len);
MASSERT(strcmp(str, "0") == 0);
MASSERT(len == 1);
return NULL;
}
static const char
*all_tests(void)
{
......@@ -850,6 +877,7 @@ static const char
mu_run_test(test_format_r);
mu_run_test(test_format_s);
mu_run_test(test_format_t);
mu_run_test(test_format_T);
return NULL;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment