File: 1.13.0a/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-2010 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: ' Release: 3 Alpha 06/04/2010 23: 24: PushData=0 25: PullData=1 26: PushURL="" 27: NodeID="" 28: NodeKey="" 'for post only 29: strComputer="." 30: wmiUser="" 31: wmiPass="" 32: wmiDomain="" 33: wmiSimple=1 34: 35: Set colNamedArguments= WScript.Arguments.Named 36: 37: If colNamedArguments.Exists("nooutput") Then 38: PullData=0 39: End If 40: If colNamedArguments.Exists("pushurl") Then 41: PushData=1 42: PushURL=colNamedArguments.Item("pushurl") 43: End If 44: If colNamedArguments.Exists("nodeid") Then 45: NodeID=colNamedArguments.Item("nodeid") 46: End If 47: If colNamedArguments.Exists("nodekey") Then 48: NodeKey=colNamedArguments.Item("nodekey") 49: End If 50: If colNamedArguments.Exists("host") Then 51: strComputer=colNamedArguments.Item("host") 52: End If 53: If colNamedArguments.Exists("user") Then 54: wmiUser=colNamedArguments.Item("user") 55: wmiSimple=0 56: End If 57: If colNamedArguments.Exists("pass") Then 58: wmiPass=colNamedArguments.Item("pass") 59: End If 60: If colNamedArguments.Exists("domain") Then 61: wmiDomain=colNamedArguments.Item("domain") 62: wmiSimple=0 63: End If 64: 65: OutputBuffer = "" 66: 67: OB "" 68: OB "" 69: OB "
" 70: OB " FreeNATS VBS Node XML" 71: OB " 0.03" 72: OB "
"
73: 74: 75: 76: 77: 78: 79: Function OB(text) 80: OutputBuffer = OutputBuffer & text & vbCrLf 81: End Function 82: 83: Function DumpOB() 84: Wscript.Echo OutputBuffer 85: End Function 86: 87: alloweds = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890!$%^*()[]{}?/+=-_ " 88: 89: Function SafeString(text) 90: text = Replace(text,"&","+") 91: output = "" 92: For position = 1 to Len(text) 93: character = Mid(text,position,1) 94: pos = InStr(alloweds,character) 95: If pos > 0 Then 96: output = output & character 97: Else 98: output = output & "_" 99: End If 100: Next 101: SafeString = output 102: End Function 103: 104: If wmiSimple = 1 Then 105: Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 106: Else 107: set objLocator = CreateObject("WbemScripting.SWbemLocator") 108: set objWMIService = objLocator.ConnectServer(strComputer,"root/cimv2",wmiUser,wmiPass) 109: objWMIService.Security_.impersonationlevel=3 ' at level 3 you are impersonating the pope 110: End If 111: 112: 113: set objRefresher = CreateObject("WbemScripting.Swbemrefresher") 114: Set objProcessor = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfOS_Processor").objectSet 115: 116: Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service") 117: Set memItems = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfOS_Memory").objectSet 118: Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem") 119: 120: Set colRunningProcesses = objWMIService.ExecQuery("Select * from Win32_Process") 121: 122: Set WshNetwork = WScript.CreateObject("WScript.Network") 123: AddTest "system.name","Computer Name",SafeString(WshNetwork.ComputerName),0 124: 125: 126: objRefresher.Refresh ' No I don't really get it either 127: WScript.Sleep 2000 ' but unless you do this you get even 128: objRefresher.Refresh ' weirder than usual values. 129: 130: int ServiceRunning=0 131: int Alert=0 132: For Each objService in colRunningServices 133: If objService.State = "Running" Then 134: ServiceRunning=1 135: Alert=0 136: Else 137: Alert=1 138: ServiceRunning=0 139: End If 140: TName = Replace(objService.Name," ","_") 141: TestName="srv." & SafeString(TName) 142: AddTest TestName, SafeString(objService.DisplayName) & " Service", ServiceRunning, Alert 143: Next 144: 145: 146: intThresholdViolations = 0 147: 148: 149: Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk") 150: 151: For Each objDisk in colDisks 152: 153: DiskSpace = objDisk.FreeSpace / 1024 / 1024 154: DiskSize = objDisk.Size / 1024 / 1024 155: DiskUsed = DiskSize - DiskSpace 156: DiskUsedPerc = ( DiskUsed / DiskSize ) * 100 157: DiskInDrive = 1 158: If IsNull(DiskSpace) Then 159: DiskSpace = "0" 160: DiskUsed = "0" 161: DiskUsedPerc = "0.00" 162: DiskInDrive = 0 163: End If 164: DiskSpace = Round(DiskSpace,2) 165: DiskUsed = Round(DiskUsed,2) 166: DiskUsedPerc = Round(DiskUsedPerc,2) 167: 168: alertlevel = 0 169: If DiskUsedPerc > 80 Then 170: alertlevel = 1 171: End If 172: If DiskUsedPerc > 90 Then 173: alertlevel = 2 174: End If 175: 176: 177: If DiskInDrive = 1 Then 178: TestName= "disk.free." & Left(objDisk.DeviceID,1) 179: AddTest TestName,"Space Free On " & objDisk.DeviceID & " (Mb)", DiskSpace, alertlevel 180: TestName= "disk.used." & Left(objDisk.DeviceID,1) 181: AddTest TestName,"Space Used On " & objDisk.DeviceID & " (Mb)", DiskUsed, alertlevel 182: TestName= "disk.used.perc." & Left(objDisk.DeviceID,1) 183: AddTest TestName,"Percent Disk Usage On " & objDisk.DeviceID & " (%)", DiskUsedPerc, alertlevel 184: End If 185: 186: Next 187: 188: 189: 190: For Each objItem in objProcessor 191: 192: If objItem.Name = "_Total" Then 193: AddTest "proc.load","Processor Load (%)",objItem.PercentProcessorTime,0 194: End If 195: Next 196: 197: 198: 199: For Each objOS in colOperatingSystems 200: dtmBootup = objOS.LastBootUpTime 201: dtmLastBootupTime = WMIDateStringToDate(dtmBootup) 202: dtmSystemUptime = DateDiff("h", dtmLastBootUpTime, Now) 203: AddTest "uptime","Uptime (Hours)",dtmSystemUptime,0 204: Next 205: 206: Function WMIDateStringToDate(dtmBootup) 207: WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" & _ 208: Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) _ 209: & " " & Mid (dtmBootup, 9, 2) & ":" & _ 210: Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup,13, 2)) 211: End Function 212: 213: 214: 215: 216: For Each objItem in memItems 217: TestName="mem." 218: If Len(objItem.Name) > 0 Then 219: TestName = TestName & objItem.Name & "." 220: End If 221: TestName = TestName & "free" 222: 223: AddTest TestName,"Memory Available (Kilobytes)",objItem.AvailableKBytes,0 224: 225: Next 226: 227: ' Running Processes 228: 229: Dim ProcArr(1024) 230: Dim CountArr(1024) 231: ProcCount=0 232: pName="" 233: pDesc="" 234: ProcCount = 0 235: 236: For Each objProc in colRunningProcesses 237: 'Wscript.Echo objProc.ProcessID & " " & objProc.Name & vbCrLf 238: pName = objProc.Name 239: NewProc = 1 ' Assume New Until Checked 240: FoundPos = 0 241: For ProcTmp = 0 To ProcCount 242: If ( ProcArr(ProcTmp) = pName ) Then ' Exists 243: NewProc = 0 244: FoundPos = ProcTmp 245: 'ProcTmp = UBound(ProcArr)+1 246: End If 247: Next 248: 249: If NewProc = 0 Then ' Not a New Process 250: CountArr(FoundPos) = CountArr(FoundPos) + 1 251: Else ' Does Not Exist 252: ProcArr(ProcCount) = pName 253: CountArr(ProcCount) = 1 254: ProcCount = ProcCount + 1 255: End If 256: 257: 258: Next 259: 260: 261: For ProcTmp = 0 To ProcCount-1 262: ' Wscript.Echo ProcArr(ProcTmp) & " " & CountArr(ProcTmp) 263: AddTest "proc." & SafeString(ProcArr(ProcTmp)), ProcArr(ProcTmp) & " Process", CountArr(ProcTmp), 0 264: Next 265: 266: 'Set listProc = Nothing 267: 'set objWMIService = Nothing 268: 269: 270: 271: ' Close Off 272: 273: OB "" 274: 275: Function AddTest(testname,testdesc,testvalue,alertlevel) 276: OB "" 277: OB " " & testname & "" 278: OB " " & testdesc & "" 279: OB " " & testvalue & "" 280: OB " " & alertlevel & "" 281: OB "" 282: End Function 283: 284: If PullData=1 Then 285: DumpOB() 286: End If 287: 288: If PushData=1 Then 289: ' Push Da Data 290: WScript.Echo 291: WScript.Echo "Pushing Data..." 292: WScript.Echo "URL : " & PushURL 293: WScript.Echo "NodeID: " & NodeID 294: WScript.Echo "Key : " & NodeKey 295: 296: Set objHTTP = CreateObject("Microsoft.XMLHTTP") 297: objHTTP.open "POST", PushURL, False 298: 299: objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 300: http_request = "nodeid=" & Escape(NodeID) & "&nodekey=" & Escape(NodeKey) & "&xml=" & Escape(OutputBuffer) 301: objHTTP.send http_request 302: 303: response = objHTTP.responseText 304: 305: Set objHTTP = Nothing 306: 307: If Right(response,1) = "1" Then 308: WScript.Echo "Post Successful" 309: Else 310: WScript.Echo "Encountered An Error:" 311: WScript.Echo response 312: End If 313: 314: End If