]>
Commit | Line | Data |
---|---|---|
940227cb MT |
1 | #!/usr/bin/python |
2 | ||
91a446f0 MT |
3 | from __future__ import division |
4 | ||
5 | import hwdata | |
940227cb MT |
6 | import tornado.web |
7 | ||
372efc19 MT |
8 | import backend |
9 | ||
940227cb MT |
10 | from handlers_base import * |
11 | ||
12 | class 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 | |
42 | class 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 | ||
59 | class 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 | ||
68 | class StasyStatsHandler(StasyBaseHandler): | |
69 | def get(self): | |
70 | self.render("stasy-stats.html") | |
372efc19 MT |
71 | |
72 | ||
73 | class 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 | ||
81 | class 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 | ||
90 | class 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 | ||
97 | class 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 | ||
105 | class 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 | |
111 | class 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 | ||
118 | class 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 | ||
135 | class 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) |