summaryrefslogtreecommitdiffabout
authorSergey Poznyakoff <gray@gnu.org.ua>2016-04-27 11:26:04 (GMT)
committer Sergey Poznyakoff <gray@gnu.org.ua>2016-04-27 12:02:18 (GMT)
commit94973146c58df26b20e17e2e5b1274216ca88969 (patch) (side-by-side diff)
tree17538cc2991af0acec5bebfe6a826ef67cd9fc95
parent319c154c46214fdc5d8f8b498ae5a23bc8d03072 (diff)
downloadvarnish-mib-94973146c58df26b20e17e2e5b1274216ca88969.tar.gz
varnish-mib-94973146c58df26b20e17e2e5b1274216ca88969.tar.bz2
Support for Varnish 4.1
* NEWS: Update. * bootstrap: Rewrite as a Perl script; create m4/varnish_mib.m4 from src/varnish_mib.mib2c * configure.ac: Version 1.1.90 Use AC_CHECK_VSC_C_MAIN_MEMBERS Define VARNISHAPI_MAJOR, VARNISHAPI_MINOR and VARNISHAPI_PATCH for use in preprocessor directives. * src/betab.c [VARNISHAPI_MINOR] (VSC_POINT_FMT): Define depending on Varnish API minor version. * src/varnish_mib.mib2c (varnish_translate_table): New variable. It is used both by varnish_translate in this module, and by bootstrap to produce a list of macros checking for members of struct VSC_C_main. Output preprocessor conditionals in right places. * src/vcli.c (vcli_connect): Fix cc warnings. * src/varnish-mib.8: Update.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--NEWS11
-rwxr-xr-xbootstrap84
-rw-r--r--configure.ac20
-rw-r--r--src/betab.c8
-rw-r--r--src/varnish-mib.840
-rw-r--r--src/varnish_mib.mib2c39
-rw-r--r--src/vcli.c4
7 files changed, 172 insertions, 34 deletions
diff --git a/NEWS b/NEWS
index cb6b102..f12c539 100644
--- a/NEWS
+++ b/NEWS
@@ -1,9 +1,14 @@
-Varnish-mib NEWS -- history of user-visible changes. 2015-02-25
-Copyright (C) 2014-2015 Sergey Poznyakoff
+Varnish-mib NEWS -- history of user-visible changes. 2016-04-27
+Copyright (C) 2014-2016 Sergey Poznyakoff
See the end of file for copying conditions.
Please send Varnish-mib bug reports to <gray@gnu.org>
+Version 1.1.90 (Git)
+
+* Support for Varnish 4.1
+
+
Version 1.1, 2015-02-25
* Don't exit if unable to open Varnish memory file
@@ -16,7 +21,7 @@ Initial release.
* Copyright information:
-Copyright (C) 2014-2015 Sergey Poznyakoff
+Copyright (C) 2014-2016 Sergey Poznyakoff
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
diff --git a/bootstrap b/bootstrap
index c55c2b2..25bc72e 100755
--- a/bootstrap
+++ b/bootstrap
@@ -1,7 +1,77 @@
-#!/bin/sh
-for dir in m4 build-aux
-do
- test -d $dir || mkdir $dir
-done
-> ChangeLog
-autoreconf -f -i -s
+#!/usr/bin/perl
+use strict;
+use autodie;
+
+my $mib2c_config = 'src/varnish_mib.mib2c';
+
+die "This file must be run from the varnish-mib top level source directory"
+ unless -r $mib2c_config;
+
+print "$0: creating ancillary directories and files\n";
+foreach my $dir ('m4', 'build-aux') {
+ mkdir($dir) unless -d $dir;
+}
+
+unless (-f 'ChangeLog') {
+ open(my $fd, '>', 'ChangeLog');
+ print $fd <<EOT
+This file is a placeholder. It will be filled with actual data by the first
+run of make.
+EOT
+;
+ close $fd;
+}
+
+print "$0: generating m4/varnish_mib.m4\n";
+open(my $fd, '<', $mib2c_config);
+my $prog;
+while (<$fd>) {
+ if (defined($prog)) {
+ last if /^\@endperl\@/;
+ $prog .= $_;
+ } else {
+ if (/^\@startperl\@/) {
+ $prog = "no strict \"vars\";\n";
+ }
+ }
+}
+
+my %vars;
+eval $prog;
+die $@ if $@;
+die "$mib2c_config does not declare translation table"
+ unless exists $vars{'varnish_translate_table'};
+
+open(my $fd, '>', 'm4/varnish_mib.m4');
+print $fd <<'EOT';
+AC_DEFUN([AC_CHECK_VSC_C_MAIN_MEMBERS],
+[save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $VARNISHAPI_CFLAGS"
+EOT
+;
+
+foreach my $member (sort
+ map { $_->[1] }
+ grep { $_->[0] eq 'MAIN' }
+ values %{$vars{'varnish_translate_table'}}) {
+ print $fd <<EOT
+ AC_CHECK_MEMBERS([struct VSC_C_main.$member],,,
+[#include <stddef.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <limits.h>
+#include <vapi/vsc.h>
+#include <vapi/vsm.h>
+#include <vcli.h>])
+EOT
+;
+}
+print $fd <<'EOT'
+CFLAGS="$save_CFLAGS"
+])
+EOT
+;
+close $fd;
+
+print "$0: reconfiguring\n";
+exec('autoreconf -f -i -s');
diff --git a/configure.ac b/configure.ac
index d571518..cf0bf05 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
# This file is part of Varnish-mib -*- autoconf -*-
-# Copyright (C) 2014-2015 Sergey Poznyakoff
+# Copyright (C) 2014-2016 Sergey Poznyakoff
#
# Varnish-mib is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@
# along with Varnish-mib. If not, see <http://www.gnu.org/licenses/>.
AC_PREREQ(2.69)
-AC_INIT([varnish-mib], 1.1, [gray@gnu.org])
+AC_INIT([varnish-mib], 1.1.90, [gray@gnu.org])
AC_CONFIG_SRCDIR(src/varnish_mib.mib2c)
AM_CONFIG_HEADER(config.h)
AC_CONFIG_AUX_DIR([build-aux])
@@ -43,6 +43,22 @@ PKG_PROG_PKG_CONFIG
# Checks for Varnish
PKG_CHECK_MODULES([VARNISHAPI], [varnishapi >= 4.0])
+varnishapi_version() {
+ AC_DEFINE_UNQUOTED([VARNISHAPI_MAJOR],[$1],[Varnish API major version number])
+ AC_DEFINE_UNQUOTED([VARNISHAPI_MINOR],[$2],[Varnish API minor version number])
+ AC_DEFINE_UNQUOTED([VARNISHAPI_PATCH],[$3],[Varnish API patchlevel])
+}
+
+v=$($PKG_CONFIG --modversion varnishapi)
+if test -n "$v"; then
+ save_IFS=$IFS
+ IFS='.'
+ varnishapi_version $v
+ IFS=$save_IFS
+fi
+
+AC_CHECK_VSC_C_MAIN_MEMBERS
+
# Check for Net-SNMP
AC_PATH_PROG([NET_SNMP_CONFIG], net-snmp-config, none, $PATH)
if test "$NET_SNMP_CONFIG" = "none"; then
diff --git a/src/betab.c b/src/betab.c
index b583958..49e02f7 100644
--- a/src/betab.c
+++ b/src/betab.c
@@ -59,7 +59,13 @@ create_entry(netsnmp_tdata *table_data, long idx,
#define VSC_POINT_TYPE(p) ((p)->section->fantom->type)
#define VSC_POINT_IDENT(p) ((p)->section->fantom->ident)
#define VSC_POINT_NAME(p) ((p)->desc->name)
-#define VSC_POINT_FMT(p) ((p)->desc->fmt)
+#if VARNISHAPI_MINOR == 0
+# define VSC_POINT_FMT(p) ((p)->desc->fmt)
+#elif VARNISHAPI_MINOR == 1
+# define VSC_POINT_FMT(p) ((p)->desc->ctype)
+#else
+# error "unsupported Varnish API minor number"
+#endif
struct betab_priv {
int err;
diff --git a/src/varnish-mib.8 b/src/varnish-mib.8
index 4559b0c..0c54e6f 100644
--- a/src/varnish-mib.8
+++ b/src/varnish-mib.8
@@ -1,5 +1,5 @@
.\" This file is part of Varnish-mib -*- nroff -*-
-.\" Copyright (C) 2014-2015 Sergey Poznyakoff
+.\" Copyright (C) 2014-2016 Sergey Poznyakoff
.\"
.\" Varnish-mib is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
@@ -13,7 +13,7 @@
.\"
.\" You should have received a copy of the GNU General Public License
.\" along with Varnish-mib. If not, see <http://www.gnu.org/licenses/>.
-.TH VARNISH-MIB 8 "November 28, 2014" "varnish-mib"
+.TH VARNISH-MIB 8 "April 27, 2016" "varnish-mib"
.SH NAME
varnish\-mib \- net-snmp module for obtaining Varnish Cache statistics
.SH SYNOPSIS
@@ -27,15 +27,24 @@ that provides access to Varnish Cache statistics. The module is
loaded into
.BR snmpd (8)
as shown above (actual path can of course differ, depending on how
-the package was configured).
+the package was configured). Varnish version \fB4.0\fR and \fB4.1\fR
+are supported.
+.PP
+When using with \fBVarnish\fR version \fB4.1\fR, make sure the
+\fB_.vsm\fR file is readable for \fBsnmpd\fR. This file is normally
+located in \fB/var/lib/varnish/\fIHOSTNAME\fR and has mode \fB640\fR.
+Its owner is determined by the \fB\-j\fR (\fB\-\-jail\fR)
+\fBvarnishd\fR option. There are two ways to ensure it is readable:
+either make sure \fBsnmpd\fR and \fBvarnishd\fR run with the same user
+group, or use \fBsetfacl\fR(1) to tune access to that file.
.PP
The module obtains most of the data using Varnish API. Information
about available bans (\fBbanTable\fR subtree) as well as the mechanism
for setting bans (\fBclientBan\fR OID) are implemented via \fBvarnishd\fR
administrative interface. For these to work, the module must have
read access to Varnish secret file. In other words, the secret file
-must be readable either by the user \fBsnmpd\fR runs as, or by one
-of this user's groups.
+must be readable either by the user \fBsnmpd\fR runs as, or by its
+group.
.SH CONFIGURATION OPTIONS
Configuration statements specific to
.B varnish\-mib
@@ -93,6 +102,17 @@ passes the request to the backend and this decision itself has been cached.
Number of misses. A cache miss indicates the object was fetched from
the backend before delivering it to the client.
.TP
+.B clientRequests400
+Client requests received, subject to 400 errors.
+.TP
+.B clientRequests411
+Client requests received, subject to 411 errors. This variable is
+available only in Varnish version \fR4.0\fR.
+.TP
+.B clientRequests413
+Client requests received, subject to 413 errors. This variable is
+available only in Varnish version \fR4.0\fR.
+.TP
.B clientBan
A write-only OID. When set, invalidates the cache using the supplied
value as argument to ban. When read, returns an empty string. E.g.,
@@ -128,7 +148,8 @@ the pool of connections. It has not yet been used, but it might be,
unless the backend closes it.
.TP
.B backendConnUnused
-Number of unused backend connections.
+Number of unused backend connections. This variable is available only
+in Varnish version \fR4.0\fR.
.TP
.B backendConnRetry
Backend connections retried.
@@ -237,7 +258,7 @@ Number of sessions dropped because session queue was full.
Number of sessions closed.
.TP
.B sessPipeline
-Session pipeline.
+Session pipeline. This variable is available only in Varnish version \fR4.0\fR.
.TP
.B sessReadAhead
Session read-ahead.
@@ -252,7 +273,8 @@ Number of sessions dropped for thread.
Number of session accept failures.
.TP
.B sessPipeOverflow
-Number of session pipe overflows.
+Number of session pipe overflows. This variable is available only in
+Varnish version \fR4.0\fR.
.SS Branch \(dqthreads\(dq
.TP
.B threadsPools
@@ -357,7 +379,7 @@ Sergey Poznyakoff
.SH "BUG REPORTS"
Report bugs to <gray@gnu.org>.
.SH COPYRIGHT
-Copyright \(co 2014 Sergey Poznyakoff
+Copyright \(co 2014-2016 Sergey Poznyakoff
.br
.na
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
diff --git a/src/varnish_mib.mib2c b/src/varnish_mib.mib2c
index a5367e0..9d49ce9 100644
--- a/src/varnish_mib.mib2c
+++ b/src/varnish_mib.mib2c
@@ -1,5 +1,5 @@
# This file is part of varnish-mib -*- c -*-
-# Copyright (C) 2014-2015 Sergey Poznyakoff
+# Copyright (C) 2014-2016 Sergey Poznyakoff
#
# Varnish-mib is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -24,9 +24,7 @@
*/
@enddefine@
@startperl@
-$vars{'varnish_translate'} = sub {
- my $name = shift;
- my %trans = (
+$vars{'varnish_translate_table'} = {
uptime => [ 'MAIN', 'uptime' ],
clientAcceptedConnections => [ 'MAIN', 'sess_conn' ],
clientRequestsReceived => [ 'MAIN', 'client_req' ],
@@ -102,9 +100,12 @@ $vars{'varnish_translate'} = sub {
bansPersistedBytes => [ 'MAIN', 'bans_persisted_bytes' ],
bansPersistedFragmentation => [ 'MAIN', 'bans_persisted_fragmentation' ],
- );
+};
+
+$vars{'varnish_translate'} = sub {
+ my $name = shift;
- my $r = $trans{$name};
+ my $r = $vars{'varnish_translate_table'}->{$name};
if (!defined($r)) {
print STDERR "no translation for $name!\n";
exit(1);
@@ -117,6 +118,13 @@ $vars{'varnish_translate'} = sub {
} else {
delete $vars{$setkw};
}
+ if ($vars{'varnish_type'} eq 'MAIN') {
+ $vars{'varnish_if'} = "#if HAVE_STRUCT_VSC_C_MAIN_" . uc($vars{'varnish_member'});
+ $vars{'varnish_endif'} = '#endif';
+ } else {
+ delete $vars{'varnish_if'};
+ delete $vars{'varnish_endif'}
+ }
return 0;
};
@@ -224,6 +232,10 @@ varnish_get_vsm_data()
*/
@foreach $i scalar@
+ @startperl@
+ &{$vars{'varnish_translate'}}($vars{'i'});
+ @endperl@
+$varnish_if
static int
handle_$i(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo,
@@ -234,10 +246,6 @@ handle_$i(netsnmp_mib_handler *handler,
int ret;
@end@
- @startperl@
- &{$vars{'varnish_translate'}}($vars{'i'});
- @endperl@
-
if (!varnish_get_vsm_data())
return SNMP_ERR_NOSUCHNAME;
@@ -359,6 +367,7 @@ handle_$i(netsnmp_mib_handler *handler,
return SNMP_ERR_NOERROR;
}
+$varnish_endif
@end@
@foreach $i table@
@@ -543,7 +552,12 @@ void
init_$modulename(void)
{
@foreach $i scalar@
+ @startperl@
+ &{$vars{'varnish_translate'}}($vars{'i'});
+ @endperl@
+$varnish_if
const oid ${i}_oid[] = { $i.commaoid };
+$varnish_endif
@end@
DEBUGMSGTL(("$modulename", "Initializing\n"));
@@ -567,6 +581,10 @@ init_$modulename(void)
snmp_log(LOG_ERR,"can't register config handler\n");
@foreach $i scalar@
+ @startperl@
+ &{$vars{'varnish_translate'}}($vars{'i'});
+ @endperl@
+$varnish_if
netsnmp_register_scalar(
netsnmp_create_handler_registration("$i", handle_$i,
${i}_oid, OID_LENGTH(${i}_oid),
@@ -577,6 +595,7 @@ init_$modulename(void)
HANDLER_CAN_RWRITE
@end@
));
+$varnish_endif
@end@
@foreach $i table@
initialize_table_$i();
diff --git a/src/vcli.c b/src/vcli.c
index 736d9b3..c204cf3 100644
--- a/src/vcli.c
+++ b/src/vcli.c
@@ -439,7 +439,7 @@ vcli_connect(struct VSM_data *vd, struct vcli_conn *conn)
snmp_log(LOG_ERR, "no -T arg in shared memory\n");
return SNMP_ERR_GENERR;
}
- DEBUGMSGTL(("varnish_mib:vcli", "-T '%s'\n", vt.b));
+ DEBUGMSGTL(("varnish_mib:vcli", "-T '%s'\n", (char*) vt.b));
s = strdup(vt.b);
if (!s) {
@@ -489,7 +489,7 @@ vcli_connect(struct VSM_data *vd, struct vcli_conn *conn)
snmp_log(LOG_ERR, "no -S arg in shared memory\n");
return SNMP_ERR_GENERR;
}
- DEBUGMSGTL(("varnish_mib:vcli", "-S '%s'\n", vt.b));
+ DEBUGMSGTL(("varnish_mib:vcli", "-S '%s'\n", (char*) vt.b));
s = strdup(vt.b);
if (!s) {
snmp_log(LOG_ERR, "out of memory\n");

Return to:

Send suggestions and report system problems to the System administrator.