]> git.ipfire.org Git - oddments/fireinfo.git/commitdiff
Read vendor and model of the system from the DMI.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 28 Nov 2010 13:08:33 +0000 (14:08 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 28 Nov 2010 13:08:33 +0000 (14:08 +0100)
fireinfo/system.py

index a8b7618f66c62be4150ff015e3ff6b6b59b2e7fa..e4388d37a5b096a87d770109ab609224c75be4ba 100644 (file)
@@ -9,6 +9,8 @@ import cpu
 import device
 import hypervisor
 
+SYS_CLASS_DMI = "/sys/class/dmi/id"
+
 class Singleton(type):
        def __init__(cls, name, bases, dict):
                super(Singleton, cls).__init__(name, bases, dict)
@@ -21,6 +23,19 @@ class Singleton(type):
                return cls.instance
 
 
+def read_from_file(filename):
+       """
+               Read all data from filename.
+       """
+       if not os.path.exists(filename):
+               return
+
+       try:
+               with open(filename) as f:
+                       return f.read().strip()
+       except IOError:
+               pass
+
 class System(object):
        __metaclass__ = Singleton
 
@@ -44,6 +59,10 @@ class System(object):
                        "root_size" : self.root_size,
                        "devices" : [],
 
+                       # System information
+                       "model"  : self.model,
+                       "vendor" : self.vendor,
+
                        "virtual" : self.virtual,
                        }
                        
@@ -135,6 +154,26 @@ class System(object):
                with open("/sys/class/dmi/id/bios_vendor", "r") as f:
                        return f.read().strip()
 
+       @property
+       def vendor(self):
+               ret = None
+               for file in ("chassis_vendor", "board_vendor", "sys_vendor",):
+                       ret = read_from_file(os.path.join(SYS_CLASS_DMI, file))
+                       if ret:
+                               break
+
+               return ret
+
+       @property
+       def model(self):
+               ret = None
+               for file in ("chassis_model", "board_model", "product_name",):
+                       ret = read_from_file(os.path.join(SYS_CLASS_DMI, file))
+                       if ret:
+                               break
+
+               return ret
+
        @property
        def memory(self):
                with open("/proc/meminfo", "r") as f: