[master] 478ccc86a add probe details for directors.random

Nils Goroll nils.goroll at uplex.de
Wed Mar 6 12:00:14 UTC 2019


commit 478ccc86a466740e2d53be66b80cb7aa5aeab875
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Wed Mar 6 12:58:08 2019 +0100

    add probe details for directors.random
    
    Ref #2896

diff --git a/lib/libvmod_directors/random.c b/lib/libvmod_directors/random.c
index 567315193..93e5a96f6 100644
--- a/lib/libvmod_directors/random.c
+++ b/lib/libvmod_directors/random.c
@@ -56,6 +56,18 @@ vmod_random_healthy(VRT_CTX, VCL_BACKEND dir, VCL_TIME *changed)
 	return (vdir_any_healthy(ctx, rr->vd, changed));
 }
 
+static void v_matchproto_(vdi_list_f)
+vmod_random_list(VRT_CTX, VCL_BACKEND dir, struct vsb *vsb, int pflag,
+    int jflag)
+{
+	struct vmod_directors_random *rr;
+
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(dir, DIRECTOR_MAGIC);
+	CAST_OBJ_NOTNULL(rr, dir->priv, VMOD_DIRECTORS_RANDOM_MAGIC);
+	vdir_list(ctx, rr->vd, vsb, pflag, jflag, 1);
+}
+
 static VCL_BACKEND v_matchproto_(vdi_resolve_f)
 vmod_random_resolve(VRT_CTX, VCL_BACKEND dir)
 {
@@ -87,7 +99,8 @@ static const struct vdi_methods vmod_random_methods[1] = {{
 	.type =			"random",
 	.healthy =		vmod_random_healthy,
 	.resolve =		vmod_random_resolve,
-	.destroy =		vmod_random_destroy
+	.destroy =		vmod_random_destroy,
+	.list =			vmod_random_list
 }};
 
 
diff --git a/lib/libvmod_directors/round_robin.c b/lib/libvmod_directors/round_robin.c
index ff8ff7799..fc32ab646 100644
--- a/lib/libvmod_directors/round_robin.c
+++ b/lib/libvmod_directors/round_robin.c
@@ -63,7 +63,7 @@ vmod_rr_list(VRT_CTX, VCL_BACKEND dir, struct vsb *vsb, int pflag, int jflag)
 	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(dir, DIRECTOR_MAGIC);
 	CAST_OBJ_NOTNULL(rr, dir->priv, VMOD_DIRECTORS_ROUND_ROBIN_MAGIC);
-	vdir_list(ctx, rr->vd, vsb, pflag, jflag);
+	vdir_list(ctx, rr->vd, vsb, pflag, jflag, 0);
 }
 
 static VCL_BACKEND v_matchproto_(vdi_resolve_f)
diff --git a/lib/libvmod_directors/vdir.c b/lib/libvmod_directors/vdir.c
index 95afd315d..088d2e9a9 100644
--- a/lib/libvmod_directors/vdir.c
+++ b/lib/libvmod_directors/vdir.c
@@ -195,7 +195,8 @@ vdir_any_healthy(VRT_CTX, struct vdir *vd, VCL_TIME *changed)
 }
 
 void
-vdir_list(VRT_CTX, struct vdir *vd, struct vsb *vsb, int pflag, int jflag)
+vdir_list(VRT_CTX, struct vdir *vd, struct vsb *vsb, int pflag, int jflag,
+    int weight)
 {
 	VCL_TIME c, changed = 0;
 	VCL_BACKEND be;
@@ -209,8 +210,13 @@ vdir_list(VRT_CTX, struct vdir *vd, struct vsb *vsb, int pflag, int jflag)
 		if (jflag) {
 			VSB_cat(vsb, "{\n");
 			VSB_indent(vsb, 2);
+			if (weight)
+				VSB_printf(vsb, "\"total_weight\": %f,\n",
+				    vd->total_weight);
+			VSB_cat(vsb, "\"backends\": {\n");
+			VSB_indent(vsb, 2);
 		} else {
-			VSB_cat(vsb, "\n");
+			VSB_cat(vsb, "\n\n\tBackend\tWeight\tHealth\n");
 		}
 	}
 
@@ -229,11 +235,23 @@ vdir_list(VRT_CTX, struct vdir *vd, struct vsb *vsb, int pflag, int jflag)
 		if (jflag) {
 			if (u)
 				VSB_cat(vsb, ",\n");
-			VSB_printf(vsb, "\"%s\": \"%s\"",
-			    be->vcl_name, h ? "healthy" : "sick");
+			if (weight)
+				VSB_printf(vsb, "\"%s\": [%f, \"%s\"]",
+				    be->vcl_name, vd->weight[u],
+				    h ? "healthy" : "sick");
+			else
+				VSB_printf(vsb, "\"%s\": \"%s\"",
+				    be->vcl_name, h ? "healthy" : "sick");
 		} else {
-			VSB_printf(vsb, "\t%s: %s\n",
-			    be->vcl_name, h ? "healthy" : "sick");
+			VSB_cat(vsb, "\t");
+			VSB_cat(vsb, be->vcl_name);
+			if (weight)
+				VSB_printf(vsb, "\t%.2f%%\t",
+				    100 * vd->weight[u] / vd->total_weight);
+			else
+				VSB_cat(vsb, "\t-\t");
+			VSB_cat(vsb, h ? "healthy" : "sick");
+			VSB_cat(vsb, "\n");
 		}
 	}
 	vdir_unlock(vd);
@@ -244,6 +262,8 @@ vdir_list(VRT_CTX, struct vdir *vd, struct vsb *vsb, int pflag, int jflag)
 		VSB_cat(vsb, "\n");
 		VSB_indent(vsb, -2);
 		VSB_cat(vsb, "},\n");
+		VSB_indent(vsb, -2);
+		VSB_cat(vsb, "},\n");
 	}
 
 	if (pflag)
diff --git a/lib/libvmod_directors/vdir.h b/lib/libvmod_directors/vdir.h
index 7afbcdead..abc454e71 100644
--- a/lib/libvmod_directors/vdir.h
+++ b/lib/libvmod_directors/vdir.h
@@ -50,5 +50,5 @@ void vdir_unlock(struct vdir *vd);
 void vdir_add_backend(VRT_CTX, struct vdir *, VCL_BACKEND, double weight);
 void vdir_remove_backend(VRT_CTX, struct vdir *, VCL_BACKEND, unsigned *cur);
 VCL_BOOL vdir_any_healthy(VRT_CTX, struct vdir *, VCL_TIME *);
-void vdir_list(VRT_CTX, struct vdir *, struct vsb *, int, int);
+void vdir_list(VRT_CTX, struct vdir *, struct vsb *, int, int, int);
 VCL_BACKEND vdir_pick_be(VRT_CTX, struct vdir *, double w);


More information about the varnish-commit mailing list