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 'Przykładowe serwery:
';
print_r($servers);
echo '
';
// liczymy ile jest serwerów
$ile_serwerow = count(array_keys($servers));
// definiujemy tablice
$tablica_load = array();
$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 'Wyświetlamy tablice parametrów:
';
print_r($tablica_load);
echo '
';
print_r($tablica_upload);
echo '
';
print_r($tablica_download);
echo '
';
print_r($tablica_memory_free);
echo '
';
print_r($tablica_memory_usage);
echo '
';
print_r($tablica_cpu_usage);
echo '
';
// wybieramy serwery, które nie przekraczają określonych wartości
$tablica_load2= array();
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_load);
unset($tablica_upload);
unset($tablica_download);
unset($tablica_memory_free);
unset($tablica_memory_usage);
unset($tablica_cpu_usage);
echo 'Serwery, które nie przekraczają określonych wartości:
';
print_r($tablica_load2);
echo '
';
print_r($tablica_upload2);
echo '
';
print_r($tablica_download2);
echo '
';
print_r($tablica_memory_free2);
echo '
';
print_r($tablica_memory_usage2);
echo '
';
print_r($tablica_cpu_usage2);
echo '
';
// 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 'Serwery posortowane według najmniejszego obciażenia:
';
print_r($tablica_load2);
echo '
';
print_r($tablica_upload2);
echo '
';
print_r($tablica_download2);
echo '
';
print_r($tablica_memory_free2);
echo '
';
print_r($tablica_memory_usage2);
echo '
';
print_r($tablica_cpu_usage2);
echo '
';
// 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 'Tablicza najmniej obciazonych serwerow:
';
print_r($tablica_najmniej_obciazone);
echo '
';
// zliczanie wystepowania
$tablica_najczesciej_wystepuje = array_count_values($tablica_najmniej_obciazone);
echo 'Najczesciej wystepujace:
';
print_r($tablica_najczesciej_wystepuje);
// pobieranie 1 klucz
list ($klucz_serwer, $wartosc_serwer) = each ($tablica_najczesciej_wystepuje);
$serwer = $klucz_serwer;
echo '
Wreszcie koniec. Ten serwer jest najmniej obciazony: '.$serwer.'';
[/code]
Wiem, że da się to zawrzeć o połowę mniej kodu ale cóż. Pierwsza wersja jest.