#!/usr/bin/perl use strict; use warnings; use Scalar::Util qw(looks_like_number); ### defines my $DEFAULT_GROUP = ""; my $MODULE_GROUP = ""; my $MODULE_TAGS = ""; my $GLOBAL_LOG_FILE = ""; my %config; ### Custom configuration $config{MODULE_INTERVAL} = 1; $config{MODULE_TAG_LIST} = ""; ######################################################################################## # Erase blank spaces before and after the string ######################################################################################## sub trim($){ my $string = shift; if (empty ($string)){ return ""; } $string =~ s/\r//g; chomp ($string); $string =~ s/^\s+//g; $string =~ s/\s+$//g; return $string; } ######################################################################################## # Empty ######################################################################################## sub empty($){ my $str = shift; if (! (defined ($str)) ){ return 1; } if(looks_like_number($str)){ return 0; } if ($str =~ /^\ *[\n\r]{0,2}\ *$/) { return 1; } return 0; } ######################################################################################## # print_module ######################################################################################## sub print_module ($;$){ my $data = shift; my $not_print_flag = shift; if ((ref($data) ne "HASH") || (!defined $data->{name})) { return undef; } my $xml_module = ""; # If not a string type, remove all blank spaces! if ($data->{type} !~ m/string/){ $data->{value} = trim($data->{value}); } $data->{tags} = $data->{tags}?$data->{tags}:($config{MODULE_TAG_LIST}?$config{MODULE_TAG_LIST}:undef); $data->{interval} = $data->{interval}?$data->{interval}:($config{MODULE_INTERVAL}?$config{MODULE_INTERVAL}:undef); $data->{module_group} = $data->{module_group}?$data->{module_group}:($config{MODULE_GROUP}?$config{MODULE_GROUP}:$MODULE_GROUP); $xml_module .= "\n"; $xml_module .= "\t{name} . "]]>\n"; $xml_module .= "\t" . $data->{type} . "\n"; $xml_module .= "\t{value} . "]]>\n"; if ( !(empty($data->{desc}))) { $xml_module .= "\t{desc} . "]]>\n"; } if ( !(empty ($data->{unit})) ) { $xml_module .= "\t{unit} . "]]>\n"; } if (! (empty($data->{interval})) ) { $xml_module .= "\t{interval} . "]]>\n"; } if (! (empty($data->{tags})) ) { $xml_module .= "\t" . $data->{tags} . "\n"; } if (! (empty($data->{module_group})) ) { $xml_module .= "\t" . $data->{module_group} . "\n"; } if (! (empty($data->{module_parent})) ) { $xml_module .= "\t" . $data->{module_parent} . "\n"; } if (! (empty($data->{wmin})) ) { $xml_module .= "\t{wmin} . "]]>\n"; } if (! (empty($data->{wmax})) ) { $xml_module .= "\t{wmax} . "]]>\n"; } if (! (empty ($data->{cmin})) ) { $xml_module .= "\t{cmin} . "]]>\n"; } if (! (empty ($data->{cmax})) ){ $xml_module .= "\t{cmax} . "]]>\n"; } if (! (empty ($data->{wstr}))) { $xml_module .= "\t{wstr} . "]]>\n"; } if (! (empty ($data->{cstr}))) { $xml_module .= "\t{cstr} . "]]>\n"; } if (! (empty ($data->{cinv}))) { $xml_module .= "\t{cinv} . "]]>\n"; } if (! (empty ($data->{winv}))) { $xml_module .= "\t{winv} . "]]>\n"; } if (! (empty ($data->{alerts}))) { foreach my $alert (@{$data->{alerts}}){ $xml_module .= "\t\n"; } } if (defined ($config{global_alerts})){ foreach my $alert (@{$config{global_alerts}}){ $xml_module .= "\t\n"; } } $xml_module .= "\n"; if (empty ($not_print_flag)) { print $xml_module; } return $xml_module; } ######################################################################################## # Get unit ######################################################################################## sub get_unit($){ my $str = shift; $str =~ s/[\d\.\,]//g; return $str; } ######################################################################################## ######################################################################################## # MAIN ######################################################################################## ######################################################################################## my @r = split /\n/, `du -s $ARGV[0] 2>/dev/null`; foreach (@r) { my ($data, $name) = split /\s+/, $_, 2; my $value = $data; $value =~ s/[^\d\.\,]//g; my $unit = get_unit($data); print_module({ name => "Size of: " . trim($name), type => "generic_data", value => $value, unit => $unit }); }