Pubblicato su www.linuxvalley.com
pippo sli1 192.168.0.1 Fri Oct 22 11:08 - 12:29 (01:21) 4877 pippo tty1 192.168.0.1 Fri Oct 22 11:08 - 11:08 (00:00) 0 pluto sli4 192.168.0.1 Fri Oct 22 11:05 - 11:11 (00:06) 369 pluto tty4 192.168.0.1 Fri Oct 22 11:05 - 11:05 (00:00) 0 paperino sli5 192.168.0.1 Fri Oct 22 11:03 - 11:07 (00:04) 250 paperino tty5 192.168.0.1 Fri Oct 22 11:03 - 11:03 (00:00) 0Si osserva che le righe stampate sono formate da una serie di valori separati da spazi. Possiamo quindi dire, adottando alcuni termini tipici del mondo dei database, che ogni riga è un record composto da più campi (field). Il primo campo è lo username dell'utente; il secondo contiene il nome e il numero dell'interfaccia asincrona del terminal server ed il tty del server linux; il terzo è l'indirizzo ip dell'interfaccia ethernet del terminal server. Gli altri valori in sequenza sono; giorno, mese, numero del giorno, ora di inizio e di fine della connessione dell'utente (separate da un trattino). Gli ultimi due campi sono i tempi totali della connessione: uno espresso nel formato (giorni+ore:minuti) e l'altro in secondi. Il nostro obiettivo è quello di intabellare i dati relativi alle connessioni di un particolare utente in un mese ben preciso dell'anno ed offrirne una rappresentazione grafica con un diagramma statistico. Si inizia preparando il form taclast.php3 per la scelta dell'utente e del mese.
<html> <head> <title>Xtacacs Monitor</title> </head> <body> <form method="post" action="http://localhost/result.php3"> <table border> <tr> <td>UTENTE<br> <select name="user"> <?php // apro in lettura il file /etc/passwd $fp = fopen("/etc/passwd", "r"); while(! feof($fp)) { // leggo una riga del file $row = fgets($fp, 132); // creo un array dei campi della riga // usando il carattere : come separatore $field = split(":", $row); if ($field[3] == 100) { // se l'utente e del gruppo users creo // un array associativo composto dalle // coppie username-nome_utente $users[$field[0]] = $field[4]; } } fclose($fp); // ordino l'array associativo asort($users); // creo il menu html per la scelta dell'utente for(reset($users); $indice=key($users); next($users)) { echo "<option value=\"$indice\">$users[$indice]\n"; } ?> </select> </td> <td>MESE<br> <select name=mese> <option value="Jan">Gennaio <option value="Feb">Febbraio <option value="Mar">Marzo <option value="Apr">Aprile <option value="May">Maggio <option value="Jun">Giugno <option value="Jul">Luglio <option value="Aug">Agosto <option value="Sep">Settembre <option value="Oct">Ottobre <option value="Nov">Novembre <option value="Dec">Dicembre </select> </td> <td>TIPO<br> <input type="radio" name="tipo" value="giornaliere" checked> Giornaliere<br> <input type="radio" name="tipo" value="totali"> Totali </td> <td> <input type="submit" value="Ok"><br> <input type="reset" value="Annulla"> </td> </tr> </table> </form> </body> </html>
Successivamente si scrive il codice (result.php3) per realizzare la presentazione di dati e grafico.
<html> <head> <title></title> </head> <body> <?php // scrivo il titolo usando i parametri passati da taclast.php echo "CONNESSIONI PPP DELL'UTENTE \"$user\" NEL MESE DI \"$mese\"<p>\n"; ?> <table border> <tr bgcolor=#c0c0c0> <td>GIORNO</td> <td>ORA DI INIZIO CONNESSIONE</td> <td>ORA DI FINE CONNESSIONE</td> <td>DURATA (gg+hh:mm)</td> </tr> <?php // definisco la densità della griglia del grafico define("GRID", 60); // eseguo taclast filtrando il risultato per utente e mese // l'output del comando viene memorizzato in un array exec("/usr/local/bin/taclast | grep -e $user.*sli.*$mese", $record); // calcolo in numero di elementi dell'array $n_record = sizeof($record); $n = $n_record - 1; // larghezza in pixel del grafico $x_max = 720; // altezza in pixel del grafico $y_max = $n_record * GRID; // creo l'immagine per il grafico $img = imagecreate($x_max+1, $y_max+1); // definisco il colore di sfondo del grafico $bianco = imagecolorallocate($img, 255, 255, 255); // definisco gli altri colori del grafico $nero = imagecolorallocate($img, 0, 0, 0); $grigio = imagecolorallocate($img, 200, 200, 200); $blu = imagecolorallocate($img, 0, 0, 255); // disegno le etichette per i valori del grafico // e creo la tabella html per i dati numerici $k = 0; while($k < $n_record) { $field = split(" +", $record[$k]); // creo l'array della durata in secondi delle connessioni $secondi[] = $field[10]; // creo l'array della durata in hh:mm delle connessioni $oreminuti[] = $field[9]; // disegno un'etichetta imagestring($img, 5, 0, GRID*$k, "$field[5] $field[3] $field[6] $field[8]", $nero); $x1 = $secondi[$k]/60 + 185; $y1 = GRID * $k; imagestring($img, 4, $x1, $y1, "$oreminuti[$k]", $nero); echo "<tr>\n"; echo "<td>$field[5] $field[3]</td>\n"; echo "<td><font color=#00ff00>$field[6]</font></td>\n"; echo "<td><font color=#ff0000>$field[8]</font></td>\n"; echo "<td><font color=#0000ff>$field[9]</font></td>\n"; echo "</tr>"; $k++; } echo "</table>\n"; // disegno il grafico $k = 0; while($k < $n_record - 1) { $i = $k + 1; $x1 = $secondi[$k]/60 + 180; $y1 = GRID * $k; $x2 = $secondi[$i]/60 + 180; $y2 = GRID * ($k + 1); // traccio una linea imageline($img, $x1, $y1, $x2, $y2, $nero); $k++; } imageline($img, 180, 0, $secondi[0]/60+180, 0, $nero); imageline($img, 180, 0, 180, $y_max-GRID, $nero); imageline($img, 180, $y_max-GRID, $secondi[$n]/60+180, $y_max-GRID, $nero); // coloro il grafico di blu imagefill($img, 185, 5, $blu); // disegno la griglia del grafico // usando delle linee tratteggiate $x = 0; while ($x <= $x_max) { imagedashedline($img, $x, 0, $x, $y_max-GRID, $grigio); $x = $x + GRID; } $y = 0; while ($y < $y_max) { imagedashedline($img, 0, $y, $x_max, $y, $grigio); $y = $y + GRID; } // salvo il grafico su una immagine gif imagegif($img, "/www/share/apache/htdocs/img/grafico.gif"); sleep(3); ?> <p> <img src="img/grafico.gif"> </body> </html>Il risultato dell'esecuzione dello script result.php3 da parte di taclast.php3 sarà simile a quello mostrato in figura2 e 3.
Data creazione HTML: Gennaio 2000
Autore: Francesco Munaretto
E-mail: NoSpam@thank.you