]>
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 = {} | |
d3f4dee4 MT |
84 | |
85 | flags = ( | |
86 | ("lm", "lm"), | |
87 | ("pae", "pae"), | |
88 | ("virt", ("vmx", "svm")), | |
89 | ) | |
91a446f0 | 90 | |
d3f4dee4 MT |
91 | for name, flag in flags: |
92 | kwargs["cpus_" + name] = self.stasy.get_cpu_flag_map(flag) | |
93 | ||
94 | print kwargs | |
91a446f0 MT |
95 | |
96 | return self.render("stasy-stats-cpu-flags.html", **kwargs) | |
97 | ||
98 | class StasyStatsMemoryHandler(StasyBaseHandler): | |
99 | def get(self): | |
100 | return self.render("stasy-stats-memory.html", | |
101 | average_memory=self.stasy.memory_average, | |
102 | memory=self.stasy.get_memory_map()) | |
103 | ||
104 | ||
105 | class StasyStatsOSesHandler(StasyBaseHandler): | |
106 | def get(self): | |
107 | return self.render("stasy-stats-oses.html", | |
108 | arches=self.stasy.arch_map, | |
109 | kernels=self.stasy.kernel_map, | |
110 | releases=self.stasy.release_map) | |
372efc19 MT |
111 | |
112 | ||
113 | class StasyStatsVirtualHandler(StasyBaseHandler): | |
114 | def get(self): | |
115 | return self.render("stasy-stats-virtual.html", | |
116 | hypervisor_vendors = self.stasy.hypervisor_map, | |
117 | is_virtual = self.stasy.virtual_map) | |
91a446f0 MT |
118 | |
119 | class StasyStatsGeoHandler(StasyBaseHandler): | |
120 | def get(self): | |
121 | return self.render("stasy-stats-geo.html", | |
122 | languages = self.stasy.get_language_map(), | |
123 | geo_locations = self.stasy.get_geo_location_map()) | |
124 | ||
125 | ||
07785a9c MT |
126 | class StasyStatsNetworkHandler(StasyBaseHandler): |
127 | def get(self): | |
128 | return self.render("stasy-stats-network.html", | |
129 | network_zones=self.stasy.get_network_zones_map()) | |
130 | ||
131 | ||
91a446f0 MT |
132 | class StasyStatsVendorDetail(StasyBaseHandler): |
133 | def get(self, bus, vendor_id): | |
134 | # XXX some way ugly | |
135 | bus2cls = { | |
136 | "pci" : hwdata.PCI, | |
137 | "usb" : hwdata.USB | |
138 | } | |
139 | cls = bus2cls[bus.lower()] | |
140 | vendor_name = cls().get_vendor(vendor_id) | |
141 | ||
142 | # Get a list of all models we know from this vendor | |
143 | models = self.stasy.get_models_by_vendor(bus, vendor_id) | |
144 | ||
145 | self.render("stasy-vendor-detail.html", | |
146 | vendor_name=vendor_name, models=models) | |
147 | ||
148 | ||
149 | class StasyStatsModelDetail(StasyBaseHandler): | |
150 | def get(self, bus, vendor_id, model_id): | |
151 | bus2cls = { | |
152 | "pci" : hwdata.PCI, | |
153 | "usb" : hwdata.USB | |
154 | } | |
155 | ||
156 | cls = bus2cls[bus.lower()] | |
157 | ||
158 | vendor_name = cls().get_vendor(vendor_id) | |
159 | model_name = cls().get_device(vendor_id, model_id) | |
160 | ||
161 | percentage = \ | |
162 | self.stasy.get_device_percentage(bus, vendor_id, model_id) * 100 | |
163 | ||
164 | self.render("stasy-model-detail.html", | |
165 | vendor_id=vendor_id, | |
166 | vendor_name=vendor_name, | |
167 | model_id=model_id, | |
168 | model_name=model_name, | |
169 | percentage=percentage) |