[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