]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/fireinfo.py
415f47423affccbddcc2be58dbb074e4c9431d4a
7 from . import ui_modules
9 class BaseHandler(base
.BaseHandler
):
12 return self
.get_argument_date("when", None)
15 class ProfileSendHandler(BaseHandler
):
16 def check_xsrf_cookie(self
):
17 # This cookie is not required here.
20 def get_profile_blob(self
):
21 profile
= self
.get_argument("profile", None)
23 # Send "400 bad request" if no profile was provided
25 raise tornado
.web
.HTTPError(400, "No profile received")
27 # Try to decode the profile
29 return json
.loads(profile
)
30 except json
.decoder
.JSONDecodeError
as e
:
31 raise tornado
.web
.HTTPError(400, "Profile could not be decoded: %s" % e
)
33 def post(self
, public_id
):
34 profile_blob
= self
.get_profile_blob()
37 with self
.db
.transaction():
39 self
.fireinfo
.handle_profile(public_id
, profile_blob
,
40 country_code
=self
.current_country_code
,
41 asn
=self
.current_address
.asn
if self
.current_address
else None)
43 except ValueError as e
:
44 raise tornado
.web
.HTTPError(400, "Could not process profile: %s" % e
)
46 self
.finish("Your profile was successfully saved to the database.")
49 class IndexHandler(base
.AnalyticsMixin
, BaseHandler
):
55 "latest_release" : self
.backend
.releases
.get_latest(),
58 "arches" : self
.fireinfo
.get_arch_map(when
=self
.when
),
59 "cpu_vendors" : self
.fireinfo
.get_cpu_vendors_map(when
=self
.when
),
62 "memory_avg" : self
.backend
.fireinfo
.get_average_memory_amount(when
=self
.when
),
65 "hypervisors" : self
.fireinfo
.get_hypervisor_map(when
=self
.when
),
66 "virtual_ratio" : self
.fireinfo
.get_virtual_ratio(when
=self
.when
),
69 "locations" : self
.fireinfo
.get_geo_location_map(when
=self
.when
),
72 self
.render("fireinfo/index.html", **data
)
75 class DriverDetail(base
.AnalyticsMixin
, BaseHandler
):
76 def get(self
, driver
):
77 devices
= self
.fireinfo
.get_devices_by_driver(driver
, when
=self
.when
)
79 self
.render("fireinfo/driver.html", driver
=driver
, devices
=devices
)
82 class ProfileHandler(base
.AnalyticsMixin
, BaseHandler
):
83 def get(self
, profile_id
):
84 profile
= self
.fireinfo
.get_profile(profile_id
, when
=self
.when
)
86 if not profile
or not profile
.is_showable():
87 raise tornado
.web
.HTTPError(404)
89 self
.render("fireinfo/profile.html", profile
=profile
)
92 class RandomProfileHandler(base
.AnalyticsMixin
, BaseHandler
):
94 profile
= self
.fireinfo
.get_random_profile(when
=self
.when
)
96 raise tornado
.web
.HTTPError(404, "Could not find a random profile")
98 self
.redirect("/fireinfo/profile/%s" % profile
.profile_id
)
101 class ReleasesHandler(base
.AnalyticsMixin
, BaseHandler
):
104 "releases" : self
.fireinfo
.get_releases_map(when
=self
.when
),
105 "kernels" : self
.fireinfo
.get_kernels_map(when
=self
.when
),
108 return self
.render("fireinfo/releases.html", **data
)
111 class ProcessorsHandler(base
.AnalyticsMixin
, BaseHandler
):
113 return self
.render("fireinfo/processors.html", when
=self
.when
)
116 class VendorsHandler(base
.AnalyticsMixin
, BaseHandler
):
118 vendors
= self
.fireinfo
.get_vendor_list(when
=self
.when
)
120 self
.render("fireinfo/vendors.html", vendors
=vendors
)
123 class VendorHandler(base
.AnalyticsMixin
, BaseHandler
):
124 def get(self
, subsystem
, vendor_id
):
125 devices
= self
.fireinfo
.get_devices_by_vendor(subsystem
, vendor_id
, when
=self
.when
)
127 raise tornado
.web
.HTTPError(404)
129 vendor_name
= self
.fireinfo
.get_vendor_string(subsystem
, vendor_id
)
131 self
.render("fireinfo/vendor.html", vendor_name
=vendor_name
, devices
=devices
)
134 class DeviceTableModule(ui_modules
.UIModule
):
135 def render(self
, devices
, show_group
=True, embedded
=False):
136 return self
.render_string("fireinfo/modules/table-devices.html",
137 devices
=devices
, show_group
=show_group
, embedded
=embedded
)
140 class DeviceAndGroupsTableModule(ui_modules
.UIModule
):
141 def render(self
, devices
):
142 _
= self
.locale
.translate
146 for device
in devices
:
147 if device
.cls
not in groups
:
148 groups
[device
.cls
] = []
150 groups
[device
.cls
].append(device
)
153 for key
in list(groups
.keys()):
156 # Order the groups by their name
157 groups
= list(groups
.items())
160 return self
.render_string("fireinfo/modules/table-devices-and-groups.html",
164 class AdminIndexHandler(BaseHandler
):
165 @tornado.web
.authenticated
167 if not self
.current_user
.is_staff():
168 raise tornado
.web
.HTTPError(401)
170 @tornado.web
.authenticated
172 with_data
, total
= self
.backend
.fireinfo
.get_active_profiles()
175 asn_map
= self
.backend
.fireinfo
.get_asn_map()
177 self
.render("fireinfo/admin.html", with_data
=with_data
, total
=total
,