/usr/share/munin/plugins/slapd_bdb_cache_ is in munin-plugins-core 2.0.37-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | #!/usr/bin/perl -w
# -*- perl -*-
#
# Plugin copyright Bjorn Ruberg <bjorn@ruberg.no> 2005-2009
#
# Licensed under GPLv2. Be nice.
#
# Environment variables:
#
# - dbstat The full path to a db_stat binary able to
# communicate with the LDAP backend BDB
# database files. RHEL and friends use
# slapd_db_stat, while Debian and such use
# e.g. db4.6_stat.
# - dbdir The full path to the directory where
# the LDAP backend BDB database files are.
# - title (Optional) The plugin's title. Useful if you
# have more than one DIT installed.
# - warning (Optional) A threshold integer value. Triggers
# plugin to send warnings if cache percentage
# drops below the given value.
#
# Limitations:
#
# - The plugin only checks _one_ database directory. To work
# around that, i.e. if you have more than one DIT in your
# OpenLDAP, create symlinked files and corresponding entries
# in the Munin environment file(s). Note that this will
# break autoconf, i.e. autoconf will probably still suggest
# a default set of symlinks.
#
# Sample config for multiple database directories:
# [slapd_bdb_cache_*]
# env.dbstat /usr/bin/db4.6_stat
#
# [slapd_bdb_cache_database1_*]
# env.dbdir /var/lib/ldap/database1
#
# [slapd_bdb_cache_database2_*]
# env.dbdir /var/lib/ldap/database2
#
# Magic markers
#%# family=auto
#%# capabilities=autoconf suggest
use strict;
use vars qw ( $measure $config $dbdir $dbstat $warning);
my $arg = shift (@ARGV);
# Finding db_stat should be done here
$dbstat = ($ENV{'dbstat'} || "/usr/bin/db4.6_stat");
# Also the LDAP database files
$dbdir = ($ENV{'dbdir'} || "/var/lib/ldap");
# And the graph title
my $title = ($ENV{'title'} || '');
# Die if no valid file ending, unless suggest/autoconf.
if ($0 !~ /_(pages|percent)$/) {
unless ($arg && $arg =~ /^(suggest|autoconf)$/) {
die ("Plugin must be suffixed with 'percent' or 'pages'. Try running 'munin-node-configure suggest'");
}
}
# Check file name
if ($0 =~ /_pages$/) {
$measure = "pages";
} elsif ($0 =~ /_percent$/) {
$measure = "percent";
}
# Parse command line arguments
if ($arg && $arg eq "config") {
$config = 1;
} elsif ($arg && $arg eq "autoconf") {
if (! -x $dbstat) {
print "no (Can't execute db_stat file '$dbstat')\n";
} elsif (! -d $dbdir || ! -r $dbdir) {
print "no (Can't open database directory '$dbdir')";
} else {
print "yes\n";
}
exit 0;
} elsif ($arg && $arg eq "suggest") {
print "pages\n";
print "percent\n";
exit 0;
}
if ($config) {
print <<EOF;
graph_title Requested pages found in cache $title
graph_category OpenLDAP
graph_info Pages found in cache (indexes)
EOF
if ($measure eq "pages") {
print <<EOF;
graph_args --base 1000 -l 0
graph_vlabel Cache hits per \${graph_period}
EOF
} else {
print <<EOF;
graph_args --base 1000 --upper-limit 100 -l 0 --vertical-label %
graph_vlabel Cache hits (percentage)
EOF
}
}
my @output = `$dbstat -h $dbdir -m`;
my $file = ""; # "Total";
my $pages = undef;
my $percent = undef;
my $counter = 0;
foreach my $line (@output) {
chomp $line;
if ($line =~ /^Pool File\: (.*)$/) {
$file = $1;
}
if ($file &&
$line =~ /^(\d+)\s+Requested pages found in the cache \((\d+)\%\)/) {
$pages = $1;
$percent = $2;
}
if ($file && defined ($pages) && defined ($percent)) {
$file =~ s/\.bdb$//;
my $val = "slapd_bdb_cache_${measure}_${file}";
if ($config) {
print "$val.label $file\n";
if ($measure eq "pages") {
print "$val.type DERIVE\n";
print "$val.min 0\n";
if ($counter == 0) {
print "$val.draw AREA\n";
} else {
print "$val.draw STACK\n";
}
print "$val.info Number of $file pages found in cache\n";
} else {
print "$val.type GAUGE\n";
print "$val.info Percentage of $file pages found in cache\n";
print "$val.warning $warning:\n" if $ENV{'warning'};
}
} else {
if ($measure eq "pages") {
print "$val.value $pages\n";
} else {
print "$val.value $percent\n";
}
}
$file = "";
$pages = undef;
$percent = undef;
$counter++;
}
}
|