From dd3a54461d9bef3297aa96959f38f9a0fff6840b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 23 Oct 2017 17:28:33 +0100 Subject: [PATCH] fireinfo: Easily get penetration of a certain release Signed-off-by: Michael Tremer --- templates/index.html | 6 +++--- webapp/backend/fireinfo.py | 9 +++++++++ webapp/backend/releases.py | 28 ++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/templates/index.html b/templates/index.html index 83779330..bb32d366 100644 --- a/templates/index.html +++ b/templates/index.html @@ -245,12 +245,12 @@

Latest Release

-
2.19 Core 109
+
{{ latest_release.name }}
-

48%

+

{{ "%.0f%%" % (latest_release.penetration * 100) }}

diff --git a/webapp/backend/fireinfo.py b/webapp/backend/fireinfo.py index 4529fea3..dff7e75c 100644 --- a/webapp/backend/fireinfo.py +++ b/webapp/backend/fireinfo.py @@ -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): diff --git a/webapp/backend/releases.py b/webapp/backend/releases.py index fc3efd41..439aeda7 100644 --- a/webapp/backend/releases.py +++ b/webapp/backend/releases.py @@ -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): -- 2.39.2