</section>
<div class="container">
- <div class="row justify-content-center">
+ <div class="row justify-content-center my-5">
<div class="col-12 col-sm-8 col-lg-6 col-xl-4">
<a class="btn btn-primary btn-lg btn-block" href="/profile/random">
{{ _("Show a Random Profile") }}
</div>
</div>
</div>
+
+ <section class="inverse">
+ <div class="container">
+ <div class="row">
+ <div class="col-12 col-md-6 flex-column align-items-center text-center text-md-right">
+ <h1 class="display-1 text-primary mb-0">
+ {{ "%.2f%%" % (virtual_ratio * 100) }}
+ </h1>
+
+ <h5>{{ _("of all IPFire systems are running in a virtual environment") }}</h5>
+ </div>
+
+ <div class="col-12 col-md-6">
+ <p>
+ {{ _("The top vendors of hypervisors are") }}
+ </p>
+
+ <dl class="row">
+ {% for name, percentage in hypervisors %}
+ {% if percentage >= 0.1 %}
+ <dt class="col-sm-3">
+ {% if name == "unknown" %}
+ <span class="text-muted">{{ _("Unknown") }}</span>
+ {% elif name == "VMWare" %}
+ VMware
+ {% else %}
+ {{ name }}
+ {% end %}
+ </dt>
+ <dd class="col-sm-9">
+ {% module ProgressBar(percentage, "primary") %}
+ </dd>
+ {% end %}
+ {% end %}
+ </dl>
+ </div>
+ </div>
+ </div>
+ </section>
{% end block %}
-<div class="progress">
- <div class="progress-bar {% if colour %}{{ "progress-bar-%s" % colour }}{% end %}"
- role="progressbar" aria-valuenow="{{ "%.0f" % value }}"
- aria-valuemin="0" aria-valuemax="100" style="width: {{ "%.2f" % value }}%;">
+<div class="row">
+ <div class="col-4 col-sm-3 col-lg-2 text-right">
{{ "%.2f" % value }}%
</div>
+
+ <div class="col">
+ <div class="progress">
+ <div class="progress-bar {% if colour %}{{ "progress-bar-%s" % colour }}{% end %}"
+ role="progressbar" aria-valuenow="{{ "%.0f" % value }}"
+ aria-valuemin="0" aria-valuemax="100" style="width: {{ "%.2f" % value }}%;">
+ </div>
+ </div>
+ </div>
</div>
class IndexHandler(BaseHandler):
def get(self):
+ data = {
+ "hypervisors" : self.fireinfo.get_hypervisor_map(when=self.when),
+ "virtual_ratio" : self.fireinfo.get_virtual_ratio(when=self.when),
+ }
+
# Cache for 1h
self.set_expires(3600)
- self.render("fireinfo/index.html")
+ self.render("fireinfo/index.html", **data)
class DriverDetail(BaseHandler):