' REM FreeNATS Windows Node Bogeroo ' ' This file is part of FreeNATS ' ' FreeNATS is (C) Copyright 2008-2010 PurplePixie Systems ' ' FreeNATS is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or ' (at your option) any later version. ' ' FreeNATS is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY; without even the implied warranty of ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ' GNU General Public License for more details. ' ' You should have received a copy of the GNU General Public License ' along with FreeNATS. If not, see www.gnu.org/licenses ' ' For more information see www.purplepixie.org/freenats ' ' Release: 3 Alpha 06/04/2010 PushData=0 PullData=1 PushURL="" NodeID="" NodeKey="" 'for post only strComputer="." wmiUser="" wmiPass="" wmiDomain="" wmiSimple=1 Set colNamedArguments= WScript.Arguments.Named If colNamedArguments.Exists("nooutput") Then PullData=0 End If If colNamedArguments.Exists("pushurl") Then PushData=1 PushURL=colNamedArguments.Item("pushurl") End If If colNamedArguments.Exists("nodeid") Then NodeID=colNamedArguments.Item("nodeid") End If If colNamedArguments.Exists("nodekey") Then NodeKey=colNamedArguments.Item("nodekey") End If If colNamedArguments.Exists("host") Then strComputer=colNamedArguments.Item("host") End If If colNamedArguments.Exists("user") Then wmiUser=colNamedArguments.Item("user") wmiSimple=0 End If If colNamedArguments.Exists("pass") Then wmiPass=colNamedArguments.Item("pass") End If If colNamedArguments.Exists("domain") Then wmiDomain=colNamedArguments.Item("domain") wmiSimple=0 End If OutputBuffer = "" OB "" OB "" OB "
" OB " FreeNATS VBS Node XML" OB " 0.03" OB "
" Function OB(text) OutputBuffer = OutputBuffer & text & vbCrLf End Function Function DumpOB() Wscript.Echo OutputBuffer End Function alloweds = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890!$%^*()[]{}?/+=-_ " Function SafeString(text) text = Replace(text,"&","+") output = "" For position = 1 to Len(text) character = Mid(text,position,1) pos = InStr(alloweds,character) If pos > 0 Then output = output & character Else output = output & "_" End If Next SafeString = output End Function If wmiSimple = 1 Then Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Else set objLocator = CreateObject("WbemScripting.SWbemLocator") set objWMIService = objLocator.ConnectServer(strComputer,"root/cimv2",wmiUser,wmiPass) objWMIService.Security_.impersonationlevel=3 ' at level 3 you are impersonating the pope End If set objRefresher = CreateObject("WbemScripting.Swbemrefresher") Set objProcessor = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfOS_Processor").objectSet Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service") Set memItems = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfOS_Memory").objectSet Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem") Set colRunningProcesses = objWMIService.ExecQuery("Select * from Win32_Process") Set WshNetwork = WScript.CreateObject("WScript.Network") AddTest "system.name","Computer Name",SafeString(WshNetwork.ComputerName),0 objRefresher.Refresh ' No I don't really get it either WScript.Sleep 2000 ' but unless you do this you get even objRefresher.Refresh ' weirder than usual values. int ServiceRunning=0 int Alert=0 For Each objService in colRunningServices If objService.State = "Running" Then ServiceRunning=1 Alert=0 Else Alert=1 ServiceRunning=0 End If TName = Replace(objService.Name," ","_") TestName="srv." & SafeString(TName) AddTest TestName, SafeString(objService.DisplayName) & " Service", ServiceRunning, Alert Next intThresholdViolations = 0 Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk") For Each objDisk in colDisks DiskSpace = objDisk.FreeSpace / 1024 / 1024 DiskSize = objDisk.Size / 1024 / 1024 DiskUsed = DiskSize - DiskSpace DiskUsedPerc = ( DiskUsed / DiskSize ) * 100 DiskInDrive = 1 If IsNull(DiskSpace) Then DiskSpace = "0" DiskUsed = "0" DiskUsedPerc = "0.00" DiskInDrive = 0 End If DiskSpace = Round(DiskSpace,2) DiskUsed = Round(DiskUsed,2) DiskUsedPerc = Round(DiskUsedPerc,2) alertlevel = 0 If DiskUsedPerc > 80 Then alertlevel = 1 End If If DiskUsedPerc > 90 Then alertlevel = 2 End If If DiskInDrive = 1 Then TestName= "disk.free." & Left(objDisk.DeviceID,1) AddTest TestName,"Space Free On " & objDisk.DeviceID & " (Mb)", DiskSpace, alertlevel TestName= "disk.used." & Left(objDisk.DeviceID,1) AddTest TestName,"Space Used On " & objDisk.DeviceID & " (Mb)", DiskUsed, alertlevel TestName= "disk.used.perc." & Left(objDisk.DeviceID,1) AddTest TestName,"Percent Disk Usage On " & objDisk.DeviceID & " (%)", DiskUsedPerc, alertlevel End If Next For Each objItem in objProcessor If objItem.Name = "_Total" Then AddTest "proc.load","Processor Load (%)",objItem.PercentProcessorTime,0 End If Next For Each objOS in colOperatingSystems dtmBootup = objOS.LastBootUpTime dtmLastBootupTime = WMIDateStringToDate(dtmBootup) dtmSystemUptime = DateDiff("h", dtmLastBootUpTime, Now) AddTest "uptime","Uptime (Hours)",dtmSystemUptime,0 Next Function WMIDateStringToDate(dtmBootup) WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" & _ Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) _ & " " & Mid (dtmBootup, 9, 2) & ":" & _ Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup,13, 2)) End Function For Each objItem in memItems TestName="mem." If Len(objItem.Name) > 0 Then TestName = TestName & objItem.Name & "." End If TestName = TestName & "free" AddTest TestName,"Memory Available (Kilobytes)",objItem.AvailableKBytes,0 Next ' Running Processes Dim ProcArr(1024) Dim CountArr(1024) ProcCount=0 pName="" pDesc="" ProcCount = 0 For Each objProc in colRunningProcesses 'Wscript.Echo objProc.ProcessID & " " & objProc.Name & vbCrLf pName = objProc.Name NewProc = 1 ' Assume New Until Checked FoundPos = 0 For ProcTmp = 0 To ProcCount If ( ProcArr(ProcTmp) = pName ) Then ' Exists NewProc = 0 FoundPos = ProcTmp 'ProcTmp = UBound(ProcArr)+1 End If Next If NewProc = 0 Then ' Not a New Process CountArr(FoundPos) = CountArr(FoundPos) + 1 Else ' Does Not Exist ProcArr(ProcCount) = pName CountArr(ProcCount) = 1 ProcCount = ProcCount + 1 End If Next For ProcTmp = 0 To ProcCount-1 ' Wscript.Echo ProcArr(ProcTmp) & " " & CountArr(ProcTmp) AddTest "proc." & SafeString(ProcArr(ProcTmp)), ProcArr(ProcTmp) & " Process", CountArr(ProcTmp), 0 Next 'Set listProc = Nothing 'set objWMIService = Nothing ' Close Off OB "
" Function AddTest(testname,testdesc,testvalue,alertlevel) OB "" OB " " & testname & "" OB " " & testdesc & "" OB " " & testvalue & "" OB " " & alertlevel & "" OB "" End Function If PullData=1 Then DumpOB() End If If PushData=1 Then ' Push Da Data WScript.Echo WScript.Echo "Pushing Data..." WScript.Echo "URL : " & PushURL WScript.Echo "NodeID: " & NodeID WScript.Echo "Key : " & NodeKey Set objHTTP = CreateObject("Microsoft.XMLHTTP") objHTTP.open "POST", PushURL, False objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" http_request = "nodeid=" & Escape(NodeID) & "&nodekey=" & Escape(NodeKey) & "&xml=" & Escape(OutputBuffer) objHTTP.send http_request response = objHTTP.responseText Set objHTTP = Nothing If Right(response,1) = "1" Then WScript.Echo "Post Successful" Else WScript.Echo "Encountered An Error:" WScript.Echo response End If End If