$login_count = `last | grep / | cut -d' ' -f1 | sort | uniq -c`; // compact whitespace, remove leading/trailing whitespace $login_count = trim(ereg_replace("[[:space:]]+", ' ', $login_count)); // convert to array, format: // odds = login name, evens = login count (2, pedram, 5, shawn, ...) $login_count = explode(" ", $login_count); // loop through our raw data and store the pertinant stats for ($i = 0, $x = 0; $i < sizeof($login_count); $i += 2, $x++) { $days = $hours = $mins = 0; // strip out the login duration (not including those currently logged in) // XXX - add support for users still logged in. $login_time = `last | grep -e ^{$login_count[$i+1]} | grep -v still | cut -d'(' -f2`; $login_time = ereg_replace("[[:space:]]+", "", str_replace("\n", "", $login_time)); $login_time = explode(")", $login_time); // determine the login durations for ($j = 0; $j < sizeof($login_time); $j++) { $entry = explode(":", $login_time[$j]); $days += substr($entry[0], 0, strpos($entry[0], "+")); $hours += substr($entry[0], strpos($entry[0], "+")); $mins += $entry[1]; } // formatting $hours += floor($mins / 60); $days += floor($hours / 24); $hours = $hours % 24; $mins = $mins % 60; $login_stats[$x]["user"] = $login_count[$i+1]; $login_stats[$x]["count"] = $login_count[$i]; $login_stats[$x]["days"] = $days; $login_stats[$x]["hours"] = $hours; $login_stats[$x]["mins"] = $mins; $login_stats[$x]["start"] = $wtmp_start; } return $login_stats; } /******************************************************************************* * helper functions * *******************************************************************************/ /////////////////////////////////////////////////////////////////////////////// // convert_bytes // function convert_bytes ($bytes) { $kbytes = $bytes / 1024; if ($kbytes > 1048576) $converted = sprintf("%.2f GB", $kbytes / 1048576); else if ($kbytes > 1024) $converted = sprintf("%.2f MB", $kbytes / 1024); else $converted = sprintf("%.2f KB", $kbytes); return $converted; } ?>