REORG: cli: split dumpstats.h in stats.h and cli.h

proto/dumpstats.h has been split in 4 files:

  * proto/cli.h  contains protypes for the CLI
  * proto/stats.h contains prototypes for the stats
  * types/cli.h contains definition for the CLI
  * types/stats.h contains definition for the stats
diff --git a/include/proto/cli.h b/include/proto/cli.h
new file mode 100644
index 0000000..25c2ee0
--- /dev/null
+++ b/include/proto/cli.h
@@ -0,0 +1,31 @@
+/*
+ * include/proto/cli.h
+ * This file contains definitions of some primitives to dedicated to
+ * statistics output.
+ *
+ * Copyright (C) 2000-2011 Willy Tarreau - w@1wt.eu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, version 2.1
+ * exclusively.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef _PROTO_CLI_H
+#define _PROTO_CLI_H
+
+
+struct cli_kw* cli_find_kw(char **args);
+void cli_register_kw(struct cli_kw_list *kw_list);
+
+#endif /* _PROTO_CLI_H */
+
diff --git a/include/proto/stats.h b/include/proto/stats.h
new file mode 100644
index 0000000..dfd8bff
--- /dev/null
+++ b/include/proto/stats.h
@@ -0,0 +1,116 @@
+/*
+ * include/proto/stats.h
+ * This file contains definitions of some primitives to dedicated to
+ * statistics output.
+ *
+ * Copyright (C) 2000-2011 Willy Tarreau - w@1wt.eu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, version 2.1
+ * exclusively.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef _PROTO_STATS_H
+#define _PROTO_STATS_H
+
+#include <common/config.h>
+#include <types/applet.h>
+#include <types/stream_interface.h>
+
+
+static inline enum field_format field_format(const struct field *f, int e)
+{
+	return f[e].type & FF_MASK;
+}
+
+static inline enum field_origin field_origin(const struct field *f, int e)
+{
+	return f[e].type & FO_MASK;
+}
+
+static inline enum field_scope field_scope(const struct field *f, int e)
+{
+	return f[e].type & FS_MASK;
+}
+
+static inline enum field_nature field_nature(const struct field *f, int e)
+{
+	return f[e].type & FN_MASK;
+}
+
+static inline const char *field_str(const struct field *f, int e)
+{
+	return (field_format(f, e) == FF_STR) ? f[e].u.str : "";
+}
+
+static inline struct field mkf_s32(uint32_t type, int32_t value)
+{
+	struct field f = { .type = FF_S32 | type, .u.s32 = value };
+	return f;
+}
+
+static inline struct field mkf_u32(uint32_t type, uint32_t value)
+{
+	struct field f = { .type = FF_U32 | type, .u.u32 = value };
+	return f;
+}
+
+static inline struct field mkf_s64(uint32_t type, int64_t value)
+{
+	struct field f = { .type = FF_S64 | type, .u.s64 = value };
+	return f;
+}
+
+static inline struct field mkf_u64(uint32_t type, uint64_t value)
+{
+	struct field f = { .type = FF_U64 | type, .u.u64 = value };
+	return f;
+}
+
+static inline struct field mkf_str(uint32_t type, const char *value)
+{
+	struct field f = { .type = FF_STR | type, .u.str = value };
+	return f;
+}
+
+/* These two structs contains all field names according with
+ * the the number of entries in "enum stat_field" and
+ * "enum info_field"
+ */
+extern const char *info_field_names[];
+extern const char *stat_field_names[];
+
+int stats_fill_info(struct field *info, int len);
+int stats_fill_fe_stats(struct proxy *px, struct field *stats, int len);
+int stats_fill_li_stats(struct proxy *px, struct listener *l, int flags,
+                        struct field *stats, int len);
+int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags,
+                        struct field *stats, int len);
+int stats_fill_be_stats(struct proxy *px, int flags, struct field *stats, int len);
+
+extern struct applet http_stats_applet;
+
+void stats_io_handler(struct stream_interface *si);
+int stats_emit_raw_data_field(struct chunk *out, const struct field *f);
+int stats_emit_typed_data_field(struct chunk *out, const struct field *f);
+int stats_emit_field_tags(struct chunk *out, const struct field *f, char delim);
+int stats_dump_stat_to_buffer(struct stream_interface *si, struct uri_auth *uri);
+
+#endif /* _PROTO_STATS_H */
+
+/*
+ * Local variables:
+ *  c-indent-level: 8
+ *  c-basic-offset: 8
+ * End:
+ */
diff --git a/include/types/cli.h b/include/types/cli.h
new file mode 100644
index 0000000..35c2c67
--- /dev/null
+++ b/include/types/cli.h
@@ -0,0 +1,134 @@
+/*
+ * include/types/cli.h
+ * This file provides structures and types for CLI.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, version 2.1
+ * exclusively.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef _TYPES_CLI_H
+#define _TYPES_CLI_H
+
+#include <common/mini-clist.h>
+#include <types/applet.h>
+
+struct cli_kw {
+	const char *str_kw[5];   /* keywords ended by NULL, limited to 5
+				 separated keywords combination */
+	const char *usage;   /* usage message */
+	int (*parse)(char **args, struct appctx *appctx, void *private);
+	int (*io_handler)(struct appctx *appctx);
+	void (*io_release)(struct appctx *appctx);
+	void *private;
+};
+
+struct cli_kw_list {
+	struct list list;
+	struct cli_kw kw[VAR_ARRAY];
+};
+
+/* Show Info fields for CLI output. For any field added here, please add the text
+ * representation in the info_field_names array below. Please only append at the end,
+ * before the INF_TOTAL_FIELDS entry, and never insert anything in the middle
+ * nor at the beginning.
+ */
+enum info_field {
+	INF_NAME,
+	INF_VERSION,
+	INF_RELEASE_DATE,
+	INF_NBPROC,
+	INF_PROCESS_NUM,
+	INF_PID,
+	INF_UPTIME,
+	INF_UPTIME_SEC,
+	INF_MEMMAX_MB,
+	INF_POOL_ALLOC_MB,
+	INF_POOL_USED_MB,
+	INF_POOL_FAILED,
+	INF_ULIMIT_N,
+	INF_MAXSOCK,
+	INF_MAXCONN,
+	INF_HARD_MAXCONN,
+	INF_CURR_CONN,
+	INF_CUM_CONN,
+	INF_CUM_REQ,
+	INF_MAX_SSL_CONNS,
+	INF_CURR_SSL_CONNS,
+	INF_CUM_SSL_CONNS,
+	INF_MAXPIPES,
+	INF_PIPES_USED,
+	INF_PIPES_FREE,
+	INF_CONN_RATE,
+	INF_CONN_RATE_LIMIT,
+	INF_MAX_CONN_RATE,
+	INF_SESS_RATE,
+	INF_SESS_RATE_LIMIT,
+	INF_MAX_SESS_RATE,
+	INF_SSL_RATE,
+	INF_SSL_RATE_LIMIT,
+	INF_MAX_SSL_RATE,
+	INF_SSL_FRONTEND_KEY_RATE,
+	INF_SSL_FRONTEND_MAX_KEY_RATE,
+	INF_SSL_FRONTEND_SESSION_REUSE_PCT,
+	INF_SSL_BACKEND_KEY_RATE,
+	INF_SSL_BACKEND_MAX_KEY_RATE,
+	INF_SSL_CACHE_LOOKUPS,
+	INF_SSL_CACHE_MISSES,
+	INF_COMPRESS_BPS_IN,
+	INF_COMPRESS_BPS_OUT,
+	INF_COMPRESS_BPS_RATE_LIM,
+	INF_ZLIB_MEM_USAGE,
+	INF_MAX_ZLIB_MEM_USAGE,
+	INF_TASKS,
+	INF_RUN_QUEUE,
+	INF_IDLE_PCT,
+	INF_NODE,
+	INF_DESCRIPTION,
+
+	/* must always be the last one */
+	INF_TOTAL_FIELDS
+};
+
+
+/* stats socket states */
+enum {
+	STAT_CLI_INIT = 0,   /* initial state, must leave to zero ! */
+	STAT_CLI_END,        /* final state, let's close */
+	STAT_CLI_GETREQ,     /* wait for a request */
+	STAT_CLI_OUTPUT,     /* all states after this one are responses */
+	STAT_CLI_PROMPT,     /* display the prompt (first output, same code) */
+	STAT_CLI_PRINT,      /* display message in cli->msg */
+	STAT_CLI_PRINT_FREE, /* display message in cli->msg. After the display, free the pointer */
+	STAT_CLI_O_INFO,     /* dump info */
+	STAT_CLI_O_SESS,     /* dump streams */
+	STAT_CLI_O_ERR,      /* dump errors */
+	STAT_CLI_O_TAB,      /* dump tables */
+	STAT_CLI_O_CLR,      /* clear tables */
+	STAT_CLI_O_SET,      /* set entries in tables */
+	STAT_CLI_O_STAT,     /* dump stats */
+	STAT_CLI_O_PATS,     /* list all pattern reference available */
+	STAT_CLI_O_PAT,      /* list all entries of a pattern */
+	STAT_CLI_O_MLOOK,    /* lookup a map entry */
+	STAT_CLI_O_POOLS,    /* dump memory pools */
+	STAT_CLI_O_TLSK,     /* list all TLS ticket keys references */
+	STAT_CLI_O_TLSK_ENT, /* list all TLS ticket keys entries for a reference */
+	STAT_CLI_O_RESOLVERS,/* dump a resolver's section nameservers counters */
+	STAT_CLI_O_SERVERS_STATE, /* dump server state and changing information */
+	STAT_CLI_O_BACKEND,  /* dump backend list */
+	STAT_CLI_O_ENV,      /* dump environment */
+	STAT_CLI_O_CUSTOM,   /* custom callback pointer */
+};
+
+
+#endif /* _TYPES_CLI_H */
diff --git a/include/proto/dumpstats.h b/include/types/stats.h
similarity index 61%
rename from include/proto/dumpstats.h
rename to include/types/stats.h
index 6e0adfa..dd52bba 100644
--- a/include/proto/dumpstats.h
+++ b/include/types/stats.h
@@ -1,9 +1,6 @@
 /*
- * include/proto/dumpstats.h
- * This file contains definitions of some primitives to dedicated to
- * statistics output.
- *
- * Copyright (C) 2000-2011 Willy Tarreau - w@1wt.eu
+ * include/types/stats.h
+ * This file provides structures and types for stats.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -20,12 +17,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#ifndef _PROTO_DUMPSTATS_H
-#define _PROTO_DUMPSTATS_H
-
-#include <common/config.h>
-#include <types/applet.h>
-#include <types/stream_interface.h>
+#ifndef _TYPES_STATS_H
+#define _TYPES_STATS_H
 
 /* Flags for applet.ctx.stats.flags */
 #define STAT_FMT_HTML   0x00000001      /* dump the stats in HTML format */
