]>
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): | |
6328a07b | 44 | self.render("stasy-index.html") |
940227cb | 45 | |
91a446f0 MT |
46 | def post(self): |
47 | profile_id = self.get_argument("profile_id", None) | |
48 | if not profile_id: | |
49 | raise tornado.web.HTTPError(400, "No profile ID was given.") | |
50 | ||
51 | if not self.stasy.profile_exists(profile_id): | |
52 | raise tornado.web.HTTPError(404, "Profile does not exist.") | |
940227cb | 53 | |
91a446f0 MT |
54 | self.redirect("/profile/%s" % profile_id) |
55 | ||
56 | ||
57 | class StasyProfileDetailHandler(StasyBaseHandler): | |
940227cb MT |
58 | def get(self, profile_id): |
59 | profile = self.stasy.get_profile(profile_id) | |
60 | if not profile: | |
61 | raise tornado.web.HTTPError(404, "Profile not found: %s" % profile_id) | |
62 | ||
91a446f0 MT |
63 | self.render("stasy-profile-detail.html", profile=profile) |
64 | ||
65 | ||
66 | class StasyStatsHandler(StasyBaseHandler): | |
67 | def get(self): | |
68 | self.render("stasy-stats.html") | |
372efc19 MT |
69 | |
70 | ||
71 | class StasyStatsCPUHandler(StasyBaseHandler): | |
72 | def get(self): | |
73 | return self.render("stasy-stats-cpus.html", | |
91a446f0 MT |
74 | cpu_vendors=self.stasy.cpu_vendors_map, |
75 | average_speed=self.stasy.cpu_speed_average, | |
76 | cpu_speeds=self.stasy.cpu_speed_map) | |
77 | ||
78 | ||
79 | class StasyStatsCPUFlagsHandler(StasyBaseHandler): | |
80 | def get(self): | |
81 | kwargs = {} | |
d3f4dee4 MT |
82 | |
83 | flags = ( | |
84 | ("lm", "lm"), | |
85 | ("pae", "pae"), | |
86 | ("virt", ("vmx", "svm")), | |
87 | ) | |
91a446f0 | 88 | |
d3f4dee4 MT |
89 | for name, flag in flags: |
90 | kwargs["cpus_" + name] = self.stasy.get_cpu_flag_map(flag) | |
91 | ||
92 | print kwargs | |
91a446f0 MT |
93 | |
94 | return self.render("stasy-stats-cpu-flags.html", **kwargs) | |
95 | ||
96 | class StasyStatsMemoryHandler(StasyBaseHandler): | |
97 | def get(self): | |
98 | return self.render("stasy-stats-memory.html", | |
99 | average_memory=self.stasy.memory_average, | |
100 | memory=self.stasy.get_memory_map()) | |
101 | ||
102 | ||
103 | class StasyStatsOSesHandler(StasyBaseHandler): | |
104 | def get(self): | |
105 | return self.render("stasy-stats-oses.html", | |
106 | arches=self.stasy.arch_map, | |
107 | kernels=self.stasy.kernel_map, | |
108 | releases=self.stasy.release_map) | |
372efc19 MT |
109 | |
110 | ||
111 | class StasyStatsVirtualHandler(StasyBaseHandler): | |
112 | def get(self): | |
113 | return self.render("stasy-stats-virtual.html", | |
114 | hypervisor_vendors = self.stasy.hypervisor_map, | |
115 | is_virtual = self.stasy.virtual_map) | |
91a446f0 MT |
116 | |
117 | class StasyStatsGeoHandler(StasyBaseHandler): | |
118 | def get(self): | |
119 | return self.render("stasy-stats-geo.html", | |
120 | languages = self.stasy.get_language_map(), | |
121 | geo_locations = self.stasy.get_geo_location_map()) | |
122 | ||
123 | ||
07785a9c MT |
124 | class StasyStatsNetworkHandler(StasyBaseHandler): |
125 | def get(self): | |
126 | return self.render("stasy-stats-network.html", | |
127 | network_zones=self.stasy.get_network_zones_map()) | |
128 | ||
129 | ||
91a446f0 MT |
130 | class StasyStatsVendorDetail(StasyBaseHandler): |
131 | def get(self, bus, vendor_id): | |
132 | # XXX some way ugly | |
133 | bus2cls = { | |
134 | "pci" : hwdata.PCI, | |
135 | "usb" : hwdata.USB | |
136 | } | |
137 | cls = bus2cls[bus.lower()] | |
138 | vendor_name = cls().get_vendor(vendor_id) | |
139 | ||
140 | # Get a list of all models we know from this vendor | |
141 | models = self.stasy.get_models_by_vendor(bus, vendor_id) | |
142 | ||
143 | self.render("stasy-vendor-detail.html", | |
144 | vendor_name=vendor_name, models=models) | |
145 | ||
146 | ||
147 | class StasyStatsModelDetail(StasyBaseHandler): | |
148 | def get(self, bus, vendor_id, model_id): | |
149 | bus2cls = { | |
150 | "pci" : hwdata.PCI, | |
151 | "usb" : hwdata.USB | |
152 | } | |
153 | ||
154 | cls = bus2cls[bus.lower()] | |
155 | ||
156 | vendor_name = cls().get_vendor(vendor_id) | |
157 | model_name = cls().get_device(vendor_id, model_id) | |
158 | ||
159 | percentage = \ | |
160 | self.stasy.get_device_percentage(bus, vendor_id, model_id) * 100 | |
161 | ||
162 | self.render("stasy-model-detail.html", | |
163 | vendor_id=vendor_id, | |
164 | vendor_name=vendor_name, | |
165 | model_id=model_id, | |
166 | model_name=model_name, | |
167 | percentage=percentage) | |
cbb9726a MT |
168 | |
169 | ||
71e1ece7 | 170 | class AdminFireinfoStatsHandler(StasyBaseHandler): |
cbb9726a MT |
171 | def get(self): |
172 | _ = self.locale.translate | |
173 | ||
174 | data = {} | |
175 | ||
176 | data["profiles_count"], data["profiles_count_all"] = \ | |
177 | self.stasy.get_profile_ratio() | |
178 | ||
179 | data["archives_count"] = self.stasy.get_archives_count() | |
180 | ||
181 | # updated since 24h | |
182 | since = { "hours" : 24 } | |
183 | updates = self.stasy.get_updates_by_release_since(since) | |
184 | #updates[_("All versions")] = self.stasy.get_updated_since(since).count() | |
185 | data["updated_since_24h"] = updates | |
186 | ||
187 | self.render("stasy-stats-admin.html", **data) | |
188 |