-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
+import os
+import string
+
+
+class Device(object):
+ def __init__(self, path):
+ self.path=path
+ self._uevent={}
+ with open(os.path.join(path, "uevent")) as f:
+ for line in f.readlines():
+ key, val = line.split("=")
+ self._uevent[key]=val.rstrip().lower()
+
+ @property
+ def driver(self):
+ return self._uevent.get("DRIVER", None)
+
+
+class PCIDevice(Device):
+ subsystem = "pci"
+
+ @property
+ def model(self):
+ return self._uevent['PCI_ID'].split(":")[1]
+
+ @property
+ def vendor(self):
+ return self._uevent['PCI_ID'].split(":")[0]
+
+ @property
+ def deviceclass(self):
+ return self._uevent['PCI_CLASS']
+
+
+class USBDevice(Device):
+ subsystem = "usb"
+
+ def pad(self, s):
+ while len(s) < 4:
+ s = "0"+s
+ return s
+
+
+ @property
+ def vendor(self):
+ return self.pad(self._uevent['PRODUCT'].split("/")[0])
+
+ @property
+ def model(self):
+ return self.pad(self._uevent['PRODUCT'].split("/")[1])
+
+ @property
+ def deviceclass(self):
+ return self._uevent.get("INTERFACE", None)
+
+
+
-#!/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
+#!/usr/bin/python
+
+
+import json
+import os
+import string
+
+import cpu
+import device
+
+class System(object):
+
+ def __init__(self):
+ # find all devices
+ self.devices = []
+ self.scan()
+ self.cpu = cpu.CPU()
+
+ def profile(self):
+ p = {
+ "public_id" : self.public_id,
+ "private_id" : self.private_id,
+
+ "arch" : self.arch,
+ "language" : self.language,
+ "release" : self.release,
+ "memory" : self.memory,
+ "kernel" : self.kernel,
+ "root_size" : self.root_size,
+ "devices" : [],
+
+ }
+
+ for device in self.devices:
+ p["devices"].append({
+ "subsystem" : device.subsystem.lower(),
+ "vendor" : device.vendor.lower(),
+ "model" : device.model.lower(),
+ "deviceclass" : device.deviceclass
+ })
+
+ p["cpu"] = {
+ "vendor" : self.cpu.vendor,
+ "model" : self.cpu.model,
+ "stepping" : self.cpu.stepping,
+ "flags" : self.cpu.flags,
+ "bogomips" : self.cpu.bogomips,
+ "speed" : self.cpu.speed,
+ "modes" : self.cpu.modes,
+ "hypervisor" : self.cpu.hypervisor,
+ "virtype" : self.cpu.virtype,
+ "family" : self.cpu.family,
+ "count" : self.cpu.count
+ }
+
+ return json.dumps(p)
+
+
+ @property
+ def arch(self):
+ return os.uname()[4]
+
+ @property
+ def public_id(self):
+ return "0"*40
+
+ @property
+ def private_id(self):
+ return "1"*40
+
+ @property
+ def language(self):
+ with open("/var/ipfire/main/settings", "r") as f:
+ for line in f.readlines():
+ key, val = line.split("=", 1)
+ if key=="LANGUAGE":
+ return val.strip()
+
+ @property
+ def release(self):
+ with open("/etc/system-release", "r") as f:
+ return f.read().strip()
+
+ @property
+ def memory(self):
+ with open("/proc/meminfo", "r") as f:
+ firstline = f.readline().strip()
+ return firstline.split()[1]
+
+ @property
+ def kernel(self):
+ return os.uname()[2]
+
+ @property
+ def root_disk(self):
+ with open("/etc/mtab", "r") as f:
+ dev, mountpoint, rest = f.readline().split(" ",2)
+ if mountpoint == "/":
+ dev = dev[5:]
+ # cut off all digits at end of string
+ while dev[-1] in string.digits:
+ dev = dev[:-1]
+ return dev
+
+ @property
+ def root_size(self):
+ path="/sys/block/%s/size" %self.root_disk
+ if not os.path.exists(path):
+ return
+ with open(path, "r") as f:
+ return int(f.readline())*512/1024
+
+ def scan(self):
+ toscan = (("/sys/bus/pci/devices", device.PCIDevice),
+ ("/sys/bus/usb/devices", device.USBDevice))
+ for path, cls in toscan:
+ dirlist = os.listdir(path)
+ for dir in dirlist:
+ self.devices.append(cls(os.path.join(path, dir)))
+
+
+
+
+
+if __name__ == "__main__":
+ s=System()
+ print s.arch
+ print s.language
+ print s.release
+ print s.memory
+ print s.kernel
+ print s.root_disk
+ print s.root_size
+ print "------------\n", s.devices, "\n------------\n"
+ print s.profile()
+
+ import urllib2
+ import urllib
+ r = urllib2.Request("http://192.168.10.101:9001/send/%s" %s.public_id, data = urllib.urlencode({"profile" : s.profile()}))
urllib2.urlopen(r)
\ No newline at end of file