X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=www%2Fwebapp%2Fhandlers_stasy.py;h=6a66ee77bc574f914942b4e3e6659191233f4270;hb=91a446f0051f01020c47685d38b3de1e0e400aae;hp=7b8c506faedf85f44f0658fd615e2089d53bc29f;hpb=7ff3de8a82b0044df015d9d60e7a3de0fa0c1bc1;p=people%2Fshoehn%2Fipfire.org.git diff --git a/www/webapp/handlers_stasy.py b/www/webapp/handlers_stasy.py index 7b8c506..6a66ee7 100644 --- a/www/webapp/handlers_stasy.py +++ b/www/webapp/handlers_stasy.py @@ -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)