X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fvarnish.c;h=08260dc27fe5c28e2a7eb58c6b7350735aa9a827;hp=e4daf4bf84b4e9f59b6215e4462c0d57e383e4ed;hb=1159cb5d383c55a80a0db100b8f7aadcf44740a5;hpb=0eff2a882a9265fd59d4f7a265c6b6810acb0032 diff --git a/src/varnish.c b/src/varnish.c index e4daf4bf..08260dc2 100644 --- a/src/varnish.c +++ b/src/varnish.c @@ -29,7 +29,7 @@ #include "common.h" #include "plugin.h" -#if HAVE_VARNISH_V4 +#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 #include #include typedef struct VSC_C_main c_varnish_stats_t; @@ -71,17 +71,17 @@ struct user_config_s { #if HAVE_VARNISH_V2 _Bool collect_sm; #endif -#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4 +#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 +#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 _Bool collect_uptime; #endif _Bool collect_vcl; _Bool collect_workers; -#if HAVE_VARNISH_V4 +#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 _Bool collect_vsm; _Bool collect_lck; _Bool collect_mempool; @@ -138,13 +138,12 @@ static int varnish_submit_derive(const char *plugin_instance, /* {{{ */ }); } /* }}} 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) @@ -152,19 +151,26 @@ static int varnish_monitor(void *priv, 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; @@ -191,7 +197,7 @@ static int varnish_monitor(void *priv, 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); @@ -306,7 +312,7 @@ static int varnish_monitor(void *priv, 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); @@ -365,7 +371,7 @@ static int varnish_monitor(void *priv, 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); @@ -397,7 +403,7 @@ static int varnish_monitor(void *priv, "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", @@ -450,7 +456,6 @@ static int varnish_monitor(void *priv, else if (strcmp(name, "bans_tests_tested") == 0) return varnish_submit_derive(conf->instance, "ban", "total_operations", "tests_tested", val); - } #endif @@ -485,13 +490,14 @@ static int varnish_monitor(void *priv, 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 } @@ -669,7 +675,7 @@ static int varnish_monitor(void *priv, "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); @@ -697,17 +703,17 @@ static int varnish_monitor(void *priv, 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); @@ -731,38 +737,38 @@ static int varnish_monitor(void *priv, "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 */ @@ -777,20 +783,20 @@ static int varnish_monitor(void *priv, 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); @@ -803,14 +809,14 @@ static int varnish_monitor(void *priv, 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) { @@ -818,35 +824,35 @@ static int varnish_monitor(void *priv, 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) { @@ -869,112 +875,111 @@ static int varnish_monitor(void *priv, 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 @@ -1321,12 +1326,18 @@ static void varnish_monitor(const user_config_t *conf, /* {{{ */ } /* }}} 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; - const c_varnish_stats_t *stats; _Bool ok; + const c_varnish_stats_t *stats; +#elif HAVE_VARNISH_V5 + struct vsm *vd; + struct vsc *vsc; + int vsm_status; +#endif user_config_t *conf; @@ -1336,6 +1347,11 @@ static int varnish_read(user_data_t *ud) /* {{{ */ conf = ud->data; vd = VSM_New(); + +#if HAVE_VARNISH_V5 + vsc = VSC_New(); +#endif + #if HAVE_VARNISH_V3 VSC_Setup(vd); #endif @@ -1343,10 +1359,20 @@ static int varnish_read(user_data_t *ud) /* {{{ */ 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; @@ -1355,34 +1381,61 @@ static int varnish_read(user_data_t *ud) /* {{{ */ #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; } /* }}} */ @@ -1447,18 +1500,18 @@ static int varnish_config_apply_default(user_config_t *conf) /* {{{ */ #if HAVE_VARNISH_V2 conf->collect_sm = 0; #endif -#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4 +#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 conf->collect_sma = 0; #endif conf->collect_sms = 0; conf->collect_struct = 0; conf->collect_totals = 0; -#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 +#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 conf->collect_uptime = 0; #endif conf->collect_vcl = 0; conf->collect_workers = 0; -#if HAVE_VARNISH_V4 +#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 conf->collect_vsm = 0; conf->collect_lck = 0; conf->collect_mempool = 0; @@ -1577,7 +1630,7 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ 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.", @@ -1595,7 +1648,7 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ 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.", @@ -1606,56 +1659,56 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ 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.", @@ -1685,18 +1738,18 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ #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 "