]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - www/webapp/handlers_stasy.py
manager: Fix crash is release directory does not exist, yet.
[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):
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
57class 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
66class StasyStatsHandler(StasyBaseHandler):
67 def get(self):
68 self.render("stasy-stats.html")
372efc19
MT
69
70
71class 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
79class 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
96class 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
103class 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
111class 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
117class 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
124class 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
130class 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
147class 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,
85aceeaf
MT
167 percentage=percentage,
168 bus=bus.lower())
cbb9726a
MT
169
170
71e1ece7 171class AdminFireinfoStatsHandler(StasyBaseHandler):
cbb9726a
MT
172 def get(self):
173 _ = self.locale.translate
174
175 data = {}
176
177 data["profiles_count"], data["profiles_count_all"] = \
178 self.stasy.get_profile_ratio()
179
180 data["archives_count"] = self.stasy.get_archives_count()
181
182 # updated since 24h
183 since = { "hours" : 24 }
184 updates = self.stasy.get_updates_by_release_since(since)
185 #updates[_("All versions")] = self.stasy.get_updated_since(since).count()
186 data["updated_since_24h"] = updates
187
188 self.render("stasy-stats-admin.html", **data)
189