@@ -55,162 +48,62 @@
 #define STAT_SCOPE_INPUT_NAME "scope" /* pattern form scope name <input> in html form */
 #define STAT_SCOPE_PATTERN    "?" STAT_SCOPE_INPUT_NAME "="
 
-/* Show Info fields for CLI output. For any field added here, please add the text
- * representation in the info_field_names array below. Please only append at the end,
- * before the INF_TOTAL_FIELDS entry, and never insert anything in the middle
- * nor at the beginning.
- */
-enum info_field {
-	INF_NAME,
-	INF_VERSION,
-	INF_RELEASE_DATE,
-	INF_NBPROC,
-	INF_PROCESS_NUM,
-	INF_PID,
-	INF_UPTIME,
-	INF_UPTIME_SEC,
-	INF_MEMMAX_MB,
-	INF_POOL_ALLOC_MB,
-	INF_POOL_USED_MB,
-	INF_POOL_FAILED,
-	INF_ULIMIT_N,
-	INF_MAXSOCK,
-	INF_MAXCONN,
-	INF_HARD_MAXCONN,
-	INF_CURR_CONN,
-	INF_CUM_CONN,
-	INF_CUM_REQ,
-	INF_MAX_SSL_CONNS,
-	INF_CURR_SSL_CONNS,
-	INF_CUM_SSL_CONNS,
-	INF_MAXPIPES,
-	INF_PIPES_USED,
-	INF_PIPES_FREE,
-	INF_CONN_RATE,
-	INF_CONN_RATE_LIMIT,
-	INF_MAX_CONN_RATE,
-	INF_SESS_RATE,
-	INF_SESS_RATE_LIMIT,
-	INF_MAX_SESS_RATE,
-	INF_SSL_RATE,
-	INF_SSL_RATE_LIMIT,
-	INF_MAX_SSL_RATE,
-	INF_SSL_FRONTEND_KEY_RATE,
-	INF_SSL_FRONTEND_MAX_KEY_RATE,
-	INF_SSL_FRONTEND_SESSION_REUSE_PCT,
-	INF_SSL_BACKEND_KEY_RATE,
-	INF_SSL_BACKEND_MAX_KEY_RATE,
-	INF_SSL_CACHE_LOOKUPS,
-	INF_SSL_CACHE_MISSES,
-	INF_COMPRESS_BPS_IN,
-	INF_COMPRESS_BPS_OUT,
-	INF_COMPRESS_BPS_RATE_LIM,
-	INF_ZLIB_MEM_USAGE,
-	INF_MAX_ZLIB_MEM_USAGE,
-	INF_TASKS,
-	INF_RUN_QUEUE,
-	INF_IDLE_PCT,
-	INF_NODE,
-	INF_DESCRIPTION,
+/* Actions available for the stats admin forms */
+enum {
+	ST_ADM_ACTION_NONE = 0,
 
-	/* must always be the last one */
-	INF_TOTAL_FIELDS
+	/* enable/disable health checks */
+	ST_ADM_ACTION_DHLTH,
+	ST_ADM_ACTION_EHLTH,
+
+	/* force health check status */
+	ST_ADM_ACTION_HRUNN,
+	ST_ADM_ACTION_HNOLB,
+	ST_ADM_ACTION_HDOWN,
+
+	/* enable/disable agent checks */
+	ST_ADM_ACTION_DAGENT,
+	ST_ADM_ACTION_EAGENT,
+
+	/* force agent check status */
+	ST_ADM_ACTION_ARUNN,
+	ST_ADM_ACTION_ADOWN,
+
+	/* set admin state */
+	ST_ADM_ACTION_READY,
+	ST_ADM_ACTION_DRAIN,
+	ST_ADM_ACTION_MAINT,
+	ST_ADM_ACTION_SHUTDOWN,
+	/* these are the ancient actions, still available for compatibility */
+	ST_ADM_ACTION_DISABLE,
+	ST_ADM_ACTION_ENABLE,
+	ST_ADM_ACTION_STOP,
+	ST_ADM_ACTION_START,
 };
 
-/* Stats fields for CSV output. For any field added here, please add the text
- * representation in the stat_field_names array below. Please only append at the end,
- * before the ST_F_TOTAL_FIELDS entry, and never insert anything in the middle
- * nor at the beginning.
- */
-enum stat_field {
-	ST_F_PXNAME,
-	ST_F_SVNAME,
-	ST_F_QCUR,
-	ST_F_QMAX,
-	ST_F_SCUR,
-	ST_F_SMAX,
-	ST_F_SLIM,
-	ST_F_STOT,
-	ST_F_BIN ,
-	ST_F_BOUT,
-	ST_F_DREQ,
-	ST_F_DRESP,
-	ST_F_EREQ,
-	ST_F_ECON,
-	ST_F_ERESP,
-	ST_F_WRETR,
-	ST_F_WREDIS,
-	ST_F_STATUS,
-	ST_F_WEIGHT,
-	ST_F_ACT,
-	ST_F_BCK,
-	ST_F_CHKFAIL,
-	ST_F_CHKDOWN,
-	ST_F_LASTCHG,
-	ST_F_DOWNTIME,
-	ST_F_QLIMIT,
-	ST_F_PID,
-	ST_F_IID,
-	ST_F_SID,
-	ST_F_THROTTLE,
-	ST_F_LBTOT,
-	ST_F_TRACKED,
-	ST_F_TYPE,
-	ST_F_RATE,
-	ST_F_RATE_LIM,
-	ST_F_RATE_MAX,
-	ST_F_CHECK_STATUS,
-	ST_F_CHECK_CODE,
-	ST_F_CHECK_DURATION,
-	ST_F_HRSP_1XX,
-	ST_F_HRSP_2XX,
-	ST_F_HRSP_3XX,
-	ST_F_HRSP_4XX,
-	ST_F_HRSP_5XX,
-	ST_F_HRSP_OTHER,
-	ST_F_HANAFAIL,
-	ST_F_REQ_RATE,
-	ST_F_REQ_RATE_MAX,
-	ST_F_REQ_TOT,
-	ST_F_CLI_ABRT,
-	ST_F_SRV_ABRT,
-	ST_F_COMP_IN,
-	ST_F_COMP_OUT,
-	ST_F_COMP_BYP,
-	ST_F_COMP_RSP,
-	ST_F_LASTSESS,
-	ST_F_LAST_CHK,
-	ST_F_LAST_AGT,
-	ST_F_QTIME,
-	ST_F_CTIME,
-	ST_F_RTIME,
-	ST_F_TTIME,
-	ST_F_AGENT_STATUS,
-	ST_F_AGENT_CODE,
-	ST_F_AGENT_DURATION,
-	ST_F_CHECK_DESC,
-	ST_F_AGENT_DESC,
-	ST_F_CHECK_RISE,
-	ST_F_CHECK_FALL,
-	ST_F_CHECK_HEALTH,
-	ST_F_AGENT_RISE,
-	ST_F_AGENT_FALL,
-	ST_F_AGENT_HEALTH,
-	ST_F_ADDR,
-	ST_F_COOKIE,
-	ST_F_MODE,
-	ST_F_ALGO,
-	ST_F_CONN_RATE,
-	ST_F_CONN_RATE_MAX,
-	ST_F_CONN_TOT,
-	ST_F_INTERCEPTED,
-	ST_F_DCON,
-	ST_F_DSES,
 
-	/* must always be the last one */
-	ST_F_TOTAL_FIELDS
+/* data transmission states for the stats responses */
+enum {
+	STAT_ST_INIT = 0,
+	STAT_ST_HEAD,
+	STAT_ST_INFO,
+	STAT_ST_LIST,
+	STAT_ST_END,
+	STAT_ST_FIN,
 };
 
+/* data transmission states for the stats responses inside a proxy */
+enum {
+	STAT_PX_ST_INIT = 0,
+	STAT_PX_ST_TH,
+	STAT_PX_ST_FE,
+	STAT_PX_ST_LI,
+	STAT_PX_ST_SV,
+	STAT_PX_ST_BE,
+	STAT_PX_ST_END,
+	STAT_PX_ST_FIN,
+};
+
 /* This level of detail is needed to let the stats consumer know how to
  * aggregate them (eg: between processes or cluster nodes). Only a few
  * combinations are actually in use, though the mechanism tends to make
@@ -331,195 +224,99 @@
 	} u;
 };
 
-static inline enum field_format field_format(const struct field *f, int e)
-{
-	return f[e].type & FF_MASK;
-}
-
-static inline enum field_origin field_origin(const struct field *f, int e)
-{
-	return f[e].type & FO_MASK;
-}
-
-static inline enum field_scope field_scope(const struct field *f, int e)
-{
-	return f[e].type & FS_MASK;
-}
-
-static inline enum field_nature field_nature(const struct field *f, int e)
-{
-	return f[e].type & FN_MASK;
-}
-
-static inline const char *field_str(const struct field *f, int e)
-{
-	return (field_format(f, e) == FF_STR) ? f[e].u.str : "";
-}
-
-static inline struct field mkf_s32(uint32_t type, int32_t value)
-{
-	struct field f = { .type = FF_S32 | type, .u.s32 = value };
-	return f;
-}
-
-static inline struct field mkf_u32(uint32_t type, uint32_t value)
-{
-	struct field f = { .type = FF_U32 | type, .u.u32 = value };
-	return f;
-}
-
-static inline struct field mkf_s64(uint32_t type, int64_t value)
-{
-	struct field f = { .type = FF_S64 | type, .u.s64 = value };
-	return f;
-}
-
-static inline struct field mkf_u64(uint32_t type, uint64_t value)
-{
-	struct field f = { .type = FF_U64 | type, .u.u64 = value };
-	return f;
-}
-
-static inline struct field mkf_str(uint32_t type, const char *value)
-{
-	struct field f = { .type = FF_STR | type, .u.str = value };
-	return f;
-}
-
-/* These two structs contains all field names according with
- * the the number of entries in "enum stat_field" and
- * "enum info_field"
+/* Stats fields for CSV output. For any field added here, please add the text
+ * representation in the stat_field_names array below. Please only append at the end,
+ * before the ST_F_TOTAL_FIELDS entry, and never insert anything in the middle
+ * nor at the beginning.
  */
-extern const char *info_field_names[];
-extern const char *stat_field_names[];
-
-int stats_fill_info(struct field *info, int len);
-int stats_fill_fe_stats(struct proxy *px, struct field *stats, int len);
-int stats_fill_li_stats(struct proxy *px, struct listener *l, int flags,
-                        struct field *stats, int len);
-int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags,
-                        struct field *stats, int len);
-int stats_fill_be_stats(struct proxy *px, int flags, struct field *stats, int len);
-
-extern struct applet http_stats_applet;
-
-void stats_io_handler(struct stream_interface *si);
-int stats_emit_raw_data_field(struct chunk *out, const struct field *f);
-int stats_emit_typed_data_field(struct chunk *out, const struct field *f);
-int stats_emit_field_tags(struct chunk *out, const struct field *f, char delim);
-
-
-struct cli_kw {
-	const char *str_kw[5];   /* keywords ended by NULL, limited to 5
-				 separated keywords combination */
-	const char *usage;   /* usage message */
-	int (*parse)(char **args, struct appctx *appctx, void *private);
-	int (*io_handler)(struct appctx *appctx);
-	void (*io_release)(struct appctx *appctx);
-	void *private;
-};
-
-struct cli_kw_list {
-	struct list list;
-	struct cli_kw kw[VAR_ARRAY];
-};
-
-struct cli_kw* cli_find_kw(char **args);
-void cli_register_kw(struct cli_kw_list *kw_list);
-
-/* stats socket states */
-enum {
-	STAT_CLI_INIT = 0,   /* initial state, must leave to zero ! */
-	STAT_CLI_END,        /* final state, let's close */
-	STAT_CLI_GETREQ,     /* wait for a request */
-	STAT_CLI_OUTPUT,     /* all states after this one are responses */
-	STAT_CLI_PROMPT,     /* display the prompt (first output, same code) */
-	STAT_CLI_PRINT,      /* display message in cli->msg */
-	STAT_CLI_PRINT_FREE, /* display message in cli->msg. After the display, free the pointer */
-	STAT_CLI_O_INFO,     /* dump info */
-	STAT_CLI_O_SESS,     /* dump streams */
-	STAT_CLI_O_ERR,      /* dump errors */
-	STAT_CLI_O_TAB,      /* dump tables */
-	STAT_CLI_O_CLR,      /* clear tables */
-	STAT_CLI_O_SET,      /* set entries in tables */
-	STAT_CLI_O_STAT,     /* dump stats */
-	STAT_CLI_O_PATS,     /* list all pattern reference available */
-	STAT_CLI_O_PAT,      /* list all entries of a pattern */
-	STAT_CLI_O_MLOOK,    /* lookup a map entry */
-	STAT_CLI_O_POOLS,    /* dump memory pools */
-	STAT_CLI_O_TLSK,     /* list all TLS ticket keys references */
-	STAT_CLI_O_TLSK_ENT, /* list all TLS ticket keys entries for a reference */
-	STAT_CLI_O_RESOLVERS,/* dump a resolver's section nameservers counters */
-	STAT_CLI_O_SERVERS_STATE, /* dump server state and changing information */
-	STAT_CLI_O_BACKEND,  /* dump backend list */
-	STAT_CLI_O_ENV,      /* dump environment */
-	STAT_CLI_O_CUSTOM,   /* custom callback pointer */
-};
-
-/* Actions available for the stats admin forms */
-enum {
-	ST_ADM_ACTION_NONE = 0,
-
-	/* enable/disable health checks */
-	ST_ADM_ACTION_DHLTH,
-	ST_ADM_ACTION_EHLTH,
-
-	/* force health check status */
-	ST_ADM_ACTION_HRUNN,
-	ST_ADM_ACTION_HNOLB,
-	ST_ADM_ACTION_HDOWN,
-
-	/* enable/disable agent checks */
-	ST_ADM_ACTION_DAGENT,
-	ST_ADM_ACTION_EAGENT,
-
-	/* force agent check status */
-	ST_ADM_ACTION_ARUNN,
-	ST_ADM_ACTION_ADOWN,
-
-	/* set admin state */
-	ST_ADM_ACTION_READY,
-	ST_ADM_ACTION_DRAIN,
-	ST_ADM_ACTION_MAINT,
-	ST_ADM_ACTION_SHUTDOWN,
-	/* these are the ancient actions, still available for compatibility */
-	ST_ADM_ACTION_DISABLE,
-	ST_ADM_ACTION_ENABLE,
-	ST_ADM_ACTION_STOP,
-	ST_ADM_ACTION_START,
-};
-
-
-/* data transmission states for the stats responses */
-enum {
-	STAT_ST_INIT = 0,
-	STAT_ST_HEAD,
-	STAT_ST_INFO,
-	STAT_ST_LIST,
-	STAT_ST_END,
-	STAT_ST_FIN,
-};
+enum stat_field {
+	ST_F_PXNAME,
+	ST_F_SVNAME,
+	ST_F_QCUR,
+	ST_F_QMAX,
+	ST_F_SCUR,
+	ST_F_SMAX,
+	ST_F_SLIM,
+	ST_F_STOT,
+	ST_F_BIN ,
+	ST_F_BOUT,
+	ST_F_DREQ,
+	ST_F_DRESP,
+	ST_F_EREQ,
+	ST_F_ECON,
+	ST_F_ERESP,
+	ST_F_WRETR,
+	ST_F_WREDIS,
+	ST_F_STATUS,
+	ST_F_WEIGHT,
+	ST_F_ACT,
+	ST_F_BCK,
+	ST_F_CHKFAIL,
+	ST_F_CHKDOWN,
+	ST_F_LASTCHG,
+	ST_F_DOWNTIME,
+	ST_F_QLIMIT,
+	ST_F_PID,
+	ST_F_IID,
+	ST_F_SID,
+	ST_F_THROTTLE,
+	ST_F_LBTOT,
+	ST_F_TRACKED,
+	ST_F_TYPE,
+	ST_F_RATE,
+	ST_F_RATE_LIM,
+	ST_F_RATE_MAX,
+	ST_F_CHECK_STATUS,
+	ST_F_CHECK_CODE,
+	ST_F_CHECK_DURATION,
+	ST_F_HRSP_1XX,
+	ST_F_HRSP_2XX,
+	ST_F_HRSP_3XX,
+	ST_F_HRSP_4XX,
+	ST_F_HRSP_5XX,
+	ST_F_HRSP_OTHER,
+	ST_F_HANAFAIL,
+	ST_F_REQ_RATE,
+	ST_F_REQ_RATE_MAX,
+	ST_F_REQ_TOT,
+	ST_F_CLI_ABRT,
+	ST_F_SRV_ABRT,
+	ST_F_COMP_IN,
+	ST_F_COMP_OUT,
+	ST_F_COMP_BYP,
+	ST_F_COMP_RSP,
+	ST_F_LASTSESS,
+	ST_F_LAST_CHK,
+	ST_F_LAST_AGT,
+	ST_F_QTIME,
+	ST_F_CTIME,
+	ST_F_RTIME,
+	ST_F_TTIME,
+	ST_F_AGENT_STATUS,
+	ST_F_AGENT_CODE,
+	ST_F_AGENT_DURATION,
+	ST_F_CHECK_DESC,
+	ST_F_AGENT_DESC,
+	ST_F_CHECK_RISE,
+	ST_F_CHECK_FALL,
+	ST_F_CHECK_HEALTH,
+	ST_F_AGENT_RISE,
+	ST_F_AGENT_FALL,
+	ST_F_AGENT_HEALTH,
+	ST_F_ADDR,
+	ST_F_COOKIE,
+	ST_F_MODE,
+	ST_F_ALGO,
+	ST_F_CONN_RATE,
+	ST_F_CONN_RATE_MAX,
+	ST_F_CONN_TOT,
+	ST_F_INTERCEPTED,
+	ST_F_DCON,
+	ST_F_DSES,
 
-/* data transmission states for the stats responses inside a proxy */
-enum {
-	STAT_PX_ST_INIT = 0,
-	STAT_PX_ST_TH,
-	STAT_PX_ST_FE,
-	STAT_PX_ST_LI,
-	STAT_PX_ST_SV,
-	STAT_PX_ST_BE,
-	STAT_PX_ST_END,
-	STAT_PX_ST_FIN,
+	/* must always be the last one */
+	ST_F_TOTAL_FIELDS
 };
 
-
-int stats_dump_stat_to_buffer(struct stream_interface *si, struct uri_auth *uri);
 
-#endif /* _PROTO_DUMPSTATS_H */
-
-/*
- * Local variables:
- *  c-indent-level: 8
- *  c-basic-offset: 8
- * End:
- */
+#endif /* _TYPES_STATS_H */
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 7b05727..b0e636c 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -51,6 +51,7 @@
 #include <types/peers.h>
 #include <types/mailers.h>
 #include <types/dns.h>
+#include <types/stats.h>
 
 #include <proto/acl.h>
 #include <proto/auth.h>
@@ -58,7 +59,7 @@
 #include <proto/channel.h>
 #include <proto/checks.h>
 #include <proto/compression.h>
-#include <proto/dumpstats.h>
+#include <proto/stats.h>
 #include <proto/filters.h>
 #include <proto/frontend.h>
 #include <proto/hdr_idx.h>
diff --git a/src/checks.c b/src/checks.c
index a9b89d0..61d3768 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -39,6 +39,7 @@
 #include <types/global.h>
 #include <types/mailers.h>
 #include <types/dns.h>
+#include <types/stats.h>
 
 #ifdef USE_OPENSSL
 #include <types/ssl_sock.h>
@@ -47,7 +48,7 @@
 
 #include <proto/backend.h>
 #include <proto/checks.h>
-#include <proto/dumpstats.h>
+#include <proto/stats.h>
 #include <proto/fd.h>
 #include <proto/log.h>
 #include <proto/queue.h>
diff --git a/src/cli.c b/src/cli.c
index d7de7cb..e15fc8a 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -38,14 +38,16 @@
 #include <common/base64.h>
 
 #include <types/applet.h>
+#include <types/cli.h>
 #include <types/global.h>
 #include <types/dns.h>
+#include <types/stats.h>
 
 #include <proto/backend.h>
 #include <proto/channel.h>
 #include <proto/checks.h>
 #include <proto/compression.h>
-#include <proto/dumpstats.h>
+#include <proto/stats.h>
 #include <proto/fd.h>
 #include <proto/freq_ctr.h>
 #include <proto/frontend.h>
diff --git a/src/hlua.c b/src/hlua.c
index 5594484..5595446 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -25,14 +25,17 @@
 
 #include <common/cfgparse.h>
 
+#include <types/cli.h>
 #include <types/hlua.h>
 #include <types/proxy.h>
+#include <types/stats.h>
 
 #include <proto/arg.h>
 #include <proto/applet.h>
 #include <proto/channel.h>
+#include <proto/cli.h>
 #include <proto/connection.h>
-#include <proto/dumpstats.h>
+#include <proto/stats.h>
 #include <proto/hdr_idx.h>
 #include <proto/hlua.h>
 #include <proto/hlua_fcn.h>
diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c
index a21065d..3af4f6e 100644
--- a/src/hlua_fcn.c
+++ b/src/hlua_fcn.c
@@ -21,13 +21,15 @@
 #include <common/time.h>
 #include <common/uri_auth.h>
 
+#include <types/cli.h>
 #include <types/hlua.h>
 #include <types/proxy.h>
+#include <types/stats.h>
 
-#include <proto/dumpstats.h>
 #include <proto/proto_http.h>
 #include <proto/proxy.h>
 #include <proto/server.h>
+#include <proto/stats.h>
 
 /* Contains the class reference of the concat object. */
 static int class_concat_ref;
diff --git a/src/proto_http.c b/src/proto_http.c
index 650e02a..181dfc2 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -41,6 +41,7 @@
 #include <types/capture.h>
 #include <types/filters.h>
 #include <types/global.h>
+#include <types/stats.h>
 
 #include <proto/acl.h>
 #include <proto/action.h>
@@ -50,7 +51,7 @@
 #include <proto/channel.h>
 #include <proto/checks.h>
 #include <proto/compression.h>
-#include <proto/dumpstats.h>
+#include <proto/stats.h>
 #include <proto/fd.h>
 #include <proto/filters.h>
 #include <proto/frontend.h>
diff --git a/src/stats.c b/src/stats.c
index 713629e..aef6299 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -40,12 +40,13 @@
 #include <types/applet.h>
 #include <types/global.h>
 #include <types/dns.h>
+#include <types/stats.h>
 
 #include <proto/backend.h>
 #include <proto/channel.h>
 #include <proto/checks.h>
 #include <proto/compression.h>
-#include <proto/dumpstats.h>
+#include <proto/stats.h>
 #include <proto/fd.h>
 #include <proto/freq_ctr.h>
 #include <proto/frontend.h>
diff --git a/src/stream.c b/src/stream.c
index 288d36d..346e7b6 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -24,6 +24,7 @@
 #include <types/capture.h>
 #include <types/filters.h>
 #include <types/global.h>
+#include <types/stats.h>
 
 #include <proto/acl.h>
 #include <proto/action.h>
@@ -32,7 +33,7 @@
 #include <proto/channel.h>
 #include <proto/checks.h>
 #include <proto/connection.h>
-#include <proto/dumpstats.h>
+#include <proto/stats.h>
 #include <proto/fd.h>
 #include <proto/filters.h>
 #include <proto/freq_ctr.h>