return 1;
}
-/* Dump all fields from <stats> into trash using the HTML format. A column is
+/* Dump all fields from <stats> into <out> using the HTML format. A column is
* reserved for the checkbox is ST_SHOWADMIN is set in <flags>. Some extra info
* are provided if ST_SHLGNDS is present in <flags>.
*/
-static int stats_dump_fields_html(const struct field *stats, unsigned int flags)
+static int stats_dump_fields_html(struct chunk *out, const struct field *stats, unsigned int flags)
{
struct chunk src;
if (stats[ST_F_TYPE].u.u32 == STATS_TYPE_FE) {
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* name, queue */
"<tr class=\"frontend\">");
if (flags & ST_SHOWADMIN) {
/* Column sub-heading for Enable or Disable server */
- chunk_appendf(&trash, "<td></td>");
+ chunk_appendf(out, "<td></td>");
}
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<td class=ac>"
"<a name=\"%s/Frontend\"></a>"
"<a class=lfsb href=\"#%s/Frontend\">Frontend</a></td>"
"",
field_str(stats, ST_F_PXNAME), field_str(stats, ST_F_PXNAME));
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* sessions rate : current */
"<td><u>%s<div class=tips><table class=det>"
"<tr><th>Current connection rate:</th><td>%s/s</td></tr>"
U2H(stats[ST_F_RATE].u.u32));
if (strcmp(field_str(stats, ST_F_MODE), "http") == 0)
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<tr><th>Current request rate:</th><td>%s/s</td></tr>",
U2H(stats[ST_F_REQ_RATE].u.u32));
- chunk_appendf(&trash,
+ chunk_appendf(out,
"</table></div></u></td>"
/* sessions rate : max */
"<td><u>%s<div class=tips><table class=det>"
U2H(stats[ST_F_RATE_MAX].u.u32));
if (strcmp(field_str(stats, ST_F_MODE), "http") == 0)
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<tr><th>Max request rate:</th><td>%s/s</td></tr>",
U2H(stats[ST_F_REQ_RATE_MAX].u.u32));
- chunk_appendf(&trash,
+ chunk_appendf(out,
"</table></div></u></td>"
/* sessions rate : limit */
"<td>%s</td>",
LIM2A(stats[ST_F_RATE_LIM].u.u32, "-"));
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* sessions: current, max, limit, total */
"<td>%s</td><td>%s</td><td>%s</td>"
"<td><u>%s<div class=tips><table class=det>"
/* http response (via hover): 1xx, 2xx, 3xx, 4xx, 5xx, other */
if (strcmp(field_str(stats, ST_F_MODE), "http") == 0) {
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<tr><th>Cum. HTTP requests:</th><td>%s</td></tr>"
"<tr><th>- HTTP 1xx responses:</th><td>%s</td></tr>"
"<tr><th>- HTTP 2xx responses:</th><td>%s</td></tr>"
U2H(stats[ST_F_INTERCEPTED].u.u64));
}
- chunk_appendf(&trash,
+ chunk_appendf(out,
"</table></div></u></td>"
/* sessions: lbtot, lastsess */
"<td></td><td></td>"
"",
U2H(stats[ST_F_BIN].u.u64));
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* bytes:out + compression stats (via hover): comp_in, comp_out, comp_byp */
"<td>%s%s<div class=tips><table class=det>"
"<tr><th>Response bytes in:</th><td>%s</td></tr>"
stats[ST_F_BOUT].u.u64 ? (int)((stats[ST_F_COMP_IN].u.u64 - stats[ST_F_COMP_OUT].u.u64) * 100 / stats[ST_F_BOUT].u.u64) : 0,
(stats[ST_F_COMP_IN].u.u64 || stats[ST_F_COMP_BYP].u.u64) ? "</u>":"");
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* denied: req, resp */
"<td>%s</td><td>%s</td>"
/* errors : request, connect, response */
field_str(stats, ST_F_STATUS));
}
else if (stats[ST_F_TYPE].u.u32 == STATS_TYPE_SO) {
- chunk_appendf(&trash, "<tr class=socket>");
+ chunk_appendf(out, "<tr class=socket>");
if (flags & ST_SHOWADMIN) {
/* Column sub-heading for Enable or Disable server */
- chunk_appendf(&trash, "<td></td>");
+ chunk_appendf(out, "<td></td>");
}
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* frontend name, listener name */
"<td class=ac><a name=\"%s/+%s\"></a>%s"
"<a class=lfsb href=\"#%s/+%s\">%s</a>"
field_str(stats, ST_F_PXNAME), field_str(stats, ST_F_SVNAME), field_str(stats, ST_F_SVNAME));
if (flags & ST_SHLGNDS) {
- chunk_appendf(&trash, "<div class=tips>");
+ chunk_appendf(out, "<div class=tips>");
if (isdigit(*field_str(stats, ST_F_ADDR)))
- chunk_appendf(&trash, "IPv4: %s, ", field_str(stats, ST_F_ADDR));
+ chunk_appendf(out, "IPv4: %s, ", field_str(stats, ST_F_ADDR));
else if (*field_str(stats, ST_F_ADDR) == '[')
- chunk_appendf(&trash, "IPv6: %s, ", field_str(stats, ST_F_ADDR));
+ chunk_appendf(out, "IPv6: %s, ", field_str(stats, ST_F_ADDR));
else if (*field_str(stats, ST_F_ADDR))
- chunk_appendf(&trash, "%s, ", field_str(stats, ST_F_ADDR));
+ chunk_appendf(out, "%s, ", field_str(stats, ST_F_ADDR));
/* id */
- chunk_appendf(&trash, "id: %d</div>", stats[ST_F_SID].u.u32);
+ chunk_appendf(out, "id: %d</div>", stats[ST_F_SID].u.u32);
}
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* queue */
"%s</td><td colspan=3></td>"
/* sessions rate: current, max, limit */
U2H(stats[ST_F_SCUR].u.u32), U2H(stats[ST_F_SMAX].u.u32), U2H(stats[ST_F_SLIM].u.u32),
U2H(stats[ST_F_STOT].u.u64), U2H(stats[ST_F_BIN].u.u64), U2H(stats[ST_F_BOUT].u.u64));
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* denied: req, resp */
"<td>%s</td><td>%s</td>"
/* errors: request, connect, response */
}
if (memcmp(field_str(stats, ST_F_STATUS), "MAINT", 5) == 0)
- chunk_appendf(&trash, "<tr class=\"maintain\">");
+ chunk_appendf(out, "<tr class=\"maintain\">");
else
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<tr class=\"%s_%s\">",
(stats[ST_F_BCK].u.u32) ? "backup" : "active", style);
if (flags & ST_SHOWADMIN)
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<td><input type=\"checkbox\" name=\"s\" value=\"%s\"></td>",
field_str(stats, ST_F_SVNAME));
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<td class=ac><a name=\"%s/%s\"></a>%s"
"<a class=lfsb href=\"#%s/%s\">%s</a>"
"",
field_str(stats, ST_F_PXNAME), field_str(stats, ST_F_SVNAME), field_str(stats, ST_F_SVNAME));
if (flags & ST_SHLGNDS) {
- chunk_appendf(&trash, "<div class=tips>");
+ chunk_appendf(out, "<div class=tips>");
if (isdigit(*field_str(stats, ST_F_ADDR)))
- chunk_appendf(&trash, "IPv4: %s, ", field_str(stats, ST_F_ADDR));
+ chunk_appendf(out, "IPv4: %s, ", field_str(stats, ST_F_ADDR));
else if (*field_str(stats, ST_F_ADDR) == '[')
- chunk_appendf(&trash, "IPv6: %s, ", field_str(stats, ST_F_ADDR));
+ chunk_appendf(out, "IPv6: %s, ", field_str(stats, ST_F_ADDR));
else if (*field_str(stats, ST_F_ADDR))
- chunk_appendf(&trash, "%s, ", field_str(stats, ST_F_ADDR));
+ chunk_appendf(out, "%s, ", field_str(stats, ST_F_ADDR));
/* id */
- chunk_appendf(&trash, "id: %d", stats[ST_F_SID].u.u32);
+ chunk_appendf(out, "id: %d", stats[ST_F_SID].u.u32);
/* cookie */
if (stats[ST_F_COOKIE].type) {
- chunk_appendf(&trash, ", cookie: '");
+ chunk_appendf(out, ", cookie: '");
chunk_initstr(&src, field_str(stats, ST_F_COOKIE));
- chunk_htmlencode(&trash, &src);
- chunk_appendf(&trash, "'");
+ chunk_htmlencode(out, &src);
+ chunk_appendf(out, "'");
}
- chunk_appendf(&trash, "</div>");
+ chunk_appendf(out, "</div>");
}
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* queue : current, max, limit */
"%s</td><td>%s</td><td>%s</td><td>%s</td>"
/* sessions rate : current, max, limit */
U2H(stats[ST_F_QCUR].u.u32), U2H(stats[ST_F_QMAX].u.u32), LIM2A(stats[ST_F_QLIMIT].u.u32, "-"),
U2H(stats[ST_F_RATE].u.u32), U2H(stats[ST_F_RATE_MAX].u.u32));
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* sessions: current, max, limit, total */
"<td>%s</td><td>%s</td><td>%s</td>"
"<td><u>%s<div class=tips><table class=det>"
tot += stats[ST_F_HRSP_4XX].u.u64;
tot += stats[ST_F_HRSP_5XX].u.u64;
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<tr><th>Cum. HTTP responses:</th><td>%s</td></tr>"
"<tr><th>- HTTP 1xx responses:</th><td>%s</td><td>(%d%%)</td></tr>"
"<tr><th>- HTTP 2xx responses:</th><td>%s</td><td>(%d%%)</td></tr>"
U2H(stats[ST_F_HRSP_OTHER].u.u64), tot ? (int)(100 * stats[ST_F_HRSP_OTHER].u.u64 / tot) : 0);
}
- chunk_appendf(&trash, "<tr><th colspan=3>Avg over last 1024 success. conn.</th></tr>");
- chunk_appendf(&trash, "<tr><th>- Queue time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_QTIME].u.u32));
- chunk_appendf(&trash, "<tr><th>- Connect time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_CTIME].u.u32));
+ chunk_appendf(out, "<tr><th colspan=3>Avg over last 1024 success. conn.</th></tr>");
+ chunk_appendf(out, "<tr><th>- Queue time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_QTIME].u.u32));
+ chunk_appendf(out, "<tr><th>- Connect time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_CTIME].u.u32));
if (strcmp(field_str(stats, ST_F_MODE), "http") == 0)
- chunk_appendf(&trash, "<tr><th>- Response time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_RTIME].u.u32));
- chunk_appendf(&trash, "<tr><th>- Total time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_TTIME].u.u32));
+ chunk_appendf(out, "<tr><th>- Response time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_RTIME].u.u32));
+ chunk_appendf(out, "<tr><th>- Total time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_TTIME].u.u32));
- chunk_appendf(&trash,
+ chunk_appendf(out,
"</table></div></u></td>"
/* sessions: lbtot, last */
"<td>%s</td><td>%s</td>",
U2H(stats[ST_F_LBTOT].u.u64),
human_time(stats[ST_F_LASTSESS].u.s32, 1));
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* bytes : in, out */
"<td>%s</td><td>%s</td>"
/* denied: req, resp */
(long long)stats[ST_F_WREDIS].u.u64);
/* status, last change */
- chunk_appendf(&trash, "<td class=ac>");
+ chunk_appendf(out, "<td class=ac>");
/* FIXME!!!!
* LASTCHG should contain the last change for *this* server and must be computed
if (memcmp(field_str(stats, ST_F_STATUS), "MAINT", 5) == 0) {
- chunk_appendf(&trash, "%s MAINT", human_time(stats[ST_F_LASTCHG].u.u32, 1));
+ chunk_appendf(out, "%s MAINT", human_time(stats[ST_F_LASTCHG].u.u32, 1));
}
else if (memcmp(field_str(stats, ST_F_STATUS), "no check", 5) == 0) {
- chunk_strcat(&trash, "<i>no check</i>");
+ chunk_strcat(out, "<i>no check</i>");
}
else {
- chunk_appendf(&trash, "%s %s", human_time(stats[ST_F_LASTCHG].u.u32, 1), field_str(stats, ST_F_STATUS));
+ chunk_appendf(out, "%s %s", human_time(stats[ST_F_LASTCHG].u.u32, 1), field_str(stats, ST_F_STATUS));
if (memcmp(field_str(stats, ST_F_STATUS), "DOWN", 4) == 0) {
if (stats[ST_F_CHECK_HEALTH].u.u32)
- chunk_strcat(&trash, " ↑");
+ chunk_strcat(out, " ↑");
}
else if (stats[ST_F_CHECK_HEALTH].u.u32 < stats[ST_F_CHECK_RISE].u.u32 + stats[ST_F_CHECK_FALL].u.u32 - 1)
- chunk_strcat(&trash, " ↓");
+ chunk_strcat(out, " ↓");
}
if (memcmp(field_str(stats, ST_F_STATUS), "DOWN", 4) == 0 &&
stats[ST_F_AGENT_STATUS].type && !stats[ST_F_AGENT_HEALTH].u.u32) {
- chunk_appendf(&trash,
+ chunk_appendf(out,
"</td><td class=ac><u> %s",
field_str(stats, ST_F_AGENT_STATUS));
if (stats[ST_F_AGENT_CODE].type)
- chunk_appendf(&trash, "/%d", stats[ST_F_AGENT_CODE].u.u32);
+ chunk_appendf(out, "/%d", stats[ST_F_AGENT_CODE].u.u32);
if (stats[ST_F_AGENT_DURATION].type && stats[ST_F_AGENT_DURATION].u.u64 >= 0)
- chunk_appendf(&trash, " in %lums", (long)stats[ST_F_AGENT_DURATION].u.u64);
+ chunk_appendf(out, " in %lums", (long)stats[ST_F_AGENT_DURATION].u.u64);
- chunk_appendf(&trash, "<div class=tips>%s", field_str(stats, ST_F_AGENT_DESC));
+ chunk_appendf(out, "<div class=tips>%s", field_str(stats, ST_F_AGENT_DESC));
if (*field_str(stats, ST_F_LAST_AGT)) {
- chunk_appendf(&trash, ": ");
+ chunk_appendf(out, ": ");
chunk_initstr(&src, field_str(stats, ST_F_LAST_AGT));
- chunk_htmlencode(&trash, &src);
+ chunk_htmlencode(out, &src);
}
- chunk_appendf(&trash, "</div></u>");
+ chunk_appendf(out, "</div></u>");
}
else if (stats[ST_F_CHECK_STATUS].type) {
- chunk_appendf(&trash,
+ chunk_appendf(out,
"</td><td class=ac><u> %s",
field_str(stats, ST_F_CHECK_STATUS));
if (stats[ST_F_CHECK_CODE].type)
- chunk_appendf(&trash, "/%d", stats[ST_F_CHECK_CODE].u.u32);
+ chunk_appendf(out, "/%d", stats[ST_F_CHECK_CODE].u.u32);
if (stats[ST_F_CHECK_DURATION].type && stats[ST_F_CHECK_DURATION].u.u64 >= 0)
- chunk_appendf(&trash, " in %lums", (long)stats[ST_F_CHECK_DURATION].u.u64);
+ chunk_appendf(out, " in %lums", (long)stats[ST_F_CHECK_DURATION].u.u64);
- chunk_appendf(&trash, "<div class=tips>%s", field_str(stats, ST_F_CHECK_DESC));
+ chunk_appendf(out, "<div class=tips>%s", field_str(stats, ST_F_CHECK_DESC));
if (*field_str(stats, ST_F_LAST_CHK)) {
- chunk_appendf(&trash, ": ");
+ chunk_appendf(out, ": ");
chunk_initstr(&src, field_str(stats, ST_F_LAST_CHK));
- chunk_htmlencode(&trash, &src);
+ chunk_htmlencode(out, &src);
}
- chunk_appendf(&trash, "</div></u>");
+ chunk_appendf(out, "</div></u>");
}
else
- chunk_appendf(&trash, "</td><td>");
+ chunk_appendf(out, "</td><td>");
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* weight */
"</td><td class=ac>%d</td>"
/* act, bck */
/* check failures: unique, fatal, down time */
if (stats[ST_F_CHKFAIL].type) {
- chunk_appendf(&trash, "<td><u>%lld", (long long)stats[ST_F_CHKFAIL].u.u64);
+ chunk_appendf(out, "<td><u>%lld", (long long)stats[ST_F_CHKFAIL].u.u64);
if (stats[ST_F_HANAFAIL].type)
- chunk_appendf(&trash, "/%lld", (long long)stats[ST_F_HANAFAIL].u.u64);
+ chunk_appendf(out, "/%lld", (long long)stats[ST_F_HANAFAIL].u.u64);
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<div class=tips>Failed Health Checks%s</div></u></td>"
"<td>%lld</td><td>%s</td>"
"",
}
else if (strcmp(field_str(stats, ST_F_STATUS), "MAINT") != 0 && field_format(stats, ST_F_TRACKED) == FF_STR) {
/* tracking a server (hence inherited maint would appear as "MAINT (via...)" */
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<td class=ac colspan=3><a class=lfsb href=\"#%s\">via %s</a></td>",
field_str(stats, ST_F_TRACKED), field_str(stats, ST_F_TRACKED));
}
else
- chunk_appendf(&trash, "<td colspan=3></td>");
+ chunk_appendf(out, "<td colspan=3></td>");
/* throttle */
if (stats[ST_F_THROTTLE].type)
- chunk_appendf(&trash, "<td class=ac>%d %%</td></tr>\n", stats[ST_F_THROTTLE].u.u32);
+ chunk_appendf(out, "<td class=ac>%d %%</td></tr>\n", stats[ST_F_THROTTLE].u.u32);
else
- chunk_appendf(&trash, "<td class=ac>-</td></tr>\n");
+ chunk_appendf(out, "<td class=ac>-</td></tr>\n");
}
else if (stats[ST_F_TYPE].u.u32 == STATS_TYPE_BE) {
- chunk_appendf(&trash, "<tr class=\"backend\">");
+ chunk_appendf(out, "<tr class=\"backend\">");
if (flags & ST_SHOWADMIN) {
/* Column sub-heading for Enable or Disable server */
- chunk_appendf(&trash, "<td></td>");
+ chunk_appendf(out, "<td></td>");
}
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<td class=ac>"
/* name */
"%s<a name=\"%s/Backend\"></a>"
if (flags & ST_SHLGNDS) {
/* balancing */
- chunk_appendf(&trash, "<div class=tips>balancing: %s",
+ chunk_appendf(out, "<div class=tips>balancing: %s",
field_str(stats, ST_F_ALGO));
/* cookie */
if (stats[ST_F_COOKIE].type) {
- chunk_appendf(&trash, ", cookie: '");
+ chunk_appendf(out, ", cookie: '");
chunk_initstr(&src, field_str(stats, ST_F_COOKIE));
- chunk_htmlencode(&trash, &src);
- chunk_appendf(&trash, "'");
+ chunk_htmlencode(out, &src);
+ chunk_appendf(out, "'");
}
- chunk_appendf(&trash, "</div>");
+ chunk_appendf(out, "</div>");
}
- chunk_appendf(&trash,
+ chunk_appendf(out,
"%s</td>"
/* queue : current, max */
"<td>%s</td><td>%s</td><td></td>"
U2H(stats[ST_F_QCUR].u.u32), U2H(stats[ST_F_QMAX].u.u32),
U2H(stats[ST_F_RATE].u.u32), U2H(stats[ST_F_RATE_MAX].u.u32));
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* sessions: current, max, limit, total */
"<td>%s</td><td>%s</td><td>%s</td>"
"<td><u>%s<div class=tips><table class=det>"
/* http response (via hover): 1xx, 2xx, 3xx, 4xx, 5xx, other */
if (strcmp(field_str(stats, ST_F_MODE), "http") == 0) {
- chunk_appendf(&trash,
+ chunk_appendf(out,
"<tr><th>Cum. HTTP requests:</th><td>%s</td></tr>"
"<tr><th>- HTTP 1xx responses:</th><td>%s</td></tr>"
"<tr><th>- HTTP 2xx responses:</th><td>%s</td></tr>"
U2H(stats[ST_F_INTERCEPTED].u.u64));
}
- chunk_appendf(&trash, "<tr><th>- Queue time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_QTIME].u.u32));
- chunk_appendf(&trash, "<tr><th>- Connect time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_QTIME].u.u32));
+ chunk_appendf(out, "<tr><th>- Queue time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_QTIME].u.u32));
+ chunk_appendf(out, "<tr><th>- Connect time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_QTIME].u.u32));
if (strcmp(field_str(stats, ST_F_MODE), "http") == 0)
- chunk_appendf(&trash, "<tr><th>- Response time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_RTIME].u.u32));
- chunk_appendf(&trash, "<tr><th>- Total time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_TTIME].u.u32));
+ chunk_appendf(out, "<tr><th>- Response time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_RTIME].u.u32));
+ chunk_appendf(out, "<tr><th>- Total time:</th><td>%s</td><td>ms</td></tr>", U2H(stats[ST_F_TTIME].u.u32));
- chunk_appendf(&trash,
+ chunk_appendf(out,
"</table></div></u></td>"
/* sessions: lbtot, last */
"<td>%s</td><td>%s</td>"
human_time(stats[ST_F_LASTSESS].u.s32, 1),
U2H(stats[ST_F_BIN].u.u64));
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* bytes:out + compression stats (via hover): comp_in, comp_out, comp_byp */
"<td>%s%s<div class=tips><table class=det>"
"<tr><th>Response bytes in:</th><td>%s</td></tr>"
stats[ST_F_BOUT].u.u64 ? (int)((stats[ST_F_COMP_IN].u.u64 - stats[ST_F_COMP_OUT].u.u64) * 100 / stats[ST_F_BOUT].u.u64) : 0,
(stats[ST_F_COMP_IN].u.u64 || stats[ST_F_COMP_BYP].u.u64) ? "</u>":"");
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* denied: req, resp */
"<td>%s</td><td>%s</td>"
/* errors : request, connect */
stats[ST_F_WEIGHT].u.u32,
stats[ST_F_ACT].u.u32, stats[ST_F_BCK].u.u32);
- chunk_appendf(&trash,
+ chunk_appendf(out,
/* rest of backend: nothing, down transitions, total downtime, throttle */
"<td class=ac> </td><td>%d</td>"
"<td>%s</td>"
flags |= ST_SHOWADMIN;
if (appctx->ctx.stats.flags & STAT_FMT_HTML)
- return stats_dump_fields_html(stats, flags);
+ return stats_dump_fields_html(&trash, stats, flags);
else
return stats_dump_fields_csv(&trash, stats);
}