--- /dev/null
+#!/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
--- /dev/null
+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
--- /dev/null
+#!/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