#include "collectd.h"
-#include "common.h"
#include "plugin.h"
+#include "utils/common/common.h"
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
#include <vapi/vsc.h>
#include <vapi/vsm.h>
typedef struct VSC_C_main c_varnish_stats_t;
struct user_config_s {
char *instance;
- _Bool collect_cache;
- _Bool collect_connections;
- _Bool collect_esi;
- _Bool collect_backend;
+ bool collect_cache;
+ bool collect_connections;
+ bool collect_esi;
+ bool collect_backend;
#ifdef HAVE_VARNISH_V3
- _Bool collect_dirdns;
+ bool collect_dirdns;
#endif
- _Bool collect_fetch;
- _Bool collect_hcb;
- _Bool collect_objects;
+ bool collect_fetch;
+ bool collect_hcb;
+ bool collect_objects;
#if HAVE_VARNISH_V2
- _Bool collect_purge;
+ bool collect_purge;
#else
- _Bool collect_ban;
+ bool collect_ban;
#endif
- _Bool collect_session;
- _Bool collect_shm;
- _Bool collect_sms;
+ bool collect_session;
+ bool collect_shm;
+ bool collect_sms;
#if HAVE_VARNISH_V2
- _Bool collect_sm;
+ bool collect_sm;
#endif
-#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4
- _Bool collect_sma;
+#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5
+ bool collect_sma;
#endif
- _Bool collect_struct;
- _Bool collect_totals;
-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
- _Bool collect_uptime;
+ bool collect_struct;
+ bool collect_totals;
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5
+ bool collect_uptime;
#endif
- _Bool collect_vcl;
- _Bool collect_workers;
-#if HAVE_VARNISH_V4
- _Bool collect_vsm;
- _Bool collect_lck;
- _Bool collect_mempool;
- _Bool collect_mgt;
- _Bool collect_smf;
- _Bool collect_vbe;
- _Bool collect_mse;
+ bool collect_vcl;
+ bool collect_workers;
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
+ bool collect_vsm;
+ bool collect_lck;
+ bool collect_mempool;
+ bool collect_mgt;
+ bool collect_smf;
+ bool collect_vbe;
+ bool collect_mse;
#endif
};
typedef struct user_config_s user_config_t; /* }}} */
-static _Bool have_instance = 0;
+static bool have_instance;
static int varnish_submit(const char *plugin_instance, /* {{{ */
const char *category, const char *type,
});
} /* }}} int varnish_submit_derive */
-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5
static int varnish_monitor(void *priv,
const struct VSC_point *const pt) /* {{{ */
{
uint64_t val;
const user_config_t *conf;
- const char *class;
const char *name;
if (pt == NULL)
conf = priv;
-#if HAVE_VARNISH_V4
- class = pt->section->fantom->type;
- name = pt->desc->name;
+#if HAVE_VARNISH_V5
+ char namebuff[DATA_MAX_NAME_LEN];
+
+ char const *c = strrchr(pt->name, '.');
+ if (c == NULL) {
+ return EINVAL;
+ }
+ sstrncpy(namebuff, c + 1, sizeof(namebuff));
+ name = namebuff;
- if (strcmp(class, "MAIN") != 0)
+#elif HAVE_VARNISH_V4
+ if (strcmp(pt->section->fantom->type, "MAIN") != 0)
return 0;
+ name = pt->desc->name;
#elif HAVE_VARNISH_V3
- class = pt->class;
- name = pt->name;
-
- if (strcmp(class, "") != 0)
+ if (strcmp(pt->class, "") != 0)
return 0;
+
+ name = pt->name;
#endif
val = *(const volatile uint64_t *)pt->ptr;
else if (strcmp(name, "client_req") == 0)
return varnish_submit_derive(conf->instance, "connections", "connections",
"received", val);
-#ifdef HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
else if (strcmp(name, "client_req_400") == 0)
return varnish_submit_derive(conf->instance, "connections", "connections",
"error_400", val);
else if (strcmp(name, "fetch_304") == 0)
return varnish_submit_derive(conf->instance, "fetch", "http_requests",
"no_body_304", val);
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
else if (strcmp(name, "fetch_no_thread") == 0)
return varnish_submit_derive(conf->instance, "fetch", "http_requests",
"no_thread", val);
else if (strcmp(name, "n_objoverflow") == 0)
return varnish_submit_derive(conf->instance, "objects", "total_objects",
"workspace_overflow", val);
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
else if (strcmp(name, "exp_mailed") == 0)
return varnish_submit_gauge(conf->instance, "struct", "objects",
"exp_mailed", val);
"duplicate", val);
}
#endif
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
if (conf->collect_ban) {
if (strcmp(name, "bans") == 0)
return varnish_submit_derive(conf->instance, "ban", "total_operations",
else if (strcmp(name, "bans_tests_tested") == 0)
return varnish_submit_derive(conf->instance, "ban", "total_operations",
"tests_tested", val);
-
}
#endif
else if (strcmp(name, "sess_herd") == 0)
return varnish_submit_derive(conf->instance, "session",
"total_operations", "herd", val);
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
else if (strcmp(name, "sess_closed_err") == 0)
return varnish_submit_derive(conf->instance, "session",
"total_operations", "closed_err", val);
else if (strcmp(name, "sess_dropped") == 0)
return varnish_submit_derive(conf->instance, "session",
- "total_operations", "dropped_for_thread", val);
+ "total_operations", "dropped_for_thread",
+ val);
#endif
}
"dropped", val);
else if (strcmp(name, "thread_queue_len") == 0)
return varnish_submit_gauge(conf->instance, "workers", "queue_length",
- "threads", val);
+ "threads", val);
else if (strcmp(name, "n_wrk") == 0)
return varnish_submit_gauge(conf->instance, "workers", "threads",
"worker", val);
else if (strcmp(name, "n_wrk_lqueue") == 0)
return varnish_submit_derive(conf->instance, "workers", "total_requests",
"queue_length", val);
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
else if (strcmp(name, "pools") == 0)
- return varnish_submit_gauge(conf->instance, "workers", "pools",
- "pools", val);
+ return varnish_submit_gauge(conf->instance, "workers", "pools", "pools",
+ val);
else if (strcmp(name, "busy_killed") == 0)
return varnish_submit_derive(conf->instance, "workers", "http_requests",
"busy_killed", val);
#endif
}
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
if (conf->collect_vsm) {
if (strcmp(name, "vsm_free") == 0)
return varnish_submit_gauge(conf->instance, "vsm", "bytes", "free", val);
"bitmap", "happy_hprobes", val);
*/
if (strcmp(name, "bereq_hdrbytes") == 0)
- return varnish_submit_derive(conf->instance, "vbe",
- "total_bytes", "bereq_hdrbytes", val);
+ return varnish_submit_derive(conf->instance, "vbe", "total_bytes",
+ "bereq_hdrbytes", val);
else if (strcmp(name, "bereq_bodybytes") == 0)
- return varnish_submit_derive(conf->instance, "vbe",
- "total_bytes", "bereq_bodybytes", val);
+ return varnish_submit_derive(conf->instance, "vbe", "total_bytes",
+ "bereq_bodybytes", val);
else if (strcmp(name, "bereq_protobytes") == 0)
- return varnish_submit_derive(conf->instance, "vbe",
- "total_bytes", "bereq_protobytes", val);
+ return varnish_submit_derive(conf->instance, "vbe", "total_bytes",
+ "bereq_protobytes", val);
else if (strcmp(name, "beresp_hdrbytes") == 0)
- return varnish_submit_derive(conf->instance, "vbe",
- "total_bytes", "beresp_hdrbytes", val);
+ return varnish_submit_derive(conf->instance, "vbe", "total_bytes",
+ "beresp_hdrbytes", val);
else if (strcmp(name, "beresp_bodybytes") == 0)
- return varnish_submit_derive(conf->instance, "vbe",
- "total_bytes", "beresp_bodybytes", val);
+ return varnish_submit_derive(conf->instance, "vbe", "total_bytes",
+ "beresp_bodybytes", val);
else if (strcmp(name, "beresp_protobytes") == 0)
- return varnish_submit_derive(conf->instance, "vbe",
- "total_bytes", "beresp_protobytes", val);
+ return varnish_submit_derive(conf->instance, "vbe", "total_bytes",
+ "beresp_protobytes", val);
else if (strcmp(name, "pipe_hdrbytes") == 0)
- return varnish_submit_derive(conf->instance, "vbe",
- "total_bytes", "pipe_hdrbytes", val);
+ return varnish_submit_derive(conf->instance, "vbe", "total_bytes",
+ "pipe_hdrbytes", val);
else if (strcmp(name, "pipe_out") == 0)
- return varnish_submit_derive(conf->instance, "vbe",
- "total_bytes", "pipe_out", val);
+ return varnish_submit_derive(conf->instance, "vbe", "total_bytes",
+ "pipe_out", val);
else if (strcmp(name, "pipe_in") == 0)
- return varnish_submit_derive(conf->instance, "vbe",
- "total_bytes", "pipe_in", val);
+ return varnish_submit_derive(conf->instance, "vbe", "total_bytes",
+ "pipe_in", val);
else if (strcmp(name, "conn") == 0)
return varnish_submit_derive(conf->instance, "vbe", "connections",
- "c_conns", val);
+ "c_conns", val);
else if (strcmp(name, "req") == 0)
return varnish_submit_derive(conf->instance, "vbe", "http_requests",
- "b_reqs", val);
+ "b_reqs", val);
}
/* All Stevedores support these counters */
strncpy(category, "mse", 4);
if (strcmp(name, "c_req") == 0)
- return varnish_submit_derive(conf->instance, category,
- "total_operations", "alloc_req", val);
+ return varnish_submit_derive(conf->instance, category, "total_operations",
+ "alloc_req", val);
else if (strcmp(name, "c_fail") == 0)
- return varnish_submit_derive(conf->instance, category,
- "total_operations", "alloc_fail", val);
+ return varnish_submit_derive(conf->instance, category, "total_operations",
+ "alloc_fail", val);
else if (strcmp(name, "c_bytes") == 0)
- return varnish_submit_derive(conf->instance, category,
- "total_bytes", "bytes_allocated", val);
+ return varnish_submit_derive(conf->instance, category, "total_bytes",
+ "bytes_allocated", val);
else if (strcmp(name, "c_freed") == 0)
- return varnish_submit_derive(conf->instance, category,
- "total_bytes", "bytes_freed", val);
+ return varnish_submit_derive(conf->instance, category, "total_bytes",
+ "bytes_freed", val);
else if (strcmp(name, "g_alloc") == 0)
- return varnish_submit_derive(conf->instance, category,
- "total_operations", "alloc_outstanding", val);
+ return varnish_submit_derive(conf->instance, category, "total_operations",
+ "alloc_outstanding", val);
else if (strcmp(name, "g_bytes") == 0)
return varnish_submit_gauge(conf->instance, category, "bytes",
"bytes_outstanding", val);
if (conf->collect_smf) {
if (strcmp(name, "g_smf") == 0)
- return varnish_submit_gauge(conf->instance, "smf", "objects",
- "n_struct_smf", val);
- else if (strcmp(name, "g_smf_frag") == 0)
- return varnish_submit_gauge(conf->instance, "smf", "objects",
- "n_small_free_smf", val);
- else if (strcmp(name, "g_smf_large") == 0)
- return varnish_submit_gauge(conf->instance, "smf", "objects",
- "n_large_free_smf", val);
+ return varnish_submit_gauge(conf->instance, "smf", "objects",
+ "n_struct_smf", val);
+ else if (strcmp(name, "g_smf_frag") == 0)
+ return varnish_submit_gauge(conf->instance, "smf", "objects",
+ "n_small_free_smf", val);
+ else if (strcmp(name, "g_smf_large") == 0)
+ return varnish_submit_gauge(conf->instance, "smf", "objects",
+ "n_large_free_smf", val);
}
if (conf->collect_mgt) {
return varnish_submit_gauge(conf->instance, "mgt", "uptime",
"mgt_proc_uptime", val);
else if (strcmp(name, "child_start") == 0)
- return varnish_submit_derive(conf->instance, "mgt",
- "total_operations", "child_start", val);
+ return varnish_submit_derive(conf->instance, "mgt", "total_operations",
+ "child_start", val);
else if (strcmp(name, "child_exit") == 0)
- return varnish_submit_derive(conf->instance, "mgt",
- "total_operations", "child_exit", val);
+ return varnish_submit_derive(conf->instance, "mgt", "total_operations",
+ "child_exit", val);
else if (strcmp(name, "child_stop") == 0)
- return varnish_submit_derive(conf->instance, "mgt",
- "total_operations", "child_stop", val);
+ return varnish_submit_derive(conf->instance, "mgt", "total_operations",
+ "child_stop", val);
else if (strcmp(name, "child_died") == 0)
- return varnish_submit_derive(conf->instance, "mgt",
- "total_operations", "child_died", val);
+ return varnish_submit_derive(conf->instance, "mgt", "total_operations",
+ "child_died", val);
else if (strcmp(name, "child_dump") == 0)
- return varnish_submit_derive(conf->instance, "mgt",
- "total_operations", "child_dump", val);
+ return varnish_submit_derive(conf->instance, "mgt", "total_operations",
+ "child_dump", val);
else if (strcmp(name, "child_panic") == 0)
- return varnish_submit_derive(conf->instance, "mgt",
- "total_operations", "child_panic", val);
+ return varnish_submit_derive(conf->instance, "mgt", "total_operations",
+ "child_panic", val);
}
if (conf->collect_lck) {
if (strcmp(name, "creat") == 0)
- return varnish_submit_gauge(conf->instance, "lck", "objects",
- "created", val);
+ return varnish_submit_gauge(conf->instance, "lck", "objects", "created",
+ val);
else if (strcmp(name, "destroy") == 0)
- return varnish_submit_gauge(conf->instance, "lck", "objects",
- "destroyed", val);
+ return varnish_submit_gauge(conf->instance, "lck", "objects", "destroyed",
+ val);
else if (strcmp(name, "locks") == 0)
return varnish_submit_derive(conf->instance, "lck", "total_operations",
- "lock_ops", val);
+ "lock_ops", val);
}
if (conf->collect_mempool) {
return varnish_submit_derive(conf->instance, "mempool",
"total_operations", "frees", val);
else if (strcmp(name, "recycle") == 0)
- return varnish_submit_gauge(conf->instance, "mempool",
- "objects", "recycled", val);
+ return varnish_submit_gauge(conf->instance, "mempool", "objects",
+ "recycled", val);
else if (strcmp(name, "timeout") == 0)
- return varnish_submit_gauge(conf->instance, "mempool",
- "objects", "timed_out", val);
+ return varnish_submit_gauge(conf->instance, "mempool", "objects",
+ "timed_out", val);
else if (strcmp(name, "toosmall") == 0)
- return varnish_submit_gauge(conf->instance, "mempool",
- "objects", "too_small", val);
+ return varnish_submit_gauge(conf->instance, "mempool", "objects",
+ "too_small", val);
else if (strcmp(name, "surplus") == 0)
- return varnish_submit_gauge(conf->instance, "mempool",
- "objects", "surplus", val);
+ return varnish_submit_gauge(conf->instance, "mempool", "objects",
+ "surplus", val);
else if (strcmp(name, "randry") == 0)
- return varnish_submit_gauge(conf->instance, "mempool",
- "objects", "ran_dry", val);
+ return varnish_submit_gauge(conf->instance, "mempool", "objects",
+ "ran_dry", val);
}
if (conf->collect_mse) {
if (strcmp(name, "c_full") == 0)
- return varnish_submit_derive(conf->instance, "mse",
- "total_operations", "full_allocs", val);
+ return varnish_submit_derive(conf->instance, "mse", "total_operations",
+ "full_allocs", val);
else if (strcmp(name, "c_truncated") == 0)
- return varnish_submit_derive(conf->instance, "mse",
- "total_operations", "truncated_allocs", val);
+ return varnish_submit_derive(conf->instance, "mse", "total_operations",
+ "truncated_allocs", val);
else if (strcmp(name, "c_expanded") == 0)
- return varnish_submit_derive(conf->instance, "mse",
- "total_operations", "expanded_allocs", val);
+ return varnish_submit_derive(conf->instance, "mse", "total_operations",
+ "expanded_allocs", val);
else if (strcmp(name, "c_failed") == 0)
- return varnish_submit_derive(conf->instance, "mse",
- "total_operations", "failed_allocs", val);
+ return varnish_submit_derive(conf->instance, "mse", "total_operations",
+ "failed_allocs", val);
else if (strcmp(name, "c_bytes") == 0)
- return varnish_submit_derive(conf->instance, "mse",
- "total_bytes", "bytes_allocated", val);
+ return varnish_submit_derive(conf->instance, "mse", "total_bytes",
+ "bytes_allocated", val);
else if (strcmp(name, "c_freed") == 0)
- return varnish_submit_derive(conf->instance, "mse",
- "total_bytes", "bytes_freed", val);
+ return varnish_submit_derive(conf->instance, "mse", "total_bytes",
+ "bytes_freed", val);
else if (strcmp(name, "g_fo_alloc") == 0)
- return varnish_submit_derive(conf->instance, "mse",
- "total_operations", "fo_allocs_outstanding", val);
+ return varnish_submit_derive(conf->instance, "mse", "total_operations",
+ "fo_allocs_outstanding", val);
else if (strcmp(name, "g_fo_bytes") == 0)
- return varnish_submit_gauge(conf->instance, "mse",
- "bytes", "fo_bytes_outstanding", val);
+ return varnish_submit_gauge(conf->instance, "mse", "bytes",
+ "fo_bytes_outstanding", val);
else if (strcmp(name, "g_membuf_alloc") == 0)
- return varnish_submit_gauge(conf->instance, "mse",
- "objects", "membufs_allocated", val);
+ return varnish_submit_gauge(conf->instance, "mse", "objects",
+ "membufs_allocated", val);
else if (strcmp(name, "g_membuf_inuse") == 0)
- return varnish_submit_gauge(conf->instance, "mse",
- "objects", "membufs_inuse", val);
+ return varnish_submit_gauge(conf->instance, "mse", "objects",
+ "membufs_inuse", val);
else if (strcmp(name, "g_bans_bytes") == 0)
- return varnish_submit_gauge(conf->instance, "mse",
- "bytes", "persisted_banspace_used", val);
+ return varnish_submit_gauge(conf->instance, "mse", "bytes",
+ "persisted_banspace_used", val);
else if (strcmp(name, "g_bans_space") == 0)
- return varnish_submit_gauge(conf->instance, "mse",
- "bytes", "persisted_banspace_available", val);
+ return varnish_submit_gauge(conf->instance, "mse", "bytes",
+ "persisted_banspace_available", val);
else if (strcmp(name, "g_bans_persisted") == 0)
- return varnish_submit_derive(conf->instance, "mse",
- "total_operations", "bans_persisted", val);
+ return varnish_submit_derive(conf->instance, "mse", "total_operations",
+ "bans_persisted", val);
else if (strcmp(name, "g_bans_lost") == 0)
- return varnish_submit_derive(conf->instance, "mse",
- "total_operations", "bans_lost", val);
+ return varnish_submit_derive(conf->instance, "mse", "total_operations",
+ "bans_lost", val);
- /* mse seg */
+ /* mse seg */
else if (strcmp(name, "g_journal_bytes") == 0)
- return varnish_submit_gauge(conf->instance, "mse_reg",
- "bytes", "journal_bytes_used", val);
+ return varnish_submit_gauge(conf->instance, "mse_reg", "bytes",
+ "journal_bytes_used", val);
else if (strcmp(name, "g_journal_space") == 0)
- return varnish_submit_gauge(conf->instance, "mse_reg",
- "bytes", "journal_bytes_free", val);
+ return varnish_submit_gauge(conf->instance, "mse_reg", "bytes",
+ "journal_bytes_free", val);
/* mse segagg */
else if (strcmp(name, "g_bigspace") == 0)
- return varnish_submit_gauge(conf->instance, "mse_segagg",
- "bytes", "big_extents_bytes_available", val);
+ return varnish_submit_gauge(conf->instance, "mse_segagg", "bytes",
+ "big_extents_bytes_available", val);
else if (strcmp(name, "g_extfree") == 0)
- return varnish_submit_gauge(conf->instance, "mse_segagg",
- "objects", "free_extents", val);
+ return varnish_submit_gauge(conf->instance, "mse_segagg", "objects",
+ "free_extents", val);
else if (strcmp(name, "g_sparenode") == 0)
- return varnish_submit_gauge(conf->instance, "mse_segagg",
- "objects", "spare_nodes_available", val);
+ return varnish_submit_gauge(conf->instance, "mse_segagg", "objects",
+ "spare_nodes_available", val);
else if (strcmp(name, "g_objnode") == 0)
- return varnish_submit_gauge(conf->instance, "mse_segagg",
- "objects", "object_nodes_in_use", val);
+ return varnish_submit_gauge(conf->instance, "mse_segagg", "objects",
+ "object_nodes_in_use", val);
else if (strcmp(name, "g_extnode") == 0)
- return varnish_submit_gauge(conf->instance, "mse_segagg",
- "objects", "extent_nodes_in_use", val);
+ return varnish_submit_gauge(conf->instance, "mse_segagg", "objects",
+ "extent_nodes_in_use", val);
else if (strcmp(name, "g_bigextfree") == 0)
- return varnish_submit_gauge(conf->instance, "mse_segagg",
- "objects", "free_big_extents", val);
+ return varnish_submit_gauge(conf->instance, "mse_segagg", "objects",
+ "free_big_extents", val);
else if (strcmp(name, "c_pruneloop") == 0)
return varnish_submit_derive(conf->instance, "mse_segagg",
- "total_operations", "prune_loops", val);
+ "total_operations", "prune_loops", val);
else if (strcmp(name, "c_pruned") == 0)
return varnish_submit_derive(conf->instance, "mse_segagg",
- "total_objects", "pruned_objects", val);
+ "total_objects", "pruned_objects", val);
else if (strcmp(name, "c_spared") == 0)
return varnish_submit_derive(conf->instance, "mse_segagg",
- "total_operations", "spared_objects", val);
+ "total_operations", "spared_objects", val);
else if (strcmp(name, "c_skipped") == 0)
return varnish_submit_derive(conf->instance, "mse_segagg",
- "total_operations", "missed_objects", val);
+ "total_operations", "missed_objects", val);
else if (strcmp(name, "c_nuked") == 0)
return varnish_submit_derive(conf->instance, "mse_segagg",
- "total_operations", "nuked_objects", val);
+ "total_operations", "nuked_objects", val);
else if (strcmp(name, "c_sniped") == 0)
return varnish_submit_derive(conf->instance, "mse_segagg",
- "total_operations", "sniped_objects", val);
-
+ "total_operations", "sniped_objects", val);
}
#endif
} /* }}} void varnish_monitor */
#endif
-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5
static int varnish_read(user_data_t *ud) /* {{{ */
{
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
struct VSM_data *vd;
+ bool ok;
const c_varnish_stats_t *stats;
- _Bool ok;
+#elif HAVE_VARNISH_V5
+ struct vsm *vd;
+ struct vsc *vsc;
+ int vsm_status;
+#endif
user_config_t *conf;
conf = ud->data;
vd = VSM_New();
+
+#if HAVE_VARNISH_V5
+ vsc = VSC_New();
+#endif
+
#if HAVE_VARNISH_V3
VSC_Setup(vd);
#endif
if (conf->instance != NULL) {
int status;
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
status = VSM_n_Arg(vd, conf->instance);
+#elif HAVE_VARNISH_V5
+ status = VSM_Arg(vd, 'n', conf->instance);
+#endif
+
if (status < 0) {
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
VSM_Delete(vd);
- ERROR("varnish plugin: VSM_n_Arg (\"%s\") failed "
+#elif HAVE_VARNISH_V5
+ VSC_Destroy(&vsc, vd);
+ VSM_Destroy(&vd);
+#endif
+ ERROR("varnish plugin: VSM_Arg (\"%s\") failed "
"with status %i.",
conf->instance, status);
return -1;
#if HAVE_VARNISH_V3
ok = (VSC_Open(vd, /* diag = */ 1) == 0);
-#else /* if HAVE_VARNISH_V4 */
+#elif HAVE_VARNISH_V4
ok = (VSM_Open(vd) == 0);
#endif
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
if (!ok) {
VSM_Delete(vd);
ERROR("varnish plugin: Unable to open connection.");
-
return -1;
}
+#endif
#if HAVE_VARNISH_V3
stats = VSC_Main(vd);
-#else /* if HAVE_VARNISH_V4 */
+#elif HAVE_VARNISH_V4
stats = VSC_Main(vd, NULL);
#endif
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
if (!stats) {
VSM_Delete(vd);
ERROR("varnish plugin: Unable to get statistics.");
+ return -1;
+ }
+#endif
+#if HAVE_VARNISH_V5
+ if (VSM_Attach(vd, STDERR_FILENO)) {
+ ERROR("varnish plugin: Cannot attach to varnish. %s", VSM_Error(vd));
+ VSC_Destroy(&vsc, vd);
+ VSM_Destroy(&vd);
return -1;
}
+ vsm_status = VSM_Status(vd);
+ if (vsm_status & ~(VSM_MGT_RUNNING | VSM_WRK_RUNNING)) {
+ ERROR("varnish plugin: Unable to get statistics.");
+ VSC_Destroy(&vsc, vd);
+ VSM_Destroy(&vd);
+ return -1;
+ }
+#endif
+
#if HAVE_VARNISH_V3
VSC_Iter(vd, varnish_monitor, conf);
-#else /* if HAVE_VARNISH_V4 */
+#elif HAVE_VARNISH_V4
VSC_Iter(vd, NULL, varnish_monitor, conf);
+#elif HAVE_VARNISH_V5
+ VSC_Iter(vsc, vd, varnish_monitor, conf);
#endif
+
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
VSM_Delete(vd);
+#elif HAVE_VARNISH_V5
+ VSC_Destroy(&vsc, vd);
+ VSM_Destroy(&vd);
+#endif
return 0;
} /* }}} */
if (conf == NULL)
return EINVAL;
- conf->collect_backend = 1;
- conf->collect_cache = 1;
- conf->collect_connections = 1;
+ conf->collect_backend = true;
+ conf->collect_cache = true;
+ conf->collect_connections = true;
#ifdef HAVE_VARNISH_V3
- conf->collect_dirdns = 0;
+ conf->collect_dirdns = false;
#endif
- conf->collect_esi = 0;
- conf->collect_fetch = 0;
- conf->collect_hcb = 0;
- conf->collect_objects = 0;
+ conf->collect_esi = false;
+ conf->collect_fetch = false;
+ conf->collect_hcb = false;
+ conf->collect_objects = false;
#if HAVE_VARNISH_V2
- conf->collect_purge = 0;
+ conf->collect_purge = false;
#else
- conf->collect_ban = 0;
+ conf->collect_ban = false;
#endif
- conf->collect_session = 0;
- conf->collect_shm = 1;
+ conf->collect_session = false;
+ conf->collect_shm = true;
#if HAVE_VARNISH_V2
- conf->collect_sm = 0;
+ conf->collect_sm = false;
#endif
-#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4
- conf->collect_sma = 0;
+#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5
+ conf->collect_sma = false;
#endif
- conf->collect_sms = 0;
- conf->collect_struct = 0;
- conf->collect_totals = 0;
-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
- conf->collect_uptime = 0;
+ conf->collect_sms = false;
+ conf->collect_struct = false;
+ conf->collect_totals = false;
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5
+ conf->collect_uptime = false;
#endif
- conf->collect_vcl = 0;
- conf->collect_workers = 0;
-#if HAVE_VARNISH_V4
- conf->collect_vsm = 0;
- conf->collect_lck = 0;
- conf->collect_mempool = 0;
- conf->collect_mgt = 0;
- conf->collect_smf = 0;
- conf->collect_vbe = 0;
- conf->collect_mse = 0;
+ conf->collect_vcl = false;
+ conf->collect_workers = false;
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
+ conf->collect_vsm = false;
+ conf->collect_lck = false;
+ conf->collect_mempool = false;
+ conf->collect_mgt = false;
+ conf->collect_smf = false;
+ conf->collect_vbe = false;
+ conf->collect_mse = false;
#endif
return 0;
else if (strcasecmp("CollectSMS", child->key) == 0)
cf_util_get_boolean(child, &conf->collect_sms);
else if (strcasecmp("CollectSMA", child->key) == 0)
-#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4
+#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5
cf_util_get_boolean(child, &conf->collect_sma);
#else
WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.",
else if (strcasecmp("CollectTotals", child->key) == 0)
cf_util_get_boolean(child, &conf->collect_totals);
else if (strcasecmp("CollectUptime", child->key) == 0)
-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5
cf_util_get_boolean(child, &conf->collect_uptime);
#else
WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.",
else if (strcasecmp("CollectWorkers", child->key) == 0)
cf_util_get_boolean(child, &conf->collect_workers);
else if (strcasecmp("CollectVSM", child->key) == 0)
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
cf_util_get_boolean(child, &conf->collect_vsm);
#else
WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.",
child->key, "v4");
#endif
else if (strcasecmp("CollectLock", child->key) == 0)
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
cf_util_get_boolean(child, &conf->collect_lck);
#else
WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.",
child->key, "v4");
#endif
else if (strcasecmp("CollectMempool", child->key) == 0)
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
cf_util_get_boolean(child, &conf->collect_mempool);
#else
WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.",
child->key, "v4");
#endif
else if (strcasecmp("CollectManagement", child->key) == 0)
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
cf_util_get_boolean(child, &conf->collect_mgt);
#else
WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.",
child->key, "v4");
#endif
else if (strcasecmp("CollectSMF", child->key) == 0)
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
cf_util_get_boolean(child, &conf->collect_smf);
#else
WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.",
child->key, "v4");
#endif
else if (strcasecmp("CollectSMF", child->key) == 0)
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
cf_util_get_boolean(child, &conf->collect_smf);
#else
WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.",
child->key, "v4");
#endif
else if (strcasecmp("CollectVBE", child->key) == 0)
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
cf_util_get_boolean(child, &conf->collect_vbe);
#else
WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.",
child->key, "v4");
#endif
else if (strcasecmp("CollectMSE", child->key) == 0)
-#if HAVE_VARNISH_V4
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
cf_util_get_boolean(child, &conf->collect_mse);
#else
WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.",
#if HAVE_VARNISH_V2
&& !conf->collect_sm
#endif
-#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4
+#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5
&& !conf->collect_sma
#endif
&& !conf->collect_struct && !conf->collect_totals
-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4
+#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5
&& !conf->collect_uptime
#endif
&& !conf->collect_vcl && !conf->collect_workers
-#if HAVE_VARNISH_V4
- && !conf->collect_vsm && !conf->collect_vbe && !conf->collect_smf
- && !conf->collect_mgt && !conf->collect_lck && !conf->collect_mempool
- && !conf->collect_mse
+#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5
+ && !conf->collect_vsm && !conf->collect_vbe && !conf->collect_smf &&
+ !conf->collect_mgt && !conf->collect_lck && !conf->collect_mempool &&
+ !conf->collect_mse
#endif
) {
WARNING("Varnish plugin: No metric has been configured for "
.data = conf, .free_func = varnish_config_free,
});
- have_instance = 1;
+ have_instance = true;
return 0;
} /* }}} int varnish_config_instance */