]> git.ipfire.org Git - ipfire.org.git/commitdiff
fireinfo: Easily get penetration of a certain release
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 23 Oct 2017 16:28:33 +0000 (17:28 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 25 Apr 2018 10:12:41 +0000 (12:12 +0200)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
templates/index.html
webapp/backend/fireinfo.py
webapp/backend/releases.py

index 8377933085774b23ae4dea27bc6b0fa048c7c6ef..bb32d3664a48094d5a2627ba43104f0441d49208 100644 (file)
                        <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>
                                
index 4529fea3275a2a5e19acc8f74e5c0117d0dda2c7..dff7e75c5f5cd8b5706e1c41bcf1573f4ad6427a 100644 (file)
@@ -1684,6 +1684,15 @@ class Fireinfo(Object):
                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):
index fc3efd41306833445e3f0fb6e691d2228034e39b..439aeda7ea5d9e16833eb55890b4a4bf31e6f12c 100644 (file)
@@ -259,6 +259,16 @@ class Release(Object):
        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
@@ -410,6 +420,24 @@ class Release(Object):
 
                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):