File: 1.01.3b/node/win32/node.vbs (View as Code)

1: ' REM FreeNATS Windows Node Bogeroo 2: ' 3: ' This file is part of FreeNATS 4: ' 5: ' FreeNATS is (C) Copyright 2008 PurplePixie Systems 6: ' 7: ' FreeNATS is free software: you can redistribute it and/or modify 8: ' it under the terms of the GNU General Public License as published by 9: ' the Free Software Foundation, either version 3 of the License, or 10: ' (at your option) any later version. 11: ' 12: ' FreeNATS is distributed in the hope that it will be useful, 13: ' but WITHOUT ANY WARRANTY; without even the implied warranty of 14: ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15: ' GNU General Public License for more details. 16: ' 17: ' You should have received a copy of the GNU General Public License 18: ' along with FreeNATS. If not, see www.gnu.org/licenses 19: ' 20: ' For more information see www.purplepixie.org/freenats 21: 22: PushData=0 23: PullData=1 24: PushURL="" 25: NodeID="" 26: NodeKey="" 'for post only 27: strComputer="." 28: wmiUser="" 29: wmiPass="" 30: wmiDomain="" 31: wmiSimple=1 32: 33: Set colNamedArguments= WScript.Arguments.Named 34: 35: If colNamedArguments.Exists("nooutput") Then 36: PullData=0 37: End If 38: If colNamedArguments.Exists("pushurl") Then 39: PushData=1 40: PushURL=colNamedArguments.Item("pushurl") 41: End If 42: If colNamedArguments.Exists("nodeid") Then 43: NodeID=colNamedArguments.Item("nodeid") 44: End If 45: If colNamedArguments.Exists("nodekey") Then 46: NodeKey=colNamedArguments.Item("nodekey") 47: End If 48: If colNamedArguments.Exists("host") Then 49: strComputer=colNamedArguments.Item("host") 50: End If 51: If colNamedArguments.Exists("user") Then 52: wmiUser=colNamedArguments.Item("user") 53: wmiSimple=0 54: End If 55: If colNamedArguments.Exists("pass") Then 56: wmiPass=colNamedArguments.Item("pass") 57: End If 58: If colNamedArguments.Exists("domain") Then 59: wmiDomain=colNamedArguments.Item("domain") 60: wmiSimple=0 61: End If 62: 63: OutputBuffer = "" 64: 65: OB "" 66: OB "" 67: OB "
" 68: OB " FreeNATS VBS Node XML" 69: OB " 0.03" 70: OB "
"
71: 72: 73: 74: 75: 76: 77: Function OB(text) 78: OutputBuffer = OutputBuffer & text & vbCrLf 79: End Function 80: 81: Function DumpOB() 82: Wscript.Echo OutputBuffer 83: End Function 84: 85: alloweds = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890!$%^*()[]{}?/+=-_ " 86: 87: Function SafeString(text) 88: text = Replace(text,"&","+") 89: output = "" 90: For position = 1 to Len(text) 91: character = Mid(text,position,1) 92: pos = InStr(alloweds,character) 93: If pos > 0 Then 94: output = output & character 95: Else 96: output = output & "_" 97: End If 98: Next 99: SafeString = output 100: End Function 101: 102: If wmiSimple = 1 Then 103: Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 104: Else 105: set objLocator = CreateObject("WbemScripting.SWbemLocator") 106: set objWMIService = objLocator.ConnectServer(strComputer,"root/cimv2",wmiUser,wmiPass) 107: objWMIService.Security_.impersonationlevel=3 ' at level 3 you are impersonating the pope 108: End If 109: 110: 111: set objRefresher = CreateObject("WbemScripting.Swbemrefresher") 112: Set objProcessor = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfOS_Processor").objectSet 113: 114: Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service") 115: Set memItems = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfOS_Memory").objectSet 116: Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem") 117: 118: Set WshNetwork = WScript.CreateObject("WScript.Network") 119: AddTest "system.name","Computer Name",SafeString(WshNetwork.ComputerName),0 120: 121: 122: objRefresher.Refresh ' No I don't really get it either 123: WScript.Sleep 2000 ' but unless you do this you get even 124: objRefresher.Refresh ' weirder than usual values. 125: 126: int ServiceRunning=0 127: int Alert=0 128: For Each objService in colRunningServices 129: If objService.State = "Running" Then 130: ServiceRunning=1 131: Alert=0 132: Else 133: Alert=1 134: ServiceRunning=0 135: End If 136: TName = Replace(objService.Name," ","_") 137: TestName="srv." & SafeString(TName) 138: AddTest TestName, SafeString(objService.DisplayName) & " Service", ServiceRunning, Alert 139: Next 140: 141: 142: intThresholdViolations = 0 143: 144: 145: Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk") 146: 147: For Each objDisk in colDisks 148: 149: DiskSpace = objDisk.FreeSpace / 1024 / 1024 150: DiskSize = objDisk.Size / 1024 / 1024 151: DiskUsed = DiskSize - DiskSpace 152: DiskUsedPerc = ( DiskUsed / DiskSize ) * 100 153: DiskInDrive = 1 154: If IsNull(DiskSpace) Then 155: DiskSpace = "0" 156: DiskUsed = "0" 157: DiskUsedPerc = "0.00" 158: DiskInDrive = 0 159: End If 160: DiskSpace = Round(DiskSpace,2) 161: DiskUsed = Round(DiskUsed,2) 162: DiskUsedPerc = Round(DiskUsedPerc,2) 163: 164: alertlevel = 0 165: If DiskUsedPerc > 80 Then 166: alertlevel = 1 167: End If 168: If DiskUsedPerc > 90 Then 169: alertlevel = 2 170: End If 171: 172: 173: If DiskInDrive = 1 Then 174: TestName= "disk.free." & Left(objDisk.DeviceID,1) 175: AddTest TestName,"Space Free On " & objDisk.DeviceID & " (Mb)", DiskSpace, alertlevel 176: TestName= "disk.used." & Left(objDisk.DeviceID,1) 177: AddTest TestName,"Space Used On " & objDisk.DeviceID & " (Mb)", DiskUsed, alertlevel 178: TestName= "disk.used.perc." & Left(objDisk.DeviceID,1) 179: AddTest TestName,"Percent Disk Usage On " & objDisk.DeviceID & " (%)", DiskUsedPerc, alertlevel 180: End If 181: 182: Next 183: 184: 185: 186: For Each objItem in objProcessor 187: 188: If objItem.Name = "_Total" Then 189: AddTest "proc.load","Processor Load (%)",objItem.PercentProcessorTime,0 190: End If 191: Next 192: 193: 194: 195: For Each objOS in colOperatingSystems 196: dtmBootup = objOS.LastBootUpTime 197: dtmLastBootupTime = WMIDateStringToDate(dtmBootup) 198: dtmSystemUptime = DateDiff("h", dtmLastBootUpTime, Now) 199: AddTest "uptime","Uptime (Hours)",dtmSystemUptime,0 200: Next 201: 202: Function WMIDateStringToDate(dtmBootup) 203: WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" & _ 204: Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) _ 205: & " " & Mid (dtmBootup, 9, 2) & ":" & _ 206: Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup,13, 2)) 207: End Function 208: 209: 210: 211: 212: For Each objItem in memItems 213: TestName="mem." 214: If Len(objItem.Name) > 0 Then 215: TestName = TestName & objItem.Name & "." 216: End If 217: TestName = TestName & "free" 218: 219: AddTest TestName,"Memory Available (Kilobytes)",objItem.AvailableKBytes,0 220: 221: Next 222: 223: 224: OB "" 225: 226: Function AddTest(testname,testdesc,testvalue,alertlevel) 227: OB "" 228: OB " " & testname & "" 229: OB " " & testdesc & "" 230: OB " " & testvalue & "" 231: OB " " & alertlevel & "" 232: OB "" 233: End Function 234: 235: If PullData=1 Then 236: DumpOB() 237: End If 238: 239: If PushData=1 Then 240: ' Push Da Data 241: WScript.Echo 242: WScript.Echo "Pushing Data..." 243: WScript.Echo "URL : " & PushURL 244: WScript.Echo "NodeID: " & NodeID 245: WScript.Echo "Key : " & NodeKey 246: 247: Set objHTTP = CreateObject("Microsoft.XMLHTTP") 248: objHTTP.open "POST", PushURL, False 249: 250: objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 251: http_request = "nodeid=" & Escape(NodeID) & "&nodekey=" & Escape(NodeKey) & "&xml=" & Escape(OutputBuffer) 252: objHTTP.send http_request 253: 254: response = objHTTP.responseText 255: 256: Set objHTTP = Nothing 257: 258: If Right(response,1) = "1" Then 259: WScript.Echo "Post Successful" 260: Else 261: WScript.Echo "Encountered An Error:" 262: WScript.Echo response 263: End If 264: 265: End If