########################################################### # Check available drive space. # Email alert if space usage exceeds 90%. ########################################################### puts "\n executing [info script]\n" # make script drive independent. set drive [lindex [file split [info nameofexecutable]] 0 ] puts "\n proclib = $drive/scripts/TCL/proclib" ######################################################## # Source utility procs. ######################################################## source [ file join $drive scripts/TCL/proclib/checkFile_proc.tcl ] source [ file join $drive scripts/TCL/proclib/smtp_proc.tcl ] source [ file join $drive scripts/TCL/proclib/reportHeader_proc.tcl ] source [ file join $drive scripts/TCL/proclib/printColumns.tcl ] source [ file join $drive scripts/TCL/proclib/convertToMb.tcl ] ######################################################## # Source packages. ######################################################## package require twapi package require Tclx package require math::fuzzy package require textutil ###################################### # Proc - check memory usage. ###################################### proc driveSpace {} { puts "\n driveSpace \n" # calculate drive size and free space. set drives [ concat [ twapi::get_logical_drives -type fixed ] \ [ twapi::get_logical_drives -type remote ] ] foreach d $drives { array set a [ twapi::get_drive_info $d -size -freespace ] set spaceUsed [ expr { (double ( $a(-size) - $a(-freespace) )/ $a(-size) ) } ] set usedPerc [ expr { [math::fuzzy::troundn $spaceUsed 2] *100 } ] set driveSize [ concat [ toMB $a(-size) ]MB ] set driveSpace [ concat [ toMB $a(-freespace) ]MB ] lappend driveInfo [ list $d $driveSize $driveSpace $usedPerc ] } # if space usage is > 90 send error report. foreach e $driveInfo { if { [ lindex $e 3 ] > 90 } { set alert true } else { set alert false } } if { [ string is true $alert ] } { writeReport $driveInfo } } ###################################### # Proc - write report ###################################### proc writeReport { driveInfo } { global reportFile global reportFileId set header "$::env(COMPUTERNAME) - Check Drive Space Usage" reportHeader $reportFileId $header $reportFile set s "*****************************************" set t1 [ format "%-15s %s" " " $s ] set s "The End" set t2 [ format "%-35s %s" " " $s ] set t3 "$::env(COMPUTERNAME) - Space utilization." puts $reportFileId \n$t3\n set width 12 set space " " # format column headers in 12 character columns justified center. set x [ list Drive Size FreeSpace UsedPerc ] foreach e $x { set c [ textutil::adjust $e -length $width -justify center -full true ] lappend lineH $c } set formatString "%-15s %s\n" puts $reportFileId [ format $formatString $space [ join $lineH ] ] set formatString "%-15s [ string repeat {%s } 4 ]" # format detail line in 12 character columns with drive letter justified center and numerics justified right. foreach e $driveInfo { set driveLetter [ lindex $e 0 ] set c [ textutil::adjust $driveLetter -length $width -justify center -full true ] lappend line1 $c set y [ lrange $e 1 end ] foreach e $y { set c [ textutil::adjust $e -length $width -justify right ] lappend line1 $c } set formatString "%-15s %s" puts $reportFileId [ format $formatString $space [ join $line1 ] ] unset line1 } emailReport ftruncate -fileid $reportFileId 0 } ########################################### # Email Report ########################################### proc emailReport {} { global reportFile global reportFileId flush $reportFileId set computerName $::env(COMPUTERNAME) set subject "$computerName - DriveSpace Alert." sendSimpleMessage you@yourmail.com $subject $reportFile } ###################################### # Control Section. ###################################### ###################################### # Set Variables ###################################### set processId [ twapi::get_current_process_id ] set eventId [ twapi::eventlog_open -write ] set data "DRIVESPACE STARTING" twapi::eventlog_write $eventId 1 -type information -loguser -data $data twapi::eventlog_close $eventId set reportFile [ file join $drive reports/notify/driveSpace.txt ] ######################################### # Check if files exist. ######################################### checkFile [file dirname $reportFile] ###################################### # Open output files. ###################################### set reportFileId [open $reportFile w] ################################### # Global variables. ################################### global reportFile global reportFileId driveSpace