<div class="row mb-6 mb-md-5 pb-lg-5 mb-lg-6">
<div class="col-6 col-md-3 mb-6 text-center">
<p class="mb-0 mb-sm-3 fireinfo_cat">Latest Release</p>
- <h5 class="pb-5 fireinfo">2.19 Core 109</h5>
+ <h5 class="pb-5 fireinfo">{{ latest_release.name }}</h5>
<div class="r_circle circle mt-5">
- <p class="fireinfo_per">48%</p>
+ <p class="fireinfo_per">{{ "%.0f%%" % (latest_release.penetration * 100) }}</p>
</div>
<script>
- $('.r_circle').circleProgress({ value: 0.48, size: 128, thickness: 4, animation: false, startAngle: -Math.PI / 2, fill: { color: ["#1976d2"] } });
+ $('.r_circle').circleProgress({ value: {{ latest_release.penetration }}, size: 128, thickness: 4, animation: false, startAngle: -Math.PI / 2, fill: { color: ["#1976d2"] } });
</script>
</div>
if res:
return res.id
+ def get_release_penetration(self, release, when=None):
+ res = self.db.get("WITH profiles AS (SELECT fireinfo_profiles_with_data_at(%s) AS id) \
+ SELECT COUNT(*)::float / (SELECT COUNT(*) FROM profiles) AS penetration FROM profiles \
+ LEFT JOIN fireinfo_profiles_releases ON profiles.id = fireinfo_profiles_releases.profile_id \
+ WHERE fireinfo_profiles_releases.release_id = %s", when, release.fireinfo_id)
+
+ if res:
+ return res.penetration
+
# Hypervisor
def create_hypervisor(self, hypervisor):
def sname(self):
return self.__data.sname
+ @property
+ def fireinfo_id(self):
+ name = self.sname.replace("ipfire-", "IPFire ").replace("-", " - ")
+
+ res = self.db.get("SELECT id FROM fireinfo_releases \
+ WHERE name = %s", name)
+
+ if res:
+ return res.id
+
@property
def stable(self):
return self.__data.stable
return self._news
+ # Fireinfo Stuff
+
+ @property
+ def penetration(self):
+ penetration = self.memcache.get("%s-penetration" % self.sname)
+
+ # Cache HIT
+ if penetration:
+ return penetration
+
+ # Get penetration from fireinfo
+ penetration = self.backend.fireinfo.get_release_penetration(self)
+
+ # Cache for 1 hour
+ self.memcache.set("%s-penetration" % self.sname, penetration, 3600)
+
+ return penetration
+
class Releases(Object):
def get_by_id(self, id):