import torrus 1.0.9
authorivan <ivan>
Mon, 27 Dec 2010 00:04:44 +0000 (00:04 +0000)
committerivan <ivan>
Mon, 27 Dec 2010 00:04:44 +0000 (00:04 +0000)
322 files changed:
torrus/AUTHORS [new file with mode: 0644]
torrus/COPYING [new file with mode: 0644]
torrus/ChangeLog [new file with mode: 0644]
torrus/DIST_REVISION [new file with mode: 0644]
torrus/INSTALL [new file with mode: 0644]
torrus/Makefile.am [new file with mode: 0644]
torrus/Makefile.in [new file with mode: 0644]
torrus/NEWS [new file with mode: 0644]
torrus/README [new file with mode: 0644]
torrus/TODO [new file with mode: 0644]
torrus/aclocal.m4 [new file with mode: 0644]
torrus/bin/Makefile.am [new file with mode: 0644]
torrus/bin/Makefile.in [new file with mode: 0644]
torrus/bin/acledit.in [new file with mode: 0644]
torrus/bin/action_notify.in [new file with mode: 0644]
torrus/bin/action_printemail.in [new file with mode: 0644]
torrus/bin/action_snmptrap.in [new file with mode: 0644]
torrus/bin/action_snmpv1trap.in [new file with mode: 0644]
torrus/bin/bdbinfo.in [new file with mode: 0644]
torrus/bin/buildsearchdb.in [new file with mode: 0644]
torrus/bin/cleanup.in [new file with mode: 0644]
torrus/bin/clearcache.in [new file with mode: 0644]
torrus/bin/collector.in [new file with mode: 0644]
torrus/bin/compilexml.in [new file with mode: 0644]
torrus/bin/configinfo.in [new file with mode: 0644]
torrus/bin/configsnapshot.in [new file with mode: 0644]
torrus/bin/devdiscover.in [new file with mode: 0644]
torrus/bin/flushmonitors.in [new file with mode: 0644]
torrus/bin/genddx.in [new file with mode: 0644]
torrus/bin/genlist.in [new file with mode: 0644]
torrus/bin/genreport.in [new file with mode: 0644]
torrus/bin/install_plugin.in [new file with mode: 0644]
torrus/bin/monitor.in [new file with mode: 0644]
torrus/bin/nodeid.in [new file with mode: 0644]
torrus/bin/rrddir2xml.in [new file with mode: 0644]
torrus/bin/schedulerinfo.in [new file with mode: 0644]
torrus/bin/snmpfailures.in [new file with mode: 0644]
torrus/bin/srvderive.in [new file with mode: 0644]
torrus/bin/torrus.fcgi.in [new file with mode: 0644]
torrus/bin/torrus.in [new file with mode: 0644]
torrus/bin/ttproclist.in [new file with mode: 0644]
torrus/configs/Makefile.am [new file with mode: 0644]
torrus/configs/Makefile.in [new file with mode: 0644]
torrus/configs/devdiscover-config.pl [new file with mode: 0644]
torrus/configs/devdiscover-siteconfig.pl [new file with mode: 0644]
torrus/configs/email-siteconfig.pl [new file with mode: 0644]
torrus/configs/initscript.conf [new file with mode: 0644]
torrus/configs/notify-siteconfig.pl [new file with mode: 0644]
torrus/configs/snmptrap-siteconfig.pl [new file with mode: 0644]
torrus/configs/torrus-config.pl [new file with mode: 0644]
torrus/configs/torrus-siteconfig.pl [new file with mode: 0644]
torrus/configs/webmux.pl [new file with mode: 0644]
torrus/configs/webmux2.pl [new file with mode: 0644]
torrus/configure [new file with mode: 0755]
torrus/configure.ac [new file with mode: 0644]
torrus/conftools/config.guess [new file with mode: 0755]
torrus/conftools/config.sub [new file with mode: 0755]
torrus/conftools/install-sh [new file with mode: 0755]
torrus/conftools/missing [new file with mode: 0755]
torrus/discovery/README [new file with mode: 0644]
torrus/doc/Makefile.am [new file with mode: 0644]
torrus/doc/Makefile.in [new file with mode: 0644]
torrus/doc/devdoc/architecture.pod [new file with mode: 0644]
torrus/doc/devdoc/devdiscover.pod [new file with mode: 0644]
torrus/doc/devdoc/progstyle.pod [new file with mode: 0644]
torrus/doc/devdoc/reqs.0.0.pod [new file with mode: 0644]
torrus/doc/devdoc/reqs.0.1.pod [new file with mode: 0644]
torrus/doc/devdoc/torrus_roadmap.pod [new file with mode: 0644]
torrus/doc/devdoc/wd.distributed.pod [new file with mode: 0644]
torrus/doc/devdoc/wd.messaging.pod [new file with mode: 0644]
torrus/doc/devdoc/wd.monitor-escalation.pod [new file with mode: 0644]
torrus/doc/devdoc/wd.uptime-mon.pod [new file with mode: 0644]
torrus/doc/install.pod.in [new file with mode: 0644]
torrus/doc/manpages/Makefile.am [new file with mode: 0644]
torrus/doc/manpages/Makefile.in [new file with mode: 0644]
torrus/doc/manpages/torrus.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_acledit.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_action_notify.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_action_printemail.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_action_snmptrap.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_buildsearchdb.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_cleanup.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_clearcache.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_collector.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_compilexml.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_configinfo.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_configsnapshot.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_devdiscover.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_flushmonitors.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_genddx.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_genlist.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_genreport.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_install_plugin.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_monitor.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_nodeid.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_rrddir2xml.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_schedulerinfo.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_snmpfailures.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_srvderive.pod.in [new file with mode: 0644]
torrus/doc/manpages/torrus_ttproclist.pod.in [new file with mode: 0644]
torrus/doc/nodeid_usage.pod.in [new file with mode: 0644]
torrus/doc/reporting_setup.pod.in [new file with mode: 0644]
torrus/doc/rpnexpr.pod.in [new file with mode: 0644]
torrus/doc/rrfw_torrus_migration.pod.in [new file with mode: 0644]
torrus/doc/scalability.pod.in [new file with mode: 0644]
torrus/doc/snmpdiscovery.pod.in [new file with mode: 0644]
torrus/doc/stylingprofile.pod.in [new file with mode: 0644]
torrus/doc/userguide.pod.in [new file with mode: 0644]
torrus/doc/vendorsupport.pod.in [new file with mode: 0644]
torrus/doc/webintf.pod.in [new file with mode: 0644]
torrus/doc/xmlconfig.pod.in [new file with mode: 0644]
torrus/examples/Makefile.am [new file with mode: 0644]
torrus/examples/Makefile.in [new file with mode: 0644]
torrus/examples/README [new file with mode: 0644]
torrus/examples/onms.tmpl [new file with mode: 0644]
torrus/examples/onmsInterfaces.sh [new file with mode: 0644]
torrus/examples/setmonitor.xupdate.xml [new file with mode: 0644]
torrus/examples/torrus-siteconfig.powerbook.pl [new file with mode: 0644]
torrus/init.d/torrus.in [new file with mode: 0644]
torrus/perllib/Makefile.am [new file with mode: 0644]
torrus/perllib/Makefile.in [new file with mode: 0644]
torrus/perllib/Torrus/ACL.pm [new file with mode: 0644]
torrus/perllib/Torrus/ACL/AuthLocalMD5.pm [new file with mode: 0644]
torrus/perllib/Torrus/ACL/Edit.pm [new file with mode: 0644]
torrus/perllib/Torrus/ACL/Export.pm [new file with mode: 0644]
torrus/perllib/Torrus/ACL/Import.pm [new file with mode: 0644]
torrus/perllib/Torrus/Apache2Handler.pm [new file with mode: 0644]
torrus/perllib/Torrus/ApacheHandler.pm [new file with mode: 0644]
torrus/perllib/Torrus/CGI.pm [new file with mode: 0644]
torrus/perllib/Torrus/Collector.pm [new file with mode: 0644]
torrus/perllib/Torrus/Collector/CDef.pm [new file with mode: 0644]
torrus/perllib/Torrus/Collector/CDef_Params.pm [new file with mode: 0644]
torrus/perllib/Torrus/Collector/ExtDBI.pm [new file with mode: 0644]
torrus/perllib/Torrus/Collector/ExternalStorage.pm [new file with mode: 0644]
torrus/perllib/Torrus/Collector/RRDStorage.pm [new file with mode: 0644]
torrus/perllib/Torrus/Collector/SNMP.pm [new file with mode: 0644]
torrus/perllib/Torrus/Collector/SNMP_Params.pm [new file with mode: 0644]
torrus/perllib/Torrus/ConfigBuilder.pm [new file with mode: 0644]
torrus/perllib/Torrus/ConfigTree.pm [new file with mode: 0644]
torrus/perllib/Torrus/ConfigTree/Validator.pm [new file with mode: 0644]
torrus/perllib/Torrus/ConfigTree/Writer.pm [new file with mode: 0644]
torrus/perllib/Torrus/ConfigTree/XMLCompiler.pm [new file with mode: 0644]
torrus/perllib/Torrus/DB.pm [new file with mode: 0644]
torrus/perllib/Torrus/DataAccess.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/ALU_Timetra.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/ATMEL.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/AlliedTelesyn_PBC18.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/Alteon.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/Apple_AE.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/Arbor_E.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/Arista.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/AscendMax.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/AxxessIT.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/BetterNetworks.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/CasaCMTS.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/CiscoCatOS.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/CiscoFirewall.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/CiscoGeneric.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/CiscoIOS.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/CiscoIOS_Docsis.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/CiscoIOS_MacAccounting.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/CiscoIOS_SAA.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/CiscoSCE.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/CiscoVDSL.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/CompaqCIM.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/EmpireSystemedge.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/F5BigIp.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/FTOS.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/Foundry.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/Jacarta.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/JunOS.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/Liebert.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/MicrosoftWindows.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/MotorolaBSR.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/NetApp.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/NetBotz.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/NetScreen.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/OracleDatabase.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/Paradyne.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/RFC1628_UPS_MIB.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/RFC1657_BGP4_MIB.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/RFC1697_RDBMS.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/RFC2011_IP_MIB.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/RFC2662_ADSL_LINE.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/RFC2670_DOCS_IF.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/RFC2737_ENTITY_MIB.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/RFC2790_HOST_RESOURCES.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/Symmetricom.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/UcdSnmp.pm [new file with mode: 0644]
torrus/perllib/Torrus/DevDiscover/Xylan.pm [new file with mode: 0644]
torrus/perllib/Torrus/Log.pm [new file with mode: 0644]
torrus/perllib/Torrus/Monitor.pm [new file with mode: 0644]
torrus/perllib/Torrus/RPN.pm [new file with mode: 0644]
torrus/perllib/Torrus/Renderer.pm [new file with mode: 0644]
torrus/perllib/Torrus/Renderer/AdmInfo.pm [new file with mode: 0644]
torrus/perllib/Torrus/Renderer/Frontpage.pm [new file with mode: 0644]
torrus/perllib/Torrus/Renderer/HTML.pm [new file with mode: 0644]
torrus/perllib/Torrus/Renderer/RRDtool.pm [new file with mode: 0644]
torrus/perllib/Torrus/ReportGenerator.pm [new file with mode: 0644]
torrus/perllib/Torrus/ReportGenerator/MonthlySrvUsage.pm [new file with mode: 0644]
torrus/perllib/Torrus/ReportOutput.pm [new file with mode: 0644]
torrus/perllib/Torrus/ReportOutput/HTML.pm [new file with mode: 0644]
torrus/perllib/Torrus/SNMP_Failures.pm [new file with mode: 0644]
torrus/perllib/Torrus/SQL.pm [new file with mode: 0644]
torrus/perllib/Torrus/SQL/Reports.pm [new file with mode: 0644]
torrus/perllib/Torrus/SQL/SrvExport.pm [new file with mode: 0644]
torrus/perllib/Torrus/Scheduler.pm [new file with mode: 0644]
torrus/perllib/Torrus/SchedulerInfo.pm [new file with mode: 0644]
torrus/perllib/Torrus/Search.pm [new file with mode: 0644]
torrus/perllib/Torrus/ServiceID.pm [new file with mode: 0644]
torrus/perllib/Torrus/SiteConfig.pm [new file with mode: 0644]
torrus/perllib/Torrus/TimeStamp.pm [new file with mode: 0644]
torrus/scripts/rrdup_notify.sh [new file with mode: 0644]
torrus/scripts/xml/extract-skeleton.xsl [new file with mode: 0644]
torrus/setup_tools/Bundle/Torrus.pm [new file with mode: 0644]
torrus/setup_tools/check_perlthreading.pl [new file with mode: 0644]
torrus/setup_tools/configure_fhs [new file with mode: 0755]
torrus/setup_tools/mkvardir.sh.in [new file with mode: 0644]
torrus/setup_tools/replace_rrfw.sh [new file with mode: 0755]
torrus/setup_tools/substvars.sh.in [new file with mode: 0644]
torrus/sup/Makefile.am [new file with mode: 0644]
torrus/sup/Makefile.in [new file with mode: 0644]
torrus/sup/dtd/snmp-discovery.dtd [new file with mode: 0644]
torrus/sup/dtd/torrus-config.dtd [new file with mode: 0644]
torrus/sup/mibs/RRDTOOL-SMI.txt [new file with mode: 0644]
torrus/sup/mibs/TORRUS-MIB.txt [new file with mode: 0644]
torrus/sup/styling/colornames.pl [new file with mode: 0644]
torrus/sup/styling/rainbow-schema.pl [new file with mode: 0644]
torrus/sup/styling/torrus-schema.pl [new file with mode: 0644]
torrus/sup/webplain/explain-rrdgraph.html [new file with mode: 0644]
torrus/sup/webplain/torrus-printer.css [new file with mode: 0644]
torrus/sup/webplain/torrus-report.css [new file with mode: 0644]
torrus/sup/webplain/torrus.css [new file with mode: 0644]
torrus/templates/aclexport.xml [new file with mode: 0644]
torrus/templates/adminfo.html [new file with mode: 0644]
torrus/templates/default-chooser.html [new file with mode: 0644]
torrus/templates/default-dir.html [new file with mode: 0644]
torrus/templates/default-helptext.html [new file with mode: 0644]
torrus/templates/default-login.html [new file with mode: 0644]
torrus/templates/default-recursivedir.html [new file with mode: 0644]
torrus/templates/default-rrd.html [new file with mode: 0644]
torrus/templates/default-tset.html [new file with mode: 0644]
torrus/templates/email-alarm.txt [new file with mode: 0644]
torrus/templates/expanded-dir.html [new file with mode: 0644]
torrus/templates/globalsearch.html [new file with mode: 0644]
torrus/templates/html-incblocks.txt [new file with mode: 0644]
torrus/templates/overview-subleaves.html [new file with mode: 0644]
torrus/templates/report-index.html [new file with mode: 0644]
torrus/templates/report-monthly.html [new file with mode: 0644]
torrus/templates/report-serviceid.html [new file with mode: 0644]
torrus/templates/report-yearly.html [new file with mode: 0644]
torrus/templates/search.html [new file with mode: 0644]
torrus/templates/tset-list.html [new file with mode: 0644]
torrus/xmlconfig/Makefile.am [new file with mode: 0644]
torrus/xmlconfig/Makefile.in [new file with mode: 0644]
torrus/xmlconfig/cdef-collector-defs.xml [new file with mode: 0644]
torrus/xmlconfig/defaults.xml [new file with mode: 0644]
torrus/xmlconfig/examples/apc-ups.xml [new file with mode: 0644]
torrus/xmlconfig/examples/ascend.max.xml [new file with mode: 0644]
torrus/xmlconfig/examples/docsis-monitors.xml [new file with mode: 0644]
torrus/xmlconfig/examples/generic-netsnmp.xml [new file with mode: 0644]
torrus/xmlconfig/examples/hpux.xml [new file with mode: 0644]
torrus/xmlconfig/examples/monitors.xml [new file with mode: 0644]
torrus/xmlconfig/examples/multigraph.xml [new file with mode: 0644]
torrus/xmlconfig/examples/rainbow-schema.xml [new file with mode: 0644]
torrus/xmlconfig/examples/servers.data [new file with mode: 0644]
torrus/xmlconfig/examples/servers.tmpl [new file with mode: 0644]
torrus/xmlconfig/generic/collector-periods.xml [new file with mode: 0644]
torrus/xmlconfig/generic/monitors.xml [new file with mode: 0644]
torrus/xmlconfig/generic/rfc1628.ups.xml [new file with mode: 0644]
torrus/xmlconfig/generic/rfc1697.rdbms.xml [new file with mode: 0644]
torrus/xmlconfig/generic/rfc2662.adsl-line.xml [new file with mode: 0644]
torrus/xmlconfig/generic/rfc2670.docsis-if.xml [new file with mode: 0644]
torrus/xmlconfig/generic/rfc2790.host-resources.xml [new file with mode: 0644]
torrus/xmlconfig/generic/rfc2863.if-mib.xml [new file with mode: 0644]
torrus/xmlconfig/old/cisco-mac-accounting-example.xml [new file with mode: 0644]
torrus/xmlconfig/old/cisco.generic.old-0.1.4.xml [new file with mode: 0644]
torrus/xmlconfig/old/cisco.ios.mac-accounting-0.1.8.xml [new file with mode: 0644]
torrus/xmlconfig/old/rfc1213.xml [new file with mode: 0644]
torrus/xmlconfig/old/rfc2670.docsis-if.old.0.1.5d-20040224.xml [new file with mode: 0644]
torrus/xmlconfig/old/rfc2670.docsis-if.old.1.0.4.xml [new file with mode: 0644]
torrus/xmlconfig/old/rfc2863.if-mib.old-0.1.4.xml [new file with mode: 0644]
torrus/xmlconfig/old/rfc2863.if-mib.old-0.1.7.xml [new file with mode: 0644]
torrus/xmlconfig/old/snmp-defs.old-0.1.2.xml [new file with mode: 0644]
torrus/xmlconfig/site-global.xml [new file with mode: 0644]
torrus/xmlconfig/snmp-defs.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/alteon.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/alu-timetra.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/apc.ups.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/apple.ae.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/arbor_e.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/ascend.max.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/atmel.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/betternetworks.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/casa-cmts.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/cisco.firewall.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/cisco.generic.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/cisco.ios.docsis.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/cisco.ios.mac-accounting.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/cisco.ios.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/cisco.sce.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/cisco.vdsl-line.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/compaq.cim.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/empire.systemedge.ntregperf.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/empire.systemedge.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/f5.bigip.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/foundry.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/ftos.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/hp.hpux.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/jacarta.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/junos.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/liebert.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/microsoft.windows.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/motorola.bsr.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/netapp.filer.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/netbotz.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/netscreen.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/paradyne.xdsl.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/symmetricom.xml [new file with mode: 0644]
torrus/xmlconfig/vendor/ucd.ucd-snmp.xml [new file with mode: 0644]

