Welcome, guest | Sign In | My Account | Store | Cart
###########################################################
# 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

History