mirror of
https://github.com/munin-monitoring/contrib.git
synced 2018-11-08 00:59:34 +01:00
97 lines
2.2 KiB
Perl
Executable File
97 lines
2.2 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
# -*- perl -*-
|
|
#
|
|
#
|
|
##############################################################################
|
|
#
|
|
#
|
|
# This munin plugin watches the sizes of the given directories.
|
|
# @author Kevin Fischer
|
|
# @version 2010/08/05
|
|
# @website http://kevin-fischer.de
|
|
#
|
|
# Copy this to your node's config file (default: plugin-conf.d/munin-node):
|
|
# [dirsizes]
|
|
# user root
|
|
# env.watchdirs /var/www,/tmp
|
|
#
|
|
# Change the env.watchdirs-variable according to your wishes.
|
|
# DON'T FORGET TO RUN AS ROOT!
|
|
#
|
|
# You can test this plugin by calling it with params "test" and your watchdirs:
|
|
# ./dirsizes test /dir1,/tmp/dir2
|
|
#
|
|
#
|
|
##############################################################################
|
|
#
|
|
|
|
use strict;
|
|
use Munin::Plugin;
|
|
my @watchdirs;
|
|
|
|
if ( exists $ARGV[0] and $ARGV[0] eq "test" ) {
|
|
|
|
# Split the watchdirs string
|
|
@watchdirs = split( ",", $ARGV[1] );
|
|
}
|
|
else {
|
|
|
|
# If no dirs are given, exit.
|
|
if ( !defined( $ENV{"watchdirs"} ) ) {
|
|
die "No directories given! See the manual at top of this plugin file.";
|
|
}
|
|
|
|
# Split the watchdirs string
|
|
@watchdirs = split( ",", $ENV{"watchdirs"} );
|
|
}
|
|
|
|
# Config or read request?
|
|
if ( exists $ARGV[0] and $ARGV[0] eq "config" ) {
|
|
|
|
# Munin basic info
|
|
print "graph_title Directory sizes\n";
|
|
print "graph_args --base 1024 --lower-limit 0\n";
|
|
print "graph_vlabel directory size\n";
|
|
print "graph_info Displays the sizes of all configured directories.\n";
|
|
print "graph_category disk\n";
|
|
print "graph_total Total\n";
|
|
|
|
# All available directories
|
|
foreach my $dir (@watchdirs) {
|
|
|
|
# Remove illegal characters
|
|
my $label = clean_fieldname($dir);
|
|
|
|
# Print name
|
|
print "dir", $label, ".label ", $dir, "\n";
|
|
}
|
|
}
|
|
|
|
# Read request, output the directory sizes
|
|
else {
|
|
|
|
# All available directories
|
|
foreach my $dir (@watchdirs) {
|
|
# Remove illegal characters
|
|
my $label = clean_fieldname($dir);
|
|
|
|
# Get the dirsize
|
|
my $dirsize = getSize($dir);
|
|
|
|
# Print name
|
|
print "dir", $label, ".value ", $dirsize, ".0\n";
|
|
}
|
|
}
|
|
|
|
# Function: getSize($dir)
|
|
sub getSize {
|
|
my ($dir) = @_;
|
|
|
|
# Get the size via `du`
|
|
my @dirsize = split( ' ', `du -cb $dir | grep "total" | tail -1 ` );
|
|
return @dirsize[0];
|
|
}
|
|
|
|
exit 0;
|
|
|