diff --git a/torrus/AUTHORS b/torrus/AUTHORS
new file mode 100644 (file)
index 0000000..a884ff2
--- /dev/null
@@ -0,0 +1,47 @@
+***************************************************
+Stanislav Sinyagin
+Senior System Engineer, CCIE #5478
+K-Open GmbH
+Switzerland
+Tel. +41 79 407 0224
+
+ssinyagin@yahoo.com
+http://www.k-open.com
+***************************************************
+
+CREDITS:
+
+  Chris Amley
+    Xylan switches SNMP discovery
+
+  Scott Brooks <sbrooks@binary-solutions.net>
+    Atmel wireless devices SNMP discovery
+
+  Aaron Bush <abush@microcenter.com> 
+    APC and HP vendor templates.
+
+  Shawn Ferry <sferry at sevenspace dot com> <lalartu at obscure dot org>
+    Many contributions in various parts.
+
+  Marc Haber <mh+torrus@zugschlus.de>
+    Lots of bug reports and architecture ideas.
+
+  Roman Hochuli <roman@hochu.li>
+    Bug reports and new feature ideas.
+    Vendor templates for Ascend and DOCSIS.
+
+  Ian Holsman http://holsman.net <ian@holsman.net>
+    Adapted the bluerobot.com HTML layout design for Torrus.
+
+  Gord Philpott <tech@gordphilpott.com>
+    Numerous bug reports.
+
+  Christian Schnidrig <christian.schnidrig@gmx.ch>
+    Architecture ideas, interface improvements, other contributions.
+
+  Jurij Smakov <jurij@wooyd.org>
+    Contributed in manpages creation. Maintainer of Debian port.
+
+  Jon Nistor <nistor@snickers.org>
+    Bug reports and contributions for JunOS, Cisco SCE and other
+    vendors discovery.
diff --git a/torrus/COPYING b/torrus/COPYING
new file mode 100644 (file)
index 0000000..d60c31a
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/torrus/ChangeLog b/torrus/ChangeLog
new file mode 100644 (file)
index 0000000..30543fe
--- /dev/null
@@ -0,0 +1,2302 @@
+2010-10-24  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 1.0.9
+
+2010-10-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/CGI.pm: New URL parameter: 'v' is a synonym for 'view'
+
+2010-10-06  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/html-incblocks.txt: 'cssoverlay' now must point to
+       an absolute URL
+
+2010-09-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoIOS.pm (checkdevtype):
+       New discovery parameter: CiscoIOS::enable-unrouted-vlan-interfaces
+
+2010-09-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/Jacarta.pm:
+       New discovery module for Jacarta iMeter (thanks to Roman Hochuli)
+
+2010-09-17  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/SNMP.pm (initCollectorGlobals):
+       Refresh the SNMP maps after a configuration re-compile
+
+2010-08-31  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * performance optimizations: XML compiler runs 15-20% faster 
+
+2010-08-16  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm:
+       Selector actions split: discards moved from NoErrorCounters to
+       NoDiscardCounters;
+       and from InErrorsMonitor/OutErrorsMonitor to
+       InDiscardsMonitor/OutDiscardsMonitor
+
+       * perllib/Torrus/Collector.pm: collector_tokens database now depends
+       on DS configuration instance
+
+2010-08-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/CGI.pm: Added host-based authentication
+
+2010-08-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Updated discovery modules for Net::SNMP 6.0.0 compatibility
+
+2010-08-03  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * init.d/torrus.in: bugfix in RHEL compatibility.
+       Do "chkconfig --del torrus", install the new version into /etc/init.d,
+       then "chkconfig --add torrus", then "service torrus restart"    
+
+2010-07-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/snmpfailures.in: new utility for SNMP failures reporting
+
+       * perllib/Torrus/Collector/SNMP.pm: SNMP failures stored in a database
+
+2010-06-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/genlist.in: Added a list of all SNMP hosts
+
+2010-05-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CasaCMTS.pm: new discovery module
+
+2010-05-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/nodeid.in: new command-line utility
+
+       * configure.ac: new Perl module dependency: JSON
+
+2010-04-11  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * configs/torrus-config.pl:
+       replaced $Torrus::ApacheHandler::authorizeUsers with
+       $Torrus::CGI::authorizeUsers.
+
+2010-04-08  Jon Nistor  <nistor@snickers.org>
+        * perllib/Torrus/DevDiscover/Arbor_E.pm:
+        New parameter: Arbor_E::disable-e100-policymgmt, disable-e100-submgmt
+        Added policy management and subscriber information
+
+2010-04-07  Jon Nistor  <nistor@snickers.org>
+
+        * perllib/Torrus/DevDiscover/Arbor_E.pm:
+        New parameter: Arbor_E::disable-e100-mem
+        Added memory usage per CPU for the e100 series devices
+
+2010-04-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/ConfigTree.pm,
+       perllib/Torrus/ConfigTree/Writer.pm,
+       perllib/Torrus/CGI.pm:
+       New parameter: nodeid. It defines a new way of referring
+       to subtrees and leaves.
+       Also IF-MIB and Foundry discovery is updated.
+
+2010-03-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm: 
+       Default snmp-max-msg-size is set back to 1470
+       
+       * perllib/Torrus/DevDiscover/Foundry.pm: new discovery module
+
+2010-03-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/generic/rfc2790.host-resources.xml:
+       [Bernhard Schmidt] Simplify the Uptime graph to display only Days
+
+       * xmlconfig/vendor/ucd.ucd-snmp.xml:
+       [Bernhard Schmidt] make Block I/O datasources a COUNTER
+       correct display units for Memory
+
+       * perllib/Torrus/DevDiscover/UcdSnmp.pm:
+       [Bernhard Schmidt] added ssCpuRawSoftIRQ
+
+2010-03-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/torrus.fcgi.in: FastCGI support
+
+       * templates/default-login.html: Added "remember me"
+
+       * perllib/Torrus/ApacheHandler.pm: Changed to Torrus::CGI
+
+       * perllib/Torrus/Apache2Handler.pm: Changed to Torrus::CGI.
+       Now incompatible with "SetHandler modperl"
+
+       * perllib/Torrus/CGI.pm: New HTTP handler instead of two different
+       Apache handlers.
+
+2010-03-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/flushmonitors.in: new utility
+
+       * bin/compilexml.in: Dynamic tokenset members are preserved between
+       compilations
+
+       * perllib/Torrus/ConfigTree.pm (tsetAddMember): Tokenset members
+       have now an indicated origin (monitor/static)
+
+       * perllib/Torrus/Monitor.pm: Alarms are now persistent between
+       config re-compilations
+
+2010-02-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Renderer/HTML.pm:
+       New parameter: node-display-name. Now interface names are not
+       underscored
+       
+
+2010-02-18  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Renderer/RRDtool.pm (rrd_make_multigraph):
+       new multigraph parameters: line-stack-X, line-alpha-X
+
+2010-02-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm (discover):
+       Default snmp-max-msg-size is set to 65535 for SNMP v1 and v2
+
+2010-02-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       new selector action: NotifyPolicy
+
+2010-02-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/ALU_Timetra.pm:
+       new discovery parameter: ALU_Timetra::full-ifdescr
+
+2010-01-27  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/ALU_Timetra.pm: new discovery module
+
+2010-01-24  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm (discover):
+       snmp-max-msg-size is used now in discivery, not only in collector
+
+2009-10-28  Jon Nistor  <nistor@snickers.org>
+
+        * perllib/Torrus/DevDiscover/Arista.pm (discover):
+        New discovery module: Arista Networks
+
+2009-05-31  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Renderer/RRDtool.pm:
+       new view parameters:
+       disable-legend, disable-title, disable-vertical-label
+
+2009-05-26  Jon Nistor  <nistor@snickrs.org>
+
+       * perllib/Torrus/DevDiscover/Arbor_E.pm (discover):
+       New discovery parameter: Arbor_E::disable-e30-hdd-logs,
+        Arbor_E::enable-e30-mempool
+
+2009-05-11  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/NetBotz.pm (discover):
+       Discovery parameters: NetBotz::temp-max, NetBotz::humi-max,
+       NetBotz::dew-max
+
+2009-05-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/NetBotz.pm: new discovery module
+       for NetBotz modular sensors
+
+2009-05-07  Jon Nistor <nistor@snickers.org>
+
+       * perllib/Torrus/DevDiscover/FTOS.pm
+       New discovery module for Force10 Networks devices
+
+2009-04-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 1.0.8
+
+2008-11-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoIOS.pm (discover):
+       New discovery parameter: CiscoIOS::short-device-comment
+
+2008-11-06  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/SNMP.pm (runCollector):
+       Number of SNMP sessions per snmp_dispatcher is limited to 100
+       because of some strange bugs (found on SPARC/Solaris platform)
+
+2008-10-28  Jon Nistor <nistor@snickers.org>
+
+        * perllib/Torrus/DevDiscover/Liebert.pm:
+        New discovery module for Liebert HVAC systems
+
+2008-10-26  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/srvderive.in: new utility that combines several services
+       and combines them as MAX or SUM
+       (sponsored by nexellent ag, www.nexellent.ch)
+
+2008-09-25  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Added safe signal handlers to all components. Also Apache handlers
+       close the BDB environment at the end of each execution.
+       BDB should now be much more stable.
+
+2008-09-16  Jon Nistor <nistor@snickers.org>
+
+       * perllib/Torrus/DevDiscover/Arbor_E.pm:
+       New discovery module for Arbor E series devices
+
+2008-09-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector.pm: Now the collector cache is filled by
+       the compiler. This optimizes the collector startup. Need to re-compile
+       after upgrade.
+
+2008-09-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/configsnapshot.in: Bugfix in root subtree parameters
+       * bin/configsnapshot.in: added parameter filtering option
+
+2008-09-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoIOS.pm: Filtered out EOBC and FIFO
+       virtual interfaces
+
+       * xmlconfig/vendor/cisco.ios.mac-accounting.xml:
+       Bugfix in the RRD filename
+
+2008-08-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Renderer/RRDtool.pm (rrd_make_opts):
+       View parameters can be overridden with URL
+       variables "Gstart", "Gend" and so on.
+
+2008-08-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 1.0.7
+
+2008-08-04  Jon Nistor <nistor@snickers.org>
+
+        * perllib/Torrus/DevDiscover/CiscoIOS.pm (discover):
+        new discovery parameter: CiscoIOS::disable-vpdn-stats
+
+2008-07-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2670_DOCS_IF.pm (discover):
+       new discovery parameter: RFC2670_DOCS_IF::upstreams-only
+
+2008-06-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Tree names can be specified in the External
+       Storage (Billing reports) 
+
+2008-06-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/SNMP.pm:
+       New parameter: snmp-ignore-mib-errors
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       New parameter generated by IF-MIB: interface-comment
+
+2008-06-01  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * IPv6 support in devdiscover and in SNMP collector
+
+2008-05-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/bdbinfo.in: BerkeleyDB version info utility
+
+2008-03-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       RFC2863_IF_MIB::external-serviceid now accepts host/interface notation
+
+2008-03-28  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/SQL/Reports.pm (finalize): added SQL commit
+
+2008-03-16  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/collector.in: Threads are now always initialized,
+       not only in daemon mode
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm:
+       New selectors: InBytesParameters, OutBytesParameters
+
+       * perllib/Torrus/DevDiscover.pm (buildConfig):
+       New discovery parameter: include-files
+
+2008-01-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/JunOS.pm: Added interface filter to
+       exclude service interfaces
+
+       * perllib/Torrus/DevDiscover.pm, perllib/Torrus/Collector/SNMP.pm:
+       snmp-max-msg-size, new parameter for SNMP session
+
+2007-12-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoSCE.pm: New discovery parameters:
+       CiscoSCE::disable-*** (Jon Nistor)
+
+2007-11-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/defaults.xml: Default collector-timeoffset-step increased
+       from 30 to 60 seconds. 30 seconds is too short for too many
+       installations.
+
+2007-11-08  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       New selector action: RemoveInterface
+
+2007-09-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/JunOS.pm: Dramatic update by Jon Nistor
+
+2007-08-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/Symmetricom.pm:
+       New discovery module for Symmetricom NTP clock (Jon Nistor)
+
+2007-08-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoIOS.pm:
+       Removed BGP Advertized prefixes
+       Added the prefix limits to Accepted prefixes
+       
+
+2007-08-03  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Torrus release 1.0.6
+
+2007-07-27  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/SNMP.pm: removed "reptoken" and
+       optimized the snmp arguments
+
+2007-06-16  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/collector.in: Now multiple collector instances can run
+       in a single tree. Need to recompile all trees and re-start the
+       daemons. A new copy of init.d/torrus should be copied
+       in startup scripts directory. Also execute for every tree:
+       torrus si --tree=TREE --clear
+       
+
+2007-06-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * configure.ac: Perl 5.8.8 is required for threads
+
+2007-06-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/genreport.in: New option: --all2tree
+
+       * perllib/Torrus/DevDiscover/Alteon.pm: New discovery module
+
+2007-06-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoIOS.pm: Cisco CAR statistics
+
+2007-05-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/SNMP.pm:
+       fixed the bug for unreachable timeout
+       the target that receives noSuchObject is deleted from polling
+
+2007-05-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/CDef.pm: Imported the CDEF collector
+       from Chrstian Schnidrig and adapted to multithreading.
+
+       * perllib/Torrus/DevDiscover.pm: Adapted for global configuration.
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm:
+       New discovery parameter: RFC2863_IF_MIB::traffic-summaries
+       Currently summaries work only within single output file.
+       
+
+2007-04-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Renderer/HTML.pm: Search engine GUI
+
+2007-04-11  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/buildsearchdb.in: The search DB builder (GUI is not ready yet)
+
+       * perllib/Torrus/DevDiscover.pm:
+       New discovery param: show-recursive
+
+       * templates/default-dir.html: Limit recursive view to
+       subtrees having show-recursive=yes
+
+2007-04-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/ConfigTree.pm:
+       Moved the param properties to the XML config.
+       All trees need recompilation after this change.
+
+2007-04-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/ConfigTree/XMLCompiler.pm (compile_subtrees):
+       Removed support for <filepattern>
+
+2007-03-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Renderer/RRDtool.pm (rrd_make_graphline):
+       line-style line-color from the node params override thse
+       in the view params
+
+2007-03-18  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/JunOS.pm: Added per-CoS traffic statistics
+
+2007-03-16  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Apache2Handler.pm, perllib/Torrus/ApacheHandler.pm:
+       User login event in the apache error log
+
+       * perllib/Torrus/DevDiscover/CiscoIOS_MacAccounting.pm:
+       MAC accounting on subinterfaces
+
+2007-02-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoIOS.pm (discover):
+       Replaced CiscoIOS::disable-membuf-stats with
+       CiscoIOS::enable-membuf-stats.
+       Now cisco buffer stats are disabled by default
+
+2007-02-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/SNMP.pm: SNMP maps automatic refreshing
+
+       * bin/devdiscover.in: Devdiscover now accepts multiple input files
+
+2007-02-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm:
+       New discovery param: template-registry-overlays
+
+2007-02-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoSCE.pm:
+       Added service counters and queue utilization
+
+2007-01-25  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 1.0.5
+
+2007-01-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * configure.ac: Synchronized with Autoconf 2.60.
+       Now 2.60 is the minimum required version.
+       Changed docdir to pkgdocdir
+
+2007-01-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoIOS.pm (checkdevtype):
+       IOS XR support
+
+2007-01-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoIOS.pm (checkdevtype):
+       New discovery parameter: CiscoIOS::enable-vlan-interfaces
+       (discover): added Cisco BGP statistics
+
+2006-12-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/JunOS.pm:
+       New discovery module for Juniper 
+
+2006-12-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoIOS_MacAccounting.pm (discover):
+       New discovery parameter: CiscoIOS_MacAccounting::tokenset-members
+
+2006-12-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (discover):
+       New discovery parameter:
+       RFC2863_IF_MIB::exclude-down-interfaces
+
+       * bin/configinfo.in: Added the tree compilation timestamp
+
+2006-12-03  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/SNMP.pm:
+       SNMP mapping lookups are now asynchronous.
+       PDUs are rescheduled with delays
+       Not compatible with old cbQos plugin, needs tp-cisco-cbqos-1.4d
+
+2006-11-26  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/SNMP.pm: new SNMP parameters:
+         snmp-localaddr and snmp-localport
+
+
+2006-11-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoIOS_MacAccounting.pm:
+       New discovery parameter:
+       CiscoIOS_MacAccounting::external-serviceid
+
+2006-10-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm:
+       new discovery parameters:
+       RFC2863_IF_MIB::bandwidth-usage
+       RFC2863_IF_MIB::bandwidth-limits
+
+2006-10-08  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/ConfigTree.pm (new): exclusivity lock:
+       only one compiler can run for a tree
+
+2006-09-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/generic/rfc2863.if-mib.xml: added an overvew shortcut
+       for interface errors
+
+       * perllib/Torrus/RPN.pm: IF accepts UNKN values
+
+2006-09-28  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * configure.ac: theads module version must be 1.41 or higher,
+       and threads::shared 1.03 or higher.
+
+2006-09-27  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/rrddir2xml.in: New option: --filter
+
+       * xmlconfig/generic/rfc2670.docsis-if.xml:
+       Added Frequency to upstream statictics monitoring.
+       Old upstream stats will be lost!!
+       The old templates file is
+       in xmlconfig/old/rfc2670.docsis-if.old.1.0.4.xml
+
+2006-09-26  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoSCE.pm: New discovery module
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm:
+       Improvements for persistent interface indexes
+
+       * perllib/Torrus/DevDiscover/MotorolaBSR.pm: New discovery module
+       for Motorola CMTS (Riverdelta)
+
+2006-09-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/RRDStorage.pm (storeData):
+       RRDQueue statistics are now set in the beginning of the cycle
+
+2006-08-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/ConfigBuilder.pm (new): encoding changed from
+       UTF8 to UTF-8
+
+2006-07-31  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoFirewall.pm (discover):
+       Interface names taken from ifName
+
+2006-07-24  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * setup_tools/check_perlthreading.pl: Quick test of multithreading
+       support
+
+2006-07-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/RRDStorage.pm (updateRRD):
+       Added threading support: a background thread for RRD updates    
+
+2006-07-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/devdiscover.in: Added multithreading support
+
+       * configure.ac: Multithreading checkup
+
+       * NEWS: Torrus release 1.0.4
+
+2006-05-17  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       RFC2863_IF_MIB::tokenset-members now accepts host names
+       and can be defined at the global level.
+
+2006-05-11  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       new discovery parameter: RFC2863_IF_MIB::noout
+
+2006-03-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       New discovery parameter: RFC2863_IF_MIB::subtree-comment
+
+       * perllib/Torrus/Renderer/Frontpage.pm (renderUserLogin):
+       New config option: $Torrus::Renderer::lostPasswordURL
+
+2006-03-01  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Renderer/HTML.pm:
+       New config variable: $Torrus::Renderer::companyLogo
+       to display a logo instead of text
+
+2006-02-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm: 'comment' parameter is copied
+       from DDX to the host level.
+
+2006-02-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Monitor.pm: New monitor parameters:
+       display-rpn-expr display-format
+       (run_event_exec): New environment variable: TORRUS_DISPLAY_VALUE
+
+2006-02-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm (discover):
+       New discovery parameter: suppress-legend
+
+2006-02-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm:
+       Complex matching expressions for subtree name selector 
+
+       * perllib/Torrus/DevDiscover/CiscoGeneric.pm (discover):
+       Cisco power supply monitoring
+
+2006-02-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/action_notify.in: New monitor action
+
+       * perllib/Torrus/Monitor.pm:
+       New monitor parameter: "severity"
+
+       * perllib/Torrus/DevDiscover/CiscoIOS.pm: Cisco Docsis bundle
+       interfaces excluded from discovery
+
+2006-01-06  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/RPN.pm: New RPM functions: INF, NEGINF
+
+2005-12-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/RPN.pm: DUP and EXC accept undefined arguments now
+
+2005-12-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/RPN.pm: New RPN function: NUM
+
+2005-11-28  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/ttproclist.in: Two new functions: lc, uc  
+
+2005-11-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/SNMP.pm: Added SNMPv3 support
+
+2005-10-19  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/genreport.in: Report generator utility
+
+2005-10-17  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoVDSL.pm:
+       New discovery module for Cisco Catalyst LRE
+
+2005-10-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/default-dir.html, templates/expanded-dir.html:
+       Alex Ustyancev's patches for aliased leaf nodes
+
+       * perllib/Torrus/SQL.pm: New module dependency: DBIx::Sequence
+
+2005-10-06  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/SQL.pm: new module dependencies:
+       DBIx::Abstract, DBI.
+
+2005-10-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoGeneric.pm:
+       added support for dual-CPU cisco routers (7301)
+
+2005-09-28  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/AlliedTelesyn_PBC18.pm:
+       new discovery module
+
+2005-09-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm:
+       New discovery parameter: define-tokensets
+
+2005-08-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (discover):
+       Replaced $Torrus::DevDiscover::listAdminDownInterfaces
+       with parameter RFC2863_IF_MIB::list-admindown-interfaces
+       and $Torrus::DevDiscover::listNotPresentInterfaces
+       with RFC2863_IF_MIB::list-notpresent-interfaces
+
+2005-08-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * doc/extstorage.pod.in: Started documenting the External storage
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm:
+       New discovery parameter: RFC2863_IF_MIB::external-serviceid
+
+       * xmlconfig/generic/rfc2863.if-mib.xml: Byte counters adapted for
+       External storage
+
+       * perllib/Torrus/Collector.pm: Multiple storage types per token
+
+       * perllib/Torrus/ConfigTree/Validator.pm (validateInstanceParams):
+       Enabled validation of list values
+
+       * perllib/Torrus/Collector/ExtDBI.pm: Pluggable backend module for
+       External storage
+
+       * perllib/Torrus/Collector/ExternalStorage.pm:
+       New collector storage type
+
+2005-08-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 1.0.3
+
+2005-07-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * configure.ac: Patch Level 1: PERLINC configuration variable
+
+2005-07-27  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 1.0.2
+
+2005-07-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm (applySelectors):
+       Selectors format slightly changed: the type is passed into the methods
+
+2005-07-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm (buildConfig):
+       New discovery parameter: disable-snmpcollector  
+
+       * bin/devdiscover.in: Preventing the bundle file update when
+       --limit is specified.
+
+       * perllib/Torrus/Collector/SNMP.pm (callback): mapping reset after
+       host unreachable
+
+       * configs/torrus-config.pl:
+       $Torrus::Collector::SNMP::unreachableTimeout set to 6 hours
+
+       * perllib/Torrus/Renderer/HTML.pm: entered Date/time verification
+       New CPAN module required:
+       perl -MCPAN -e 'install Date::Parse'
+
+2005-07-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/html-incblocks.txt: Added date setting dialog.
+       TODO: date format validation.
+
+2005-07-11  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm:
+       New discovery parameter: RFC2863_IF_MIB::only-interfaces
+
+       * configure.ac: Now checking if user torrus exists
+
+       * perllib/Torrus/DevDiscover/AxxessIT.pm: support for WANX/LANX modules
+
+2005-07-06  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/rrddir2xml.in: New utility for generating XML from a directory
+       with RRD files
+
+2005-06-24  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/SNMP.pm: [1.0.1pl2] - fixed bug
+       with deleting unreachable targets
+
+2005-06-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * configure.ac: 1.0.1 Patchlevel 1
+
+       * bin/action_snmpv1trap.in, bin/action_snmptrap.in:
+       added torrusMonitorDesc 
+
+       * sup/mibs/TORRUS-MIB.txt: new OID: torrusMonitorDesc
+
+       * NEWS: release 1.0.1
+
+       * perllib/Torrus/SiteConfig.pm (verify):
+       $Torrus::Renderer::stylingProfileOverlay is now an absolute file name
+
+       * xmlconfig/vendor/cisco.ios.docsis.xml:
+       Added Registered modems graph. WARNING: RRD structure changed
+
+       * bin/devdiscover.in: New option: --fallback
+
+       * perllib/Torrus/Collector/SNMP.pm (initTargetAttributes):
+       Target is deleted when SNMP map expansion fails
+
+2005-06-16  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Monitor.pm: sleep --delay minutes also after
+       recompiling
+
+       * configs/torrus-config.pl:
+       $Torrus::Collector::SNMP::unreachableTimeout increased to 1900
+       $Torrus::Collector::SNMP::unreachableRetryDelay increased to 600
+
+       * perllib/Torrus/Collector/SNMP.pm:
+       Better handling of SNMP errors. Delete all tokens for a host
+       if it is unreachable.
+
+2005-06-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Torrus release 1.0.0
+
+       * bin/monitor.in: New option: --delay
+
+       * init.d/torrus.in: The init script reads its options from
+       initscript.conf and initscript.siteconf
+
+2005-06-08  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/devdiscover.in: new CLI option: --forcebundle
+
+       * perllib/Torrus/DevDiscover.pm: monitor-period and monitor-timeoffset
+       are now copied from DDX
+
+       * bin/action_snmpv1trap.in, bin/action_snmptrap.in,
+       sup/mibs/TORRUS-MIB.txt: Added new SNMP variable: severity
+
+2005-06-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoIOS_MacAccounting.pm:
+       New discovery module for Cisco MAC accounting
+
+2005-05-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/BetterNetworks.pm:
+       new discovery module
+
+       * bin/collector.in: new command line option: --runalways
+
+2005-05-27  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/MicrosoftWindows.pm:
+       per-interface RRD files named by MAC addresses, not interface name
+
+2005-05-25  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoGeneric.pm: enchanced memory
+       pools stats (line cards and VIP memory)
+
+2005-05-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/html-incblocks.txt:
+       has-overview-subleaves replaced with has-overview-shortcuts,
+       with multiple overviews per subtree
+
+2005-05-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/tset-list.html: Tokensets list now displays their sizes
+
+2005-05-18  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/ttproclist.in: New utility for generating DDX files
+
+2005-05-17  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DataAccess.pm: improved performance by caching
+
+2005-05-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/examples/docsis-monitors.xml: DOCSIS monitoring examples
+
+       * perllib/Torrus/DevDiscover/RFC2670_DOCS_IF.pm:
+       Added DOCSIS-specific selector actions
+
+2005-05-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/RRDStorage.pm (updateRRD):
+       $Torrus::Collector::RRDStorage::moveConflictRRD -- moving RRD files
+       with conflicting structure
+
+2005-05-11  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2670_DOCS_IF.pm:
+       Downstream utilization added, and the subtrees rearranged.
+
+2005-05-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/default-rrd.html: Monitor names and comments displayed
+       on the leaf HTML
+
+2005-05-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoGeneric.pm:
+       replaced CiscoGeneric::sensor-monitor and
+       CiscoGeneric::sensor-monitor-regexp with CiscoSensor selector
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm:
+       RFC2863_IF_MIB::errors-monitor is no longer supported.
+       Replaced with appropriate selector action
+       
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm:
+       Implemented IF-MIB selector actions - 
+       InBytesMonitor, OutBytesMonitor, ErrorsMonitor, HoltWinters,
+       NoPacketCounters, NoErrorCounters, Parameters
+
+2005-05-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm (applySelectors):
+       The infrastructure for object selectors
+
+2005-04-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/CiscoGeneric.pm:
+       New discovery parameters: CiscoGeneric::sensor-monitor,
+       CiscoGeneric::sensor-monitor-regexp
+
+2005-04-28  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Collector/SNMP.pm (runCollector):
+       SO_RCVBUF is set explicitly
+
+2005-04-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Renderer/RRDtool.pm (rrd_make_hrules):
+       hrule-legend-X is now a leaf parameter, not view
+
+       * templates/default-recursivedir.html: Recursive directory view
+
+2005-04-08  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/schedulerinfo.in: Timeline reports separate for monitors
+       and collectors
+
+2005-03-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/Paradyne.pm:
+       New discovery parameter: "Paradyne::slot-name"
+
+2005-03-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * configure.ac: New variables: plugwrapperdir, defrrddir
+
+2005-03-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm (discover): Screening coli and
+       semicoli in legend text
+
+2005-03-08  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (discover):
+       New device capability: 'interfaceIndexingManaged'.
+       New DDX parameters: 'RFC2863_IF_MIB::ifindex-map-hint'
+       and 'RFC2863_IF_MIB::subtree-name-hint'.
+
+       * xmlconfig/generic/rfc2863.if-mib.xml: Moved "ifindex-table"
+       definition from snmp-defs to IF-MIB host template
+
+       * perllib/Torrus/DevDiscover.pm (discover):
+       In the legend, replace ':' with '=' and ';' with ','
+
+2005-03-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover.pm (oidBaseMatch): better OID comparison
+
+2005-02-28  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/Renderer.pm (newCacheFileName): MD5 to generate
+       unique file names
+
+2005-02-18  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * configure.ac (also in all plugins): AM_INIT_AUTOMAKE(1.9)
+       instead of 1.6. The old version conflicted with plugins.
+
+2005-01-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * doc/Makefile.am: Variable substitution in doc files
+
+       * doc/manpages/Makefile.am: Man sections configurable
+
+       * perllib/Torrus/DevDiscover/CiscoIOS_Docsis.pm:
+       New discovery module for Cisco-specific DOCSIS statistics
+
+2005-01-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (discover):
+       Moved the IF-MIB discovery from checkdevtype() to discover()
+
+2005-01-06  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/AxxessIT.pm: new discovery module
+
+2005-01-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * perllib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (checkdevtype):
+       Interface excluded when ifOperStatus=6 [notPresent]
+
+2004-12-27  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/devdiscover.in (absXmlFilename): output file is placed in
+       siteXmlDir if the path is not absolute. $XMLCONFIG is still
+       supported for the sake of compatibility.
+
+2004-12-03  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * configure.ac: replaced --disable-modcheck with --enable-pkgonly
+       
+2004-11-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.1.8
+       * Started Torrus development
+
+2004-11-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree/Validator.pm:
+       New parameters:  'monitor-period', 'monitor-timeoffset'
+
+       * lib/Torrus/Monitor.pm: Now monitor runs under standard Scheduler
+
+2004-10-25  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Collector.pm:
+       Moved collector specific code from bin/collector.in.
+
+2004-10-24  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/acledit.in: New privilege added: DisplayAdmInfo
+
+       * lib/Torrus/Renderer/AdmInfo.pm, templates/adminfo.html:
+       First step to display administratove information.
+
+2004-10-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/collector.in, bin/monitor.in:
+       Process name reflecting the commandline and status
+
+2004-10-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer/RRDtool.pm (rrd_make_multigraph):
+       New multigraph parameter: disable-gprint-X
+
+2004-09-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/generic/collector-periods.xml:
+       Changed rrd-create-rra
+
+2004-09-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/NetScreen.pm:
+       Changed the interface mapping from ifDescr to MAC address
+
+2004-09-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * examples/rrdup_notify.sh: collector failure notification script
+
+2004-09-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Apache2Handler.pm: mod_perl 1.99_15 compatibility.
+       Replaced Apache::ParseFormData with libapreq2.
+
+       * templates/html-incblocks.txt: Added "Up" navigation tab
+
+2004-09-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer/RRDtool.pm: New parameter: graph-disable-gprint
+
+2004-08-27  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/default-rrd.html:
+       Added link to web/plain/explain-rrdgraph.html
+
+       * templates/html-incblocks.txt: Moved Top and Help menu to the top
+       of the page
+
+2004-08-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/CiscoIOS.pm (discover):
+       New discovery parameter: CiscoIOS::disable-ipsec-stats
+
+2004-08-16  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/default-helptext.html: First draft of help window
+
+       * bin/devdiscover.in: --snmpdebug option is no more hidden
+
+2004-08-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/vendor/cisco.ios.xml: reorganized leaves
+
+       * xmlconfig/generic/rfc2863.if-mib.xml:
+       Replaced the leaf names with user friendly ones.
+       The old template is in old/rfc2863.if-mib.old-0.1.7.xml
+
+2004-08-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.1.7
+
+       * lib/Torrus/DevDiscover/RFC2863_IF_MIB.pm:
+       New discovery parameter: RFC2863_IF_MIB::copy-params
+
+       * lib/Torrus/DevDiscover.pm: new discovery parameter: host-copy-params
+
+2004-07-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/ATMEL.pm: New discocery module from Scott Brooks
+
+2004-07-28  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer/RRDtool.pm (rrd_make_holtwinters):
+       New global variable: $Torrus::Renderer::hwGraphLegend
+
+       * Disabled Holt-Winters in system performance and interface errors
+
+2004-07-27  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Torrus Demo server opened: http://torrusdemo.tbw.ch
+
+2004-07-26  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Collector.pm (setValue): DOLLAR and MOD in transform-value
+
+2004-07-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/acledit.in: Added --force option
+
+       * bin/monitor.in, bin/collector.in: umask changed to 0017
+
+2004-07-19  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * doc/scalability.pod: Document finished
+
+       * doc/vendorsupport.pod: Vendor and MIBs support document
+
+2004-07-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/site-global.xml: New place for global parameters.
+       In existing installations, you need to change the line in
+       torrus-siteconfig.pl:
+       @Torrus::Global::xmlAlwaysIncludeFirst =
+                                       ( 'defaults.xml', 'site-global.xml' );
+
+2004-07-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/NetApp.pm: new discovery module (Shawn)
+
+2004-07-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/CiscoIOS.pm: Added CISCO-IPSEC-FLOW-MONITOR-MIB
+
+2004-07-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Monitor.pm (run_event_exec):
+       New environment variable: Torrus_VALUE
+
+       * xmlconfig/defaults.xml: New view parameter: description
+
+2004-07-06  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/default-login.html,
+       lib/Torrus/Renderer/Frontpage.pm (renderUserLogin),
+       lib/Torrus/Apache2Handler.pm (handler),
+       lib/Torrus/ApacheHandler.pm (handler): URL parameters
+       (token, path, and view) are remembered during login
+
+2004-06-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ACL.pm (hasPrivilege): Wildcard ACL object (*) implemented
+
+2004-06-28  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Log levels updated. Now info is always printed, and verbose means
+       verbose.
+
+2004-06-25  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/defaults.xml: New view name: last24h-small
+
+2004-06-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       New discovery parameter: RFC2863_IF_MIB::errors-monitor
+
+2004-06-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       New discovery parameter: RFC2863_IF_MIB::exclude-interfaces
+       New discovery parameter: RFC2863_IF_MIB::tokenset-members
+
+2004-06-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/CiscoCatOS.pm (discover): New discovery
+       parameter: CiscoCatOS::suppress-noname-ports
+
+2004-06-16  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * configure.ac: For backward compatibility with autoconf 2.57,
+       AS_HELP_STRING is replaced with obsoleted AC_HELP_STRING.
+       Don't forget to change it back when 2.59 or later becomes mainstream.
+
+2004-06-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer/RRDtool.pm (rrd_make_gprint): GPRINT implemented
+
+       * bin/prepviews.in, bin/rrd_getdim.in: removed because no longer needed
+
+       * doc/manpages/Makefile.am: commandref.pod to be replaced by manpages
+       (contrib from Jurij Smakov)
+
+2004-05-26  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Collector.pm (setValue): transform-value parameter
+       is now expandable
+
+       * doc/devdoc/wd.distributed.pod: New working draft document
+
+2004-05-24  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * webmux2.pl: Added support for mod_perl 1.99_12 (before it was 1.99_13
+       only)
+
+2004-05-19  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover.pm: New parameter: custom-host-templates
+
+2004-05-16  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Collector/SNMP.pm: New parameter: 'snmp-check-sysuptime'
+
+       * bin/Makefile.am: rrd_hwreapply is moved to a separate
+       package (RRDman)
+
+2004-05-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Makefile.am, bin/Makefile.am: removed mkroutercfg
+
+       * templates/html-incblocks.txt: Removed image width hinting
+
+2004-05-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/SiteConfig.pm (verify): Minus sign allowed in tree names
+
+2004-05-03  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.1.6
+
+       * ../plugins/cbqos: first release of Cisco QoS monitoring plugin 
+
+       * bin/rrd_getdim.in: RRDtool 1.1.x compatibility improved
+
+2004-04-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * examples/onmsInterfaces.sh: Gustavo Torres' contribution for
+       OpenNMS integration
+
+2004-04-19  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree/XMLCompiler.pm:
+       New XML statements: setvar, iftrue, iffalse
+
+2004-04-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/RPN.pm (translate): New RPN function: MOD
+
+       * xmlconfig/generic/rfc2790.host-resources.xml: More sophysticated
+       Uptime graph (Shawn)
+
+2004-04-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/html-incblocks.txt: New items in HTML page top: siteInfo
+       and treeInfo.
+
+       * lib/Torrus/Apache2Handler.pm: First alpha release of
+       mod_perl 2.0 handler.
+
+       * doc/webintf.pod: It is recommended to Alias /torrus/plain
+       instead of just /torrus.
+
+2004-04-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/schedulerinfo.in: New option: --clear
+
+       * lib/Torrus/SchedulerInfo.pm, lib/Torrus/Scheduler.pm: reorganized
+       statistics collection
+
+       * bin/schedulerinfo.in: Only nonzero statistics are shown in runtime
+       report
+
+       * lib/Torrus/Scheduler.pm: reorganized statistics: late start increments
+       only when that happens. Runtime longer than period is also recorded
+       (sferry).
+
+       * bin/collector.in: more verbosity in non-verbose mode (sferry)
+
+       * init.torrus.in: gracefully waits for daemons to shut down (sferry)
+
+2004-04-06  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/RFC1697_RDBMS.pm, 
+        lib/Torrus/DevDiscover/OracleDatabase.pm: New discovery modules (sferry)
+
+       * NEWS: Bugfix release 0.1.5bf2
+
+2004-03-31  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DB.pm (cursor): Bugfix for write access cursors
+
+2004-03-26  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer/RRDtool.pm (rrd_make_cdef):
+       New @-functions in RPN references: AVERAGE MIN MAX LAST
+       
+       (rrd_make_multigraph): New multigraph parameter: ignore-views-X
+
+       * lib/Torrus/DevDiscover/CiscoGeneric.pm (buildConfig):
+       New discovery parameter: CiscoGeneric::file-per-sensor
+
+2004-03-25  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/compilexml.in: New commandline option: --noval
+
+       * NEWS: Bugfix release 0.1.5bf1
+
+2004-03-24  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/RPN.pm: now Math::BigFloat is always used for numbers
+       Perl 5.8.0 or higher is required: BigFloat implementation in 5.6.1
+       is untested and hardly compatible
+
+       * lib/Torrus/Collector.pm (run): $Torrus::Collector::needsConfigTree:
+       a new registry for those collectors needing access to configuration.
+
+2004-03-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Implemented Cisco class-based QoS monitoring plugin
+
+2004-03-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree.pm: More parameters to be expanded:
+       lower-limit normal-level upper-limit
+
+2004-03-19  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/devdiscover.in: New option: --limit=regexp
+
+2004-03-17  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.1.5
+
+       * lib/Torrus/DB.pm (new): Unique DB environment log file per PID. 
+
+2004-03-16  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/devdiscover.in: new parameter: output-bundle
+
+2004-03-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/overview-subleaves.html: New parameters:
+       overview-direct-link, overview-direct-link-view
+
+2004-03-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/UcdSnmp.pm, 
+       lib/Torrus/DevDiscover/RFC2790_HOST_RESOURCES.pm,
+       xmlconfig/vendor/ucd.ucd-snmp.xml,
+       xmlconfig/generic/rfc2790.host-resources.xml:
+       Rearranged the host performance templates.
+       Fixed bug in Interrupts RRD. You need to
+       rm /var/snmpcollector/*ucd-context_interrupts.rrd               
+
+2004-03-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer/RRDtool.pm (render_rrgraph):
+       New configuration option: $Torrus::Renderer::ignoreDecorations
+
+2004-03-01  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/generic/rfc2670.docsis-if.xml: Modified DOCSIS template
+       to include codewords statistics (data-file changed).
+
+       * bin/monitor.in, bin/collector.in: Log rotation on SIGHUP
+
+2004-02-26  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/generic/monitors.xml: New standard monitors and actions
+
+       * xmlconfig/vendor/smokeping.xml:
+       (Shawn) Smokeping RRD files access templates
+
+       * lib/Torrus/DevDiscover/NetScreen.pm: (Shawn) new discovery module
+
+       * lib/Torrus/DevDiscover/CompaqCIM.pm: (Shawn) new discovery module
+
+       * lib/Torrus/DevDiscover/MicrosoftWindows.pm:
+       (Shawn) added support for IIS HTTP and FTP stats
+
+2004-02-24  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree/Writer.pm (postProcessNodes):
+       Dispersed collector offset
+
+2004-02-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree.pm (new),
+       lib/Torrus/ConfigTree/Writer.pm (finalize):
+       Dual configuration database implemented
+
+       * lib/Torrus/ConfigTree.pm (setReady): ConfigurationReady
+       flag moved to other_config.db.
+
+2004-02-18  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer/RRDtool.pm: view parameter "title" removed.
+       New node parameter: "graph-title"
+
+2004-02-16  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer/RRDtool.pm (rrd_make_decorations):
+       Implemented back- and foreground decorations (Christian's Change 7,
+       modified)
+
+2004-02-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree.pm (getNodeParam): Optimized nodepcache
+       structure
+
+       * lib/Torrus/ConfigTree/Writer.pm (newToken): Next free token is
+       no longer stored in database
+
+2004-02-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover.pm (buildConfig): New parameter: host-aliases
+
+       * lib/Torrus/Collector.pm (setValue): New parameter: transform-value
+
+2004-02-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/snmp-defs.xml, xmlconfig/*/*.xml: data-file refers now
+       to system-id, instead of snmp-host.
+
+       * lib/Torrus/DevDiscover.pm (buildConfig): symbolic-name is no longer
+       mandatory. New parameter: system-id.
+
+2004-02-11  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DB.pm (new): DB internal errors are stored in
+       var/log/dbenv_errlog
+
+2004-02-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree.pm (expandNodeParam):
+       $Torrus::ConfigTree::nodeParamHook: hook for custom parameter processing 
+
+2004-02-03  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer/RRDtool.pm: Restructured the whole grapher.
+
+2004-02-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm: Split one big module into 4 smaller ones:
+       Torrus::Renderer, Torrus::Renderer::HTML, Torrus::Renderer::RRDtool,
+       Torrus::Renderer::Frontpage
+
+       * lib/Torrus/DevDiscover.pm (discover):
+       New discovery parameter: only-devtypes
+
+2004-01-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover.pm (discover):
+       New discovery parameter: disable-devtypes
+       
+       * lib/Torrus/DevDiscover.pm (discover):
+       Better treatment for agents without "system" OIDs.
+
+2004-01-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover.pm (discover): Now snmp-oids-per-pdu may
+       be defined from discovery parameters.
+
+       * bin/schedulerinfo.in: Scheduler runtime statistics report
+
+2004-01-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Scheduler.pm: runtime statistics stored in a database
+
+2004-01-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover.pm (discover):
+       'collector-period' and 'collector-timeoffset' can be specified in
+       devdiscover input
+
+       * Makefile.am: Now DIST_REVISION file in the distribution
+       package tells the distribution revision date
+
+       * lib/Torrus/Collector.pm: listTargets() is replaced with
+       listCollectorTargets() with collector type as argument
+
+2004-01-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       Split iftable-errors template into input and output
+       (some Cisco ATM aal5 interfaces dont have both in and out error
+       counters)
+
+       * doc/devdoc/wd.gprint-and-cf-plot.pod:
+       New design draft from Christian Schnidrig
+
+       * lib/Torrus/RPN.pm: Slight reorganisation and better fault control
+
+       * doc/userguide.pod: New in Tips: Several Torrus instances on one server
+
+2004-01-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree.pm (token),
+       lib/Torrus/ConfigTree/Writer.pm (setAlias),
+       lib/Torrus/DB.pm (getBestMatch):
+       Recursive alias expansion. New database: aliases.db.
+       configsnapshot is no more compatible with previous releases' database.
+
+2004-01-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree.pm (getAliases): Improved logics for aliases.
+       Needs database recompilation.
+
+2004-01-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/schedulerinfo.in: New utility for scheduler analysis
+
+2004-01-08  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/old/rfc1213.xml: Moved from xmlconfig/generic/rfc1213.xml
+
+       * templates/html-incblocks.txt: cssoverlay property
+
+       * bin/configsnapshot.in: Ready for tests
+
+       * lib/Torrus/DevDiscover/RFC2737_ENTITY_MIB.pm (discover):
+       Chassis desription is put into host-level comment
+
+2004-01-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/configsnapshot.in: first step towards a snapshot utility
+
+       * xmlconfig/vendor/cisco.generic.xml:
+       New template: cisco-temperature-sensor-fahrenheit
+
+       * xmlconfig/generic/collector-periods.xml: Changed XFF the same way
+       as in snmp-defs.xml.
+       Added Holt-Winters parameters to 1-minute interval.
+
+       * xmlconfig/snmp-defs.xml: Changed XFF in default RRAs: 1 missing
+       sample is allowed in half-hour average, and 1 missing hour
+       is allowed in daily average.
+
+       * lib/Torrus/Collector/SNMP.pm (initTargetAttributes):
+       New parameter: snmp-object-type
+
+2004-01-06  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/generic/rfc2662.adsl-line.xml: Reduced number of RRD files
+
+       * xmlconfig/vendor/cisco.generic.xml: Moved buffer statistics into
+       a single RRD file
+
+       * xmlconfig/generic/rfc2863.if-mib.xml:
+       Reorganized RRD data structure. Significantly reduced number of files.
+
+2004-01-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/genlist.in: New utility for data listing
+
+2003-12-31  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/RFC2737_ENTITY_MIB.pm: New discovery module
+
+       * lib/Torrus/DevDiscover/CiscoGeneric.pm: CPU enties mapped against
+       ENTITY-MIB names
+
+2003-12-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/devdiscover.in: $XMLCONFIG substitution
+
+2003-12-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/generic/rfc2863.if-mib.xml: Moved ifindex-map to host level
+
+2003-12-28  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/CiscoGeneric.pm,
+       xmlconfig/vendor/cisco.generic.xml: Reorganized CPU and Memory
+       pool statistics.
+
+       * lib/Torrus/DevDiscover/CiscoFirewall.pm: New discovery module
+
+       * lib/Torrus/DevDiscover/F5BigIp.pm: New discovery module for
+       F5 BigIp Load Balancer
+
+2003-12-24  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/old/snmp-defs.old-0.1.2.xml: Moved from generic/ to old/
+
+       * xmlconfig/old/rfc2863.if-mib.old-0.1.4.xml: Saved the file from
+       previous version.
+
+2003-12-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/Xylan.pm: New discovery module for
+       Alcatel (Xylan) OmniSwitch
+
+       * lib/Torrus/DevDiscover/AscendMax.pm: New discovery module for
+       Ascend (Lucent) MAX
+
+2003-12-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/CiscoIOS.pm (checkdevtype):
+       Use CISCO-IMAGE-MIB::ciscoImageTable for more strict IOS-based
+       product detection
+
+2003-12-18  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       Vendor templates for interface counters taken from
+       @{$interface->{'vendor_templates'}}
+
+       * lib/Torrus/DB.pm (new): Berkeley db-4.2 compatibility
+
+2003-12-17  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/vendor/empire.systemedge.xml: Data structure and templates
+       changed for better flexibility and system support
+
+       * bin/devdiscover.in, bin/genddx.in:
+       Output file is now controlled from DDX parameter 'output-file'.
+
+2003-12-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/MicrosoftWindows.pm:
+       Moved MicrosoftWindowsServer.pm to MicrosoftWindows
+
+2003-12-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/MicrosoftWindowsServer.pm: New discovery module
+       for Windows2000/XP SNMP agent
+
+2003-12-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/generic/rfc2863.if-mib.xml:
+       Replaced $IFIDX with %ifindex-map%
+       
+       Split template iftable-discards into iftable-discards-in and
+       iftable-discards-out. For some devices,
+       /var/snmpcollector/*_discards.rrd need to be deleted, and
+       devdiscover re-launched
+
+2003-12-11  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/default-tset.html, xmlconfig/generic/rfc2863.if-mib.xml:
+       New parameter: descriptive-nickname
+
+2003-12-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.1.4
+
+       * devdiscover-config.pl: Commented out "RFC2662_ADSL_LINE" and
+       "Paradyne" (need more testing)
+
+2003-12-08  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/*, web/plain/*.css: more flexible CSS layout
+
+2003-12-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm (do_render_rrdgraph):
+       New parameter: graph-rigid-boundaries
+
+2003-12-01  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (discover):
+       New discovery option: RFC2863_IF_MIB::suppress-hc-counters
+       
+2003-11-28  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/devdiscover.in: now it accepts XML input only
+
+       * bin/genddx.in: New utility for next-generation devdiscover
+
+       * lib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       interface counters moved to a separate subtree
+
+2003-11-25  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm (do_render_rrdgraph):
+       New parameter: graph-logarithmic
+
+2003-11-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/EmpireSystemedge.pm: new discovery module
+
+2003-11-22  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover.pm (clearCap): capability clearing needed for
+       Empire Sysedge
+
+2003-11-18  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/generic/rfc2863.if-mib.xml: templates interface-counters
+       and hc-interface-counters removed
+       New templates: read-iftable-octets, read-ifxtable-hcoctets
+
+2003-11-11  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * web/plain/torrus.css: Increased maximum node name length to 25 symbols
+
+       * lib/Torrus/DevDiscover/CiscoGeneric.pm: moved memory, cpu, and
+       temperature statistics to a common module, shared by IOS and CatOS
+
+       * lib/Torrus/DevDiscover/CiscoCatOS.pm (discover): interface comments
+       are now derived from CISCO-STACK-MIB::portName
+
+2003-11-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlsup/extract-skeleton.xsl: XSLT template for tree structure
+       extraction
+
+       * bin/configinfo.in: New utility
+
+       * bin/devdiscover.in: New options: --retries and --timeout
+
+       * lib/Torrus/DevDiscover/CiscoCatOS.pm: Interface filters for CatOS
+
+2003-11-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigBuilder.pm (addStatistics): congfiguration statistics
+
+       * lib/Torrus/DevDiscover/CiscoIOS.pm: Interface filters for IOS devices
+
+       * lib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (discover): Implemented
+       generic interface filtering
+
+2003-11-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/generic/rfc2863.if-mib.xml: rrd-create-max=1e15 for HC
+       packet and octets counters
+
+       * lib/Torrus/DevDiscover/RFC2863_IF_MIB.pm (buildConfig):
+       New interface counters: iftable-discards
+
+2003-11-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * New devdiscover modules: "RFC2662_ADSL_LINE" and "Paradyne"
+
+2003-11-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Collector/SNMP.pm (initTarget):
+       New parameter: snmp-oids-per-pdu
+
+2003-11-03  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.1.3
+
+       * doc/, doc/devdoc/: Documentation is reorganized. Developer
+       documentation is separated from User docs.
+
+2003-10-31  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/overview-subleaves.html: Replacement for InOutBps.
+       New parameters: has-overview-subleaves, overview-subleave-name,
+       overview-shortcut-text, overview-shortcut-title, overview-page-title
+
+2003-10-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/CiscoIOS_SAA.pm: New discovery module
+
+2003-10-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm (do_render_rrdgraph): New parameter:
+       rrd-scaling-base
+       (new): cache initialization optimized
+
+2003-10-28  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * doc/devdiscover_devguide.pod: new Device Discovery Developer's Guide
+
+2003-10-27  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover/RFC2790_HOST_RESOURCES.pm:
+       New Host resources MIB discovery module
+
+2003-10-26  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * examples/setmonitor.xupdate.xml: XUpdate technique to update
+       autogenerated files. Described in userguide.pod.
+
+2003-10-24  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/generic/rfc2863.if-mib.xml: New names for interace
+       counter RRD files: host_intf_octets.rrd, host_intf_packets.rrd, etc.
+
+       * xmlconfig/snmp-defs.xml: data-file and data-dir are no longer
+       defined in snmp-defaults.
+
+       * xmlconfig/generic/rfc2863.if-mib.xml: Broke interface counter
+       templates into smaller parts. New counters template: "iftable-errors".
+
+       * xmlconfig/snmp-defs.xml: Moved interface counters to
+       generic/rfc2863.if-mib.xml
+
+2003-10-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * New ACL user and group attribute: "modified"
+
+2003-10-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/DevDiscover.pm (genDataDir): data-dir hash implemented
+
+       * bin/devdiscover.in: Default subtree is now /Routers.
+       Alternative device names may be given as host:devname
+
+       * xmlconfig/: Vendor and generic templates from Shawn Ferry
+
+2003-10-19  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Shawn Ferry's contribution on styling profiles, with recursive
+       color references
+
+2003-10-18  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree/XMLCompiler.pm (compile): <include> directives
+       are now processed recursively, before any other processing.
+
+2003-10-17  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/snmp-defs.xml: Replaced subtree /SNMP with template
+       Moved old version to generic/snmp-defs.old-0.1.2.xml
+
+2003-10-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/devdiscover.in: First proof of concept version of
+       a new modular device discovery tool
+
+2003-10-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.1.2
+
+       * lib/Torrus/ConfigTree/Writer.pm (addChild): Nodes longer than 20
+       characters are reported with warning.
+
+2003-10-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig: New vendor files:
+       vendor/ascend.max.xml, examples/ascend.max.xml,
+       generic/rfc2670.docsis-if.xml
+
+       * doc/userguide.pod,
+       xmlconfig/examples/servers.data, xmlconfig/examples/servers.tmpl:
+       New approach in automatic config generation.
+
+2003-10-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/mkroutercfg.in (retrieveSnmpData): VLAN interfaces are excluded
+       from the list of discovered interfaces.
+
+2003-10-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree/Writer.pm (propagateViewParams): Moved view
+       parameter inheritance from XML compiler to Writer post-processing
+
+2003-10-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm (do_render_rrdgraph): New view parameters:
+       ignore-limits, ignore-lower-limit, ignore-upper-limit
+
+       * bin/cleanup.in: Cronjob for cleaning up diskspace.
+
+       * lib/Torrus/Renderer.pm (do_render_rrdgraph): New parameters:
+       graph-lower-limit, graph-upper-limit
+
+2003-10-06  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * styling/torrus-original.pl: Styling profiles implemented
+
+2003-10-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm: New parameter: vertical-label
+
+2003-09-30  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm (do_render_rrdgraph): Added HRULE handling
+
+2003-09-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm (render_html): Added current time in HTML output
+
+2003-09-18  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Scheduler.pm: VmWare clock support
+
+2003-09-17  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Monitor.pm (setAlarm): New parameter: monitor-action-target
+
+2003-09-14  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.1.1
+
+2003-09-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree.pm:
+       %Torrus::ConfigTree::expand_params now contains parameters for
+       expansion
+
+       * lib/Torrus/ConfigTree/Writer.pm:
+       %Torrus::ConfigTree::Writer::remove_space now contains parameters
+       for space removal
+
+       * lib/Torrus/Collector.pm (addTarget): New parameter: value-map
+
+       * configure.ac: New configure variable: torrus_user.
+       torrus_var default value changed from root to torrus
+
+2003-09-09  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * init.torrus.in: New launcher for multi-tree support.
+       FreeBSD 5.1 gives weird error without "&" in launching command.
+       Needs testing on other systems.
+
+2003-09-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Monitor event "throw" changed to "set"
+
+2003-09-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ACL/Import.pm, lib/Torrus/ACL/Export.pm: ACL import/export
+       utilities
+
+       * bin/aclfixup.in: Temporary utility to convert ACL database to
+       the new format.
+
+       * lib/Torrus/ACL/Edit.pm: ACL Database structure changed:
+       added "uA:" lists
+
+2003-09-03  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/RPN.pm: Got use of use Math::BigFloat, as suggested by
+       Christian.
+
+       * xmlconfig/snmp-defs.xml: Changed xff to 0.5, as recommended by
+       rodrigo.cunha at corp.vodafone.pt
+
+       * lib/Torrus/DB.pm: Database handles are held in a pool and reused
+
+2003-09-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Added user authentication: lib/Torrus/ACL*, bin/acledit, Apache handler
+       * Multiple trees support as described in Requirements 0.1
+
+2003-08-26  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Collector/SNMP.pm: Moved the validator parameters to
+       a separate module
+
+2003-08-07  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/defaults.xml: Tokenset views expiry time
+       changed from 300 to 60
+
+       * lib/Torrus/Renderer.pm (checkAndClearCache): Renderer cache is
+       cleared at least once a day
+
+       * webmux.pl: New Apache init script. DB environment is now
+       correctly destroyed
+
+2003-08-06  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * mibs/Torrus-MIB.txt: Added DS tree name to Monitor action exec
+       and helper programs
+
+       * web/plain/torrus.css: Replaced <BR> with display:block in current path
+
+       * height-hint parameter is removed.
+
+       * templates/routercfg.xml: Fixed the subtree deepness bug for
+       temperature sensors.
+
+       * First steps towards version 0.1: Multiple trees and database
+       split are implemented.
+
+2003-08-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.0.20
+
+2003-07-31  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm: added $Torrus::Renderer::rendererURL
+       and $Torrus::Renderer::plainURL
+
+2003-07-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/html-incblocks.txt: Absolute URL for CSS stylesheet
+
+       * lib/Torrus/Collector/SNMP.pm: multiple ports and SNMP communities
+       per IP address.
+
+2003-07-23  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * templates/routercfg.xml: moved snmp-community and other parameters
+       to a host-level subtree
+
+2003-07-17  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * SNMP Agent reload and unavailable handling
+
+2003-07-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/mkroutercfg.in, templates/*, lib/Torrus/Renderer.pm:
+       Bugs item #747893 resolved.
+
+2003-07-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/mkroutercfg.in (reportResults), templates/routercfg.xml:
+       Legend is now XML-escaped
+
+2003-07-01  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.0.19
+
+2003-06-26  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/snmp-defs.xml, lib/Torrus/Collector/RRDStorage.pm,
+       lib/Torrus/ConfigTree/Validator.pm:
+       typo fixed: rrd-create-heartbit changed to rrd-create-heartbeat
+
+       * xmlconfig/snmp-defs.xml: as proposed by Christian Schnidrig,
+       rrd-create-heartbeat changed from 1800 to 500
+
+2003-06-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/mkroutercfg.in (reportResults), templates/routercfg.xml:
+       SNMP version bugfix
+
+       * configure.ac: Now most of the directory names are configurable
+
+2003-05-18  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm (render):
+       Bug #735753 (Christian Schnidrig) fixed
+
+       * bin/mkroutercfg.in, templates/routercfg.xml:
+       Marc Haber's patch for deeper subtrees
+
+       * torrus-config.pl: added @Torrus::ConfigTree::XMLCompiler::listparams
+
+2003-05-01  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Collector/SNMP.pm: SNMP-specific config validator is
+       now within the module.
+
+       * lib/Torrus/ConfigTree/Validator.pm: Additional validation
+       parameters are read from @Torrus::Validator::loadLeafValidators
+
+       * lib/Torrus/Collector.pm: Collector modules
+       are loaded from @Torrus::Collector::loadModules
+
+2003-04-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.0.18
+
+2003-03-31  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/defaults.xml: New parameter: rrgraph-views
+
+2003-03-30    <ssinyagin@HOME>
+
+       * xmlconfig/Makefile.am: Added Cisco MAC accounting
+
+2003-03-27  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm and temlates: reorganized Holt-Winters views
+
+2003-03-25  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * torrus-config.pl: Moved monitor parameters from siteconfig to
+       default config.
+
+2003-03-21  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.0.17
+
+       * web/plain/torrus-printer.css: Finalized the printer-friendly layout
+
+2003-03-17  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * init.torrus.in: now running under user "torrus"
+
+2003-03-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * configure.ac: Changed the group to "torrus"; init.torrus is
+       more universal
+
+2003-03-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm, lib/Torrus/ApacheHandler.pm:
+       optimized Renderer to reuse Template processor in mod_perl
+
+2003-03-15  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * web/plain/torrus.css: New HTML layout
+
+2003-03-11  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/Makefile.am (dist_examples_DATA): Moved
+       apcups-example.xml to apc-ups.xml. Added hpux.xml
+
+       * bin/rrd_getdim.in, bin/prepviews.in, xmlconfig/Makefile.am:
+       "make install prefix=/some/path" now works correctly.
+
+       * lib/Bundle/Torrus.pm: Perl bundle for easy installation
+
+2003-03-04  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.0.16
+
+       * lib/Torrus/Renderer.pm (do_render_rrdgraph): Fixed TICK bug
+
+       * xmlconfig/vendor/hp.hpux.xml: New definitions file from Aaron Bush
+
+       * xmlconfig/vendor/apc.ups.xml:
+       * xmlconfig/examples/apcups-example.xml: Merged the several
+       templates into one.
+
+2003-03-03  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Makefile.am: added torrus-config.dtd to distribution
+
+       * xmlsup/torrus-config.dtd: The configuration DTD first cut
+
+2003-03-02    <ssinyagin@HOME>
+
+       * Makefile.am (dist_mibs_DATA): Moved mibs from lib to share
+
+2003-03-01  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/mkroutercfg.in (reportResults): Added vendor/cisco.ios.xml
+       chekup
+
+       * xmlconfig/examples/apcups-defs.xml: moved to
+       xmlconfig/vendor/apc.ups.xml
+
+       * xmlconfig/examples/snmp-view.xml: moved contents into
+       xmlconfig/vendor/cisco.ios.xml
+
+       * xmlconfig/snmp-defs.xml: Moved Cisco specifics to
+       xmlconfig/vendor/cisco.ios.xml
+
+       * xmlconfig/Makefile.am: snmp-defs.xml is not any more preserved
+
+       * configure.ac, Makefile.am: added plugin functionality
+
+2003-02-27  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/Renderer.pm (render_html),
+       lib/Torrus/ApacheHandler.pm (handler), web/grapher.cgi.in:
+       Fixed the non-ASCII display problem.
+       Also XML-LibXML-1.54_3 is required.
+
+2003-02-26  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.0.15
+
+       * xmlconfig/examples/apcups-defs.xml:
+       * xmlconfig/examples/apcups-example.xml: Added APC UPS example
+       configurations
+
+       * lib/Torrus/Collector/RRDStorage.pm (updateRRD): Reverted to
+       a more promiscious code, because the memory problem persists with
+       perl 5.8.
+
+2003-02-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.0.14
+
+2003-02-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree/Writer.pm: fixed bug with parameter cache
+
+2003-01-29  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * bin/mkroutercfg.in: fixed the exit code bug
+
+2003-01-24  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/Makefile.am: added xmlconfig/examples/snmp-view.xml
+
+       * lib/Torrus/ConfigTree/XMLCompiler.pm, bin/compilexml.in:
+       added <include> XML statement
+
+2003-01-20  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * NEWS: Release 0.0.13
+
+       * bin/compilexml.in, bin/collector.in, bin/monitor.in:
+       Added signal handlers for more graceful database closing.
+
+2003-01-13  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree.pm: Now compiler waits for readers to finish.
+
+2003-01-08  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * lib/Torrus/ConfigTree.pm: implemented ConfigurationReady checkup
+       * lib/Torrus/ApacheHandler.pm, web/grapher.cgi.in:
+          more user friendly error reporting
+
+2003-01-05  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/snmp-defs.xml: Added InOutBps leaf to the templates.
+       Affected files:  xmlconfig/defaults.xml, templates/routercfg.xml,
+       templates/default-dir.html, templates/inout-leaves.html
+
+2003-01-03  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/snmp-defs.xml: Added graph-legend parameters
+
+2003-01-02  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * xmlconfig/Makefile.am: moved XML examples to a separate directory
+
+       * implemented 'rrd-multigraph'
+
+       * changed ds-type RRDfile to rrd-file
+
+2002-09-10  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Release 0.0.5 published. Everything except SNMP data collector
+         is ready to run.
+
+2002-08-12  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Reorganized a lot of things. First cut of monitor is runnable.
+
+2002-07-19  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Implemented Holt-Winters support
+
+2002-07-18  Stanislav Sinyagin  <ssinyagin@users.sourceforge.net>
+
+       * Reorganized ConfigTree and implemented tokens
diff --git a/torrus/DIST_REVISION b/torrus/DIST_REVISION
new file mode 100644 (file)
index 0000000..65629b0
--- /dev/null
@@ -0,0 +1 @@
+Sun Oct 24 15:06:45 CEST 2010
diff --git a/torrus/INSTALL b/torrus/INSTALL
new file mode 100644 (file)
index 0000000..23e5f25
--- /dev/null
@@ -0,0 +1,236 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
+Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about.  Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not support the `VPATH'
+variable, you have to compile the package for one architecture at a
+time in the source code directory.  After you have installed the
+package for one architecture, use `make distclean' before reconfiguring
+for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).  Here is a another example:
+
+     /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
+configuration-related scripts to be executed by `/bin/bash'.
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/torrus/Makefile.am b/torrus/Makefile.am
new file mode 100644 (file)
index 0000000..dcf2763
--- /dev/null
@@ -0,0 +1,109 @@
+#  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: Makefile.am,v 1.1 2010-12-27 00:03:32 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+#
+
+SUBDIRS = . bin configs doc examples perllib sup xmlconfig 
+
+EXTRA_DIST = \
+       setup_tools/Bundle/Torrus.pm \
+       setup_tools/replace_rrfw.sh \
+       setup_tools/configure_fhs \
+       setup_tools/check_perlthreading.pl
+
+noinst_SCRIPTS = \
+       setup_tools/substvars.sh \
+       setup_tools/mkvardir.sh \
+       init.d/torrus
+
+tmpldir = @tmpldir@
+dist_tmpl_DATA = \
+       templates/aclexport.xml \
+       templates/adminfo.html \
+       templates/default-chooser.html \
+       templates/default-dir.html \
+       templates/default-helptext.html \
+       templates/default-login.html \
+       templates/default-recursivedir.html \
+       templates/default-rrd.html \
+       templates/default-tset.html \
+       templates/expanded-dir.html \
+       templates/globalsearch.html \
+       templates/overview-subleaves.html \
+       templates/report-index.html \
+       templates/report-monthly.html \
+       templates/report-serviceid.html \
+       templates/report-yearly.html \
+       templates/search.html \
+       templates/html-incblocks.txt \
+       templates/tset-list.html \
+       templates/email-alarm.txt
+
+
+
+scriptsdir  = @scriptsdir@
+dist_scripts_DATA = scripts/rrdup_notify.sh
+
+xmlscriptsdir  = @scriptsdir@/xml
+dist_xmlscripts_DATA = scripts/xml/extract-skeleton.xsl
+
+
+discoverydir = @sitedir@/discovery
+dist_discovery_DATA = discovery/README
+
+mkvardir=@abs_top_builddir@/setup_tools/mkvardir.sh
+
+install-data-local:
+       @echo Testing if prefix has changed during make
+       test "$(prefix)" = "@prefix@"
+       $(mkvardir) $(DESTDIR)$(dbhome)
+       $(mkvardir) $(DESTDIR)$(cachedir)
+       $(mkvardir) $(DESTDIR)$(piddir)
+       $(mkvardir) $(DESTDIR)$(reportsdir)
+       $(mkvardir) $(DESTDIR)$(logdir)
+       $(mkvardir) $(DESTDIR)$(sesstordir)
+       $(mkvardir) $(DESTDIR)$(seslockdir)     
+       $(mkinstalldirs) $(DESTDIR)$(tmpluserdir)
+       $(mkinstalldirs) $(DESTDIR)$(plugtorruscfgdir)
+       $(mkinstalldirs) $(DESTDIR)$(plugdevdisccfgdir)
+       $(mkinstalldirs) $(DESTDIR)$(plugwrapperdir)
+
+HTMLDIR = @abs_top_builddir@/../htdocs
+
+htdocs:
+       cd doc; make htdocs
+       @for f in $(dist_mibs_DATA); do \
+         f2=$(HTMLDIR)/`basename $$f`; \
+         if test ! -f $$f2 -o $$f -nt $$f2; then \
+           echo "cp $$f $$f2"; \
+           cp $$f $$f2; \
+         fi; \
+       done
+
+UPLOADPATH = \
+   ssinyagin,torrus@web.sourceforge.net:/home/groups/t/to/torrus/htdocs/devel
+
+upload: dist
+       scp $(distdir).tar.gz TODO $(UPLOADPATH)
+         
+todoup:
+       scp TODO $(UPLOADPATH)
+
+dist-hook:
+       date >DIST_REVISION
+       cp DIST_REVISION $(distdir)/
diff --git a/torrus/Makefile.in b/torrus/Makefile.in
new file mode 100644 (file)
index 0000000..1ff1d52
--- /dev/null
@@ -0,0 +1,808 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#  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: Makefile.in,v 1.1 2010-12-27 00:03:32 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+#
+
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = README $(am__configure_deps) $(dist_discovery_DATA) \
+       $(dist_scripts_DATA) $(dist_tmpl_DATA) $(dist_xmlscripts_DATA) \
+       $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/configure $(top_srcdir)/init.d/torrus.in \
+       $(top_srcdir)/setup_tools/mkvardir.sh.in \
+       $(top_srcdir)/setup_tools/substvars.sh.in AUTHORS COPYING \
+       ChangeLog INSTALL NEWS TODO conftools/config.guess \
+       conftools/config.sub conftools/install-sh conftools/missing
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno configure.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = setup_tools/substvars.sh setup_tools/mkvardir.sh \
+       init.d/torrus
+SCRIPTS = $(noinst_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-exec-recursive install-info-recursive \
+       install-recursive installcheck-recursive installdirs-recursive \
+       pdf-recursive ps-recursive uninstall-info-recursive \
+       uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(discoverydir)" \
+       "$(DESTDIR)$(scriptsdir)" "$(DESTDIR)$(tmpldir)" \
+       "$(DESTDIR)$(xmlscriptsdir)"
+dist_discoveryDATA_INSTALL = $(INSTALL_DATA)
+dist_scriptsDATA_INSTALL = $(INSTALL_DATA)
+dist_tmplDATA_INSTALL = $(INSTALL_DATA)
+dist_xmlscriptsDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(dist_discovery_DATA) $(dist_scripts_DATA) $(dist_tmpl_DATA) \
+       $(dist_xmlscripts_DATA)
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+FIND = @FIND@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KILL = @KILL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERLINC = @PERLINC@
+POD2MAN = @POD2MAN@
+POD2MAN_PRESENT_FALSE = @POD2MAN_PRESENT_FALSE@
+POD2MAN_PRESENT_TRUE = @POD2MAN_PRESENT_TRUE@
+POD2TEXT = @POD2TEXT@
+POD2TEXT_PRESENT_FALSE = @POD2TEXT_PRESENT_FALSE@
+POD2TEXT_PRESENT_TRUE = @POD2TEXT_PRESENT_TRUE@
+RM = @RM@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLEEP = @SLEEP@
+STRIP = @STRIP@
+SU = @SU@
+VERSION = @VERSION@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+cachedir = @cachedir@
+cfgdefdir = @cfgdefdir@
+datadir = @datadir@
+dbhome = @dbhome@
+defrrddir = @defrrddir@
+distxmldir = @distxmldir@
+enable_pkgonly = @enable_pkgonly@
+enable_varperm = @enable_varperm@
+exec_prefix = @exec_prefix@
+exmpdir = @exmpdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mansec_misc = @mansec_misc@
+mansec_usercmd = @mansec_usercmd@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+perlithreads = @perlithreads@
+perllibdir = @perllibdir@
+perllibdirs = @perllibdirs@
+piddir = @piddir@
+pkgbindir = @pkgbindir@
+pkgdocdir = @pkgdocdir@
+pkghome = @pkghome@
+plugdevdisccfgdir = @plugdevdisccfgdir@
+pluginsdir = @pluginsdir@
+plugtorruscfgdir = @plugtorruscfgdir@
+plugwrapperdir = @plugwrapperdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+reportsdir = @reportsdir@
+sbindir = @sbindir@
+scriptsdir = @scriptsdir@
+seslockdir = @seslockdir@
+sesstordir = @sesstordir@
+sharedstatedir = @sharedstatedir@
+siteconfdir = @siteconfdir@
+sitedir = @sitedir@
+sitexmldir = @sitexmldir@
+supdir = @supdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+tmpldir = @tmpldir@
+tmpluserdir = @tmpluserdir@
+torrus_user = @torrus_user@
+var_group = @var_group@
+var_mode = @var_mode@
+var_user = @var_user@
+varprefix = @varprefix@
+webplaindir = @webplaindir@
+webscriptsdir = @webscriptsdir@
+wrapperdir = @wrapperdir@
+SUBDIRS = . bin configs doc examples perllib sup xmlconfig 
+EXTRA_DIST = \
+       setup_tools/Bundle/Torrus.pm \
+       setup_tools/replace_rrfw.sh \
+       setup_tools/configure_fhs \
+       setup_tools/check_perlthreading.pl
+
+noinst_SCRIPTS = \
+       setup_tools/substvars.sh \
+       setup_tools/mkvardir.sh \
+       init.d/torrus
+
+dist_tmpl_DATA = \
+       templates/aclexport.xml \
+       templates/adminfo.html \
+       templates/default-chooser.html \
+       templates/default-dir.html \
+       templates/default-helptext.html \
+       templates/default-login.html \
+       templates/default-recursivedir.html \
+       templates/default-rrd.html \
+       templates/default-tset.html \
+       templates/expanded-dir.html \
+       templates/globalsearch.html \
+       templates/overview-subleaves.html \
+       templates/report-index.html \
+       templates/report-monthly.html \
+       templates/report-serviceid.html \
+       templates/report-yearly.html \
+       templates/search.html \
+       templates/html-incblocks.txt \
+       templates/tset-list.html \
+       templates/email-alarm.txt
+
+dist_scripts_DATA = scripts/rrdup_notify.sh
+xmlscriptsdir = @scriptsdir@/xml
+dist_xmlscripts_DATA = scripts/xml/extract-skeleton.xsl
+discoverydir = @sitedir@/discovery
+dist_discovery_DATA = discovery/README
+mkvardir = @abs_top_builddir@/setup_tools/mkvardir.sh
+HTMLDIR = @abs_top_builddir@/../htdocs
+UPLOADPATH = \
+   ssinyagin,torrus@web.sourceforge.net:/home/groups/t/to/torrus/htdocs/devel
+
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+             cd $(srcdir) && $(AUTOMAKE) --gnu  \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+setup_tools/substvars.sh: $(top_builddir)/config.status $(top_srcdir)/setup_tools/substvars.sh.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+setup_tools/mkvardir.sh: $(top_builddir)/config.status $(top_srcdir)/setup_tools/mkvardir.sh.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+init.d/torrus: $(top_builddir)/config.status $(top_srcdir)/init.d/torrus.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+uninstall-info-am:
+install-dist_discoveryDATA: $(dist_discovery_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(discoverydir)" || $(mkdir_p) "$(DESTDIR)$(discoverydir)"
+       @list='$(dist_discovery_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(dist_discoveryDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(discoverydir)/$$f'"; \
+         $(dist_discoveryDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(discoverydir)/$$f"; \
+       done
+
+uninstall-dist_discoveryDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_discovery_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(discoverydir)/$$f'"; \
+         rm -f "$(DESTDIR)$(discoverydir)/$$f"; \
+       done
+install-dist_scriptsDATA: $(dist_scripts_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(scriptsdir)" || $(mkdir_p) "$(DESTDIR)$(scriptsdir)"
+       @list='$(dist_scripts_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(dist_scriptsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(scriptsdir)/$$f'"; \
+         $(dist_scriptsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(scriptsdir)/$$f"; \
+       done
+
+uninstall-dist_scriptsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_scripts_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(scriptsdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(scriptsdir)/$$f"; \
+       done
+install-dist_tmplDATA: $(dist_tmpl_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(tmpldir)" || $(mkdir_p) "$(DESTDIR)$(tmpldir)"
+       @list='$(dist_tmpl_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(dist_tmplDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(tmpldir)/$$f'"; \
+         $(dist_tmplDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(tmpldir)/$$f"; \
+       done
+
+uninstall-dist_tmplDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_tmpl_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(tmpldir)/$$f'"; \
+         rm -f "$(DESTDIR)$(tmpldir)/$$f"; \
+       done
+install-dist_xmlscriptsDATA: $(dist_xmlscripts_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(xmlscriptsdir)" || $(mkdir_p) "$(DESTDIR)$(xmlscriptsdir)"
+       @list='$(dist_xmlscripts_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(dist_xmlscriptsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmlscriptsdir)/$$f'"; \
+         $(dist_xmlscriptsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmlscriptsdir)/$$f"; \
+       done
+
+uninstall-dist_xmlscriptsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_xmlscripts_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(xmlscriptsdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(xmlscriptsdir)/$$f"; \
+       done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       mkdir $(distdir)
+       $(mkdir_p) $(distdir)/conftools $(distdir)/discovery $(distdir)/init.d $(distdir)/scripts $(distdir)/scripts/xml $(distdir)/setup_tools $(distdir)/setup_tools/Bundle $(distdir)/templates
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(mkdir_p) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+       -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r $(distdir)
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && cd $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+       $(am__remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+distuninstallcheck:
+       @cd $(distuninstallcheck_dir) \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(SCRIPTS) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(discoverydir)" "$(DESTDIR)$(scriptsdir)" "$(DESTDIR)$(tmpldir)" "$(DESTDIR)$(xmlscriptsdir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-data-local install-dist_discoveryDATA \
+       install-dist_scriptsDATA install-dist_tmplDATA \
+       install-dist_xmlscriptsDATA
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-dist_discoveryDATA uninstall-dist_scriptsDATA \
+       uninstall-dist_tmplDATA uninstall-dist_xmlscriptsDATA \
+       uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+       check-am clean clean-generic clean-recursive ctags \
+       ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \
+       dist-shar dist-tarZ dist-zip distcheck distclean \
+       distclean-generic distclean-recursive distclean-tags \
+       distcleancheck distdir distuninstallcheck dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-data-local install-dist_discoveryDATA \
+       install-dist_scriptsDATA install-dist_tmplDATA \
+       install-dist_xmlscriptsDATA install-exec install-exec-am \
+       install-info install-info-am install-man install-strip \
+       installcheck installcheck-am installdirs installdirs-am \
+       maintainer-clean maintainer-clean-generic \
+       maintainer-clean-recursive mostlyclean mostlyclean-generic \
+       mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am uninstall-dist_discoveryDATA \
+       uninstall-dist_scriptsDATA uninstall-dist_tmplDATA \
+       uninstall-dist_xmlscriptsDATA uninstall-info-am
+
+
+install-data-local:
+       @echo Testing if prefix has changed during make
+       test "$(prefix)" = "@prefix@"
+       $(mkvardir) $(DESTDIR)$(dbhome)
+       $(mkvardir) $(DESTDIR)$(cachedir)
+       $(mkvardir) $(DESTDIR)$(piddir)
+       $(mkvardir) $(DESTDIR)$(reportsdir)
+       $(mkvardir) $(DESTDIR)$(logdir)
+       $(mkvardir) $(DESTDIR)$(sesstordir)
+       $(mkvardir) $(DESTDIR)$(seslockdir)     
+       $(mkinstalldirs) $(DESTDIR)$(tmpluserdir)
+       $(mkinstalldirs) $(DESTDIR)$(plugtorruscfgdir)
+       $(mkinstalldirs) $(DESTDIR)$(plugdevdisccfgdir)
+       $(mkinstalldirs) $(DESTDIR)$(plugwrapperdir)
+
+htdocs:
+       cd doc; make htdocs
+       @for f in $(dist_mibs_DATA); do \
+         f2=$(HTMLDIR)/`basename $$f`; \
+         if test ! -f $$f2 -o $$f -nt $$f2; then \
+           echo "cp $$f $$f2"; \
+           cp $$f $$f2; \
+         fi; \
+       done
+
+upload: dist
+       scp $(distdir).tar.gz TODO $(UPLOADPATH)
+
+todoup:
+       scp TODO $(UPLOADPATH)
+
+dist-hook:
+       date >DIST_REVISION
+       cp DIST_REVISION $(distdir)/
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/torrus/NEWS b/torrus/NEWS
new file mode 100644 (file)
index 0000000..354397f
--- /dev/null
@@ -0,0 +1,320 @@
+24-OCT-2010: Torrus release 1.0.9
+
+It is recommended to re-run discovery and compilation immediately after
+upgrading from 1.0.8.
+
+In this release:
+
+-- WebUI handling is re-designed. FastCGI is supported with Apache
+   and Lighttpd. User authorization option has changed its name:
+   "$Torrus::CGI::authorizeUsers". Login page has now "remember me" checkbox.
+   Apache configuration statements for mod_perl have slightly changed.
+   Removed dependency: libapreq2 is no longer needed.
+
+-- New Perl module required by installer: JSON
+
+-- New discovery modules: Force10, NetBotz, Arista, ALU_Timetra, Foundry,
+   CasaCMTS, Jacarta.
+
+-- Support for semi-transparent lines and areas in multigraphs.
+
+-- Support for arbitrary names for subtrees and leaves (node-display-name
+   parameter). Now original interface names are displayed, without underscores.
+
+-- Monitor alarms are now preserved between config re-compilations. Also
+   dynamic tokenset members are preserved. A new utility:
+   "torrus flushmonitors" flushes old alarms.
+
+-- New parameter: nodeid. It is designed for easier integration of Torrus with
+   other OSS systems. See the "NodeID usage guidelines" document for more
+   details.
+
+-- Current SNMP failures are recorded in a database and displayed by
+   "torrus snmpfailures" utility. The output is in JSON format, so it's easy
+   to integrate into other alerting systems.
+
+-- RHEL compatibility: the old Init script did not stop the daemons properly
+   upon a system reboot.
+
+-- Compatibility with the newest version of Net::SNMP module.
+
+-- Host-based authentication: remote systems, such as customer self-care
+   portals, can retrieve graphs from Torrus WebUI.
+
+-- Performance optimizations: XML compiler runs 10-15% faster.
+
+-- Custom CSS styles must no longer reside in Torrus installation directory.
+
+
+
+
+26-APR-2010: Torrus release 1.0.8bf01
+
+Bugfix release. No new features or functionality.
+
+05-APR-2009: Torrus release 1.0.8
+
+Note: a complete re-compile of the XML is required after upgrading.
+
+In this release:
+
+-- BerkeleyDB stability has significantly improved due to new signal handlers.
+
+-- View parameters can be overridden with URL variables "Gstart",
+   "Gend" and so on.
+
+-- Collector initialization time is improved by shifting some work
+   to the XML compiler.
+
+-- New command-line utility: srvderive. It combines several serviceIDs into
+   a single report by calculating their sum or maximum value
+   (sponsored by nexellent ag, www.nexellent.ch)
+
+-- A number of bugfixes and minor imprvements.
+
+-- Added SNMP discovery support for Arbor E series and Liebert HVAC
+
+
+05-AUG-2008: Torrus release 1.0.7
+
+In this release:
+
+-- Added and improved vendor support for Symmetricom, Juniper JunOS,
+   Cisco SCE, 
+
+-- New discovery parameters, selectors and selector actions.
+
+-- Default value for "collector-timeoffset-step" increased from 30 to 60
+   seconds. 30 seconds is too short for many installations.
+
+-- Support for PostgreSQL in reports generator.
+
+-- Support for IPv6 in SNMP discovery and collector.
+
+-- New collector plugin: "tp-rawexport" for plaintext export of collector data.
+
+-- Cisco QoS monitoring plugin "tp-cisco-cbqos" upgraded to version 1.6.
+   It fixes an old bug in RRD file naming, thus all the QoS-related RRD files
+   would have to be renamed or started from scratch.
+
+-- Other minor enhancements and bugfixes (see ChangeLog for details).
+
+
+03-AUG-2007: Torrus release 1.0.6
+
+In this release:
+
+-- All the trees need to be recompiled after Torrus upgrade.
+
+-- Search capability. The nodes can be searched within a tree or globally.
+   The search database needs to be updated with "torrus buildsearchdb"
+   utility.
+
+-- GUI improvements. Recursive view is restricted and is not offered
+   averywhere. Bugfix for Mozilla browser compatibility: now the graph
+   images are clickable.
+
+-- devdiscover accepts multiple DDX files. Combined with multithreading,
+   this improves the discovery performance even further.
+
+-- SNMP collector periodically refreshes the table mappings. This helps
+   for modular routers with online insertion and removal: the collector
+   does not need to be restarted after the physical configuration changes.
+   Also the OIDs that return noSuchObject are excluded from polling
+   immediately.
+
+-- New MIBs support: Cisco SCE per-service traffic statistics; Cisco CAR
+   statistics; Cisco Ethernet MAC accounting statistics now available on
+   subinterfaces; JunOS per-CoS stats; support for Alteon hardware.
+
+-- <filepattern> XML statement is no longer supported. Use the rrddir2xml
+   utility instead.
+
+-- The CDEF collector from Chrstian Schnidrig is integrated in the main
+   distribution. Devdiscover supports traffic summaries for multiple
+   interfaces.
+
+-- The report generator can generate HTML in any tree. Earlier it was
+   generating the reports only for the trees where data was collected.
+   This improvement allows to split the collecting and viewing trees.
+
+-- The installer allows multithreading for Perl version 5.8.8 or higher only.
+   Earlier versions are known for memory leaks in multithreaded operation.
+
+-- Multiple collector instances per tree. This improves the CPU utilization
+   for multi-CPU servers. See the torrus_collector manpage.
+
+
+
+25-JAN-2007: Torrus release 1.0.5
+
+This is a major release with many new features.
+
+In this release:
+
+-- Bugfixes in SNMPv3 support
+
+-- Perl multithreading. If threads are supported by local Perl,
+   Devdiscover can perform parallel discoveries per output file.
+   Also the Collector runs a background thread for RRD updates.
+
+-- Improvement in SNMP collector initialization. Now the collector expands
+   the interface names and other maps asynchronously, which dramatically
+   reduces the initialization time for large installations.
+   Cisco QoS plugin needs an upgrade to version 1.4 or higher.
+
+-- New vendor support in SNMP discovery engine:
+   Motorola BSR CMTS (ex-Riverdelta), Cisco SCE, BGP prefix statistics for
+   Cisco IOS routers, Cisco IOS XR support.
+
+-- DOCSIS upstream statistics have changed the format, therefore
+   the old stats will be lost after upgrade. The stats now include the
+   US Frequency graphs.
+
+-- Interface statistics now contain "All Errors" tab with all error graphs
+   in one page.
+
+-- Interface traffic graphs may contain bandwidth utilization percentage
+   information (see RFC2863_IF_MIB::bandwidth-usage in SNMP Discovery
+   Guide).
+
+-- Cisco MAC accounting can also be used for billing reports.
+
+
+20-JUL-2006: Torrus release 1.0.4
+
+This is a major release with many new features.
+
+In this release:
+
+-- SNMP Version 3 support in Devdiscover and SNMP collector.
+
+-- Usage reports for billing. Including 95% percentile reports.
+   More details at http://torrus.org/reporting_setup.pod.html
+
+-- Various improvements in SNMP discovery engine and new equipment
+   vendor support
+
+-- Improved monitor notifications. New parameter: "severity"
+   and new action "action_notify".
+
+-- New torrus-siteconfig.pl variables to improve WebUI customization
+
+
+
+02-AUG-2005: Torrus release 1.0.3
+
+This is a minor bugfix release. Unreachable device handling is improved, and
+also there's a possibility to specify extra Perl library path in ./configure
+
+
+27-JUL-2005: Torrus release 1.0.2
+
+The new release requires one additional Perl module to be
+installed: Date::Parse. You can install it from CPAN by using the command:
+  perl -MCPAN -e 'install Date::Parse'
+
+In this release:
+
+-- Unreachable SNMP devices handling has significantly improved.
+   The default unreachable timeout is set to 6 hours.
+
+-- Support for the new mod_perl 2.0 layout.
+
+-- New OID in TORRUS-MIB: torrusMonitorDesc, for easier processing of
+   SNMP traps.
+
+-- ./configure checks if the user "torrus" exists in the system
+
+-- New SNMP discovery parameters:
+   RFC2863_IF_MIB::only-interfaces
+   disable-snmpcollector
+
+-- On the graph page, it is now possible to choose the date for displaying
+   old statistics.
+
+-- The Cisco CPUs are now managed by devdiscover's selectors.
+   This allows you to add monitors to specific CPU graphs, and also add them
+   to a tokenset.
+
+
+21-JUN-2005: Torrus release 1.0.1
+
+In this release:
+
+-- SNMP errors are now handled better. See the User guide for more details.
+
+-- New command line option for monitor: --delay. The init script
+   launches the monitor with 20 minutes delay, to allow the collector
+   update RRD files before monitoring them.
+
+-- New devdiscover option: --fallback. It is useful in large production
+   environments when it's important to have a device in the web interface
+   even if it's turned off
+
+-- Cisco DOCSIS templates now include Total, Active, and Registered
+   modem quantities. RRD file structure has changed, so the graphs will
+   start anew.
+
+-- The meaning of $Torrus::Renderer::stylingProfileOverlay
+   has changed: now it refers to a file name.
+
+
+10-JUN-2005: Torrus release 1.0.0
+
+In this release, compared to RRFW release 0.1.8:
+
+-- New directory structure, with local configuration completely separated
+   from the distribution files
+
+-- Comand-line wrapper "torrus" for executing all commands, with short aliases
+   ("dd" for "devdiscover" etc.)
+
+-- Plugins may be easily added to existing installation
+
+-- Relative file names in DDX files searched in the right directories
+
+-- Discovery object selectors: the new way to customize the discovery results
+
+-- New discovery modules:
+   AxxessIT.pm: Cisco ONS 15300 SDH switches
+   CiscoIOS_Docsis.pm: Cisco IOS DOCSIS specifics: upstream utilization and
+     modem quantities
+   BetterNetworks.pm: BetterNetworks EthernetBox sensors (temperature, humidity
+     and so on)
+   CiscoIOS_MacAccounting.pm: Automated discovery for Cisco MAC accounting.
+     If applicable, MAC peers are associated with BGP peers.
+
+-- Discovery modules improvements:
+     IF-MIB indexing hints for unknown devices
+     Docsis downstream utilization
+     Selector actions for IF-MIB, Docsis, and temperature sensor objects
+     Line cards and modules memory stats for modular Ciscso routers     
+
+-- Improved performance of monitor daemon
+
+-- extended example of DOCSIS monitors and 3-level alarms in
+   xmlconfig/examples/docsis-monitors.xml
+
+-- Renderer module improved for multi-CPU servers
+
+-- Web interface improvements:
+     Recursive directory view,
+     Monitor names and comments diaplayed,
+     Sizes of tokensets displayed
+     Multiple overviews possible for a subtree
+
+-- SO_RCVBUF is set explicitly in SNMP collector to sustain bursts of traffic
+
+-- RRD files automatically moved in case of conflicts
+
+-- ttproclist: the new utility for automating the DDX files generation
+
+-- action_snmptrap now sends an optional severity parameter
+
+-- New option for devdiscover: --forcebundle to write the bundle file
+   even if errors occur
+
+-- The init script is configurable by a separate configuration file.
+   It also launches the monitors with 20 minutes delay if monitors
+   are launched together with collectors
diff --git a/torrus/README b/torrus/README
new file mode 100644 (file)
index 0000000..ee9a2d6
--- /dev/null
@@ -0,0 +1,10 @@
+Round Robin Database Framework
+
+    http://sourceforge.net/projects/torrus
+    http://torrus.org
+
+For installation instructions, see doc/install.txt or convert doc/install.pod
+into a format of your preference.
+
+
+(C) 2002-2005, Stanislav Sinyagin <ssinyagin@yahoo.com>
diff --git a/torrus/TODO b/torrus/TODO
new file mode 100644 (file)
index 0000000..e5f7b10
--- /dev/null
@@ -0,0 +1,161 @@
+Round Robin Database Framework
+  
+To do now:
+
+-- index the parameters during compilation and add search function to UI
+-- Update User Guide
+-- Persistent maps in snmp collector
+-- Multithreading in collector
+-- Additive list parameters
+-- New security model (access control within a tree)
+-- New WebUI model
+-- take the CF for graphing from view definition
+-- implement new RPN functions: SORT, REV, TREND
+-- Display docsIfDownstreamChannelTable docsIfUpstreamChannelTable in
+   DOCSIS chanel legends
+-- validate %Torrus::SQL::connections
+-- periodically refresh SNMP collector mappings
+-- Modular structure in Monitor, with pluggable actions
+-- in Monitor::run_event_exec, distinguish between monitor target and
+   action target
+-- document selectors internals
+-- fix the bug in recursive $def expansion
+-- Move expandable parameters from ConfigTree.pm to XML config
+-- dispersed timeoffsets for monitor
+-- use Parallel::ForkManager in devdiscover
+-- Set the daemon's log level by signal
+-- Selector for Cisco CPU and memory buffer monitoring
+-- Option to expand directory view by default
+-- Traceroute plugin (Gustavo Torres)
+-- CDef Collector plugin (Christian Schnidrig)
+-- Optionally show Admin info when authentication disabled
+-- RRD Renderer to take CF from the view definition
+-- Do we need a separate directory for user-defined styling?
+-- Startup script that verifies database consistency at server boot
+-- Collector that reports the BerkeleyDB stats
+-- Sysedge ntregperf discovery optimization (Shawn)
+-- Check RRD DS name length limit (19 bytes) and variable name limit (29 bytes)
+-- Better handling of SNMP timeouts in devdiscover
+-- MS-SQL SNMP support? (Shawn)
+-- Discovery profiles (router, server, etc.) to limit the number of probes
+-- Per-tree styling profiles (CSS, color schemas, company name and URL)
+-- Describe IF-MIB discovery internals in doc/devdoc/devdiscover.pod
+-- New utility to verify the installation files consistency (see below)
+-- rrd-create-max for interface counters tunable in vendor modules
+-- Backup snapshot of dynamic data (monitor status etc.)
+-- Relative path in alias definition
+-- "Remember me" login screen option
+-- Graph colouring by monitor action
+-- Session history display
+-- Track changes of XML configurations (XML::Diff, cvs-alike?)
+-- Translate parameters in monitor comments
+-- Show maximum value in the graph image comments
+
+Design work to do:
+
+-- Design draft for custom indexing and quering
+-- Develop a Concept of 95th percentile monthly reports
+-- Reports generation (monthly, weekly etc.)
+-- Write working draft for "collector-copy" datasource type
+
+To do before Release 1.0.1:
+
+-- Implement monitor escalation (devdoc/wd.monitor-escalation.pod)
+-- BUG: template may add children to a leaf
+-- Add more documentation to the existing XML
+-- Document HTML templates
+-- Web interface for ACL editing
+-- Date selector in Web interface
+-- CSV data export (new Renderer type)
+-- Syslog logging
+
+To do someday:
+
+-- Finish and test "RFC2662_ADSL_LINE" and "Paradyne" devdiscover modules
+-- Backplane performance for Catalyst switches
+-- VoIP dial peer statistics
+-- Gradual highlighting for subtree listings
+-- Tools for RRD files manipulation (adding/deleting DSes etc.)
+-- Service uptime monitoring and reporting (devdoc/wd.uptime-mon.pod)
+-- Distributed collector (devdoc/wd.distributed.pod)
+-- Log files wraparound
+-- Packaging for major OSes: RedHat, Debian, FreeBSD, Solaris, MacOS X (?)
+-- rrdtool-1.1 font option (only after rrdtool 1.1.x is released)
+-- navigation links to represent the network topology
+-- Messaging (devdoc/wd.messaging.pod)
+-- Tighter integration with OpenNMS and probably other systems
+-- Several obscurity levels instead of hidden=yes/no
+
+
+(C) 2002-2004, Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+$Id: TODO,v 1.1 2010-12-27 00:03:35 ivan Exp $
+
+==========================================================================
+
+CC: rrfw-devel@lists.sourceforge.net, "Shawn Ferry" <sferry@sevenspace.com> 
+From: "Shawn Ferry" <sferry@sevenspace.com>
+Subject: Re: [rrfw-devel] health check 
+Date: Mon, 15 Dec 2003 10:08:35 -0500 
+To: "Stanislav Sinyagin" <ssinyagin@yahoo.com> 
+      
+On Dec 15, 2003, at 9:56 AM, Stanislav Sinyagin wrote:
+
+> 'Morning Shawn,
+>
+> --- Shawn Ferry <sferry@sevenspace.com> wrote:
+>>> It might be also that this installation uses old version of
+>>> RRFW::Collector::SNMP,
+>>> or some buggy version of Net::SNMP.
+>>
+>> Something like that...When I installed 1.5d I did not stop and
+>> restart the collector. It is much happier now.
+>>
+>> Can you check at each initialization that the versions of all
+>> the supporting files is up to date? or maybe stash the modify time
+>> of files that are loaded and check.
+>>
+>> Not an issue just a thought to try and prevent
+>> other people from having the same silly problem.
+>
+> good idea. But I can check the files on disk only, it's not possible
+> (not easy) to check if the running process is up to date.
+>
+> bin/configinfo already prints some versions information.
+>
+> Let's say, an utility called "bin/checkfiles", would do the following:
+>
+> -- for files that are simply copied by make install: verify md5 sum 
+> against that in distribution
+>
+> -- for files that are modified by make install: 
+> verify md5 sum against that calculated during make install
+>
+> -- optionally store and verify md5 sums of user files in 
+> share/rrfw/discovery and share/rrfw/xmlconfig, as well as 
+> *-siteconfig.pl
+>
+> Does someone know if there's already something alike in other software?
+
+Similar functionality exists in cfengine, but I don't think it is 
+applicable in this case.
+Also tripwire.
+
+I am not so worried about knowing if the loaded version is up to date 
+based on a
+stored version string.  Although that was my original thought.
+
+I was thinking that the functionality of the "checkfiles" utility could 
+just be as you
+suggest an md5 sum.  Also, that md5 sum could be stored at 
+initialization for the libraries
+used in any long running process. The next initialization after a 
+compile could verify
+that the on disk sums have not changed.  Possibly to reload, alert or 
+something.
+
+Shawn
+
+==========================================================================
+
diff --git a/torrus/aclocal.m4 b/torrus/aclocal.m4
new file mode 100644 (file)
index 0000000..7a634b5
--- /dev/null
@@ -0,0 +1,574 @@
+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+        [AM_AUTOMAKE_VERSION([1.9.6])])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 7
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.58])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+#
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake.  There are at least two reasons why we must not
+# use `-m 0755':
+#   - it causes special bits like SGID to be ignored,
+#   - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out.  Consequently we
+# restrict ourselves to GNU make (using the --version option ensures
+# this.)
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # We used to keeping the `.' as first argument, in order to
+  # allow $(mkdir_p) to be used without argument.  As in
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.  However this is wrong
+  # for two reasons:
+  #  1. if the package is installed by a user who cannot write `.'
+  #     make install will fail,
+  #  2. the above comment should most certainly read
+  #     $(mkdir_p) $(DESTDIR)$(somedir)
+  #     so it does not work when $(somedir) is undefined and
+  #     $(DESTDIR) is not.
+  #  To support the latter case, we have to write
+  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+  #  so the `.' trick is pointless.
+  mkdir_p='mkdir -p --'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/torrus/bin/Makefile.am b/torrus/bin/Makefile.am
new file mode 100644 (file)
index 0000000..b6abf74
--- /dev/null
@@ -0,0 +1,177 @@
+
+#  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: Makefile.am,v 1.1 2010-12-27 00:04:01 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+#
+
+SUBST = @abs_top_builddir@/setup_tools/substvars.sh
+
+pkgbindir = @pkgbindir@
+pkgbin_SCRIPTS = \
+       acledit                 \
+       action_notify           \
+       action_printemail       \
+       action_snmptrap         \
+       action_snmpv1trap       \
+       bdbinfo                 \
+       buildsearchdb           \
+       cleanup                 \
+       clearcache              \
+       collector               \
+       compilexml              \
+       configinfo              \
+       configsnapshot          \
+       devdiscover             \
+       flushmonitors           \
+       genddx                  \
+       genlist                 \
+       genreport               \
+       install_plugin          \
+       monitor                 \
+       nodeid                  \
+       rrddir2xml              \
+       schedulerinfo           \
+       snmpfailures            \
+       srvderive               \
+       torrus.fcgi             \
+       ttproclist
+
+wrapperdir = @wrapperdir@
+wrapper_SCRIPTS = \
+       torrus
+
+CLEANFILES = $(pkgbin_SCRIPTS) $(wrapper_SCRIPTS)
+
+EXTRA_DIST = \
+       acledit.in              \
+       action_notify.in        \
+       action_printemail.in    \
+       action_snmptrap.in      \
+       action_snmpv1trap.in    \
+       bdbinfo.in              \
+       buildsearchdb.in        \
+       clearcache.in           \
+       cleanup.in              \
+       collector.in            \
+       compilexml.in           \
+       configinfo.in           \
+       configsnapshot.in       \
+       devdiscover.in          \
+       flushmonitors.in        \
+       genddx.in               \
+       genlist.in              \
+       genreport.in            \
+       install_plugin.in       \
+       monitor.in              \
+       nodeid.in               \
+       rrddir2xml.in           \
+       schedulerinfo.in        \
+       snmpfailures.in         \
+       srvderive.in            \
+       torrus.fcgi.in          \
+       torrus.in               \
+       ttproclist.in
+
+
+# Result of:
+# ls -1 | egrep '^[a-z][^.]+$' | \
+# awk '{printf "%s: %s.in\n\t$(SUBST) %s.in > %s\n\n", $1, $1, $1, $1}'
+
+acledit: acledit.in
+       $(SUBST) acledit.in > acledit
+
+action_printemail: action_printemail.in
+       $(SUBST) action_printemail.in > action_printemail
+
+action_notify: action_notify.in
+       $(SUBST) action_notify.in > action_notify
+
+action_snmptrap: action_snmptrap.in
+       $(SUBST) action_snmptrap.in > action_snmptrap
+
+action_snmpv1trap: action_snmpv1trap.in
+       $(SUBST) action_snmpv1trap.in > action_snmpv1trap
+
+buildsearchdb: buildsearchdb.in
+       $(SUBST) buildsearchdb.in > buildsearchdb
+
+bdbinfo: bdbinfo.in
+       $(SUBST) bdbinfo.in > bdbinfo
+
+cleanup: cleanup.in
+       $(SUBST) cleanup.in > cleanup
+
+clearcache: clearcache.in
+       $(SUBST) clearcache.in > clearcache
+
+collector: collector.in
+       $(SUBST) collector.in > collector
+
+compilexml: compilexml.in
+       $(SUBST) compilexml.in > compilexml
+
+configinfo: configinfo.in
+       $(SUBST) configinfo.in > configinfo
+
+configsnapshot: configsnapshot.in
+       $(SUBST) configsnapshot.in > configsnapshot
+
+devdiscover: devdiscover.in
+       $(SUBST) devdiscover.in > devdiscover
+
+flushmonitors: flushmonitors.in
+       $(SUBST) flushmonitors.in > flushmonitors
+
+genddx: genddx.in
+       $(SUBST) genddx.in > genddx
+
+genlist: genlist.in
+       $(SUBST) genlist.in > genlist
+
+genreport: genreport.in
+       $(SUBST) genreport.in > genreport
+
+install_plugin: install_plugin.in
+       $(SUBST) install_plugin.in > install_plugin
+
+monitor: monitor.in
+       $(SUBST) monitor.in > monitor
+
+nodeid: nodeid.in
+       $(SUBST) nodeid.in > nodeid
+
+rrddir2xml: rrddir2xml.in
+       $(SUBST) rrddir2xml.in > rrddir2xml
+
+schedulerinfo: schedulerinfo.in
+       $(SUBST) schedulerinfo.in > schedulerinfo
+
+snmpfailures: snmpfailures.in
+       $(SUBST) snmpfailures.in > snmpfailures
+
+srvderive: srvderive.in
+       $(SUBST) srvderive.in > srvderive
+
+torrus: torrus.in
+       $(SUBST) torrus.in > torrus
+
+torrus.fcgi: torrus.fcgi.in
+       $(SUBST) torrus.fcgi.in > torrus.fcgi
+
+ttproclist: ttproclist.in
+       $(SUBST) ttproclist.in > ttproclist
diff --git a/torrus/bin/Makefile.in b/torrus/bin/Makefile.in
new file mode 100644 (file)
index 0000000..fb4aa2b
--- /dev/null
@@ -0,0 +1,538 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#  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: Makefile.in,v 1.1 2010-12-27 00:04:01 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+#
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = bin
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(pkgbindir)" "$(DESTDIR)$(wrapperdir)"
+pkgbinSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+wrapperSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(pkgbin_SCRIPTS) $(wrapper_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+FIND = @FIND@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KILL = @KILL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERLINC = @PERLINC@
+POD2MAN = @POD2MAN@
+POD2MAN_PRESENT_FALSE = @POD2MAN_PRESENT_FALSE@
+POD2MAN_PRESENT_TRUE = @POD2MAN_PRESENT_TRUE@
+POD2TEXT = @POD2TEXT@
+POD2TEXT_PRESENT_FALSE = @POD2TEXT_PRESENT_FALSE@
+POD2TEXT_PRESENT_TRUE = @POD2TEXT_PRESENT_TRUE@
+RM = @RM@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLEEP = @SLEEP@
+STRIP = @STRIP@
+SU = @SU@
+VERSION = @VERSION@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+cachedir = @cachedir@
+cfgdefdir = @cfgdefdir@
+datadir = @datadir@
+dbhome = @dbhome@
+defrrddir = @defrrddir@
+distxmldir = @distxmldir@
+enable_pkgonly = @enable_pkgonly@
+enable_varperm = @enable_varperm@
+exec_prefix = @exec_prefix@
+exmpdir = @exmpdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mansec_misc = @mansec_misc@
+mansec_usercmd = @mansec_usercmd@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+perlithreads = @perlithreads@
+perllibdir = @perllibdir@
+perllibdirs = @perllibdirs@
+piddir = @piddir@
+pkgbindir = @pkgbindir@
+pkgdocdir = @pkgdocdir@
+pkghome = @pkghome@
+plugdevdisccfgdir = @plugdevdisccfgdir@
+pluginsdir = @pluginsdir@
+plugtorruscfgdir = @plugtorruscfgdir@
+plugwrapperdir = @plugwrapperdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+reportsdir = @reportsdir@
+sbindir = @sbindir@
+scriptsdir = @scriptsdir@
+seslockdir = @seslockdir@
+sesstordir = @sesstordir@
+sharedstatedir = @sharedstatedir@
+siteconfdir = @siteconfdir@
+sitedir = @sitedir@
+sitexmldir = @sitexmldir@
+supdir = @supdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+tmpldir = @tmpldir@
+tmpluserdir = @tmpluserdir@
+torrus_user = @torrus_user@
+var_group = @var_group@
+var_mode = @var_mode@
+var_user = @var_user@
+varprefix = @varprefix@
+webplaindir = @webplaindir@
+webscriptsdir = @webscriptsdir@
+wrapperdir = @wrapperdir@
+SUBST = @abs_top_builddir@/setup_tools/substvars.sh
+pkgbin_SCRIPTS = \
+       acledit                 \
+       action_notify           \
+       action_printemail       \
+       action_snmptrap         \
+       action_snmpv1trap       \
+       bdbinfo                 \
+       buildsearchdb           \
+       cleanup                 \
+       clearcache              \
+       collector               \
+       compilexml              \
+       configinfo              \
+       configsnapshot          \
+       devdiscover             \
+       flushmonitors           \
+       genddx                  \
+       genlist                 \
+       genreport               \
+       install_plugin          \
+       monitor                 \
+       nodeid                  \
+       rrddir2xml              \
+       schedulerinfo           \
+       snmpfailures            \
+       srvderive               \
+       torrus.fcgi             \
+       ttproclist
+
+wrapper_SCRIPTS = \
+       torrus
+
+CLEANFILES = $(pkgbin_SCRIPTS) $(wrapper_SCRIPTS)
+EXTRA_DIST = \
+       acledit.in              \
+       action_notify.in        \
+       action_printemail.in    \
+       action_snmptrap.in      \
+       action_snmpv1trap.in    \
+       bdbinfo.in              \
+       buildsearchdb.in        \
+       clearcache.in           \
+       cleanup.in              \
+       collector.in            \
+       compilexml.in           \
+       configinfo.in           \
+       configsnapshot.in       \
+       devdiscover.in          \
+       flushmonitors.in        \
+       genddx.in               \
+       genlist.in              \
+       genreport.in            \
+       install_plugin.in       \
+       monitor.in              \
+       nodeid.in               \
+       rrddir2xml.in           \
+       schedulerinfo.in        \
+       snmpfailures.in         \
+       srvderive.in            \
+       torrus.fcgi.in          \
+       torrus.in               \
+       ttproclist.in
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  bin/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  bin/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-pkgbinSCRIPTS: $(pkgbin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(pkgbindir)" || $(mkdir_p) "$(DESTDIR)$(pkgbindir)"
+       @list='$(pkgbin_SCRIPTS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f $$d$$p; then \
+           f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+           echo " $(pkgbinSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgbindir)/$$f'"; \
+           $(pkgbinSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgbindir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-pkgbinSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pkgbin_SCRIPTS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+         echo " rm -f '$(DESTDIR)$(pkgbindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pkgbindir)/$$f"; \
+       done
+install-wrapperSCRIPTS: $(wrapper_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(wrapperdir)" || $(mkdir_p) "$(DESTDIR)$(wrapperdir)"
+       @list='$(wrapper_SCRIPTS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f $$d$$p; then \
+           f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+           echo " $(wrapperSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(wrapperdir)/$$f'"; \
+           $(wrapperSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(wrapperdir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-wrapperSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(wrapper_SCRIPTS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+         echo " rm -f '$(DESTDIR)$(wrapperdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(wrapperdir)/$$f"; \
+       done
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+       for dir in "$(DESTDIR)$(pkgbindir)" "$(DESTDIR)$(wrapperdir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgbinSCRIPTS install-wrapperSCRIPTS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-pkgbinSCRIPTS \
+       uninstall-wrapperSCRIPTS
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-exec \
+       install-exec-am install-info install-info-am install-man \
+       install-pkgbinSCRIPTS install-strip install-wrapperSCRIPTS \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+       pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \
+       uninstall-pkgbinSCRIPTS uninstall-wrapperSCRIPTS
+
+
+# Result of:
+# ls -1 | egrep '^[a-z][^.]+$' | \
+# awk '{printf "%s: %s.in\n\t$(SUBST) %s.in > %s\n\n", $1, $1, $1, $1}'
+
+acledit: acledit.in
+       $(SUBST) acledit.in > acledit
+
+action_printemail: action_printemail.in
+       $(SUBST) action_printemail.in > action_printemail
+
+action_notify: action_notify.in
+       $(SUBST) action_notify.in > action_notify
+
+action_snmptrap: action_snmptrap.in
+       $(SUBST) action_snmptrap.in > action_snmptrap
+
+action_snmpv1trap: action_snmpv1trap.in
+       $(SUBST) action_snmpv1trap.in > action_snmpv1trap
+
+buildsearchdb: buildsearchdb.in
+       $(SUBST) buildsearchdb.in > buildsearchdb
+
+bdbinfo: bdbinfo.in
+       $(SUBST) bdbinfo.in > bdbinfo
+
+cleanup: cleanup.in
+       $(SUBST) cleanup.in > cleanup
+
+clearcache: clearcache.in
+       $(SUBST) clearcache.in > clearcache
+
+collector: collector.in
+       $(SUBST) collector.in > collector
+
+compilexml: compilexml.in
+       $(SUBST) compilexml.in > compilexml
+
+configinfo: configinfo.in
+       $(SUBST) configinfo.in > configinfo
+
+configsnapshot: configsnapshot.in
+       $(SUBST) configsnapshot.in > configsnapshot
+
+devdiscover: devdiscover.in
+       $(SUBST) devdiscover.in > devdiscover
+
+flushmonitors: flushmonitors.in
+       $(SUBST) flushmonitors.in > flushmonitors
+
+genddx: genddx.in
+       $(SUBST) genddx.in > genddx
+
+genlist: genlist.in
+       $(SUBST) genlist.in > genlist
+
+genreport: genreport.in
+       $(SUBST) genreport.in > genreport
+
+install_plugin: install_plugin.in
+       $(SUBST) install_plugin.in > install_plugin
+
+monitor: monitor.in
+       $(SUBST) monitor.in > monitor
+
+nodeid: nodeid.in
+       $(SUBST) nodeid.in > nodeid
+
+rrddir2xml: rrddir2xml.in
+       $(SUBST) rrddir2xml.in > rrddir2xml
+
+schedulerinfo: schedulerinfo.in
+       $(SUBST) schedulerinfo.in > schedulerinfo
+
+snmpfailures: snmpfailures.in
+       $(SUBST) snmpfailures.in > snmpfailures
+
+srvderive: srvderive.in
+       $(SUBST) srvderive.in > srvderive
+
+torrus: torrus.in
+       $(SUBST) torrus.in > torrus
+
+torrus.fcgi: torrus.fcgi.in
+       $(SUBST) torrus.fcgi.in > torrus.fcgi
+
+ttproclist: ttproclist.in
+       $(SUBST) ttproclist.in > ttproclist
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/torrus/bin/acledit.in b/torrus/bin/acledit.in
new file mode 100644 (file)
index 0000000..725d3b5
--- /dev/null
@@ -0,0 +1,432 @@
+#!@PERL@
+#  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: acledit.in,v 1.1 2010-12-27 00:04:01 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+BEGIN { require '@torrus_config_pl@'; }
+
+use strict;
+use Getopt::Long;
+
+use Torrus::Log;
+use Torrus::ACL::Edit;
+use Torrus::SiteConfig;
+
+exit(1) if not Torrus::SiteConfig::verify();
+
+our %knownPrivileges =
+    ( 'DisplayTree' => 'tree',
+      'DisplayAdmInfo' => 'tree',
+      'DisplayReports' => 'tree',
+      'GlobalSearch' => 'global' );
+
+our @addgroups;
+our @delgroups;
+our @modgroups;
+
+our @permitprivs;
+our @denyprivs;
+our @forobjects;
+
+our $adduser;
+our $addhost;
+our $deluser;
+our $moduser;
+our @addtogroups;
+our @delfromgroups;
+our $password;
+our $host_password;
+our $commonname;
+our $exportfile;
+our $exporttemplate = "aclexport.xml";
+our $importfile;
+our $clearconf;
+
+our @showgroups;
+our @showusers;
+our $listall;
+
+our $force;
+our $debug;
+our $verbose;
+our $help_needed;
+
+my $ok = GetOptions ('addgroup=s'     => \@addgroups,
+                     'delgroup=s'     => \@delgroups,
+                     'modgroup=s'     => \@modgroups,
+                     'permit=s'       => \@permitprivs,
+                     'deny=s'         => \@denyprivs,
+                     'for=s'          => \@forobjects,
+                     'adduser=s'      => \$adduser,
+                     'addhost=s'      => \$addhost,
+                     'deluser=s'      => \$deluser,
+                     'moduser=s'      => \$moduser,
+                     'addtogroup=s'   => \@addtogroups,
+                     'delfromgroup=s' => \@delfromgroups,
+                     'password=s'     => \$password,
+                     'hostpassword=s' => \$host_password,
+                     'cn=s'           => \$commonname,
+                     'export=s'       => \$exportfile,
+                     'template=s'     => \$exporttemplate,
+                     'import=s'       => \$importfile,
+                     'clear'          => \$clearconf,
+                     'showgroup=s'    => \@showgroups,
+                     'showuser=s'     => \@showusers,
+                     'list'           => \$listall,
+                     'force'          => \$force,
+                     'debug'    => \$debug,
+                     'verbose'  => \$verbose,
+                     'help'     => \$help_needed);
+
+if( not $ok or $help_needed or scalar(@ARGV) > 0 or
+    ( @addgroups ? 1:0 ) + ( @delgroups ? 1:0 ) + ( @modgroups ? 1:0 ) > 1 or
+    ( ( @permitprivs or @denyprivs ) and not @forobjects ) or
+    ( $adduser ? 1:0 ) + ( $deluser ? 1:0 ) + ( $moduser ? 1:0 ) > 1 or
+    ( ( @addtogroups or @delfromgroups or
+        length($password) > 0 or
+        length($host_password) > 0 or
+        length($commonname) > 0 ) and
+      ( length($adduser) + length($addhost) + length($moduser) == 0 ) ) )
+{
+    print STDERR "Usage: $0 [options...]\n",
+    "Group Options:\n",
+    "  --addgroup=GROUP        add group\n",
+    "  --delgroup=GROUP        delete group\n",
+    "  --modgroup=GROUP        modify group\n",
+    "  --permit=PRIVILEGE      add privilege to group(s)\n",
+    "  --deny=PRIVILEGE        revoke privilege from group(s)\n",
+    "  --for=TREE              subject of privilege or '*'\n",
+    "  --force                 change privilege for non-existent object\n",
+    "  --showgroup=GROUP       display group details\n",
+    "User Options:\n",
+    "  --adduser=UID           add new user\n",
+    "  --deluser=UID           delete user\n",
+    "  --moduser=UID           modify user\n",
+    "  --addtogroup=GROUP      add user to group(s)\n",
+    "  --delfromgroup=GROUP    delete user from group(s)\n",
+    "  --password=PASSWORD     set the user password\n",
+    "  --hostpassword=PASSWORD set the host password (UID must be a host)\n",
+    "  --cn=\"John Smith\"       set the user common name\n",
+    "  --showuser=USER         display user details\n",
+    "General Options:\n",
+    "  --export=FILE           export ACL config to a file\n",
+    "  --template=NAME         [aclexport.xml] export template \n",
+    "  --import=FILE           import ACL config from a file\n",
+    "  --clear                 delete ALL user and privileges configuration\n",
+    "  --list                  list all users and groups they belong to\n",
+    "  --debug                 set the log level to debug\n",
+    "  --verbose               set the log level to verbose\n",
+    "  --help                  this help message\n\n",
+    "Privileges:\n",
+    "  DisplayTree             see the datasources for a tree\n",
+    "  DisplayAdmInfo          see the administrative info for a tree\n",
+    "  DisplayReports          see the administrative info for a tree\n",
+    "  GlobalSearch            search globally for '*'\n";
+    exit 1;
+}
+
+if( $debug )
+{
+    Torrus::Log::setLevel('debug');
+}
+elsif( $verbose )
+{
+    Torrus::Log::setLevel('verbose');
+}
+
+# We set the signal handlers, but we actually don't react on
+# signals, because the acledit is a fast utility
+&Torrus::DB::setSafeSignalHandlers();
+
+Verbose(sprintf("Torrus version %s", '@VERSION@'));
+
+my $aclEdit = new Torrus::ACL::Edit;
+
+if( $ok and $exportfile )
+{
+    $ok = $aclEdit->exportACL( $exportfile, $exporttemplate ) ? $ok:0;
+}
+
+if( $ok and $clearconf )
+{
+    $ok = $aclEdit->clearConfig() ? $ok:0;
+}
+
+if( @delgroups )
+{
+    $ok = $aclEdit->deleteGroups( @delgroups ) ? $ok:0;
+}
+
+if( @addgroups )
+{
+    $ok = $aclEdit->addGroups( @addgroups ) ? $ok:0;
+}
+
+if( @addgroups or @modgroups )
+{
+    my $groups = [ @addgroups, @modgroups ];
+    if( @permitprivs )
+    {
+        $ok = setupPrivileges( $aclEdit, \@permitprivs,
+                               $groups, \@forobjects, 1 ) ? $ok:0;
+    }
+    if( @denyprivs )
+    {
+        $ok = setupPrivileges( $aclEdit, \@denyprivs,
+                               $groups, \@forobjects, 0 ) ? $ok:0;
+    }
+}
+
+
+my $attrValues = {};
+my $uid;
+
+if( $commonname )
+{
+    $attrValues->{'cn'} = $commonname;
+}
+
+if( $adduser )
+{
+    $uid = $adduser;
+    $ok = $aclEdit->addUser( $uid, $attrValues ) ? $ok:0;
+}
+elsif( $addhost )
+{
+    $uid = $addhost;
+    $uid =~ s/\W/_/g;
+    $ok = $aclEdit->addUser( $uid, $attrValues ) ? $ok:0;
+}
+
+elsif( $moduser )
+{
+    $uid = $moduser;
+    if( scalar( keys %{$attrValues} ) )
+    {
+        $ok = $aclEdit->setUserAttributes( $uid, $attrValues ) ? $ok:0;
+    }
+}
+elsif( $deluser )
+{
+    $ok = $aclEdit->deleteUser( $deluser ) ? $ok:0;
+}
+
+if( $uid )
+{
+    if( $password )
+    {
+        $ok = $aclEdit->setPassword( $uid, $password ) ? $ok:0;
+    }
+    elsif( $host_password )
+    {
+        $ok = $aclEdit->setPassword( $uid,
+                                     $uid . '//' . $host_password ) ? $ok:0;
+    }
+}
+
+if( $uid and scalar( @addtogroups ) )
+{
+    $ok = $aclEdit->addUserToGroups( $uid, @addtogroups ) ? $ok:0;
+}
+
+if( $uid and scalar( @delfromgroups ) )
+{
+    $ok = $aclEdit->delUserFromGroups( $uid, @delfromgroups ) ? $ok:0;
+}
+
+if( $ok and $importfile )
+{
+    $ok = $aclEdit->importACL( $importfile ) ? $ok:0;
+}
+
+if( $listall )
+{
+    @showusers = $aclEdit->listUsers();
+    @showgroups = $aclEdit->listGroups();
+}
+
+my %showGroupsHash;
+
+if( @showgroups )
+{
+    foreach my $group ( @showgroups )
+    {
+        if( $aclEdit->groupExists( $group ) )
+        {
+            $showGroupsHash{$group} = 1;
+        }
+        else
+        {
+            Error('No such group: ' . $group); $ok = 0;
+        }
+    }
+}
+
+if( @showusers )
+{
+    foreach my $uid ( sort @showusers )
+    {
+        if( $aclEdit->userExists( $uid ) )
+        {
+            printf("User: %s (%s)\n",
+                   $uid, $aclEdit->userAttribute( $uid, 'cn' ) );
+            foreach my $group ( sort $aclEdit->memberOf( $uid ) )
+            {
+                printf("Member of: %s\n", $group);
+                $showGroupsHash{$group} = 1;
+            }
+
+            if( $verbose or $debug )
+            {
+                printf("Modified: %s\n",
+                       $aclEdit->userAttribute( $uid, 'modified' ) );
+            }
+            printf ("\n");
+        }
+        else
+        {
+            Error('No such user: ' . $uid); $ok = 0;
+        }
+    }
+}
+
+if( %showGroupsHash )
+{
+    foreach my $group ( sort keys %showGroupsHash )
+    {
+        printf("Group: %s\n", $group);
+
+        my $privs = $aclEdit->listPrivileges( $group );
+        foreach my $object ( sort keys %{$privs} )
+        {
+            foreach my $priv ( sort keys %{$privs->{$object}} )
+            {
+                printf("Has privilege \"%s\" for %s \"%s\"\n", $priv,
+                       $knownPrivileges{$priv}, $object);
+            }
+        }
+
+        foreach my $uid ( sort @{$aclEdit->listGroupMembers( $group )} )
+        {
+            printf("Member: %s\n", $uid);
+        }
+
+        if( $verbose or $debug )
+        {
+            printf("Modified: %s\n",
+                   $aclEdit->groupAttribute( $group, 'modified' ) );
+        }
+
+        printf ("\n");
+    }
+}
+
+if( not $ok )
+{
+    Warn('acledit exited with errors');
+}
+exit( $ok ? 0:1 );
+
+sub setupPrivileges
+{
+    my $aclEdtit = shift;
+    my $privs = shift;
+    my $groups = shift;
+    my $objects = shift;
+    my $permit = shift;
+
+    my $ok = 1;
+    foreach my $priv ( @{$privs} )
+    {
+        if( defined( $knownPrivileges{$priv} ) )
+        {
+            if( $knownPrivileges{$priv} eq 'tree' )
+            {
+                foreach my $obj ( @{$objects} )
+                {
+                    if( $obj eq '*' or
+                        Torrus::SiteConfig::treeExists( $obj ) or $force )
+                    {
+                        foreach my $group ( @{$groups} )
+                        {
+                            if( $permit )
+                            {
+                                $ok = $aclEdit->
+                                    setPrivilege( $group, $obj,
+                                                  $priv ) ? $ok:0;
+                            }
+                            else
+                            {
+                                $ok = $aclEdit->
+                                    clearPrivilege( $group, $obj,
+                                                    $priv ) ? $ok:0;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        Error('No such tree: ' . $obj); $ok = 0;
+                    }
+                }
+            }
+            elsif( $knownPrivileges{$priv} eq 'global' )
+            {
+                foreach my $obj ( @{$objects} )
+                {
+                    if( $obj ne '*' )
+                    {
+                        Error("Privilege GlobalSearch should be for '*'");
+                        $ok = 0;
+                    }                    
+                }
+
+                if( $ok )
+                {
+                    foreach my $group ( @{$groups} )
+                    {
+                        if( $permit )
+                        {
+                            $ok = $aclEdit->
+                                setPrivilege( $group, '*', $priv ) ? $ok:0;
+                        }
+                        else
+                        {
+                            $ok = $aclEdit->
+                                clearPrivilege( $group, '*', $priv ) ? $ok:0;
+                        }
+                    }
+                }
+            }
+        }
+        else
+        {
+            Error('Unknown privilege name: ' . $priv); $ok = 0;
+        }
+    }
+    return $ok;
+}
+
+
+
+
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/action_notify.in b/torrus/bin/action_notify.in
new file mode 100644 (file)
index 0000000..a01b548
--- /dev/null
@@ -0,0 +1,96 @@
+#!@PERL@
+#  Copyright (C) 2006  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: action_notify.in,v 1.1 2010-12-27 00:04:01 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+# We need this for $Torrus::Global::templateDirs
+BEGIN { require '@torrus_config_pl@'; }
+
+use strict;
+use Date::Format;
+
+use Torrus::Log;
+
+require '@notify_siteconfig_pl@';
+
+if( not $ENV{'TORRUS_TREE'} )
+{
+    print STDERR ("Torrus environment variables missing. This program ",
+                  "must be run from Torrus Monitor\n");
+    exit 1;
+}
+
+our $now = time();
+our $nowHour = time2str('%H', $now);
+our $nowWeekday = time2str('%w', $now);
+
+my $severity = $ENV{'TORRUS_SEVERITY'};
+my $ok = 1;
+
+foreach my $policy ( keys %Torrus::Notify::policies )
+{
+    if( &{$Torrus::Notify::policies{$policy}{'match'}} )
+    {
+        Debug('Notification policy matched: ' . $policy);
+
+        my @targets = ();
+        my $levels = $Torrus::Notify::policies{$policy}{'severity'};
+        
+        foreach my $level ( sort {$a <=>$b} keys %{$levels} )
+        {
+            if( $severity >= $level )
+            {
+                push( @targets, @{$levels->{$level}} );
+            }
+        }
+
+        if( isDebug() )
+        {
+            Debug('Selected notification targets: ' . join(' ', @targets));
+        }
+
+        foreach my $target ( @targets )
+        {
+            my($protocol, $arg) = split(':', $target);
+            if( defined( $Torrus::Notify::programs{$protocol} ) )
+            {
+                $ENV{'ARG1'} = $arg;
+                my $status = system( $Torrus::Notify::programs{$protocol} );
+                delete $ENV{'ARG1'};
+
+                if( $status != 0 )
+                {
+                    Error('The command "' .
+                          $Torrus::Notify::programs{$protocol} .
+                          '" returned error code ' . $status);
+                    $ok = 0;
+                }
+            }
+        }
+    }
+}
+   
+exit( $ok ? 0:1 );                          
+        
+
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/action_printemail.in b/torrus/bin/action_printemail.in
new file mode 100644 (file)
index 0000000..416147b
--- /dev/null
@@ -0,0 +1,83 @@
+#!@PERL@
+#  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: action_printemail.in,v 1.1 2010-12-27 00:04:03 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+# We need this for $Torrus::Global::templateDirs
+BEGIN { require '@torrus_config_pl@'; }
+
+use strict;
+use Template;
+use Getopt::Long;
+
+require '@email_siteconfig_pl@';
+
+if( not $ENV{'TORRUS_TREE'} )
+{
+    print STDERR ("Torrus environment variables missing. This program ",
+                  "must be run from Torrus Monitor\n");
+    exit 1;
+}
+
+
+my $ok = GetOptions( 'url=s' => \$Torrus::Email::url,
+                     'template=s' => \$Torrus::Email::template );
+
+if( not $ok )
+{
+    print STDERR ("Error parsing options\n");
+    exit 1;
+}
+
+my $tt = new Template(INCLUDE_PATH => $Torrus::Global::templateDirs);
+
+my $vars =
+{
+    'tree'       => $ENV{'TORRUS_TREE'},
+    'token'      => $ENV{'TORRUS_TOKEN'},
+    'path'       => $ENV{'TORRUS_NODEPATH'},
+    'nickname'   => $ENV{'TORRUS_NICKNAME'},
+    'url'        => $Torrus::Email::url . '/' .
+        $ENV{'TORRUS_TREE'} . '?token='.$ENV{'TORRUS_TOKEN'},
+    'ncomment'   => $ENV{'TORRUS_NCOMMENT'},
+    'npcomment'  => $ENV{'TORRUS_NPCOMMENT'},
+    'event'      => $ENV{'TORRUS_EVENT'},
+    'monitor'    => $ENV{'TORRUS_MONITOR'},
+    'mcomment'   => $ENV{'TORRUS_MCOMMENT'},
+    'severity'   => $ENV{'TORRUS_SEVERITY'},
+    'timestamp'  => scalar(localtime($ENV{'TORRUS_TSTAMP'})),
+    'value'      => $ENV{'TORRUS_VALUE'},
+    'dispvalue'  => $ENV{'TORRUS_DISPLAY_VALUE'},
+    'env'        => sub  { return $ENV{$_[0]} }
+};
+
+my $result = $tt->process($Torrus::Email::template, $vars);
+
+if( not $result )
+{
+    print STDERR "Error while processing template: ".$tt->error()."\n";
+}
+
+exit( $result ? 0:1 );
+
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/action_snmptrap.in b/torrus/bin/action_snmptrap.in
new file mode 100644 (file)
index 0000000..c2e9c20
--- /dev/null
@@ -0,0 +1,183 @@
+#!@PERL@
+#  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: action_snmptrap.in,v 1.1 2010-12-27 00:04:01 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+# SNMP v2c trap
+# See Torrus-MIB.txt for reference
+
+use strict;
+use Net::SNMP qw(:ALL);
+use Getopt::Long;
+
+require '@snmptrap_siteconfig_pl@';
+
+if( not $ENV{'TORRUS_TOKEN'} )
+{
+    print STDERR ("Torrus environment variables missing. This program ",
+                  "must be run from Torrus Monitor\n");
+    exit 1;
+}
+
+my @hosts;
+my $severity;
+
+my $ok = GetOptions( 'host=s'     => \@hosts,
+                     'community=s' => \$Torrus::Snmptrap::community,
+                     'port=i'      => \$Torrus::Snmptrap::port,
+                     'severity=i'  => \$severity );
+
+if( not $ok )
+{
+    print STDERR ("Error parsing options\n");
+    exit 1;
+}
+
+if( scalar(@hosts) > 0 )
+{
+    @Torrus::Snmptrap::hosts = @hosts;
+}
+
+my $oid_prefix = '.1.3.6.1.4.1.14697.1.1.1';
+
+my %event_type = ( 'set'    => 1,
+                   'repeat' => 2,
+                   'clear'  => 3,
+                   'forget' => 4
+                   );
+
+my @varbindlist = ( $oid_prefix . '.1',
+                    INTEGER32, 1,
+
+                    $oid_prefix . '.2',
+                    OCTET_STRING, $ENV{'TORRUS_TOKEN'},
+
+                    $oid_prefix . '.3',
+                    OCTET_STRING, $ENV{'TORRUS_MONITOR'},
+
+                    $oid_prefix . '.4',
+                    INTEGER, $event_type{$ENV{'TORRUS_EVENT'}},
+
+                    $oid_prefix . '.5',
+                    OCTET_STRING, $ENV{'TORRUS_NODEPATH'},
+
+                    $oid_prefix . '.6',
+                    OCTET_STRING, snmp_dateandtime( $ENV{'TORRUS_TSTAMP'} ),
+
+                    $oid_prefix . '.7',
+                    OCTET_STRING, $ENV{'TORRUS_TREE'},
+                    
+                    $oid_prefix . '.9',
+                    OCTET_STRING, $ENV{'TORRUS_MCOMMENT'}
+                    );
+
+if( defined( $severity ) )
+{
+    push( @varbindlist,
+          $oid_prefix . '.8',
+          INTEGER32, $severity );
+}
+          
+
+foreach my $host ( @Torrus::Snmptrap::hosts )
+{
+    my( $session, $error ) =
+        Net::SNMP->session( -hostname  => $host,
+                            -community => $Torrus::Snmptrap::community,
+                            -port      => $Torrus::Snmptrap::port,
+                            -version   => 2
+                            );
+
+    if( not defined($session) )
+    {
+        printf STDERR ("Error opening SNMP trap session: %s.\n", $error);
+        exit 1;
+    }
+
+
+    my $result =
+        $session->snmpv2_trap( -varbindlist  => \@varbindlist );
+
+    if( not $result )
+    {
+        printf STDERR ("Error sending SNMP trap: %s.\n", $session->error());
+    }
+
+    $session->close();
+}
+
+# Converts UNIX time to DateAndTime from SNMPv2-TC
+# Currently timezone is not handled.
+
+# DateAndTime ::= TEXTUAL-CONVENTION
+#     DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"
+#     STATUS       current
+#     DESCRIPTION
+#             "A date-time specification.
+#
+#             field  octets  contents                  range
+#             -----  ------  --------                  -----
+#               1      1-2   year*                     0..65536
+#               2       3    month                     1..12
+#               3       4    day                       1..31
+#               4       5    hour                      0..23
+#               5       6    minutes                   0..59
+#               6       7    seconds                   0..60
+#                            (use 60 for leap-second)
+#               7       8    deci-seconds              0..9
+#               8       9    direction from UTC        '+' / '-'
+#               9      10    hours from UTC*           0..13
+#              10      11    minutes from UTC          0..59
+#
+#             * Notes:
+#             - the value of year is in network-byte order
+#             - daylight saving time in New Zealand is +13
+#
+#             For example, Tuesday May 26, 1992 at 1:30:15 PM EDT would be
+#             displayed as:
+#
+#                              1992-5-26,13:30:15.0,-4:0
+#
+#             Note that if only local time is known, then timezone
+#             information (fields 8-10) is not present."
+#     SYNTAX       OCTET STRING (SIZE (8 | 11))
+
+sub snmp_dateandtime
+{
+    my $thetime = shift;
+
+    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
+        localtime( $thetime );
+
+    my $result = pack('nC6',
+                      $year + 1900,
+                      $mon + 1,
+                      $mday,
+                      $hour,
+                      $min,
+                      $sec,
+                      0);
+    return $result;
+}
+
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/action_snmpv1trap.in b/torrus/bin/action_snmpv1trap.in
new file mode 100644 (file)
index 0000000..02ec14a
--- /dev/null
@@ -0,0 +1,134 @@
+#!@PERL@
+#  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: action_snmpv1trap.in,v 1.1 2010-12-27 00:04:02 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+# Obsoleted and not used SNMP v1 trap script.
+# Version 2c is preferred one.
+
+
+use strict;
+use Net::SNMP qw(:ALL);
+use Getopt::Long;
+
+require '@snmptrap_siteconfig_pl@';
+
+# SNMP Enterprise. Needed for SNMP v1 trap.
+# See http://www.iana.org/assignments/enterprise-numbers for reference
+$Torrus::Snmptrap::enterprise = '1.3.6.1.4.1.14697.1.1.1';
+
+
+if( not $ENV{'TORRUS_TOKEN'} )
+{
+    print STDERR ("Torrus environment variables missing. This program ",
+                  "must be run from Torrus Monitor\n");
+    exit 1;
+}
+
+my @hosts;
+my $severity;
+
+my $ok = GetOptions( 'host=s'     => \@hosts,
+                     'community=s' => \$Torrus::Snmptrap::community,
+                     'port=i'      => \$Torrus::Snmptrap::port,
+                     'enterprise'  => \$Torrus::Snmptrap::enterprise,
+                     'severity=i'  => \$severity );
+
+if( not $ok )
+{
+    print STDERR ("Error parsing options\n");
+    exit 1;
+}
+
+if( scalar(@hosts) > 0 )
+{
+    @Torrus::Snmptrap::hosts = @hosts;
+}
+
+my %specifictrap = ( 'set'    => 1,
+                     'repeat' => 2,
+                     'clear'  => 3,
+                     'forget' => 4
+                     );
+
+my @varbindlist = ( $Torrus::Snmptrap::enterprise . '.2',
+                    OCTET_STRING, $ENV{'TORRUS_TOKEN'},
+
+                    $Torrus::Snmptrap::enterprise . '.5',
+                    OCTET_STRING, $ENV{'TORRUS_NODEPATH'},
+
+                    $Torrus::Snmptrap::enterprise . '.3',
+                    OCTET_STRING, $ENV{'TORRUS_MONITOR'},
+
+                    $Torrus::Snmptrap::enterprise . '.4',
+                    OCTET_STRING, $ENV{'TORRUS_EVENT'},
+
+                    $Torrus::Snmptrap::enterprise . '.6',
+                    OCTET_STRING, scalar(localtime($ENV{'TORRUS_TSTAMP'})),
+
+                    $Torrus::Snmptrap::enterprise . '.7',
+                    OCTET_STRING, $ENV{'TORRUS_TREE'},
+                    
+                    $Torrus::Snmptrap::enterprise . '.9',
+                    OCTET_STRING, $ENV{'TORRUS_MCOMMENT'}
+                    );
+
+if( defined( $severity ) )
+{
+    push( @varbindlist,
+          $Torrus::Snmptrap::enterprise . '.8',
+          INTEGER32, $severity );
+}
+
+foreach my $host ( @Torrus::Snmptrap::hosts )
+{
+    my( $session, $error ) =
+        Net::SNMP->session( -hostname  => $host,
+                            -community => $Torrus::Snmptrap::community,
+                            -port      => $Torrus::Snmptrap::port
+                            );
+
+    if( not defined($session) )
+    {
+        printf STDERR ("Error opening SNMP trap session: %s.\n", $error);
+        exit 1;
+    }
+
+
+    my $result =
+        $session->trap( -enterprise   => $Torrus::Snmptrap::enterprise,
+                        -generictrap  => ENTERPRISE_SPECIFIC,
+                        -specifictrap => $specifictrap{$ENV{'TORRUS_EVENT'}},
+                        -timestamp    => $ENV{'TORRUS_UPTIME'} * 100,
+                        -varbindlist  => \@varbindlist
+                        );
+
+    if( not $result )
+    {
+        printf STDERR ("Error sending SNMP trap: %s.\n", $session->error());
+    }
+
+    $session->close();
+}
+
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/bdbinfo.in b/torrus/bin/bdbinfo.in
new file mode 100644 (file)
index 0000000..c5628ac
--- /dev/null
@@ -0,0 +1,38 @@
+#!@PERL@ -w
+#  Copyright (C) 2002-2008  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: bdbinfo.in,v 1.1 2010-12-27 00:04:03 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+BEGIN { require '@torrus_config_pl@'; }
+
+use strict;
+use BerkeleyDB;
+
+
+printf("MAJOR: %d\n", DB_VERSION_MAJOR);
+printf("MINOR: %d\n", DB_VERSION_MINOR);
+printf("PATCH: %d\n", DB_VERSION_PATCH);
+printf("STRING: %s\n", DB_VERSION_STRING);
+
+
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/buildsearchdb.in b/torrus/bin/buildsearchdb.in
new file mode 100644 (file)
index 0000000..19c1ea8
--- /dev/null
@@ -0,0 +1,200 @@
+#!@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: buildsearchdb.in,v 1.1 2010-12-27 00:04:01 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+BEGIN { require '@torrus_config_pl@'; }
+
+use strict;
+use Getopt::Long;
+
+use Torrus::ConfigTree;
+use Torrus::Search;
+use Torrus::SiteConfig;
+use Torrus::Log;
+
+exit(1) if not Torrus::SiteConfig::verify();
+
+my @trees;
+my $build_global;
+my $all_trees;
+
+my $verbose;
+my $help_needed;
+
+my $ok = GetOptions ('tree=s'   => \@trees,
+                     'all'      => \$all_trees,
+                     'global'   => \$build_global,
+                     'verbose'  => \$verbose,
+                     'help'     => \$help_needed);
+
+if( not $ok or not (scalar(@trees) or $all_trees or $build_global) or
+    $help_needed or scalar(@ARGV) > 0 )
+{
+    print STDERR "Usage: $0 --tree=NAME [options...]\n",
+    "Options:\n",
+    "  --tree=NAME     rebuild search DB for a tree\n",
+    "  --all           rebuild search DB for all trees\n",
+    "  --global        rebuild global search DB\n",
+    "  --verbose       print extra information\n",
+    "  --help          this help message\n";
+    exit 1;
+}
+
+if( $build_global )
+{
+    $all_trees = 1;
+}
+
+if( $all_trees )
+{
+    @trees = Torrus::SiteConfig::listTreeNames();
+}
+
+if( $verbose )
+{
+    Torrus::Log::setLevel('verbose');
+}
+
+&Torrus::DB::setSafeSignalHandlers();
+
+Verbose(sprintf('Torrus version %s', '@VERSION@'));
+
+my $search = new Torrus::Search( -WriteAccess => 1 );
+
+if( $build_global )
+{
+    $search->openGlobal();
+}
+
+foreach my $tree ( @trees )
+{
+    if( not Torrus::SiteConfig::treeExists( $tree ) )
+    {
+        Error("Tree named \"" . $tree . "\" does not exist");
+        exit(1);
+    }
+
+    &Torrus::DB::checkInterrupted();
+
+    my $config_tree = new Torrus::ConfigTree( -TreeName => $tree );
+    if( not defined($config_tree) )
+    {
+        print("Configuration is not ready\n");
+        exit(1);
+    }
+
+    Verbose("Processing the tree: $tree");
+
+    $search->openTree( $tree );
+    
+    walkSubtree( $config_tree, $search, $config_tree->token('/') );
+    
+    $search->closeTree( $tree );
+    $config_tree = undef;
+}
+
+exit(0);
+
+
+sub walkSubtree
+{
+    my $config_tree = shift;
+    my $search = shift;
+    my $ptoken = shift;
+
+    my $tree = $config_tree->treeName();
+    
+    foreach my $token ( $config_tree->getChildren( $ptoken ) )
+    {
+        &Torrus::DB::checkInterrupted();
+        
+        if( $config_tree->isSubtree( $token ) )
+        {
+            walkSubtree( $config_tree, $search, $token );
+        }
+
+        my $isSearchable =
+            $config_tree->getNodeParam( $token, 'searchable', 1 );
+        if( defined( $isSearchable ) and $isSearchable eq 'yes' )
+        {
+            my $path = $config_tree->path( $token );
+            
+            my $nodeName = $config_tree->nodeName( $path );
+            splitAndStore( $tree, $nodeName, $path );
+            
+            my $params = $config_tree->getParams( $token, 1 );
+            while( my( $param, $value ) = each %{$params} )
+            {
+                if( $config_tree->getParamProperty( $param, 'search' ) )
+                {
+                    splitAndStore( $tree, $value, $path, $param );
+                }
+            }
+        }
+    }
+}
+
+
+sub splitAndStore
+{
+    my $tree = shift;
+    my $value = shift;
+    my $path = shift;
+    my $param = shift;
+
+    if( length( $value ) > 0 )
+    {
+        # split the value into words
+        my @words = split( /\W+/ms, $value );
+        if( scalar( @words ) > 0 )
+        {
+            foreach my $word ( @words )
+            {
+                if( length( $word ) > 1 )
+                {
+                    $search->storeKeyword( $tree, $word, $path, $param );
+                            
+                    # Split the word by underscores and minus
+                    my @subwords = split( /_+/, $word );
+                    if( scalar( @subwords ) > 1 )
+                    {
+                        foreach my $subword ( @subwords )
+                        {
+                            if( length( $subword ) > 1 )
+                            {
+                                $search->storeKeyword( $tree,
+                                                       $subword,
+                                                       $path,
+                                                       $param );
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+        
+
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/cleanup.in b/torrus/bin/cleanup.in
new file mode 100644 (file)
index 0000000..bc4f69f
--- /dev/null
@@ -0,0 +1,32 @@
+#!@SHELL@
+#  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: cleanup.in,v 1.1 2010-12-27 00:04:03 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+#
+
+# How soon the sessions expire
+EXPIRE=60
+
+@FIND@ @sesstordir@ -type f -mtime +$EXPIRE -exec @RM@ '{}' ';'
+@FIND@ @seslockdir@ -type f -mtime +$EXPIRE -exec @RM@ '{}' ';'
+
+# Local Variables:
+# mode: shell-script
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/clearcache.in b/torrus/bin/clearcache.in
new file mode 100644 (file)
index 0000000..a3c0365
--- /dev/null
@@ -0,0 +1,40 @@
+#!@PERL@
+#  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: clearcache.in,v 1.1 2010-12-27 00:04:01 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+BEGIN { require '@torrus_config_pl@'; }
+
+use Torrus::Log;
+
+use Torrus::Renderer;
+
+&Torrus::DB::setSafeSignalHandlers();
+
+my $renderer = new Torrus::Renderer;
+$renderer->clearcache();
+undef $renderer;
+
+Info('Renderer cache cleared');
+exit 0;
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/collector.in b/torrus/bin/collector.in
new file mode 100644 (file)
index 0000000..e682fad
--- /dev/null
@@ -0,0 +1,205 @@
+#!@PERL@
+#  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: collector.in,v 1.1 2010-12-27 00:04:03 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+BEGIN { require '@torrus_config_pl@'; }
+
+use strict;
+use Proc::Daemon;
+use Getopt::Long;
+
+use Torrus::Log;
+use Torrus::ConfigTree;
+use Torrus::Collector;
+use Torrus::SiteConfig;
+
+$| = 1;
+
+exit(1) if not Torrus::SiteConfig::verify();
+
+my $tree;
+my $instance;
+my $nodaemon;
+my $runonce;
+my $runalways;
+my $debug;
+my $verbose;
+my $help_needed;
+
+# Derive the process name from the command line
+my $process_name = $0;
+$process_name =~ s/^.*\/([^\/]+)$/$1/;
+$process_name .= ' ' . join(' ', @ARGV);
+                            
+my $ok = GetOptions ('tree=s'     => \$tree,
+                     'instance=i' => \$instance,
+                     'nodaemon'   => \$nodaemon,
+                     'runonce'    => \$runonce,
+                     'runalways'  => \$runalways,
+                     'debug'      => \$debug,
+                     'verbose'    => \$verbose,
+                     'help'       => \$help_needed);
+
+if( not $ok or not $tree or $help_needed or scalar(@ARGV) > 0 )
+{
+    print STDERR "Usage: $0 --tree=NAME [options...]\n",
+    "Options:\n",
+    "  --tree=NAME     tree name\n",
+    "  --instance=N    instance number for multiple collectors per tree\n",
+    "  --nodaemon      do not fork daemon and log to STDERR\n",
+    "  --runonce       run one time and exit. Implies --nodaemon\n",
+    "  --runalways     continue running if no collectors defined\n",
+    "  --debug         set the log level to debug\n",
+    "  --verbose       set the log level to info\n",
+    "  --help          this help message\n";
+    exit 1;
+}
+
+if( not Torrus::SiteConfig::mayRunCollector( $tree ) )
+{
+    Error('Tree ' . $tree . ' is not configured to run collector');
+    exit 1;
+}
+
+my $nInstances = Torrus::SiteConfig::collectorInstances( $tree );
+
+if( $nInstances > 1 and not defined( $instance ) )
+{
+    Error('--instance option is missing');
+    exit 1;
+}
+
+if( not defined( $instance ) )
+{
+    $instance = 0;
+}
+
+if( $instance >= $nInstances )
+{
+    Error('Invalid instance number. Allowed from 0 to ' . ($nInstances-1));
+    exit 1;
+}
+
+if( $debug )
+{
+    Torrus::Log::setLevel('debug');
+}
+elsif( $verbose )
+{
+    Torrus::Log::setLevel('verbose');
+}
+
+my $logfile =
+    $Torrus::Global::logDir . '/collector.' . $tree . '_' . $instance . '.log';
+my $pidfile;
+
+my $rotateLogs = sub
+{
+    Info('Caught SIGHUP. Reopening log file');
+    close( STDERR );
+    open( STDERR, ">>$logfile" );
+    $| = 1;
+};
+
+if( not $nodaemon and not $runonce )
+{
+    my $pidfilename = 
+        $Torrus::Global::pidDir . '/collector.' .
+        $tree . '_' . $instance . '.pid';
+    
+    if( -r $pidfilename )
+    {
+        Error("Another collector daemon is running, pid=",
+              `cat $pidfilename`);
+        exit 1;
+    }
+
+    &Proc::Daemon::Init();
+    umask 0017; # Proc::Daemon::Init sets the mask to all-writable
+    
+    $SIG{'HUP'} = $rotateLogs;
+
+    # At this point, we cannot tell anyone if "open" fails
+    open(STDERR, ">>$logfile");
+
+    $pidfile = $pidfilename;
+    
+    if( open( PID, ">$pidfile" ) )
+    {
+        printf PID ( "%d", $$ );
+        close PID;
+    }
+    else
+    {
+        Error("Cannot open $pidfile for writing: $!");
+    }
+}
+
+
+Torrus::Collector::initThreads();
+
+&Torrus::DB::setSafeSignalHandlers();
+
+
+Info(sprintf("Torrus version %s", '@VERSION@'));
+Info(sprintf("%s started for tree %s, instance #%d", $0, $tree, $instance));
+Debug(sprintf("Process ID %d", $$));
+
+my %options =
+    (
+     '-ProcessName' => $process_name,
+     '-Tree'        => $tree,
+     '-Instance'    => $instance
+     );
+
+if( $runonce )
+{
+    $options{'-RunOnce'} = 1;
+}
+if( $runalways )
+{
+    $options{'-RunAlways'} = 1;
+}
+
+
+my $scheduler = new Torrus::CollectorScheduler( %options );
+$scheduler->run();
+
+if( not $options{'-RunOnce'} )
+{
+    Error("Collector process exited: nothing to collect");
+    unlink $pidfile;
+}
+
+exit;
+
+
+END
+{
+    if( defined($pidfile) and -r $pidfile )
+    {
+        unlink $pidfile;
+    }
+}
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/compilexml.in b/torrus/bin/compilexml.in
new file mode 100644 (file)
index 0000000..56bbada
--- /dev/null
@@ -0,0 +1,207 @@
+#!@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: compilexml.in,v 1.1 2010-12-27 00:04:00 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+BEGIN { require '@torrus_config_pl@'; }
+
+use Getopt::Long;
+use strict;
+
+use Torrus::ConfigTree::XMLCompiler;
+use Torrus::SiteConfig;
+use Torrus::Log;
+
+exit(1) if not Torrus::SiteConfig::verify();
+
+our @trees;
+our $all_trees;
+our $no_ds;
+our $no_validation;
+our $force;
+
+our $debug;
+our $verbose;
+our $help_needed;
+
+my $ok = GetOptions ('tree=s'   => \@trees,
+                     'all'      => \$all_trees,
+                     'nods'     => \$no_ds,
+                     'noval'    => \$no_validation,
+                     'force'    => \$force,
+                     'debug'    => \$debug,
+                     'verbose'  => \$verbose,
+                     'help'     => \$help_needed);
+
+if( not $ok or not (scalar(@trees) or $all_trees) or
+    $help_needed or scalar(@ARGV) > 0 )
+{
+    print STDERR "Usage: $0 --tree=NAME [options...]\n",
+    "Options:\n",
+    "  --tree=NAME     tree name(s) to compile\n",
+    "  --all           compile all trees\n",
+    "  --nods          compile non-datasource configuration only\n",
+    "  --noval         disable parameter validation\n",
+    "  --force         force the compiler even if anoother " .
+        "compiler process is probably running\n",
+    "  --debug         set the log level to debug\n",
+    "  --verbose       set the log level to info\n",
+    "  --help          this help message\n";
+    exit 1;
+}
+
+if( $all_trees )
+{
+    @trees = Torrus::SiteConfig::listTreeNames();
+}
+
+if( $debug )
+{
+    Torrus::Log::setLevel('debug');
+}
+elsif( $verbose )
+{
+    Torrus::Log::setLevel('verbose');
+}
+
+
+&Torrus::DB::setSafeSignalHandlers();
+
+Verbose(sprintf('Torrus version %s', '@VERSION@'));
+
+our $global_ok = 1;
+
+foreach my $tree ( @trees )
+{
+    if( not Torrus::SiteConfig::treeExists( $tree ) )
+    {
+        Error("Tree named \"" . $tree . "\" does not exist");
+        exit(1);
+    }
+
+    &Torrus::DB::checkInterrupted();
+    
+    Verbose("Compiling tree: $tree");
+
+    my $ok = 1;
+    my $compiler =
+        new Torrus::ConfigTree::XMLCompiler( -TreeName => $tree,
+                                             -NoDSRebuild => $no_ds,
+                                             -ForceWriter => $force );
+    if( not defined( $compiler ) )
+    {
+        Error('Cannot initialize compiler for tree ' . $tree . '. Exiting');
+        Error('If you are sure there are no other compiler processes ' .
+              'running, use the --force option');
+        $global_ok = 0;
+        last;
+    }     
+    
+    my @xmlFiles = @Torrus::Global::xmlAlwaysIncludeFirst;
+    push( @xmlFiles, Torrus::SiteConfig::listXmlFiles( $tree ) );
+    push( @xmlFiles, @Torrus::Global::xmlAlwaysIncludeLast );
+
+    foreach my $xmlfile ( @xmlFiles )
+    {
+        if( not $compiler->compile( $xmlfile ) )
+        {
+            Error($xmlfile . ' compiled with errors'); $ok = 0;
+        }
+    }
+
+    if( not $ok )
+    {
+        Error("Errors found during XML compilation in the tree named \"" .
+              $tree . "\"");
+        $global_ok = 0;
+        last;
+    }
+
+    Verbose('Data post-processing...');
+    if( not $compiler->postProcess() )
+    {
+        Error('Errors found during post-processing');
+        $ok = 0;
+    }
+
+    if( $no_validation )
+    {
+        Verbose('Skipping data validation...');
+    }
+    else
+    {
+        Verbose('Data validation...');
+        if( not $compiler->validate() )
+        {
+            Error('Errors found during validation process');
+            $ok = 0;
+        }
+    }
+
+    &Torrus::DB::checkInterrupted();
+    
+    # Preserve the dynamic tokenset members
+    if( not $compiler->{'first_time_created'} )
+    {
+        my $oldConfig = new Torrus::ConfigTree( -TreeName => $tree );
+        if( defined( $oldConfig ) )
+        {
+            foreach my $ts ( $oldConfig->getTsets() )
+            {
+                if( $compiler->tsetExists( $ts ) )
+                {
+                    foreach my $member ( $oldConfig->tsetMembers( $ts ) )
+                    {
+                        my $origin = $oldConfig->tsetMembers( $ts, $member );
+                        if( defined( $origin ) and $origin ne 'static' )
+                        {
+                            my $path = $oldConfig->path($member);
+                            if( $compiler->nodeExists( $path ) )
+                            {
+                                my $token = $compiler->token( $path );
+                                $compiler->tsetAddMember
+                                    ( $ts, $token, $origin );
+                                Verbose('Preserved dynamic tokenset member: ' .
+                                        $path . ' in ' . $ts);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        undef $oldConfig;
+    }
+                    
+    &Torrus::DB::checkInterrupted();
+                             
+    $compiler->finalize( $ok );
+    undef $compiler;
+    &Torrus::DB::cleanupEnvironment();
+
+    $global_ok = $ok ? $global_ok:0;
+}
+
+exit($global_ok ? 0:1);
+
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/configinfo.in b/torrus/bin/configinfo.in
new file mode 100644 (file)
index 0000000..1b985f8
--- /dev/null
@@ -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 <ssinyagin@yahoo.com>
+
+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:
diff --git a/torrus/bin/configsnapshot.in b/torrus/bin/configsnapshot.in
new file mode 100644 (file)
index 0000000..dc79e5b
--- /dev/null
@@ -0,0 +1,332 @@
+#!@PERL@
+#  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: configsnapshot.in,v 1.1 2010-12-27 00:04:01 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+BEGIN { require '@torrus_config_pl@'; }
+
+use strict;
+use Getopt::Long;
+
+use Torrus::Log;
+use Torrus::ConfigTree;
+use Torrus::SiteConfig;
+use Torrus::ConfigBuilder;
+
+exit(1) if not Torrus::SiteConfig::verify();
+
+my $tree;
+my $help_needed;
+my $verbose = 0;
+
+my $outfile = 'snapshot.xml';
+
+my $filter_param;
+my $filter_value;
+my $filter_op = '=';
+
+my $creator = "Torrus version @VERSION@\n" .
+    "This file was generated by command:\n" .
+    $0 . " \\\n";
+foreach my $arg ( @ARGV )
+{
+    if( $arg =~ /^--/ )
+    {
+        $creator .= ' ' . $arg . ' ';
+    }
+    else
+    {
+        $creator .= "\'" . $arg . "\'\\\n";
+    }
+}
+$creator .= "\nOn " . scalar(localtime(time));
+
+my $ok = GetOptions('tree=s'   => \$tree,
+                    'out=s'    => \$outfile,
+                    'param=s'  => \$filter_param,
+                    'value=s'  => \$filter_value,
+                    'op=s'     => \$filter_op,
+                    'verbose'  => \$verbose,
+                    'help'     => \$help_needed);
+
+if( not $ok or not $tree or $help_needed or
+    ( defined($filter_param) + defined($filter_value) == 1 ) or
+    ( $filter_op ne '=' and $filter_op ne 'eq' and $filter_op ne 're' ) or
+    scalar(@ARGV) > 0 )
+{
+    print STDERR "Usage: $0 --tree=NAME [options...]\n",
+    "Options:\n",
+    "  --tree=NAME     tree name\n",
+    "  --out=filename  output file [".$outfile."]\n",
+    "  --param=PARAM --value=VALUE \n",
+    "                  filter the output by leaves with specified value\n",
+    "  --op=OP         filter operation [=|eq|re], default: [=]\n",
+    "  --verbose       print extra information\n",
+    "  --help          this help message\n";
+    exit 1;
+}
+
+if( $verbose )
+{
+    Torrus::Log::setLevel('verbose');
+}
+
+if( not Torrus::SiteConfig::treeExists( $tree ) )
+{
+    Error('Tree ' . $tree . ' does not exist');
+    exit 1;
+}
+
+&Torrus::DB::setSafeSignalHandlers();
+
+my $config_tree = new Torrus::ConfigTree( -TreeName => $tree, -Wait => 1 );
+if( not defined( $config_tree ) )
+{
+    exit 1;
+}
+
+
+my $filter_match = sub {return $_[0] == $filter_value};
+
+if(defined($filter_param))
+{
+    if( $filter_op eq 'eq' )
+    {
+        $filter_match = sub {return $_[0] eq $filter_value};
+    }
+    elsif( $filter_op eq 're' )
+    {
+        $filter_match = sub {return $_[0] =~ $filter_value};
+    }
+}
+
+
+        
+my $cb = new Torrus::ConfigBuilder;
+
+$cb->addCreatorInfo( $creator );
+
+# We don't collect views, since they are in defaults.xml which is always
+# included
+
+collect_monitors( $config_tree, $cb );
+collect_tokensets( $config_tree, $cb );
+collect_definitions( $config_tree, $cb );
+collect_datasources( $config_tree, $cb );
+
+my $ok = $cb->toFile( $outfile );
+if( $ok )
+{
+    Verbose('Wrote ' . $outfile);
+}
+else
+{
+    Error('Cannot write ' . $outfile . ': ' . $!);
+}
+
+exit($ok ? 0:1);
+
+sub collect_monitors
+{
+    my $config_tree = shift;
+    my $cb = shift;
+
+    my $monitorsNode = $cb->startMonitors();
+
+    foreach my $action ( $config_tree->getActionNames() )
+    {
+        &Torrus::DB::checkInterrupted();
+        
+        my $params = $config_tree->getParams( $action );
+        $cb->addMonitorAction( $monitorsNode, $action, $params );
+    }
+
+    foreach my $monitor ( $config_tree->getMonitorNames() )
+    {
+        &Torrus::DB::checkInterrupted();
+        
+        my $params = $config_tree->getParams( $monitor );
+        $cb->addMonitor( $monitorsNode, $monitor, $params );
+    }
+}
+
+sub collect_tokensets
+{
+    my $config_tree = shift;
+    my $cb = shift;
+
+    my $tsetsNode = $cb->startTokensets();
+
+    foreach my $tset ( $config_tree->getTsets() )
+    {
+        &Torrus::DB::checkInterrupted();
+        
+        my $params = $config_tree->getParams( $tset );
+        my $name = $tset;
+        $name =~ s/^S//;
+        $cb->addTokenset( $tsetsNode, $name, $params );
+    }
+}
+
+
+sub collect_definitions
+{
+    my $config_tree = shift;
+    my $cb = shift;
+
+    my $definitionsNode = $cb->startDefinitions();
+
+    foreach my $defName ( sort $config_tree->getDefinitionNames() )
+    {
+        &Torrus::DB::checkInterrupted();
+
+        my $value = $config_tree->getDefinition( $defName );
+        $cb->addDefinition( $definitionsNode, $defName, $value );
+    }
+
+    my $propsNode = $cb->startParamProps();
+    my $props = $config_tree->getParamProperties();
+
+    &Torrus::DB::checkInterrupted();
+
+    foreach my $prop ( sort keys %{$props} )
+    {
+        foreach my $param ( sort keys %{$props->{$prop}} )
+        {
+            $cb->addParamProp( $propsNode, $param, $prop,
+                               $props->{$prop}{$param} );
+        }
+    }
+}
+
+
+my %filterTokens;
+
+
+sub collect_datasources
+{
+    my $config_tree = shift;
+    my $cb = shift;
+    
+    my $topNode = $cb->getTopSubtree();
+    my $topToken = $config_tree->token('/');
+    
+    my $params = prepare_params( $config_tree, $topToken );
+    $cb->addParams( $topNode, $params );
+
+    if( defined($filter_param) )
+    {
+        $filterTokens{$topToken} = apply_filter( $config_tree, $topToken );
+    }
+    
+    collect_subtrees( $config_tree, $cb, $topToken, $topNode );
+}
+        
+
+
+sub apply_filter
+{
+    my $config_tree = shift;
+    my $token = shift;
+
+    $filterTokens{$token} = 0;
+    
+    foreach my $ctoken ( $config_tree->getChildren( $token ) )
+    {
+        &Torrus::DB::checkInterrupted();
+        
+        if( $config_tree->isSubtree( $ctoken ) )
+        {
+            $filterTokens{$token} += apply_filter( $config_tree, $ctoken );
+        }
+        elsif( $config_tree->isLeaf( $ctoken ) )
+        {
+            my $val = $config_tree->getNodeParam( $ctoken, $filter_param );
+            if( defined($val) and &{$filter_match}($val) )
+            {
+                $filterTokens{$ctoken} = 1;
+                $filterTokens{$token}++;
+            }                
+        }
+    }
+
+    return $filterTokens{$token};
+}
+        
+
+
+sub collect_subtrees
+{
+    my $config_tree = shift;
+    my $cb = shift;
+    my $token = shift;
+    my $parentNode = shift;
+    
+    foreach my $ctoken ( $config_tree->getChildren( $token ) )
+    {
+        &Torrus::DB::checkInterrupted();
+        
+        if( not defined($filter_param) or $filterTokens{$ctoken} )
+        {
+            my $childName =
+                $config_tree->nodeName( $config_tree->path($ctoken) );
+            my $params = prepare_params( $config_tree, $ctoken );
+        
+            if( $config_tree->isSubtree( $ctoken ) )
+            {
+                my $subtreeNode =
+                    $cb->addSubtree( $parentNode, $childName, $params );
+                collect_subtrees( $config_tree, $cb, $ctoken, $subtreeNode );
+            }
+            elsif( $config_tree->isLeaf( $ctoken ) )
+            {
+                $cb->addLeaf( $parentNode, $childName, $params );
+            }
+            
+            foreach my $aliasToken ( $config_tree->getAliases( $ctoken ) )
+            {
+                $cb->addAlias( $parentNode,
+                               $config_tree->path( $aliasToken ) );
+            }
+        }
+    }
+}
+
+
+sub prepare_params
+{
+    my $config_tree = shift;
+    my $token = shift;
+    
+    my $params = $config_tree->getParams( $token, 1 );
+
+    # Remove linebreaks
+    while( my( $param, $value ) = each %{$params} )
+    {
+        $value =~ s/\s+/ /gm;
+        $params->{$param} = $value;
+    }
+
+    return $params;
+}
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End:
diff --git a/torrus/bin/devdiscover.in b/torrus/bin/devdiscover.in
new file mode 100644 (file)
index 0000000..f113723
--- /dev/null
@@ -0,0 +1,619 @@
+#!@PERL@
+#  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: devdiscover.in,v 1.1 2010-12-27 00:04:02 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+# Collect the router information and create the XML file
+
+BEGIN { require '@devdiscover_config_pl@'; }
+
+use strict;
+use Getopt::Long;
+use XML::LibXML;
+
+use Torrus::Log;
+use Torrus::DevDiscover;
+use Torrus::ConfigBuilder;
+
+$| = 1;
+
+my @infiles;
+my $makedirs;
+my $limitre;
+my $forcebundle;
+my $fallback;
+my $workerThreads = 0;
+
+# Hidden parameter for debugging
+my $snmpdebug = 0;
+my $debug = 0;
+my $verbose = 0;
+
+my %formatsSupported = ( '1.0' => 1 );
+
+
+my $creator = "Torrus version @VERSION@\n" .
+    "This file was generated by command:\n" .
+    $0 . " \\\n";
+foreach my $arg ( @ARGV )
+{
+    if( $arg =~ /^--/ )
+    {
+        $creator .= ' ' . $arg . ' ';
+    }
+    else
+    {
+        $creator .= "\'" . $arg . "\'\\\n";
+    }
+}
+$creator .= "\n On " . scalar(localtime(time));
+
+my $ok = GetOptions(
+                    'in=s'        => \@infiles,
+                    'mkdir'       => \$makedirs,
+                    'limit=s'     => \$limitre,
+                    'forcebundle' => \$forcebundle,
+                    'fallback=i'  => \$fallback,
+                    'threads=i'   => \$workerThreads,
+                    'snmpdebug'   => \$snmpdebug,
+                    'verbose'     => \$verbose,
+                    'debug'       => \$debug
+                    );
+if( $ok and scalar( @ARGV ) > 0 )
+{
+    push( @infiles, @ARGV );
+}
+
+if( not $ok or scalar(@infiles) == 0 or
+    ($workerThreads > 1 and not $Torrus::Global::threadsEnabled ) )
+{
+    print STDERR "Usage: $0 --in=filename.ddx options... [ddx files]\n",
+    "Options:\n",
+    " --in=filename.ddx       discovery instructions XML file(s)\n",
+    " --mkdir                 create data-dir directories\n",
+    " --limit=regexp          limit the discovery by output files\n",
+    " --forcebundle           always write the bundle file\n",
+    " --fallback=integer      maximum age of XML file to fall back to\n",
+    " --threads=integer       number of parallel discovery threads\n",
+    " --verbose               print extra information\n",
+    " --debug                 print debugging information\n",
+    " --snmpdebug             print SNMP protocol details\n",
+    "\n";
+    if( not $Torrus::Global::threadsEnabled )
+    {
+        print STDERR "Multithreading is NOT SUPPORTED by current " .
+            "perl interpreter\n";
+    }
+
+    exit 1;
+}
+
+if( $snmpdebug )
+{
+    $Net::SNMP::Transport::UDP::DEBUG = 1;
+    $Net::SNMP::Message::DEBUG = 1;
+    $Net::SNMP::MessageProcessing::DEBUG = 1;
+    $Net::SNMP::Dispatcher::DEBUG = 1;
+}
+
+if( $debug )
+{
+    Torrus::Log::setLevel('debug');
+}
+elsif( $verbose )
+{
+    Torrus::Log::setLevel('verbose');
+}
+
+my $everythingsOk = 1;
+my $perOutfileHostParams = {};
+my %outputBundles;
+
+foreach my $infile ( @infiles )
+{
+    if( not -r $infile )
+    {
+        my $altfile = $Torrus::Global::discoveryDir . $infile;
+        if( not -r $altfile )
+        {
+            Error('Cannot find file ' . $infile .
+                  ' neither in current directory nor in ' .
+                  $Torrus::Global::discoveryDir);
+            exit 1;
+        }
+        else
+        {
+            $infile = $altfile;
+        }
+    }
+
+    Verbose('Processing ' . $infile);
+
+    my $parser = new XML::LibXML;
+    my $doc;
+    eval { $doc = $parser->parse_file( $infile );  };
+    if( $@ )
+    {
+        Error("Failed to parse $infile: $@");
+        exit 1;
+    }
+
+    my $root = $doc->documentElement();
+    if( $root->nodeName() ne 'snmp-discovery' )
+    {
+        Error('XML root element is not "snmp-discovery" in ' . $infile);
+        exit 1;
+    }
+        
+    my $format_version =
+        (($root->getElementsByTagName('file-info'))[0]->
+         getElementsByTagName('format-version'))[0]->textContent();
+    
+    $format_version =~ s/\s//g;
+    
+    if( not $format_version or not $formatsSupported{$format_version} )
+    {
+        Error('Invalid format or format version not supported: ' . $infile);
+        exit 1;
+    }
+
+    my $globalParams = parseParams( $root );
+
+
+    # Parse the body of the XML
+
+    foreach my $hostNode ( $root->getChildrenByTagName('host') )
+    {
+        my $hostParams = parseParams( $hostNode, $globalParams );
+        normalizeParams( $hostParams );
+
+        my $outfile = $hostParams->{'output-file'};
+        if( not exists($perOutfileHostParams->{$outfile}) )
+        {
+            $perOutfileHostParams->{$outfile} = [];
+        }
+        push( @{$perOutfileHostParams->{$outfile}}, $hostParams );
+
+        my $outBundles = $hostParams->{'output-bundle'};
+        if( length( $outBundles ) > 0 )
+        {
+            foreach my $bundleName ( split( /\s*,\s*/, $outBundles ) )
+            {
+                $bundleName = absXmlFilename( $bundleName );
+                $outputBundles{$bundleName}{ relXmlFilename($outfile) } = 1;
+            }
+        }
+    }
+}
+
+
+# Start discovery
+my $jobQueue;
+my $bundleDeletionQueue;
+my $confBuildSemaphore;
+
+if( $workerThreads > 1 )
+{
+    require threads;
+    require threads::shared;
+    require Thread::Queue;
+    require Thread::Semaphore;
+
+    threads::shared::share( \$everythingsOk );
+
+    $jobQueue = new Thread::Queue;
+    $bundleDeletionQueue = new Thread::Queue;
+    $confBuildSemaphore = new Thread::Semaphore;
+
+    # Enqueue the output filenames    
+    foreach my $outfile ( sort keys %{$perOutfileHostParams} )
+    {
+        if( not matchLimitRe( $outfile ) )
+        {
+            next;
+        }
+
+        $jobQueue->enqueue( $outfile );
+    }
+
+    # Start the worker threads
+    my @workers;
+    foreach my $i ( 1..$workerThreads )
+    {
+        push( @workers, threads->create( \&discoveryThread ) );
+    }
+
+    # Wait for workers to finish the jobs
+    while( my $thr = shift( @workers ) )
+    {
+        my $tid = $thr->tid();
+        $thr->join();
+        Debug('Cleaning up thread #' . $tid);
+        undef $thr;
+    }
+
+    # Process the files to be excluded from bundles
+
+    if( not $everythingsOk )
+    {
+        my $outfile;
+        while( defined( $outfile = $bundleDeletionQueue->dequeue_nb() ) )
+        {
+            removeFromBundle( $outfile );
+        }
+    }
+}
+else
+{
+    # Single-thread operation
+       
+    foreach my $outfile ( sort keys %{$perOutfileHostParams} )
+    {
+        if( not matchLimitRe( $outfile ) )
+        {
+            next;
+        }
+        
+        if( not doDiscover( $outfile ) )
+        {
+            removeFromBundle( $outfile );
+        }
+    }
+}
+
+# Discovery finished, do the bundles
+
+if( scalar( keys %outputBundles ) > 0 )
+{
+    if( defined( $limitre ) )
+    {
+        Warn('Cannot write bundles with --limit option specified. ' .
+             'Bundle files remain unchanged');
+    }
+    elsif( $everythingsOk )
+    {
+        foreach my $bundleName ( sort keys %outputBundles )
+        {
+            my $cb = new Torrus::ConfigBuilder;
+
+            $cb->addCreatorInfo( $creator );
+            
+            foreach my $bundleMember
+                ( sort keys %{$outputBundles{$bundleName}} )
+            {
+                $cb->addFileInclusion( $bundleMember );
+            }
+
+            my $ok = $cb->toFile( $bundleName );
+            if( $ok )
+            {
+                Verbose('Wrote bundle to ' . $bundleName);
+            }
+            else
+            {
+                Error('Cannot write bundle to ' . $bundleName . ': ' . $!);
+                $everythingsOk = 0;
+            }
+        }
+    }
+    else
+    {
+        Error('Skipping bundles generation because of errors');
+    }
+}
+
+
+exit($everythingsOk ? 0:1);
+
+
+sub parseParams
+{
+    my $parentNode = shift;
+    my $paramhash = shift;
+
+    # Clone the parameters hash
+    my $ret = {};
+    if( $paramhash )
+    {
+        while( my($key, $val) = each %{$paramhash} )
+        {
+            $ret->{$key} = $val;
+        }
+    }
+
+    foreach my $paramNode ( $parentNode->getChildrenByTagName('param') )
+    {
+        my $param = $paramNode->getAttribute('name');
+        my $value = $paramNode->getAttribute('value');
+
+        if( not $param )
+        {
+            Error("Parameter without name");
+            exit 1;
+        }
+
+        if( not defined( $value ) )
+        {
+            $value = $paramNode->textContent();
+        }
+
+        # Remove spaces in the head and tail.
+        $value =~ s/^\s+//;
+        $value =~ s/\s+$//;
+
+        $ret->{$param} = $value;
+    }
+    return $ret;
+}
+
+
+sub normalizeParams
+{
+    my $params = shift;
+
+    if( not defined( $params->{'output-file'} ) )
+    {
+        Warn('output-file parameter is not defined. Using routers.xml');
+        $params->{'output-file'} = 'routers.xml';
+    }
+    else
+    {
+        $params->{'output-file'} = absXmlFilename( $params->{'output-file'} );
+    }
+
+    if( defined( $params->{'host-subtree'} ) )
+    {
+        my $subtree = $params->{'host-subtree'};
+
+        if( $subtree !~ /^\/[0-9A-Za-z_\-\.\/]*$/ or
+            $subtree =~ /\.\./ )
+        {
+            Error("Invalid format for subtree name: " . $subtree);
+            exit 1;
+        }
+    }
+
+    if( defined( $params->{'snmp-community'} ) )
+    {
+        # Remove any possible Unicode character treatment
+        $params->{'snmp-community'} =
+            pack( 'A*', $params->{'snmp-community'} );
+    }
+}
+
+
+# Replaces $XMLCONFIG with the XML root directory
+sub absXmlFilename
+{
+    my $filename = shift;
+
+    my $subst = '$XMLCONFIG';
+    my $offset = index( $filename, $subst );
+    if( $offset >= 0 )
+    {
+        my $len = length( $subst );
+        substr( $filename, $offset, $len ) = $Torrus::Global::siteXmlDir;
+    }
+    else
+    {
+        if( $filename !~ /^\// )
+        {
+            $filename = $Torrus::Global::siteXmlDir . '/' . $filename;
+        }
+    }
+    return $filename;
+}
+
+
+# Removes XML root directory from path
+sub relXmlFilename
+{
+    my $filename = shift;
+
+    my $subst = $Torrus::Global::siteXmlDir;
+    my $len = length( $subst );
+
+    if( $filename =~ /^\// )
+    {
+        my $offset = index( $filename, $subst );
+        if( $offset == 0 )
+        {
+            $filename = substr( $filename, $len );
+            # we don't know if xmldir has a trailing slash
+            $filename =~ s/^\///;
+        }
+    }
+    return $filename;
+}
+
+
+sub matchLimitRe
+{
+    my $filename = shift;
+
+    if( defined( $limitre ) )
+    {
+        $filename =~ s/^.*\///;
+
+        if( $filename !~ $limitre )
+        {
+            return 0;
+        }
+    }
+
+    return 1;
+}
+
+
+# Pick up next available outfile until the job queue is empty
+
+sub discoveryThread
+{
+    Torrus::Log::setTID( threads->tid() );
+    Debug('Started thread #' . threads->tid());
+    my $outfile;
+    while( defined( $outfile = $jobQueue->dequeue_nb() ))
+    {
+        if( not doDiscover( $outfile ) )
+        {
+            $bundleDeletionQueue->enqueue( $outfile );
+        }
+    }
+    Debug('Finished thread #' . threads->tid());
+}
+
+
+
+sub doDiscover
+{
+    my $outfile = shift;
+    
+    Verbose('Preparing to write ' . $outfile);
+
+    my $dd = new Torrus::DevDiscover;
+    my $ok = 1;
+
+    foreach my $hostParams ( @{$perOutfileHostParams->{$outfile}} )
+    {
+        $ok = $dd->discover( $hostParams );
+
+        if( not $ok )
+        {
+            Error($outfile . ' was not written because of errors');
+            $everythingsOk = 0;
+            last;
+        }
+    }
+
+    if( $ok )
+    {
+ &nb