diff -r 89a4d9879171 -r c756e522c9ac bin/rrdweb-pmacct --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/rrdweb-pmacct Sun Jan 23 13:50:13 2011 +0200 @@ -0,0 +1,96 @@ +#!/usr/bin/env python +""" + Import data from pmacct to RRD +""" + +import optparse +import logging + +from rrdweb import pmacct + +log = logging.getLogger('rrdweb-pmacct') + +def parse_args (args) : + global options + + parser = optparse.OptionParser( + usage = "%prog [options]" + ) + + # generic + parser.add_option('-q', "--quiet", help="No output in normal operation", + action='store_const', dest="loglvl", const=logging.WARNING, + ) + parser.add_option('-v', "--verbose", help="More output", + action='store_const', dest="loglvl", const=logging.INFO, + ) + parser.add_option('-D', "--debug", help="Even more output", + action='store_const', dest="loglvl", const=logging.DEBUG, + ) + + # paths + parser.add_option('-R', "--rrd-dir", default="var/rrd", help="Path to directory containing .rrd files") + parser.add_option('-S', "--rrd-step", help="RRD step interval (seconds) for new .rrd's", metavar='STEP') + + parser.add_option('-I', "--in-sock", help="Path to pmacct host-in.sock", metavar='SOCK') + parser.add_option('-O', "--out-sock", help="Path to pmacct host-out.sock", metavar='SOCK') + + + # defaults + parser.set_defaults( + loglvl = logging.INFO, + ) + + ## parse + options, args = parser.parse_args(args) + + # validate + if not (options.in_sock and options.out_sock) : + raise Exception("Both --in-sock and --out-sock are required options") + + ## apply + logging.basicConfig( + format = "[%(levelname)8s] %(funcName)20s : %(message)s", + level = options.loglvl, + ) + + return args + +def get_hosts_data () : + """ + Returns the in/out host tables. + """ + + log.debug("fetching hosts data from %s + %s", options.in_sock, options.out_sock) + + # read summaries + in_table = list(pmacct.pmacct_summary(options.in_sock)) + out_table = list(pmacct.pmacct_summary(options.out_sock)) + + # merge into host data + hosts = pmacct.host_counters(in_table, out_table) + + log.debug("got %d in entries + %d out entries -> %d hosts", len(in_table), len(out_table), len(hosts)) + + return hosts.values() + +def main (args) : + # parse + args = parse_args(args) + + # list of Host objects + hosts = get_hosts_data() + + log.debug("full set of host data: %s", hosts) + log.info("Updating %d hosts...", len(hosts)) + + # update + for host in hosts : + log.info("Updating host %s...", host.ip) + + pmacct.update_host(host, rrd_root=options.rrd_dir, rrd_step=options.rrd_step) + +if __name__ == '__main__' : + from sys import argv + + main(argv[1:])