[master] a49d623 Give backend.list CLI command an optional "-p" flag which outputs detailed probing information.

Poul-Henning Kamp phk at FreeBSD.org
Mon Mar 9 23:35:10 CET 2015


commit a49d6239a33315a54beff1fad787c87e192f0691
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Mar 9 22:34:28 2015 +0000

    Give backend.list CLI command an optional "-p" flag which outputs
    detailed probing information.
    
    Retire the "debug.health" CLI command.

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 5dd6621..8817c3c 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -710,9 +710,6 @@ void VCA_FailSess(struct worker *w);
 /* cache_backend_cfg.c */
 void VBE_InitCfg(void);
 
-/* cache_backend_poll.c */
-void VBP_Init(void);
-
 /* cache_ban.c */
 struct ban *BAN_New(void);
 int BAN_AddTest(struct ban *, const char *, const char *, const char *);
diff --git a/bin/varnishd/cache/cache_backend.h b/bin/varnishd/cache/cache_backend.h
index f1faa97..584a6f1 100644
--- a/bin/varnishd/cache/cache_backend.h
+++ b/bin/varnishd/cache/cache_backend.h
@@ -113,7 +113,7 @@ void VBE_DeleteBackend(struct backend *);
 void VBP_Insert(struct backend *b, struct vrt_backend_probe const *p,
     const char *hosthdr);
 void VBP_Remove(struct backend *b);
-void VBP_Summary(struct cli *cli, const struct vbp_target *vt);
+void VBP_Status(struct cli *cli, const struct backend *, int details);
 
 struct tcp_pool *VBT_Ref(const struct suckaddr *ip4,
     const struct suckaddr *ip6);
diff --git a/bin/varnishd/cache/cache_backend_cfg.c b/bin/varnishd/cache/cache_backend_cfg.c
index fc619c0..eb22855 100644
--- a/bin/varnishd/cache/cache_backend_cfg.c
+++ b/bin/varnishd/cache/cache_backend_cfg.c
@@ -177,7 +177,6 @@ backend_find(struct cli *cli, const char *matcher, bf_func *func, void *priv)
 		VSB_printf(vsb, "%s.%s", vcc->loaded_name, matcher);
 	}
 	AZ(VSB_finish(vsb));
