"" and $vsent['sitedown'] <> "") { /* fallback IP */ $slbdconf .= "\t:sitedown={$vsent['sitedown']}:\\\n"; /* fallback port */ $slbdconf .= "\t:sitedown-port={$vsent['port']}:\\\n"; } for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) { if ($config['load_balancer']['lbpool'][$i]['name'] == $vsent['pool']) { $svrcnt = 0; $svrtxt = ""; $svrtxt = "\t:service-port={$config['load_balancer']['lbpool'][$i]['port']}:\\\n"; if($config['load_balancer']['lbpool']) if(is_array($config['load_balancer']['lbpool'][$i]['servers'])) foreach ($config['load_balancer']['lbpool'][$i]['servers'] as $lbsvr) { $svrtxt .= "\t:{$svrcnt}={$lbsvr}:\\\n"; $svrcnt++; } $slbdconf .= "\t:method=round-robin:\\\n"; $slbdconf .= "\t:services={$svrcnt}:\\\n"; $slbdconf .= $svrtxt; if($config['load_balancer']['lbpool'][$i]['monitor'] == "ICMP") { $slbdconf .= "\t:ping:\n"; } else { $slbdconf .= "\t:tcppoll:send=:expect=:\n"; } } } $should_start=1; } } /* Gateway Pools */ $a_settings['latencylow'] = "200"; $a_settings['latencyhigh'] = "500"; $a_settings['losslow'] = "10"; $a_settings['losshigh'] = "20"; /* kill apinger process */ if(is_process_running("apinger")) mwexec("/usr/bin/killall apinger", true); $fda = fopen("{$g['varetc_path']}/apinger.conf", "w"); $apingerconfig = <<&1", true); mwexec("/sbin/route add -host {$lbsvr_split[1]} 127.0.0.1 2>&1", true); } else { mwexec("/sbin/route delete -host {$lbsvr_split[1]} 2>&1", true); mwexec("/sbin/route add -host {$lbsvr_split[1]} {$gateway} 2>&1", true); } } } } } if($should_start == 1) { fwrite($fd, $slbdconf); fclose($fd); mwexec("/usr/bin/killall -9 slbd", true); sleep(2); /* startup slbd pointing it's config at /var/etc/slbd.conf with a polling interval of 5 seconds */ mwexec("/usr/local/sbin/slbd -c{$g['varetc_path']}/slbd.conf -r5000"); } else { mwexec("/usr/bin/killall -9 slbd", true); fclose($fd); } if(!is_process_running("apinger") && (!empty($a_addresses))) { if (is_dir("{$g['tmp_path']}")) chmod("{$g['tmp_path']}", 01777); if (is_dir("{$g['vardb_path']}/rrd")) chown("{$g['vardb_path']}/rrd", "nobody"); /* start a new apinger process */ mwexec_bg("/usr/local/sbin/apinger -c {$g['varetc_path']}/apinger.conf"); } } /* return the status of the apinger targets as a array */ function return_apinger_status() { global $config; global $g; $apingerstatus = array(); if(is_readable("{$g['tmp_path']}/apinger.status")) $apingerstatus = file("{$g['tmp_path']}/apinger.status"); $status = array(); foreach($apingerstatus as $line) { $fields = explode(":", $line); switch($fields[0]) { case "Target": $target = trim($fields[1]); $status[$target] = array(); $status[$target]['monitor'] = $target; break; case "Description": $status[$target]['name'] = trim($fields[1]); break; case "Last reply received": $status[$target]['lastcheck'] = trim($fields[1]) .":". trim($fields[2]) .":". trim($fields[3]); break; case "Average delay": $status[$target]['delay'] = trim($fields[1]); break; case "Average packet loss": $status[$target]['loss'] = trim($fields[1]); break; case "Active alarms": $status[$target]['status'] = trim($fields[1]); break; } } return($status); } ?>