'1', // up to 1meg '9999999' => '1', // 1-10meg '10000000' => '2', // 10meg '99999999' => '2', // 10-100meg '100000000' => '4', // 100meg '999999999' => '4', // 100meg-1gig '1000000000' => '6', // 1gig '9999999999' => '6', // 1gig-10gig '10000000000' => '8', // 10gig '99999999999' => '8' // 10gig-100gig ); // check if the goalposts have moved if (is_dir($cacti_base) && file_exists($cacti_base . "/include/global.php")) { // include the cacti-config, so we know about the database include_once($cacti_base . "/include/global.php"); $config['base_url'] = (isset($config['url_path']) ? $config['url_path'] : $cacti_url); $cacti_found = true; } elseif (is_dir($cacti_base) && file_exists($cacti_base . "/include/config.php")) { // include the cacti-config, so we know about the database include_once($cacti_base . "/include/config.php"); $config['base_url'] = (isset($config['url_path']) ? $config['url_path'] : $cacti_url); $cacti_found = true; } else { print "You need to fix your editor-config.php\n"; exit(); } // the following are defaults. You can change those from the command-line // options now. // set this to true to adjust the width of links according to speed $map_widths = false; // set this to true to use DSStats targets instead of RRD file targets $use_dsstats = false; $overwrite_targets = false; $outputmapfile = ""; $inputmapfile = ""; // initialize object $cg = new Console_Getopt(); $short_opts = ''; $long_opts = array ( "help", "input=", "output=", "debug", "target-dsstats", "target-rrdtool", "overwrite-targets", "speed-width-map" ); $args = $cg->readPHPArgv(); $ret = $cg->getopt($args, $short_opts, $long_opts); if (PEAR::isError($ret)) { die("Error in command line: " . $ret->getMessage() . "\n (try --help)\n"); } $gopts = $ret[0]; $options_output = array (); if (sizeof($gopts) > 0) { foreach ($gopts as $o) { switch ($o[0]) { case '--debug': $weathermap_debugging = true; break; case '--overwrite-targets': $overwrite_targets = true; break; case '--speed-width-map': $map_widths = true; break; case '--target-dsstats': $use_dsstats = true; break; case '--target-rrdtool': $use_dsstats = false; break; case '--output': $outputmapfile = $o[1]; break; case '--input': $inputmapfile = $o[1]; break; case '--help': print "cacti-integrate.php\n"; print "Copyright Howard Jones, 2008-2010 howie@thingy.com\nReleased under the GNU Public License\nhttp://www.network-weathermap.com/\n\n"; print "Usage: php cacti-integrate.php [options]\n\n"; print " --input {filename} - read config from this file\n"; print " --output {filename} - write new config to this file\n"; print " --target-rrdtool - generate rrd file targets (default)\n"; print " --target-dsstats - generate DSStats targets\n"; print " --debug - enable debugging\n"; print " --help - show this help\n"; exit(); break; } } } if ($inputmapfile == '' || $outputmapfile == '') { print "You MUST specify an input and output file. See --help\n"; exit(); } // figure out which template has interface traffic. This might be wrong for you. $data_template = "Interface - Traffic"; $data_template_id = db_fetch_cell("select id from data_template where name='" . mysql_real_escape_string($data_template) . "'"); $map = new WeatherMap; $map->ReadConfig($inputmapfile); $fmt_cacti_graph = $cacti_url . "graph_image.php?local_graph_id=%d&rra_id=0&graph_nolegend=true&graph_height=100&graph_width=300"; $fmt_cacti_graphpage = $cacti_url . "graph.php?rra_id=all&local_graph_id=%d"; // // Try and populate all three SET vars for each NODE // cacti_id (host.id) // hostname (host.description) // address (host.hostname) (sorry about that) // foreach ($map->nodes as $node) { $name = $node->name; print "NODE $name\n"; $host_id = $node->get_hint("cacti_id"); $hostname = $node->get_hint("hostname"); $address = $node->get_hint("address"); if ($host_id != '') { $res1 = db_fetch_row("select hostname,description from host where id=" . intval($host_id)); if ($res1) { if ($hostname == '') { $hostname = $res1['description']; $map->nodes[$node->name]->add_hint("hostname", $hostname); } if ($address == '') { $address = $res1['hostname']; $map->nodes[$node->name]->add_hint("address", $address); } } } // by now, if there was a host_id, all 3 are populated. If not, then we should try one of the others to get a host_id else { if ($address != '') { $res2 = db_fetch_row("select id,description from host where hostname='" . mysql_real_escape_string($address) . "'"); if ($res2) { $host_id = $res2['id']; $map->nodes[$node->name]->add_hint("cacti_id", $host_id); if ($hostname == '') { $hostname = $res2['description']; $map->nodes[$node->name]->add_hint("hostname", $hostname); } } } elseif ($hostname != '') { $res3 = db_fetch_row("select id,hostname from host where description='" . mysql_real_escape_string($hostname) . "'"); if ($res3) { $host_id = $res3['id']; $map->nodes[$node->name]->add_hint("cacti_id", $host_id); if ($address == '') { $address = $res3['hostname']; $map->nodes[$node->name]->add_hint("address", $address); } } } } if ($host_id != '') { $info = $config['base_url'] . "host.php?id=" . $host_id; $tgt = "cactimonitor:$host_id"; $map->nodes[$node->name]->targets = array (array ( $tgt, '', '', 0, $tgt )); $map->nodes[$node->name]->infourl[IN] = $info; } print " $host_id $hostname $address\n"; } // Now lets go through the links // we want links where at least one of the nodes has a cacti_id, and where either interface_in or interface_out is set foreach ($map->links as $link) { if (isset($link->a)) { $name = $link->name; $a = $link->a->name; $b = $link->b->name; $int_in = $link->get_hint("in_interface"); $int_out = $link->get_hint("out_interface"); $a_id = intval($map->nodes[$a]->get_hint("cacti_id")); $b_id = intval($map->nodes[$b]->get_hint("cacti_id")); print "LINK $name\n"; if (count($link->targets) == 0 || $overwrite_targets ) { if ((($a_id + $b_id) > 0) && ($int_out . $int_in == '')) { print " (could do if there were interfaces)\n"; } if ((($a_id + $b_id) == 0) && ($int_out . $int_in != '')) { print " (could do if there were host_ids)\n"; } $tgt_interface = ""; $tgt_host = ""; if ($a_id > 0 && $int_out != '') { print " We'll use the A end.\n"; $tgt_interface = $int_out; $tgt_host = $a_id; $ds_names = ":traffic_in:traffic_out"; } elseif ($b_id > 0 && $int_in != '') { print " We'll use the B end and reverse it.\n"; $tgt_interface = $int_in; $tgt_host = $b_id; $ds_names = ":traffic_out:traffic_in"; } else { print " No useful ends on this link - fill in more detail (host id, IP) on either NODE $a or $b\n"; } if ($tgt_host != "") { $int_list = explode(":::", $tgt_interface); $total_speed = 0; $total_target = array (); foreach ($int_list as $interface) { print " Interface: $interface\n"; foreach (array ( 'ifName', 'ifDescr', 'ifAlias' ) as $field) { $SQL = sprintf( "select data_local.id, data_source_path, host_snmp_cache.snmp_index from data_template_data, data_local,snmp_query, host_snmp_cache where data_template_data.local_data_id=data_local.id and host_snmp_cache.snmp_query_id = snmp_query.id and data_local.host_id=host_snmp_cache.host_id and data_local.snmp_query_id=host_snmp_cache.snmp_query_id and data_local.snmp_index=host_snmp_cache.snmp_index and host_snmp_cache.host_id=%d and host_snmp_cache.field_name='%s' and host_snmp_cache.field_value='%s' and data_local.data_template_id=%d order by data_template_data.id desc limit 1;", $tgt_host, $field, mysql_real_escape_string($interface), $data_template_id); $res4 = db_fetch_row($SQL); if ($res4) break; } // if we found one, add the interface to the targets for this link if ($res4) { $target = $res4['data_source_path']; $local_data_id = $res4['id']; $snmp_index = $res4['snmp_index']; $tgt = str_replace("", $config["rra_path"], $target); $tgt = $tgt . $ds_names; if ($use_dsstats) { $map->links[$link->name]->targets[] = array ( $tgt, '', '', 0, $tgt ); } else { $tgt = "8*dsstats:$local_data_id" . $ds_names; $map->links[$link->name]->targets[] = array ( $tgt, '', '', 0, $tgt ); } $SQL_speed = "select field_value from host_snmp_cache where field_name='ifSpeed' and host_id=$tgt_host and snmp_index=$snmp_index"; $speed = db_fetch_cell($SQL_speed); $SQL_hspeed = "select field_value from host_snmp_cache where field_name='ifHighSpeed' and host_id=$tgt_host and snmp_index=$snmp_index"; $hspeed = db_fetch_cell($SQL_hspeed); if ($hspeed && intval($hspeed) > 20) $total_speed += ($hspeed * 1000000); else if ($speed) $total_speed += intval($speed); $SQL_graphid = "select graph_templates_item.local_graph_id FROM graph_templates_item,graph_templates_graph,data_template_rrd where graph_templates_graph.local_graph_id = graph_templates_item.local_graph_id and task_item_id=data_template_rrd.id and local_data_id=$local_data_id LIMIT 1;"; $graph_id = db_fetch_cell($SQL_graphid); if ($graph_id) { $overlib = sprintf($fmt_cacti_graph, $graph_id); $infourl = sprintf($fmt_cacti_graphpage, $graph_id); print " INFO $infourl\n"; print " OVER $overlib\n"; $map->links[$name]->overliburl[IN][] = $overlib; $map->links[$name]->overliburl[OUT][] = $overlib; $map->links[$name]->infourl[IN] = $infourl; $map->links[$name]->infourl[OUT] = $infourl; } else { print " Couldn't find a graph that uses this rrd??\n"; } } else { print " Failed to find RRD file for $tgt_host/$interface\n"; } } print " SPEED $total_speed\n"; $map->links[$name]->max_bandwidth_in = $total_speed; $map->links[$name]->max_bandwidth_out = $total_speed; $map->links[$name]->max_bandwidth_in_cfg = nice_bandwidth($total_speed); $map->links[$name]->max_bandwidth_out_cfg = nice_bandwidth($total_speed); if ($map_widths) { foreach ($width_map as $map_speed => $map_width) { if ($total_speed <= $map_speed) { $map->links[$name]->width = $width_map{$map_speed}; print " WIDTH " . $width_map{$map_speed}. "\n"; continue 2; } } } } } else { print "Skipping link with targets\n"; } } } $map->WriteConfig($outputmapfile); print "Wrote config to $outputmapfile\n"; ?> WebSVN - weathermap - Blame - Rev 122 - /random-bits/cacti-integrate.php
  jablonka.czprosek.czf

weathermap

Subversion Repositories:
[/] [random-bits/] [cacti-integrate.php] - Blame information for rev 122

 

Line No. Rev Author Line

Powered by WebSVN 2.2.1