]> git.ipfire.org Git - oddments/fireinfo.git/commitdiff
Initial import of python components.
authorStefan Pampel <stefan.pampel@ipfire.org>
Sun, 21 Nov 2010 18:44:44 +0000 (19:44 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 21 Nov 2010 18:44:44 +0000 (19:44 +0100)
fireinfo/cpu.py [new file with mode: 0644]
fireinfo/device.py [new file with mode: 0644]
fireinfo/system.py [new file with mode: 0644]

diff --git a/fireinfo/cpu.py b/fireinfo/cpu.py
new file mode 100644 (file)
index 0000000..267f634
--- /dev/null
@@ -0,0 +1,69 @@
+#!/usr/bin/python
+
+import _fireinfo
+
+
+class CPU(object):
+       __info = _fireinfo.cpuinfo()
+
+       @property
+       def bogomips(self):
+               return float(self.__info["bogomips"])
+
+       @property
+       def model(self):
+               return int(self.__info["model"])
+
+       @property
+       def vendor(self):
+               return self.__info["vendor"]
+
+       @property
+       def stepping(self):
+               return int(self.__info["stepping"])
+
+       @property
+       def flags(self):
+               return self.__info["flags"].split()
+
+       @property
+       def speed(self):
+               mhz = float(self.__info["mhz"])
+               return round(mhz)
+
+       @property
+       def modes(self):
+               return self.__info.get("modes", [])
+
+       @property
+       def hypervisor(self):
+               return self.__info["hypervisor"]
+
+       @property
+       def virtype(self):
+               return self.__info["virtype"]
+       
+       @property
+       def family(self):
+               return int(self.__info["family"])
+       
+       @property
+       def count(self):
+               return int(self.__info["ncpus"])
+       
+
+
+if __name__ == "__main__":
+       c = CPU(0)
+
+       print "Vendor:", c.vendor
+       print "Model:", c.model
+       print "Stepping:", c.stepping
+       print "Flags:", c.flags
+       print "Bogomips:", c.bogomips
+       print "Speed:", c.speed
+       print "Modes:", c.modes
+       print "Hypervisor:", c.hypervisor
+       print "Virtype:", c.virtype
+       print "Family:", c.family
+       print "Count:", c.count
diff --git a/fireinfo/device.py b/fireinfo/device.py
new file mode 100644 (file)
index 0000000..9724f6d
--- /dev/null
@@ -0,0 +1,57 @@
+import os\r
+import string\r
+\r
+\r
+class Device(object):\r
+       def __init__(self, path):\r
+               self.path=path\r
+               self._uevent={} \r
+               with open(os.path.join(path, "uevent")) as f:\r
+                       for line in f.readlines():\r
+                               key, val = line.split("=")\r
+                               self._uevent[key]=val.rstrip().lower()\r
+               \r
+       @property\r
+       def driver(self):\r
+               return self._uevent.get("DRIVER", None)\r
+\r
+                       \r
+class PCIDevice(Device):\r
+       subsystem = "pci"\r
+       \r
+       @property\r
+       def model(self):\r
+               return self._uevent['PCI_ID'].split(":")[1]\r
+               \r
+       @property\r
+       def vendor(self):\r
+               return self._uevent['PCI_ID'].split(":")[0]\r
+\r
+       @property\r
+       def deviceclass(self):\r
+               return self._uevent['PCI_CLASS']\r
+       \r
+       \r
+class USBDevice(Device):\r
+       subsystem = "usb"\r
+       \r
+       def pad(self, s):\r
+               while len(s) < 4:\r
+                       s = "0"+s\r
+               return s\r
+               \r
+       \r
+       @property\r
+       def vendor(self):\r
+               return self.pad(self._uevent['PRODUCT'].split("/")[0])\r
+\r
+       @property\r
+       def model(self):\r
+               return self.pad(self._uevent['PRODUCT'].split("/")[1])\r
+\r
+       @property\r
+       def deviceclass(self):\r
+               return self._uevent.get("INTERFACE", None)\r
+\r
+\r
+       \r
diff --git a/fireinfo/system.py b/fireinfo/system.py
new file mode 100644 (file)
index 0000000..724b328
--- /dev/null
@@ -0,0 +1,140 @@
+#!/usr/bin/python\r
+\r
+\r
+import json\r
+import os\r
+import string\r
+\r
+import cpu\r
+import device\r
+\r
+class System(object):\r
+\r
+       def __init__(self):\r
+               # find all devices\r
+               self.devices = []\r
+               self.scan()\r
+               self.cpu = cpu.CPU()\r
+       \r
+       def profile(self):\r
+               p = {\r
+                       "public_id" : self.public_id,\r
+                       "private_id" : self.private_id,\r
+                       \r
+                       "arch" : self.arch,\r
+                       "language" : self.language,\r
+                       "release" : self.release,\r
+                       "memory" : self.memory,\r
+                       "kernel" : self.kernel,\r
+                       "root_size" : self.root_size,\r
+                       "devices" : [],\r
+                       \r
+                       }\r
+                       \r
+               for device in self.devices:\r
+                       p["devices"].append({\r
+                               "subsystem" : device.subsystem.lower(), \r
+                               "vendor" : device.vendor.lower(), \r
+                               "model" : device.model.lower(), \r
+                               "deviceclass" : device.deviceclass\r
+                       })\r
+               \r
+               p["cpu"] = {\r
+                       "vendor" : self.cpu.vendor,\r
+                       "model" : self.cpu.model,\r
+                       "stepping" : self.cpu.stepping,\r
+                       "flags" : self.cpu.flags,\r
+                       "bogomips" : self.cpu.bogomips,\r
+                       "speed" : self.cpu.speed,\r
+                       "modes" : self.cpu.modes,\r
+                       "hypervisor" : self.cpu.hypervisor,\r
+                       "virtype" : self.cpu.virtype,\r
+                       "family" : self.cpu.family,\r
+                       "count" : self.cpu.count                                \r
+               }\r
+                       \r
+               return json.dumps(p)\r
+                               \r
+               \r
+       @property\r
+       def arch(self):\r
+               return os.uname()[4]\r
+\r
+       @property\r
+       def public_id(self):\r
+               return "0"*40\r
+       \r
+       @property\r
+       def private_id(self):\r
+               return "1"*40\r
+       \r
+       @property\r
+       def language(self):\r
+               with open("/var/ipfire/main/settings", "r") as f:\r
+                       for line in f.readlines():\r
+                               key, val = line.split("=", 1)\r
+                               if key=="LANGUAGE":\r
+                                       return val.strip()\r
+\r
+       @property\r
+       def release(self):\r
+               with open("/etc/system-release", "r") as f:\r
+                       return f.read().strip()\r
+               \r
+       @property\r
+       def memory(self):\r
+               with open("/proc/meminfo", "r") as f:\r
+                       firstline = f.readline().strip()\r
+                       return firstline.split()[1]\r
+\r
+       @property\r
+       def kernel(self):\r
+               return os.uname()[2]\r
+\r
+       @property\r
+       def root_disk(self):\r
+               with open("/etc/mtab", "r") as f:\r
+                       dev, mountpoint, rest = f.readline().split(" ",2)\r
+                       if mountpoint == "/":\r
+                               dev = dev[5:]\r
+                               # cut off all digits at end of string\r
+                               while dev[-1] in string.digits:\r
+                                       dev = dev[:-1]  \r
+                               return dev      \r
+\r
+       @property\r
+       def root_size(self):\r
+               path="/sys/block/%s/size" %self.root_disk\r
+               if not os.path.exists(path):\r
+                       return\r
+               with open(path, "r") as f:\r
+                       return int(f.readline())*512/1024\r
+                                       \r
+       def scan(self):\r
+               toscan = (("/sys/bus/pci/devices", device.PCIDevice),\r
+               ("/sys/bus/usb/devices", device.USBDevice))\r
+               for path, cls in toscan:\r
+                       dirlist = os.listdir(path)\r
+                       for dir in dirlist:\r
+                               self.devices.append(cls(os.path.join(path, dir)))\r
+                               \r
+                               \r
+\r
+               \r
+\r
+if __name__ == "__main__":\r
+       s=System()\r
+       print s.arch\r
+       print s.language\r
+       print s.release\r
+       print s.memory\r
+       print s.kernel\r
+       print s.root_disk\r
+       print s.root_size\r
+       print "------------\n", s.devices, "\n------------\n"\r
+       print s.profile()\r
+       \r
+       import urllib2\r
+       import urllib\r
+       r = urllib2.Request("http://192.168.10.101:9001/send/%s" %s.public_id, data = urllib.urlencode({"profile" : s.profile()}))\r
+       urllib2.urlopen(r)
\ No newline at end of file