]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - www/webapp/handlers_stasy.py
Big update of the fireinfo service.
[people/shoehn/ipfire.org.git] / www / webapp / handlers_stasy.py
CommitLineData
940227cb
MT
1#!/usr/bin/python
2
91a446f0
MT
3from __future__ import division
4
5import hwdata
940227cb
MT
6import tornado.web
7
372efc19
MT
8import backend
9
940227cb
MT
10from handlers_base import *
11
12class StasyBaseHandler(BaseHandler):
13 @property
14 def stasy(self):
15 return backend.Stasy()
16
91a446f0
MT
17 def format_size(self, s):
18 units = ("K", "M", "G", "T")
19 unit = 0
20
21 while s >= 1024 and unit < len(units):
22 s /= 1024
23 unit += 1
24
25 return "%.1f%s" % (s, units[unit])
26
27 def cut_string(self, s, limit=15):
28 if len(s) > limit:
29 s = s[:limit] + "..."
30
31 return s
32
33 def render(self, *args, **kwargs):
34 kwargs.update({
35 "cut_string" : self.cut_string,
36 "format_size" : self.format_size,
37 })
38
39 return BaseHandler.render(self, *args, **kwargs)
40
940227cb
MT
41
42class StasyIndexHandler(StasyBaseHandler):
43 def get(self):
44 profiles = self.stasy.get_profiles()
45
46 self.render("stasy-index.html", profiles=profiles)
47
91a446f0
MT
48 def post(self):
49 profile_id = self.get_argument("profile_id", None)
50 if not profile_id:
51 raise tornado.web.HTTPError(400, "No profile ID was given.")
52
53 if not self.stasy.profile_exists(profile_id):
54 raise tornado.web.HTTPError(404, "Profile does not exist.")
940227cb 55
91a446f0
MT
56 self.redirect("/profile/%s" % profile_id)
57
58
59class StasyProfileDetailHandler(StasyBaseHandler):
940227cb
MT
60 def get(self, profile_id):
61 profile = self.stasy.get_profile(profile_id)
62 if not profile:
63 raise tornado.web.HTTPError(404, "Profile not found: %s" % profile_id)
64
91a446f0
MT
65 self.render("stasy-profile-detail.html", profile=profile)
66
67
68class StasyStatsHandler(StasyBaseHandler):
69 def get(self):
70 self.render("stasy-stats.html")
372efc19
MT
71
72
73class StasyStatsCPUHandler(StasyBaseHandler):
74 def get(self):
75 return self.render("stasy-stats-cpus.html",
91a446f0
MT
76 cpu_vendors=self.stasy.cpu_vendors_map,
77 average_speed=self.stasy.cpu_speed_average,
78 cpu_speeds=self.stasy.cpu_speed_map)
79
80
81class StasyStatsCPUFlagsHandler(StasyBaseHandler):
82 def get(self):
83 kwargs = {}
84
85 for flag in ("lm", "pae"):
86 kwargs["cpus_" + flag] = self.stasy.get_cpu_flag_map(flag)
87
88 return self.render("stasy-stats-cpu-flags.html", **kwargs)
89
90class StasyStatsMemoryHandler(StasyBaseHandler):
91 def get(self):
92 return self.render("stasy-stats-memory.html",
93 average_memory=self.stasy.memory_average,
94 memory=self.stasy.get_memory_map())
95
96
97class StasyStatsOSesHandler(StasyBaseHandler):
98 def get(self):
99 return self.render("stasy-stats-oses.html",
100 arches=self.stasy.arch_map,
101 kernels=self.stasy.kernel_map,
102 releases=self.stasy.release_map)
372efc19
MT
103
104
105class StasyStatsVirtualHandler(StasyBaseHandler):
106 def get(self):
107 return self.render("stasy-stats-virtual.html",
108 hypervisor_vendors = self.stasy.hypervisor_map,
109 is_virtual = self.stasy.virtual_map)
91a446f0
MT
110
111class StasyStatsGeoHandler(StasyBaseHandler):
112 def get(self):
113 return self.render("stasy-stats-geo.html",
114 languages = self.stasy.get_language_map(),
115 geo_locations = self.stasy.get_geo_location_map())
116
117
118class StasyStatsVendorDetail(StasyBaseHandler):
119 def get(self, bus, vendor_id):
120 # XXX some way ugly
121 bus2cls = {
122 "pci" : hwdata.PCI,
123 "usb" : hwdata.USB
124 }
125 cls = bus2cls[bus.lower()]
126 vendor_name = cls().get_vendor(vendor_id)
127
128 # Get a list of all models we know from this vendor
129 models = self.stasy.get_models_by_vendor(bus, vendor_id)
130
131 self.render("stasy-vendor-detail.html",
132 vendor_name=vendor_name, models=models)
133
134
135class StasyStatsModelDetail(StasyBaseHandler):
136 def get(self, bus, vendor_id, model_id):
137 bus2cls = {
138 "pci" : hwdata.PCI,
139 "usb" : hwdata.USB
140 }
141
142 cls = bus2cls[bus.lower()]
143
144 vendor_name = cls().get_vendor(vendor_id)
145 model_name = cls().get_device(vendor_id, model_id)
146
147 percentage = \
148 self.stasy.get_device_percentage(bus, vendor_id, model_id) * 100
149
150 self.render("stasy-model-detail.html",
151 vendor_id=vendor_id,
152 vendor_name=vendor_name,
153 model_id=model_id,
154 model_name=model_name,
155 percentage=percentage)