X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=torrus%2Fbin%2Fconfiginfo.in;fp=torrus%2Fbin%2Fconfiginfo.in;h=1b985f88c0a4569d4df508fdabf2af5d91636674;hp=0000000000000000000000000000000000000000;hb=74e058c8a010ef6feb539248a550d0bb169c1e94;hpb=35359a73152b3d7a9ad5e3d37faf81f6fedb76e8 diff --git a/torrus/bin/configinfo.in b/torrus/bin/configinfo.in new file mode 100644 index 000000000..1b985f88c --- /dev/null +++ b/torrus/bin/configinfo.in @@ -0,0 +1,166 @@ +#!@PERL@ -w +# Copyright (C) 2002 Stanislav Sinyagin +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + +# $Id: configinfo.in,v 1.1 2010-12-27 00:04:03 ivan Exp $ +# Stanislav Sinyagin + +BEGIN { require '@torrus_config_pl@'; } + +use strict; +use BerkeleyDB; + +use Torrus::ConfigTree; +use Torrus::TimeStamp; +use Torrus::SiteConfig; +use Torrus::Log; + +exit(1) if not Torrus::SiteConfig::verify(); + +&Torrus::DB::setSafeSignalHandlers(); + +Torrus::TimeStamp::init(); + +my @tree_names = Torrus::SiteConfig::listTreeNames(); + + +printf("Torrus version %s\n", '@VERSION@'); +printf("%s\n", DB_VERSION_STRING); +printf("BerkeleyDB.pm version %s\n", $BerkeleyDB::VERSION); +printf("\n"); + +printf("Datasource trees: %d\n", scalar( @tree_names ) ); +printf("Tree names: %s\n", join(', ', @tree_names) ); +printf("\n"); + +foreach my $tree ( @tree_names ) +{ + &Torrus::DB::checkInterrupted(); + + printf("Tree: %s\n", $tree ); + + my $config_tree = new Torrus::ConfigTree( -TreeName => $tree ); + if( not defined($config_tree) ) + { + print("Configuration is not ready\n"); + } + else + { + my $stats = {}; + foreach my $name ( 'leaves', 'collectorLeaves', 'monitorLeaves', + 'holtwintersLeaves', 'subtrees', + 'maxSubtreePath', 'maxSubtreeSize', 'views', + 'monitors', 'actions', 'compiled' ) + { + $stats->{$name} = 0; + } + + collectStats( $config_tree, $stats ); + collectOtherStats( $config_tree, $stats ); + + printf("Leaves: %d\n", $stats->{'leaves'} ); + printf("Collector leaves: %d\n", $stats->{'collectorLeaves'} ); + printf("Monitor leaves: %d\n", $stats->{'monitorLeaves'} ); + printf("Holt-Winters leaves: %d\n", $stats->{'holtwintersLeaves'} ); + printf("Subtrees: %d\n", $stats->{'subtrees'} ); + printf("Largest subtree: %s\n", $stats->{'maxSubtreePath'} ); + printf("Largest subtree size: %d\n", $stats->{'maxSubtreeSize'} ); + printf("Views: %d\n", $stats->{'views'} ); + printf("Monitors: %d\n", $stats->{'monitors'} ); + printf("Actions: %d\n", $stats->{'actions'} ); + printf("Last compiled: %s\n", + scalar(localtime($stats->{'compiled'}))); + printf("\n"); + } +} + + +sub collectStats +{ + my $config_tree = shift; + my $stats = shift; + my $token = shift; + + &Torrus::DB::checkInterrupted(); + + if( not defined( $token ) ) + { + $token = $config_tree->token('/'); + } + + my @children = $config_tree->getChildren( $token ); + + my $nChildren = scalar( @children ); + if( not defined( $stats->{'maxSubtreeSize'} ) or + $stats->{'maxSubtreeSize'} < $nChildren ) + { + $stats->{'maxSubtreeSize'} = $nChildren; + $stats->{'maxSubtreePath'} = $config_tree->path( $token ); + } + + foreach my $ctoken ( @children ) + { + if( $config_tree->isSubtree( $ctoken ) ) + { + $stats->{'subtrees'}++; + collectStats( $config_tree, $stats, $ctoken ); + } + elsif( $config_tree->isLeaf( $ctoken ) ) + { + $stats->{'leaves'}++; + if( $config_tree->getNodeParam( $ctoken, 'ds-type' ) + eq 'collector' ) + { + $stats->{'collectorLeaves'}++; + } + if( defined( $config_tree->getNodeParam( $ctoken, 'monitor' ) ) ) + { + $stats->{'monitorLeaves'}++; + } + my $val = $config_tree->getNodeParam( $ctoken, 'rrd-hwpredict' ); + if( defined( $val ) and $val eq 'enabled' ) + { + $stats->{'holtwintersLeaves'}++; + } + } + } +} + + +sub collectOtherStats +{ + my $config_tree = shift; + my $stats = shift; + + my $n = scalar( $config_tree->getViewNames() ); + $stats->{'views'} = $n if defined( $n ); + + $n = scalar( $config_tree->getMonitorNames() ); + $stats->{'monitors'} = $n if defined( $n ); + + $n = scalar( $config_tree->getActionNames() ); + $stats->{'actions'} = $n if defined( $n ); + + $n = $config_tree->getTimestamp(); + $stats->{'compiled'} = $n if defined( $n ); +} + + +# Local Variables: +# mode: perl +# indent-tabs-mode: nil +# perl-indent-level: 4 +# End: