]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blobdiff - www/webapp/handlers_stasy.py
Big update of the fireinfo service.
[people/shoehn/ipfire.org.git] / www / webapp / handlers_stasy.py
index 7b8c506faedf85f44f0658fd615e2089d53bc29f..6a66ee77bc574f914942b4e3e6659191233f4270 100644 (file)
@@ -1,5 +1,8 @@
 #!/usr/bin/python
 
+from __future__ import division
+
+import hwdata
 import tornado.web
 
 import backend
@@ -11,6 +14,30 @@ class StasyBaseHandler(BaseHandler):
        def stasy(self):
                return backend.Stasy()
 
+       def format_size(self, s):
+               units = ("K", "M", "G", "T")
+               unit = 0
+
+               while s >= 1024 and unit < len(units):
+                       s /= 1024
+                       unit += 1
+
+               return "%.1f%s" % (s, units[unit])
+
+       def cut_string(self, s, limit=15):
+               if len(s) > limit:
+                       s = s[:limit] + "..."
+
+               return s
+
+       def render(self, *args, **kwargs):
+               kwargs.update({
+                       "cut_string" : self.cut_string,
+                       "format_size" : self.format_size,
+               })
+
+               return BaseHandler.render(self, *args, **kwargs)
+
 
 class StasyIndexHandler(StasyBaseHandler):
        def get(self):
@@ -18,20 +45,61 @@ class StasyIndexHandler(StasyBaseHandler):
 
                self.render("stasy-index.html", profiles=profiles)
 
+       def post(self):
+               profile_id = self.get_argument("profile_id", None)
+               if not profile_id:
+                       raise tornado.web.HTTPError(400, "No profile ID was given.")
+
+               if not self.stasy.profile_exists(profile_id):
+                       raise tornado.web.HTTPError(404, "Profile does not exist.")
 
-class StasyProfileHandler(StasyBaseHandler):
+               self.redirect("/profile/%s" % profile_id)
+
+
+class StasyProfileDetailHandler(StasyBaseHandler):
        def get(self, profile_id):
                profile = self.stasy.get_profile(profile_id)
                if not profile:
                        raise tornado.web.HTTPError(404, "Profile not found: %s" % profile_id)
 
-               self.render("stasy-profile.html", profile=profile)
+               self.render("stasy-profile-detail.html", profile=profile)
+
+
+class StasyStatsHandler(StasyBaseHandler):
+       def get(self):
+               self.render("stasy-stats.html")
 
 
 class StasyStatsCPUHandler(StasyBaseHandler):
        def get(self):
                return self.render("stasy-stats-cpus.html",
-                       cpu_vendors = self.stasy.cpu_map)
+                       cpu_vendors=self.stasy.cpu_vendors_map,
+                       average_speed=self.stasy.cpu_speed_average,
+                       cpu_speeds=self.stasy.cpu_speed_map)
+
+
+class StasyStatsCPUFlagsHandler(StasyBaseHandler):
+       def get(self):
+               kwargs = {}
+
+               for flag in ("lm", "pae"):
+                       kwargs["cpus_" + flag] = self.stasy.get_cpu_flag_map(flag)
+
+               return self.render("stasy-stats-cpu-flags.html", **kwargs)
+
+class StasyStatsMemoryHandler(StasyBaseHandler):
+       def get(self):
+               return self.render("stasy-stats-memory.html",
+                       average_memory=self.stasy.memory_average,
+                       memory=self.stasy.get_memory_map())
+
+
+class StasyStatsOSesHandler(StasyBaseHandler):
+       def get(self):
+               return self.render("stasy-stats-oses.html",
+                       arches=self.stasy.arch_map,
+                       kernels=self.stasy.kernel_map,
+                       releases=self.stasy.release_map)
 
 
 class StasyStatsVirtualHandler(StasyBaseHandler):
@@ -39,3 +107,49 @@ class StasyStatsVirtualHandler(StasyBaseHandler):
                return self.render("stasy-stats-virtual.html",
                        hypervisor_vendors = self.stasy.hypervisor_map,
                        is_virtual = self.stasy.virtual_map)
+
+class StasyStatsGeoHandler(StasyBaseHandler):
+       def get(self):
+               return self.render("stasy-stats-geo.html",
+                       languages = self.stasy.get_language_map(),
+                       geo_locations = self.stasy.get_geo_location_map())
+
+
+class StasyStatsVendorDetail(StasyBaseHandler):
+       def get(self, bus, vendor_id):
+               # XXX some way ugly
+               bus2cls = {
+                       "pci" : hwdata.PCI,
+                       "usb" : hwdata.USB
+               }
+               cls = bus2cls[bus.lower()]
+               vendor_name = cls().get_vendor(vendor_id)
+
+               # Get a list of all models we know from this vendor
+               models = self.stasy.get_models_by_vendor(bus, vendor_id)
+
+               self.render("stasy-vendor-detail.html",
+                       vendor_name=vendor_name, models=models)
+
+
+class StasyStatsModelDetail(StasyBaseHandler):
+       def get(self, bus, vendor_id, model_id):
+               bus2cls = {
+                       "pci" : hwdata.PCI,
+                       "usb" : hwdata.USB
+               }
+               
+               cls = bus2cls[bus.lower()]
+
+               vendor_name = cls().get_vendor(vendor_id)
+               model_name = cls().get_device(vendor_id, model_id)
+               
+               percentage = \
+                       self.stasy.get_device_percentage(bus, vendor_id, model_id) * 100
+
+               self.render("stasy-model-detail.html",
+                       vendor_id=vendor_id,
+                       vendor_name=vendor_name,
+                       model_id=model_id,
+                       model_name=model_name,
+                       percentage=percentage)