diff --git a/src/varnish.c b/src/varnish.c
index e3b6cec14d6a5c73484a6969b965922a1e935faf..c6c4df05d413b97fe2ee1de80d81b3c42f29e2e1 100644 (file)
--- a/src/varnish.c
+++ b/src/varnish.c
#include "configfile.h"
#if HAVE_VARNISH_V4
-#include <varnish/vapi/vsm.h>
-#include <varnish/vapi/vsc.h>
+#include <vapi/vsm.h>
+#include <vapi/vsc.h>
typedef struct VSC_C_main c_varnish_stats_t;
#endif
#if HAVE_VARNISH_V3
-#include <varnish/varnishapi.h>
-#include <varnish/vsc.h>
+#include <varnishapi.h>
+#include <vsc.h>
typedef struct VSC_C_main c_varnish_stats_t;
#endif
#if HAVE_VARNISH_V2
-#include <varnish/varnishapi.h>
+#include <varnishapi.h>
typedef struct varnish_stats c_varnish_stats_t;
#endif
#endif
_Bool collect_vcl;
_Bool collect_workers;
+#if HAVE_VARNISH_V4
+ _Bool collect_vsm;
+#endif
};
typedef struct user_config_s user_config_t; /* }}} */
#endif
/* HTTP header overflows */
varnish_submit_derive (conf->instance, "objects", "total_objects", "header_overflow", stats->losthdr);
-#if !HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4
+ /* N purged objects */
+ varnish_submit_derive (conf->instance, "objects", "total_objects", "purged", stats->n_obj_purged);
+#else
/* Objects sent with sendfile */
varnish_submit_derive (conf->instance, "objects", "total_objects", "sent_sendfile", stats->n_objsendfile);
/* Objects sent with write */
varnish_submit_gauge (conf->instance, "struct", "objects", "vampireobject", stats->n_vampireobject);
/* N struct objectcore */
varnish_submit_gauge (conf->instance, "struct", "objects", "objectcore", stats->n_objectcore);
+ /* N struct waitinglist */
+ varnish_submit_gauge (conf->instance, "struct", "objects", "waitinglist", stats->n_waitinglist);
#endif
/* N struct objecthead */
varnish_submit_gauge (conf->instance, "struct", "objects", "objecthead", stats->n_objecthead);
varnish_submit_derive (conf->instance, "totals", "total_bytes", "pipe_in", stats->s_pipe_in);
/* Piped bytes to client */
varnish_submit_derive (conf->instance, "totals", "total_bytes", "pipe_out", stats->s_pipe_out);
+ /* Number of purge operations */
+ varnish_submit_derive (conf->instance, "totals", "total_operations", "purges", stats->n_purges);
#else
/* Total header bytes */
varnish_submit_derive (conf->instance, "totals", "total_bytes", "header-bytes", stats->s_hdrbytes);
/* Total body byte */
varnish_submit_derive (conf->instance, "totals", "total_bytes", "body-bytes", stats->s_bodybytes);
+#endif
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
+ /* Gzip operations */
+ varnish_submit_derive (conf->instance, "totals", "total_operations", "gzip", stats->n_gzip);
+ /* Gunzip operations */
+ varnish_submit_derive (conf->instance, "totals", "total_operations", "gunzip", stats->n_gunzip);
#endif
}
varnish_submit_gauge (conf->instance, "vcl", "vcl", "avail_vcl", stats->n_vcl_avail);
/* N vcl discarded */
varnish_submit_gauge (conf->instance, "vcl", "vcl", "discarded_vcl", stats->n_vcl_discard);
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
+ /* Loaded VMODs */
+ varnish_submit_gauge (conf->instance, "vcl", "objects", "vmod", stats->vmods);
+#endif
}
if (conf->collect_workers)
/* worker threads limited */
varnish_submit_derive (conf->instance, "workers", "total_threads", "limited", stats->n_wrk_max);
/* dropped work requests */
- varnish_submit_derive (conf->instance, "workers", "total_requests", "dropped", stats->n_wrk_drop);
+ varnish_submit_derive (conf->instance, "workers", "total_threads", "dropped", stats->n_wrk_drop);
#ifdef HAVE_VARNISH_V2
/* queued work requests */
varnish_submit_derive (conf->instance, "workers", "total_requests", "queued", stats->n_wrk_queue);
#endif
#endif
}
+
+#if HAVE_VARNISH_V4
+ if (conf->collect_vsm)
+ {
+ /* Free VSM space */
+ varnish_submit_gauge (conf->instance, "vsm", "bytes", "free", stats->vsm_free);
+ /* Used VSM space */
+ varnish_submit_gauge (conf->instance, "vsm", "bytes", "used", stats->vsm_used);
+ /* Cooling VSM space */
+ varnish_submit_gauge (conf->instance, "vsm", "bytes", "cooling", stats->vsm_cooling);
+ /* Overflow VSM space */
+ varnish_submit_gauge (conf->instance, "vsm", "bytes", "overflow", stats->vsm_overflow);
+ /* Total overflowed VSM space */
+ varnish_submit_derive (conf->instance, "vsm", "total_bytes", "overflowed", stats->vsm_overflowed);
+ }
+#endif
+
} /* }}} void varnish_monitor */
#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
status = VSM_n_Arg (vd, conf->instance);
if (status < 0)
{
+ VSM_Delete (vd);
ERROR ("varnish plugin: VSM_n_Arg (\"%s\") failed "
"with status %i.",
conf->instance, status);
if (VSM_Open (vd))
#endif
{
- ERROR ("varnish plugin: Unable to load statistics.");
+ VSM_Delete (vd);
+ ERROR ("varnish plugin: Unable to open connection.");
return (-1);
}
#else /* if HAVE_VARNISH_V4 */
stats = VSC_Main(vd, NULL);
#endif
+ if (!stats)
+ {
+ VSM_Delete (vd);
+ ERROR ("varnish plugin: Unable to get statistics.");
+
+ return (-1);
+ }
+
varnish_monitor (conf, stats);
- VSM_Close (vd);
+ VSM_Delete (vd);
return (0);
} /* }}} */
#endif
conf->collect_vcl = 0;
conf->collect_workers = 0;
+#if HAVE_VARNISH_V4
+ conf->collect_vsm = 0;
+#endif
return (0);
} /* }}} int varnish_config_apply_default */
plugin_register_complex_read (/* group = */ "varnish",
/* name = */ "varnish/localhost",
/* callback = */ varnish_read,
- /* interval = */ NULL,
+ /* interval = */ 0,
/* user data = */ &ud);
return (0);
cf_util_get_boolean (child, &conf->collect_vcl);
else if (strcasecmp ("CollectWorkers", child->key) == 0)
cf_util_get_boolean (child, &conf->collect_workers);
+#if HAVE_VARNISH_V4
+ else if (strcasecmp ("CollectVSM", child->key) == 0)
+ cf_util_get_boolean (child, &conf->collect_vsm);
+#endif
else
{
WARNING ("Varnish plugin: Ignoring unknown "
&& !conf->collect_uptime
#endif
&& !conf->collect_vcl
- && !conf->collect_workers)
+ && !conf->collect_workers
+#if HAVE_VARNISH_V4
+ && !conf->collect_vsm
+#endif
+ )
{
WARNING ("Varnish plugin: No metric has been configured for "
"instance \"%s\". Disabling this instance.",
plugin_register_complex_read (/* group = */ "varnish",
/* name = */ callback_name,
/* callback = */ varnish_read,
- /* interval = */ NULL,
+ /* interval = */ 0,
/* user data = */ &ud);
have_instance = 1;