Browse Source

Init post. Gathers basic system info from reg.

Joe Hager 18 years ago
parent
commit
ed42b62afa
1 changed files with 126 additions and 0 deletions
  1. 126 0
      direct/src/http/windowsSystemInfo.py

+ 126 - 0
direct/src/http/windowsSystemInfo.py

@@ -0,0 +1,126 @@
+import sys
+import os
+import ctypes
+import _winreg
+
+"""Class to extract system information from a MS-Windows Box:
+
+Instructions for Using:
+
+Instance the class WindowsSystemInformation
+Then in the instance, access the following variables:
+
+os
+cpu
+totalRAM
+totalVM
+availableVM
+availableRAM
+
+Example:
+
+s = SystemInformation()
+print s.os
+
+s.refresh() # if you need to refresh the dynamic data (i.e. Memory stats, etc)
+"""
+
+def get_registry_value(key, subkey, value):
+    if sys.platform != 'win32':
+        raise OSError("get_registry_value is only supported on Windows")
+        
+    key = getattr(_winreg, key)
+    handle = _winreg.OpenKey(key, subkey)
+    (value, type) = _winreg.QueryValueEx(handle, value)
+    return value
+
+class SystemInformation:
+    def __init__(self):
+
+        # Just in in case somebody called this class by accident, we should
+        # check to make sure the OS is MS-Windows before continuing.
+
+        assert sys.platform == 'win32', "Not an MS-Windows Computer. This class should not be called"
+        
+        # os contains the Operating System Name with Service Pack and Build
+        # Example: Microsoft Windows XP Service Pack 2 (build 2600)
+        
+        self.os = self._os_version().strip()
+        
+        # cpu contains the CPU model and speed
+        # Example: Intel Core(TM)2 CPU 6700 @ 2.66GHz
+
+        self.cpu = self._cpu().strip()
+
+        self.totalRAM, self.availableRAM, self.totalPF, self.availablePF, self.memoryLoad, self.totalVM, self.availableVM = self._ram()
+
+        # totalRam contains the total amount of RAM in the system
+
+        self.totalRAM = self.totalRAM / 1024
+
+        # totalVM contains the total amount of VM available to the system
+        
+        self.totalVM = self.totalVM / 1024
+
+        # availableVM contains the amount of VM that is free
+        
+        self.availableVM = self.availableVM / 1024
+
+        # availableRam: Ammount of available RAM in the system
+        
+        self.availableRAM = self.availableRAM / 1024
+
+    def refresh(self):
+         self.totalRAM, self.availableRAM, self.totalPF, self.availablePF, self.memoryLoad, self.totalVM, self.availableVM = self._ram()
+         self.totalRAM = self.totalRAM / 1024
+         self.totalVM = self.totalVM / 1024
+         self.availableVM = self.availableVM / 1024
+         self.availableRAM = self.availableRAM / 1024
+
+    def _os_version(self):
+        def get(key):
+            return get_registry_value(
+                "HKEY_LOCAL_MACHINE", 
+                "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",
+                key)
+        os = get("ProductName")
+        sp = get("CSDVersion")
+        build = get("CurrentBuildNumber")
+        return "%s %s (build %s)" % (os, sp, build)
+            
+    def _cpu(self):
+        return get_registry_value(
+            "HKEY_LOCAL_MACHINE", 
+            "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",
+            "ProcessorNameString")
+            
+    def _ram(self):
+        kernel32 = ctypes.windll.kernel32
+        c_ulong = ctypes.c_ulong
+        class MEMORYSTATUS(ctypes.Structure):
+            _fields_ = [
+                ('dwLength', c_ulong),
+                ('dwMemoryLoad', c_ulong),
+                ('dwTotalPhys', c_ulong),
+                ('dwAvailPhys', c_ulong),
+                ('dwTotalPageFile', c_ulong),
+                ('dwAvailPageFile', c_ulong),
+                ('dwTotalVirtual', c_ulong),
+                ('dwAvailVirtual', c_ulong)
+            ]
+            
+        memoryStatus = MEMORYSTATUS()
+        memoryStatus.dwLength = ctypes.sizeof(MEMORYSTATUS)
+        kernel32.GlobalMemoryStatus(ctypes.byref(memoryStatus))
+        return (memoryStatus.dwTotalPhys, memoryStatus.dwAvailPhys, memoryStatus.dwTotalPageFile, memoryStatus.dwAvailPageFile, memoryStatus.dwMemoryLoad, memoryStatus.dwTotalVirtual, memoryStatus.dwAvailVirtual)
+
+# To test, execute the script standalone.
+
+if __name__ == "__main__":
+    s = SystemInformation()
+    print s.os
+    print s.cpu
+    print "RAM : %dKb total" % s.totalRAM
+    print "RAM : %dKb free" % s.availableRAM
+    print "Total VM: %dKb" % s.totalVM
+    print "Available VM: %dKb" % s.availableVM