Monitoring Disk usage-activity

Please refer the script for monitoring the disk activity.

This script will display Disktranferpersec, Disk KBytes/sec(Throughput), Disk Reads/sec, Disk Writes/sec, PercentDisktime, DISK IDLE TIME, Avg.Disk Bytes/Transfer(Io Size), Avg.DiskSec/transfer(Average Latency)seconds.

Please run the script as the System Administrator.

NOTE:

here in the script, threshold=10, you can replace threshold value based upon your requirement.

# The script is a template to check UAC status on the device.
import os
import sys
import _winreg
threshold=10
def alert(arg):
    sys.stderr.write("%d%d%d" % (arg, arg, arg))

# Please use "alert(1)" to turn on the monitor(trigger an alert)
# Please use "alert(0)" to turn off the monitor(disable an alert)
# Please do not change above block and write your script below
def disk():
    import os
    import ctypes
    import sys
    import getpass
    import socket
    print "USER NAME: "+getpass.getuser()
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("8.8.8.8", 80))
    print "IP-ADDRESS : "+(s.getsockname()[0])
    from time import gmtime, strftime
    time=strftime("%Y-%m-%d %H:%M:%S", gmtime())
    print '
'
    powershell_script=r"""
    Clear-Host
    $Disk = Get-WmiObject -class Win32_PerfRawData_PerfDisk_LogicalDisk `
    -filter "name= '_Total' "
    $disktranferpersec=$DisK.DiskTransfersPersec
    $a=($disktranferpersec /1000)*0.00009765625
    "disktranferpersec(iops)="+" {0:P0}" -f $a


    $DBytes = $Disk.DiskBytesPerSec;
    "Disk KBytes/sec(Throughput) = "+[int]($DBytes /1000)


    $DRead = $Disk.DiskReadBytesPerSec;
    "Disk Reads/sec = " + ($DRead /1000)
    $DWrite = $Disk.DiskWriteBytesPerSec;
    "Disk Writes/sec = " +($DWrite /1000)

    $PercentDiskTime=$Disk.PercentDiskTime;
    "PercentDisktime= "+($PercentDiskTime)

    $PercentIdleTime=$Disk.PercentIdleTime;
    "DISK IDLE TIME= " +($PercentIdleTime)

    $Avgdiskbytespertransfer=$Disk.AvgDiskBytesPerTransfer;

    "Avg.Disk Bytes/Transfer(Io Size)=  "+($Avgdiskbytespertransfer)

    $avgdisksectranfer=$Disk.AvgDisksecPerTransfer;
    "Avg.DiskSec/transfer(Average Latency)seconds= "+($avgdisksectranfer)

    """

    workdir=os.environ['PROGRAMDATA']+r'\c1_temp'
    if not os.path.isdir(workdir):
        os.mkdir(workdir)


    fobj=open(workdir+r'\io.ps1',"w")
    fobj.write(powershell_script)
    fobj.close()

    class disable_file_system_redirection:
        _disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
        _revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection
        def __enter__(self):
            self.old_value = ctypes.c_long()
            self.success = self._disable(ctypes.byref(self.old_value))
        def __exit__(self, type, value, traceback):
            if self.success:
                self._revert(self.old_value)


    with disable_file_system_redirection():
        def ecmd(cmd, r=False):
            import ctypes
            class disable_file_system_redirection:
                _disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
                _revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection
                def __enter__(self):
                    self.old_value = ctypes.c_long()
                    self.success = self._disable(ctypes.byref(self.old_value))
                def __exit__(self, type, value, traceback):
                    if self.success:
                        self._revert(self.old_value)
            from subprocess import PIPE, Popen
            with disable_file_system_redirection():
                OBJ = Popen(cmd, shell = True, stdout = PIPE, stderr = PIPE)
            out, err = OBJ.communicate()
            ret=OBJ.returncode
            if r:
                if ret==0:
                    return out
                else:
                    return err
            else:
                return ret
        out=ecmd(r'powershell.exe -executionpolicy bypass -file "'+workdir+r'\io.ps1"',True)
        v=out.split('
')[0]
        a,b=v.split("=")
        z=b.strip("%
")
        p= (int(z))
        t= threshold
        if p > t:
            alert(1)
            print v
            print 'Your DISK UTILIZATION is more than  Threshold '
            print '
'
            print 'For more details of disk UTILIZATION :'
            f=out.split('
')
            f.pop(0)
            for i in f:
                print'	' + i

        else:
            print 'Your DISK UTILIZATION is less than Threshold '
            alert(0)



disk()

Sample Output:

20170614-Disk_util().json (5.96 KB)