-	VCLI_Out(cli, "Using pattern \"%s\"\n", VSB_data(vsb));
 	VTAILQ_FOREACH(b, &backends, list) {
 		if (fnmatch(VSB_data(vsb), b->display_name, 0))
 			continue;
@@ -197,15 +196,10 @@ backend_find(struct cli *cli, const char *matcher, bf_func *func, void *priv)
 static int __match_proto__()
 do_list(struct cli *cli, struct backend *b, void *priv)
 {
-	int *hdr;
+	int *probes;
 
 	AN(priv);
-	hdr = priv;
-	if (!*hdr) {
-		VCLI_Out(cli, "%-30s %-10s %s",
-		    "Backend name", "Admin", "Probe");
-		*hdr = 1;
-	}
+	probes = priv;
 	CHECK_OBJ_NOTNULL(b, BACKEND_MAGIC);
 
 	VCLI_Out(cli, "\n%-30s", b->display_name);
@@ -226,7 +220,7 @@ do_list(struct cli *cli, struct backend *b, void *priv)
 			VCLI_Out(cli, " %s", "Healthy ");
 		else
 			VCLI_Out(cli, " %s", "Sick ");
-		VBP_Summary(cli, b->probe);
+		VBP_Status(cli, b, *probes);
 	}
 
 	/* XXX: report b->health_changed */
@@ -237,12 +231,24 @@ do_list(struct cli *cli, struct backend *b, void *priv)
 static void
 cli_backend_list(struct cli *cli, const char * const *av, void *priv)
 {
-	int hdr = 0;
+	int probes = 0;
 
-	(void)av;
 	(void)priv;
 	ASSERT_CLI();
-	(void)backend_find(cli, av[2], do_list, &hdr);
+	if (av[2] != NULL && !strcmp(av[2], "-p")) {
+		av++;
+		probes = 1;
+	} else if (av[2] != NULL && av[2][0] == '-') {
+		VCLI_Out(cli, "Invalid flags %s", av[2]);
+		VCLI_SetResult(cli, CLIS_PARAM);
+		return;
+	} else if (av[3] != NULL) {
+		VCLI_Out(cli, "Too many arguments");
+		VCLI_SetResult(cli, CLIS_PARAM);
+		return;
+	}
+	VCLI_Out(cli, "%-30s %-10s %s", "Backend name", "Admin", "Probe");
+	(void)backend_find(cli, av[2], do_list, &probes);
 }
 
 /*---------------------------------------------------------------------*/
@@ -293,7 +299,7 @@ cli_backend_set_health(struct cli *cli, const char * const *av, void *priv)
 static struct cli_proto backend_cmds[] = {
 	{ "backend.list", "backend.list [<backend_expression>]",
 	    "\tList backends.",
-	    0, 1, "", cli_backend_list },
+	    0, 2, "", cli_backend_list },
 	{ "backend.set_health",
 	    "backend.set_health <backend_expression> <state>",
 	    "\tSet health status on the backends.",
diff --git a/bin/varnishd/cache/cache_backend_poll.c b/bin/varnishd/cache/cache_backend_poll.c
index e18a683..a3db64b 100644
--- a/bin/varnishd/cache/cache_backend_poll.c
+++ b/bin/varnishd/cache/cache_backend_poll.c
@@ -98,14 +98,10 @@ vbp_poke(struct vbp_target *vt)
 	int s, tmo, i;
 	double t_start, t_now, t_end;
 	unsigned rlen, resp;
-	struct backend *bp;
 	char buf[8192], *p;
 	struct pollfd pfda[1], *pfd = pfda;
 	const struct suckaddr *sa;
 
-	bp = vt->backend;
-	CHECK_OBJ_NOTNULL(bp, BACKEND_MAGIC);
-
 	t_start = t_now = VTIM_real();
 	t_end = t_start + vt->probe.timeout;
 
@@ -293,20 +289,13 @@ vbp_wrk_poll_backend(void *priv)
  * Cli functions
  */
 
-void
-VBP_Summary(struct cli *cli, const struct vbp_target *vt)
-{
-
-	CHECK_OBJ_NOTNULL(vt, VBP_TARGET_MAGIC);
-	VCLI_Out(cli, "%d/%d", vt->good, vt->probe.window);
-}
-
 static void
 vbp_bitmap(struct cli *cli, char c, uint64_t map, const char *lbl)
 {
 	int i;
 	uint64_t u = (1ULL << 63);
 
+	VCLI_Out(cli, "  ");
 	for (i = 0; i < 64; i++) {
 		if (map & u)
 			VCLI_Out(cli, "%c", c);
@@ -323,18 +312,14 @@ static void
 vbp_health_one(struct cli *cli, const struct vbp_target *vt)
 {
 
-	VCLI_Out(cli, "Backend %s is %s\n",
-	    vt->backend->vcl_name,
-	    vt->backend->healthy ? "Healthy" : "Sick");
-	VCLI_Out(cli, "Current states  good: %2u threshold: %2u window: %2u\n",
+	VCLI_Out(cli,
+	    "  Current states  good: %2u threshold: %2u window: %2u\n",
 	    vt->good, vt->probe.threshold, vt->probe.window);
-	VCLI_Out(cli, "Average responsetime of good probes: %.6f\n", vt->avg);
 	VCLI_Out(cli,
-	    "Oldest                       "
-	    "                             Newest\n");
+	    "  Average response time of good probes: %.6f\n", vt->avg);
 	VCLI_Out(cli,
-	    "============================="
-	    "===================================\n");
+	    "  Oldest ======================"
+	    "============================ Newest\n");
 
 #define BITMAP(n, c, t, b)					\
 		if ((vt->n != 0) || (b))			\
@@ -343,26 +328,23 @@ vbp_health_one(struct cli *cli, const struct vbp_target *vt)
 #undef BITMAP
 }
 
-static void
-vbp_health(struct cli *cli, const char * const *av, void *priv)
+void
+VBP_Status(struct cli *cli, const struct backend *be, int details)
 {
 	struct vbp_target *vt;
 
-	ASSERT_CLI();
-	(void)av;
-	(void)priv;
-
-	VTAILQ_FOREACH(vt, &vbp_list, list)
+	CHECK_OBJ_NOTNULL(be, BACKEND_MAGIC);
+	vt = be->probe;
+	CHECK_OBJ_NOTNULL(vt, VBP_TARGET_MAGIC);
+	VCLI_Out(cli, "%d/%d", vt->good, vt->probe.window);
+	if (details) {
+		VCLI_Out(cli, "\n");
 		vbp_health_one(cli, vt);
+	} else {
+		VCLI_Out(cli, "%d/%d", vt->good, vt->probe.window);
+	}
 }
 
-static struct cli_proto debug_cmds[] = {
-	{ "debug.health", "debug.health",
-		"\tDump backend health information.",
-		0, 0, "d", vbp_health },
-	{ NULL }
-};
-
 /*--------------------------------------------------------------------
  * Build request from probe spec
  */
@@ -483,14 +465,3 @@ VBP_Remove(struct backend *b)
 	free(vt->req);
 	FREE_OBJ(vt);
 }
-
-/*--------------------------------------------------------------------
- * Initialize the backend probe subsystem
- */
-
-void
-VBP_Init(void)
-{
-
-	CLI_AddFuncs(debug_cmds);
-}
diff --git a/bin/varnishd/cache/cache_main.c b/bin/varnishd/cache/cache_main.c
index b5f9b0b..1f2f48f 100644
--- a/bin/varnishd/cache/cache_main.c
+++ b/bin/varnishd/cache/cache_main.c
@@ -221,7 +221,6 @@ child_main(void)
 
 	VBO_Init();
 	VBE_InitCfg();
-	VBP_Init();
 	Pool_Init();
 	V1P_Init();
 
diff --git a/bin/varnishtest/tests/c00017.vtc b/bin/varnishtest/tests/c00017.vtc
index 2ad090e..9342c53 100644
--- a/bin/varnishtest/tests/c00017.vtc
+++ b/bin/varnishtest/tests/c00017.vtc
@@ -40,4 +40,4 @@ varnish v1 -vcl {
 
 sema r1 sync 2
 
-varnish v1 -cli "debug.health"
+varnish v1 -cli "backend.list -p"
diff --git a/bin/varnishtest/tests/c00035.vtc b/bin/varnishtest/tests/c00035.vtc
index 8b6bbea..5eab71d 100644
--- a/bin/varnishtest/tests/c00035.vtc
+++ b/bin/varnishtest/tests/c00035.vtc
@@ -30,7 +30,7 @@ varnish v1 -vcl {
 delay 1
 
 varnish v1 -cliok "vcl.list"
-varnish v1 -cliok "debug.health"
+varnish v1 -cliok "backend.list -p"
 
 server s1 -break {
 	rxreq
diff --git a/bin/varnishtest/tests/v00014.vtc b/bin/varnishtest/tests/v00014.vtc
index 6769a24..4a290b0 100644
--- a/bin/varnishtest/tests/v00014.vtc
+++ b/bin/varnishtest/tests/v00014.vtc
@@ -44,7 +44,7 @@ varnish v1 -vcl {
 	}
 } -start
 
-varnish v1 -cliok "backend.list" -cliok "debug.health"
+varnish v1 -cliok "backend.list -p"
 
 client c1 {
 	txreq



More information about the varnish-commit mailing list