Na aktualny poziom, na którym się znajduje w php to zrobiłem taki skrypt, który wybiera najbardziej obciążony serwer. Wykorzystałem znane mi funkcje.
Byłbym wdzięczny za jakaś lepszą wersje tego.
// testowe tablice
$servers2[] = array('server' => 'http://jakistestowy2.pl', 'load' => '1.66', 'upload' => '60.31', 'download' => '90.50', 'memory_free' => '1300', 'memory_usage' => '700', 'cpu%_usage' => '40'); $servers2[] = array('server' => 'http://jakistestowy.pl', 'load' => '0.44', 'upload' => '20.01', 'download' => '30.00', 'memory_free' => '1700', 'memory_usage' => '300', 'cpu%_usage' => '16');
$servers2[] = array('server' => 'http://jakistestowy3.pl', 'load' => '0.78', 'upload' => '100.00', 'download' => '70.65', 'memory_free' => '1000', 'memory_usage' => '1000', 'cpu%_usage' => '60');
$servers = $servers2;
echo '<b>Przykładowe serwery:</b> <br />';
// liczymy ile jest serwerów
// definiujemy tablice
$tablica_upload = array(); $tablica_download = array(); $tablica_memory_free = array(); $tablica_memory_usage = array(); $tablica_cpu_usage = array();
// tworzymy tablice parametrów
for ($i=0; $i<$ile_serwerow;$i++)
{
$tablica_load[$servers[$i]['server']] = $servers[$i]['load'];
$tablica_upload[$servers[$i]['server']] = $servers[$i]['upload'];
$tablica_download[$servers[$i]['server']] = $servers[$i]['download'];
$tablica_memory_free[$servers[$i]['server']] = $servers[$i]['memory_free'];
$tablica_memory_usage[$servers[$i]['server']] = $servers[$i]['memory_usage'];
$tablica_cpu_usage[$servers[$i]['server']] = $servers[$i]['cpu%_usage'];
}
echo '<b>Wyświetlamy tablice parametrów:</b> <br />'; echo '<br /><br /><br /><br />';
// wybieramy serwery, które nie przekraczają określonych wartości
foreach($tablica_load as $klucz_load => $wartosc_load)
{
if($wartosc_load < '1.50')
{
$tablica_load2[$klucz_load] = $wartosc_load;
}
}
$tablica_upload2= array(); foreach($tablica_upload as $klucz_upload => $wartosc_upload)
{
if($wartosc_upload < '95.00')
{
$tablica_upload2[$klucz_upload] = $wartosc_upload;
}
}
$tablica_download2= array(); foreach($tablica_download as $klucz_download => $wartosc_download)
{
if($wartosc_download < '90.00')
{
$tablica_download2[$klucz_download] = $wartosc_download;
}
}
$tablica_memory_free2= array(); foreach($tablica_memory_free as $klucz_memory_free => $wartosc_memory_free)
{
if($wartosc_memory_free > '100.00')
{
$tablica_memory_free2[$klucz_memory_free] = $wartosc_memory_free;
}
}
$tablica_memory_usage2= array(); foreach($tablica_memory_usage as $klucz_memory_usage => $wartosc_memory_usage)
{
if($wartosc_memory_usage < '1900.00')
{
$tablica_memory_usage2[$klucz_memory_usage] = $wartosc_memory_usage;
}
}
$tablica_cpu_usage2= array(); foreach($tablica_cpu_usage as $klucz_cpu_usage => $wartosc_cpu_usage)
{
if($wartosc_cpu_usage < '90.00')
{
$tablica_cpu_usage2[$klucz_cpu_usage] = $wartosc_cpu_usage;
}
}
unset($tablica_download); unset($tablica_memory_free); unset($tablica_memory_usage); unset($tablica_cpu_usage);
echo '<b>Serwery, które nie przekraczają określonych wartości:</b> <br />'; echo '<br /><br /><br /><br />';
// wybieramy najmniejsze wartości z tych serwerów które nie przekroczyły wartości maksymalnych
// od najmniejszej do największej
function cmp($a, $b)
{
if ($a == $b)
{
return 0;
}
return ($a < $b) ? -1 : 1;
}
// od największej do najmniejszej
function cmp2($a, $b)
{
if ($a == $b)
{
return 0;
}
return ($a > $b) ? +1 : 1;
}
// najmniejsza wartość
uasort($tablica_load2, 'cmp'); uasort($tablica_upload2, 'cmp'); uasort($tablica_download2, 'cmp'); uasort($tablica_memory_free2, 'cmp2'); uasort($tablica_memory_usage2, 'cmp'); uasort($tablica_cpu_usage2, 'cmp');
echo '<b>Serwery posortowane według najmniejszego obciażenia:</b> <br />'; echo '<br /><br /><br /><br />';
// wybieranie wartości z najmniej obciazonych serwerów
list
($klucz_load, $wartosc_load) = each ($tablica_load2); $serwer_load = $klucz_load;
list
($klucz_uplaod, $wartosc_upload) = each ($tablica_upload2); $serwer_upload = $klucz_uplaod;
list
($klucz_download, $wartosc_download) = each ($tablica_download2); $serwer_download = $klucz_download;
list
($klucz_memory_free, $wartosc_memory_free) = each ($tablica_memory_free2); $serwer_memory_free = $klucz_memory_free;
list
($klucz_memory_usage, $wartosc_memory_usage) = each ($tablica_memory_usage2); $serwer_memory_usage = $klucz_memory_usage;
list
($klucz_cpu_usage, $wartosc_cpu_usage) = each ($tablica_cpu_usage2); $serwer_cpu_usage = $klucz_cpu_usage;
// tablica najmniej obciążonych serwerów
$tablica_najmniej_obciazone = array($serwer_load, $serwer_upload, $serwer_download, $serwer_memory_free, $serwer_memory_usage, $serwer_cpu_usage);
echo '<b>Tablicza najmniej obciazonych serwerow:</b> <br />'; print_r($tablica_najmniej_obciazone);
// zliczanie wystepowania
echo '<b>Najczesciej wystepujace:</b> <br />'; print_r($tablica_najczesciej_wystepuje);
// pobieranie 1 klucz
list
($klucz_serwer, $wartosc_serwer) = each ($tablica_najczesciej_wystepuje); $serwer = $klucz_serwer;
echo '<br /><b>Wreszcie koniec. Ten serwer jest najmniej obciazony: '.$serwer.'</b>';
Wiem, że da się to zawrzeć o połowę mniej kodu ale cóż. Pierwsza wersja jest.