|
| 1 | +#!/usr/bin/env perl |
| 2 | + |
| 3 | +$directory_label = $ARGV[0]; |
| 4 | +$dir_table = $directory_label . "_dir"; |
| 5 | +$file_table = $directory_label . "_file"; |
| 6 | +$update_time_table = $directory_label . "_updateTime"; |
| 7 | + |
| 8 | +use CGI; # load CGI routines |
| 9 | +use DBI; |
| 10 | +$user = "diskmanager"; |
| 11 | +$password = ""; |
| 12 | +$database = "diskManagement"; |
| 13 | +$hostname = "localhost"; |
| 14 | + |
| 15 | +$seconds_per_year = 365.25*24*60*60; |
| 16 | + |
| 17 | +$dbh = DBI->connect("DBI:mysql:$database:$hostname", $user, $password); |
| 18 | + |
| 19 | +$q = new CGI; # create new CGI object |
| 20 | +$title = "Disk Usage Report: $directory_label"; |
| 21 | +print |
| 22 | + $q->start_html($title), # start the HTML |
| 23 | + $q->h1($title), # level 1 header |
| 24 | + "<p>File ages are from last access time.\n"; |
| 25 | + |
| 26 | +$sql = "select updateTime from $update_time_table;"; |
| 27 | +make_query($dbh, \$sth); |
| 28 | +@row = $sth->fetchrow_array; |
| 29 | +print "<p>Update time: $row[0]\n"; |
| 30 | + |
| 31 | +print $q->h2("Largest Files"), "\n"; |
| 32 | + ############# |
| 33 | + |
| 34 | +$sql = "select $file_table.size, filename, atime, $file_table.uid, dirname from $dir_table, $file_table where $dir_table.id = dirId order by $file_table.size desc limit 10;"; |
| 35 | +make_query($dbh, \$sth); |
| 36 | +print "<table border>\n"; |
| 37 | +print "<tr><th>Rank<th>Size (GB)<th>File<th>Last Access Time<th>Owner<th>Directory\n"; |
| 38 | +$i = 1; |
| 39 | +while (@row = $sth->fetchrow_array) { |
| 40 | + $size = round($row[0]/1.e9); |
| 41 | + $user = getpwuid($row[3]); |
| 42 | + if (! $user) {$user = "uid=$row[3]";} |
| 43 | + print "<tr><td>$i<td>$size<td>$row[1]<td>$row[2]<td>$user<td>$row[4]\n"; |
| 44 | + $i++; |
| 45 | +} |
| 46 | +print "</table>\n"; |
| 47 | + |
| 48 | +print $q->h2("Oldest Files"), "\n"; |
| 49 | + ############ |
| 50 | + |
| 51 | +$sql = "select atime, filename, $file_table.size, $file_table.uid, dirname from $dir_table, $file_table where $dir_table.id = dirId order by atime limit 10;"; |
| 52 | +make_query($dbh, \$sth); |
| 53 | +print "<table border>\n"; |
| 54 | +print "<tr><th>Rank<th>Last Access Time<th>File<th>Size (GB)<th>Owner<th>Directory\n"; |
| 55 | +$i = 1; |
| 56 | +while (@row = $sth->fetchrow_array) { |
| 57 | + $size = round($row[2]/1.e9); |
| 58 | + $user = getpwuid($row[3]); |
| 59 | + if (! $user) {$user = "uid=$row[3]";} |
| 60 | + print "<tr><td>$i<td>$row[0]<td>$row[1]<td>$size<td>$user<td>$row[4]\n"; |
| 61 | + $i++; |
| 62 | +} |
| 63 | +print "</table>\n"; |
| 64 | + |
| 65 | +print $q->h2("Files with Greatest Size × Age"), "\n"; |
| 66 | + #################################### |
| 67 | + |
| 68 | +$sql = "select ($file_table.size*1.e-9)*(unix_timestamp(now()) - unix_timestamp(atime)) as gby, filename, $file_table.size, atime, $dir_table.uid, dirname from $dir_table, $file_table where $dir_table.id = dirId order by gby desc limit 10;"; |
| 69 | +make_query($dbh, \$sth); |
| 70 | +print "<table border>\n"; |
| 71 | +print "<tr><th>Rank<th>Size×Age (GB-years)<th>File<th>Size (GB)<th>Last Access Time<th>Owner<th>Directory\n"; |
| 72 | +$i = 1; |
| 73 | +while (@row = $sth->fetchrow_array) { |
| 74 | + $age_size = round($row[0]/$seconds_per_year); |
| 75 | + $size = round($row[2]/1.e9); |
| 76 | + $user = getpwuid($row[4]); |
| 77 | + if (! $user) {$user = "uid=$row[4]";} |
| 78 | + print "<tr><td>$i<td>$age_size<td>$row[1]<td>$size<td>$row[3]<td>$user<td>$row[5]\n"; |
| 79 | + $i++; |
| 80 | +} |
| 81 | +print "</table>\n"; |
| 82 | + |
| 83 | +print $q->h2("Largest Directories"), "\nExcludes files in sub-directories\n"; |
| 84 | + ################### |
| 85 | +$sql = "select sum($file_table.size) as dirsize, dirname, $dir_table.uid from $dir_table, $file_table where dirId = $dir_table.id group by dirId order by dirsize desc limit 10;"; |
| 86 | +make_query($dbh, \$sth); |
| 87 | +print "<table border>\n"; |
| 88 | +print "<tr><th>Rank<th>Size (GB)<th>Directory<th>Owner\n"; |
| 89 | +$i = 1; |
| 90 | +while (@row = $sth->fetchrow_array) { |
| 91 | + $size = round($row[0]/1.e9); |
| 92 | + $user = getpwuid($row[2]); |
| 93 | + if (! $user) {$user = "uid=$row[2]";} |
| 94 | + print "<tr><td>$i<td>$size<td>$row[1]<td>$user\n"; |
| 95 | + $i++; |
| 96 | +} |
| 97 | +print "</table>\n"; |
| 98 | + |
| 99 | +print $q->h2("Directories with Greatest Average Age"), |
| 100 | + ########################################## |
| 101 | + "\nExcludes files in sub-directories, size-weighted average age of all files in directory\n"; |
| 102 | + |
| 103 | +$sql = "select sum(($file_table.size*1.e-9)*(unix_timestamp(now()) - unix_timestamp(atime)))/sum($file_table.size)*1.e9 as aveage, dirname, $dir_table.uid from $dir_table, $file_table where $dir_table.id = dirId group by dirId order by aveage desc limit 10;"; |
| 104 | +make_query($dbh, \$sth); |
| 105 | +print "<table border>\n"; |
| 106 | +print "<tr><th>Rank<th>Age (years)<th>Directory<th>Owner\n"; |
| 107 | +$i = 1; |
| 108 | +while (@row = $sth->fetchrow_array) { |
| 109 | + $age_size = round($row[0]/$seconds_per_year); |
| 110 | + $user = getpwuid($row[2]); |
| 111 | + if (! $user) {$user = "uid=$row[2]";} |
| 112 | + print "<tr><td>$i<td>$age_size<td>$row[1]<td>$user\n"; |
| 113 | + $i++; |
| 114 | +} |
| 115 | +print "</table>\n"; |
| 116 | + |
| 117 | +print $q->h2("Directories with Greatest Size × Age"), |
| 118 | + ########################################## |
| 119 | + "\nExcludes files in sub-directories, age × size summed over all files in directory\n"; |
| 120 | + |
| 121 | +$sql = "select sum(($file_table.size*1.e-9)*(unix_timestamp(now()) - unix_timestamp(atime))) as sumgby, dirname, $dir_table.uid from $dir_table, $file_table where $dir_table.id = dirId group by dirId order by sumgby desc limit 10;"; |
| 122 | +make_query($dbh, \$sth); |
| 123 | +print "<table border>\n"; |
| 124 | +print "<tr><th>Rank<th>Size×Age (GB-years)<th>Directory<th>Owner\n"; |
| 125 | +$i = 1; |
| 126 | +while (@row = $sth->fetchrow_array) { |
| 127 | + $age_size = round($row[0]/$seconds_per_year); |
| 128 | + $user = getpwuid($row[2]); |
| 129 | + if (! $user) {$user = "uid=$row[2]";} |
| 130 | + print "<tr><td>$i<td>$age_size<td>$row[1]<td>$user\n"; |
| 131 | + $i++; |
| 132 | +} |
| 133 | +print "</table>\n"; |
| 134 | + |
| 135 | +print $q->h2("Largest Total File Size by User"), |
| 136 | + ############################### |
| 137 | + "\nSum of all files owned by user"; |
| 138 | + |
| 139 | +$sql = "select sum($file_table.size) as sumsize, $file_table.uid from $file_table group by $file_table.uid order by sumsize desc limit 10;"; |
| 140 | +make_query($dbh, \$sth); |
| 141 | +print "<table border>\n"; |
| 142 | +print "<tr><th>Rank<th>Total Size (GB)<th>User"; |
| 143 | +$i = 1; |
| 144 | +while (@row = $sth->fetchrow_array) { |
| 145 | + $size = round($row[0]/1.e9); |
| 146 | + $user = getpwuid($row[1]); |
| 147 | + if (! $user) {$user = "uid=$row[1]";} |
| 148 | + print "<tr><td>$i<td>$size<td>$user\n"; |
| 149 | + $i++; |
| 150 | +} |
| 151 | +print "</table>\n"; |
| 152 | + |
| 153 | +print $q->h2("Greatest Average File Age by User"), |
| 154 | + ###################################### |
| 155 | + "Size-weighted average age of all files owned by user\n"; |
| 156 | + |
| 157 | +$sql = "select sum(($file_table.size*1.e-9)*(unix_timestamp(now())-unix_timestamp(atime)))/sum($file_table.size)*1.e9 as aveage, $file_table.uid from $file_table group by $file_table.uid order by aveage desc limit 10;"; |
| 158 | +make_query($dbh, \$sth); |
| 159 | +print "<table border>\n"; |
| 160 | +print "<tr><th>Rank<th>Age (years)<th>User\n"; |
| 161 | +$i = 1; |
| 162 | +while (@row = $sth->fetchrow_array) { |
| 163 | + $age_size = round($row[0]/$seconds_per_year); |
| 164 | + $user = getpwuid($row[1]); |
| 165 | + if (! $user) {$user = "uid=$row[1]";} |
| 166 | + print "<tr><td>$i<td>$age_size<td>$user\n"; |
| 167 | + $i++; |
| 168 | +} |
| 169 | +print "</table>\n"; |
| 170 | + |
| 171 | +print $q->h2("Largest Total Size × Age by User"), |
| 172 | + ###################################### |
| 173 | + "\nAge × size summed over all files owned by user\n"; |
| 174 | + |
| 175 | +$sql = "select sum(($file_table.size*1.e-9)*(unix_timestamp(now())-unix_timestamp(atime))) as sumgby, $file_table.uid from $file_table group by $file_table.uid order by sumgby desc limit 10;"; |
| 176 | +make_query($dbh, \$sth); |
| 177 | +print "<table border>\n"; |
| 178 | +print "<tr><th>Rank<th>Size×Age (GB-years)<th>User\n"; |
| 179 | +$i = 1; |
| 180 | +while (@row = $sth->fetchrow_array) { |
| 181 | + $age_size = round($row[0]/$seconds_per_year); |
| 182 | + $user = getpwuid($row[1]); |
| 183 | + if (! $user) {$user = "uid=$row[1]";} |
| 184 | + print "<tr><td>$i<td>$age_size<td>$user\n"; |
| 185 | + $i++; |
| 186 | +} |
| 187 | +print "</table>\n"; |
| 188 | + |
| 189 | + print $q->end_html; # end the HTML |
| 190 | + |
| 191 | + print "\n"; |
| 192 | + |
| 193 | +exit; |
| 194 | +# |
| 195 | +# make a query |
| 196 | +# |
| 197 | +sub make_query { |
| 198 | + |
| 199 | + my($dbh, $sth_ref) = @_; |
| 200 | + $$sth_ref = $dbh->prepare($sql) |
| 201 | + or die "Can't prepare $sql: $dbh->errstr\n"; |
| 202 | + |
| 203 | + $rv = $$sth_ref->execute |
| 204 | + or die "Can't execute the query $sql\n error: $sth->errstr\n"; |
| 205 | + |
| 206 | + return 0; |
| 207 | +} |
| 208 | +sub round { |
| 209 | + my ($float) = @_; |
| 210 | + $rounded_float = sprintf("%.2f", $float); |
| 211 | + return $rounded_float; |
| 212 | +} |
| 213 | +# |
| 214 | +# end of file |
| 215 | +# |
0 commit comments