' df_all.vbs
' Returns free space (%) for all drives
' Pandora FMS Plugin, (c) 2021 Sancho Lerena
' ------------------------------------------

Option Explicit
On Error Resume Next

' Variables
Dim objWMIService, objItem, colItems, argc, argv, i, Percent


' Parse command line parameters
argc = Wscript.Arguments.Count
Set argv = CreateObject("Scripting.Dictionary")
For i = 0 To argc - 1
    argv.Add Wscript.Arguments(i), i
Next

' Get drive information
Set objWMIService = GetObject ("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")

For Each objItem in colItems
	If argc = 0 Or argv.Exists(objItem.Name) Then
		' Include only harddrivers (type 3)
		If (objItem.FreeSpace <> "") AND (objItem.DriveType =3) Then
		    Percent = round ((objItem.FreeSpace / objItem.Size) * 100, 2)
			Wscript.StdOut.WriteLine "<module>"
			Wscript.StdOut.WriteLine "    <name><![CDATA[Disk_" & objItem.Name & "]]></name>"
			Wscript.StdOut.WriteLine "    <description><![CDATA[Space remaining: " & Int(objItem.FreeSpace /1048576) & " MB of " & Int(objItem.Size / 1048576) & " MB]]></description>"
			If (Percent > 99.99) then
				Wscript.StdOut.WriteLine "    <data><![CDATA[" & 100 & "]]></data>"
			Elseif (Percent < 0.01) then
				Wscript.StdOut.WriteLine "    <data><![CDATA[" & 0 & "]]></data>"
			Else
				Wscript.StdOut.WriteLine "    <data><![CDATA[" & Percent & "]]></data>"
			End If
			Wscript.StdOut.WriteLine "    <unit>%</unit>"
			Wscript.StdOut.WriteLine "    <min_warning>5</min_warning>"
			Wscript.StdOut.WriteLine "    <max_warning>10</max_warning>"
			Wscript.StdOut.WriteLine "    <min_critical>0</min_critical>"
			Wscript.StdOut.WriteLine "    <max_critical>5</max_critical>"
			Wscript.StdOut.WriteLine "</module>"
			Wscript.StdOut.flush
		End If
	End If
Next