From d53252d965aaa1889a8b56a681c464c6ca04f632 Mon Sep 17 00:00:00 2001 From: Jean-Louis Dupond Date: Sat, 23 Dec 2017 13:06:01 +0100 Subject: [PATCH] Switch to new functions for Varnish 5.2 --- check_varnish.c | 54 +++++++++++++++++++++++++++++++++++++++++-------- configure.ac | 18 ++++++++++------- 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/check_varnish/src/check_varnish.c b/check_varnish/src/check_varnish.c index 809657c..83aacdc 100644 --- a/check_varnish/src/check_varnish.c +++ b/check_varnish/src/check_varnish.c @@ -43,7 +43,7 @@ #include #include -#if defined(HAVE_VARNISHAPI_4) || defined(HAVE_VARNISHAPI_4_1) +#if defined(HAVE_VARNISHAPI_4) || defined(HAVE_VARNISHAPI_4_1) || defined(HAVE_VARNISHAPI_5) #include #include #elif defined(HAVE_VARNISHAPI_3) @@ -185,7 +185,11 @@ check_stats_cb(void *priv, const struct VSC_point * const pt) if (pt == NULL) return(0); -#if defined(HAVE_VARNISHAPI_4_1) || defined(HAVE_VARNISHAPI_4) +#if defined(HAVE_VARNISHAPI_5) + assert(sizeof(tmp) > (strlen(pt->name) + 1)); + snprintf(tmp, sizeof(tmp), "%s", pt->name); + p = priv; +#elif defined(HAVE_VARNISHAPI_4_1) || defined(HAVE_VARNISHAPI_4) assert(sizeof(tmp) > (strlen(pt->section->fantom->type) + 1 + strlen(pt->section->fantom->ident) + 1 + strlen(pt->desc->name) + 1)); @@ -197,7 +201,9 @@ check_stats_cb(void *priv, const struct VSC_point * const pt) pt->desc->name); p = priv; #endif -#if defined(HAVE_VARNISHAPI_4_1) +#if defined(HAVE_VARNISHAPI_5) + assert(!strcmp(pt->ctype, "uint64_t")); +#elif defined(HAVE_VARNISHAPI_4_1) assert(!strcmp(pt->desc->ctype, "uint64_t")); #elif defined(HAVE_VARNISHAPI_4) assert(!strcmp(pt->desc->fmt, "uint64_t")); @@ -216,7 +222,9 @@ check_stats_cb(void *priv, const struct VSC_point * const pt) #endif if (strcmp(tmp, p->param) == 0) { p->found = 1; -#if defined(HAVE_VARNISHAPI_4) || defined(HAVE_VARNISHAPI_4_1) +#if defined(HAVE_VARNISHAPI_5) + p->info = pt->sdesc; +#elif defined(HAVE_VARNISHAPI_4) || defined(HAVE_VARNISHAPI_4_1) p->info = pt->desc->sdesc; #elif defined(HAVE_VARNISHAPI_3) p->info = pt->desc; @@ -237,7 +245,11 @@ check_stats_cb(void *priv, const struct VSC_point * const pt) * Check the statistics for the requested parameter. */ static void +#if defined(HAVE_VARNISHAPI_5) +check_stats(struct vsc *vsc, struct vsm *vsm, char *param) +#else check_stats(struct VSM_data *vd, char *param) +#endif { int status; struct stat_priv priv; @@ -245,7 +257,9 @@ check_stats(struct VSM_data *vd, char *param) priv.found = 0; priv.param = param; -#if defined(HAVE_VARNISHAPI_4) || defined(HAVE_VARNISHAPI_4_1) +#if defined(HAVE_VARNISHAPI_5) + (void)VSC_Iter(vsc, vsm, check_stats_cb, &priv); +#elif defined(HAVE_VARNISHAPI_4) || defined(HAVE_VARNISHAPI_4_1) (void)VSC_Iter(vd, NULL, check_stats_cb, &priv); #elif defined(HAVE_VARNISHAPI_3) (void)VSC_Iter(vd, check_stats_cb, &priv); @@ -315,18 +329,25 @@ usage(void) int main(int argc, char **argv) { +#if defined(HAVE_VARNISHAPI_5) + struct vsm *vd; + struct vsc *vsc; +#else struct VSM_data *vd; +#endif char *param = NULL; int opt; setlocale(LC_ALL, ""); vd = VSM_New(); -#if defined(HAVE_VARNISHAPI_3) +#if defined(HAVE_VARNISHAPI_5) + vsc = VSC_New(); +#elif defined(HAVE_VARNISHAPI_3) VSC_Setup(vd); #endif - while ((opt = getopt(argc, argv, VSC_ARGS "c:hn:p:vw:")) != -1) { + while ((opt = getopt(argc, argv, "c:hn:p:vw:")) != -1) { switch (opt) { case 'c': if (parse_range(optarg, &critical) != 0) @@ -336,7 +357,11 @@ main(int argc, char **argv) help(); break; case 'n': +#if defined(HAVE_VARNISHAPI_5) + VSC_Arg(vsc, opt, optarg); +#else VSC_Arg(vd, opt, optarg); +#endif break; case 'p': param = strdup(optarg); @@ -349,13 +374,22 @@ main(int argc, char **argv) usage(); break; default: +#if defined(HAVE_VARNISHAPI_5) + if (VSC_Arg(vsc, opt, optarg) > 0) +#else if (VSC_Arg(vd, opt, optarg) > 0) +#endif break; usage(); } } -#if defined(HAVE_VARNISHAPI_4) || defined(HAVE_VARNISHAPI_4_1) +#if defined(HAVE_VARNISHAPI_5) + if (VSM_Attach(vd, -1) < 0) { + printf("varnish plugin: Cannot attach to varnish. %s", VSM_Error(vd)); + exit(1); + } +#elif defined(HAVE_VARNISHAPI_4) || defined(HAVE_VARNISHAPI_4_1) if (VSM_Open(vd)) exit(1); #elif defined(HAVE_VARNISHAPI_3) @@ -377,7 +411,11 @@ main(int argc, char **argv) if (!param) usage(); +#if defined(HAVE_VARNISHAPI_5) + check_stats(vsc, vd, param); +#else check_stats(vd, param); +#endif exit(0); } diff --git a/check_varnish/src/configure.ac b/check_varnish/src/configure.ac index c7946c2..8b0b2ec 100644 --- a/check_varnish/src/configure.ac +++ b/check_varnish/src/configure.ac @@ -21,13 +21,17 @@ AC_PROG_LIBTOOL AC_PROG_MAKE_SET # Checks for libraries. -PKG_CHECK_MODULES([VARNISHAPI], [varnishapi >= 4.1], - [AC_DEFINE([HAVE_VARNISHAPI_4_1], [1], [Use VARNISHAPI v4.1])], - [PKG_CHECK_MODULES([VARNISHAPI], [varnishapi >= 4], - [AC_DEFINE([HAVE_VARNISHAPI_4], [1], [Use VARNISHAPI v4])], - [PKG_CHECK_MODULES([VARNISHAPI], [varnishapi >= 3], - [AC_DEFINE([HAVE_VARNISHAPI_3], [1], [Use VARNISHAPI v3])], - [AC_MSG_ERROR([Could not find neither varnishapi v4 nor v3.])]) +PKG_CHECK_MODULES([VARNISHAPI], [varnishapi >= 5.2], + [AC_DEFINE([HAVE_VARNISHAPI_5], [1], [Use VARNISHAPI v5])], + [PKG_CHECK_MODULES([VARNISHAPI], [varnishapi >= 4.1], + [AC_DEFINE([HAVE_VARNISHAPI_4_1], [1], [Use VARNISHAPI v4.1])], + [PKG_CHECK_MODULES([VARNISHAPI], [varnishapi >= 4], + [AC_DEFINE([HAVE_VARNISHAPI_4], [1], [Use VARNISHAPI v4])], + [PKG_CHECK_MODULES([VARNISHAPI], [varnishapi >= 3], + [AC_DEFINE([HAVE_VARNISHAPI_3], [1], [Use VARNISHAPI v3])], + [AC_MSG_ERROR([Could not find neither varnishapi v4 nor v3.])]) + ] + ) ] ) ]