diff --git a/errata/views.py b/errata/views.py
index 42d12f712..8664dc90e 100644
--- a/errata/views.py
+++ b/errata/views.py
@@ -29,7 +29,12 @@
@login_required
def erratum_list(request):
- errata = Erratum.objects.select_related()
+ errata = Erratum.objects.select_related() \
+ .prefetch_related('affected_packages',
+ 'fixed_packages',
+ 'osreleases',
+ 'cves',
+ 'references')
if 'e_type' in request.GET:
errata = errata.filter(e_type=request.GET['e_type']).distinct()
diff --git a/hosts/managers.py b/hosts/managers.py
index 82d702135..8cd9dd9ce 100644
--- a/hosts/managers.py
+++ b/hosts/managers.py
@@ -47,6 +47,13 @@ def with_counts(self, *properties):
),
0,
),
+ 'get_num_errata': Coalesce(
+ Count(
+ 'errata',
+ distinct=True,
+ ),
+ 0,
+ ),
}
return self.get_queryset() \
diff --git a/hosts/models.py b/hosts/models.py
index e207348ba..6221862e6 100644
--- a/hosts/models.py
+++ b/hosts/models.py
@@ -110,6 +110,9 @@ def get_num_packages(self):
def get_num_repos(self):
return self.repos.count()
+ def get_num_errata(self):
+ return self.errata.count()
+
def check_rdns(self):
if self.check_dns:
update_rdns(self)
diff --git a/hosts/templates/hosts/host_table.html b/hosts/templates/hosts/host_table.html
index bebb7723c..2b41f866c 100644
--- a/hosts/templates/hosts/host_table.html
+++ b/hosts/templates/hosts/host_table.html
@@ -17,7 +17,7 @@
{{ host }} |
{% with count=host.get_num_security_updates %}{% if count != 0 %}{{ count }}{% else %} {% endif %}{% endwith %} |
{% with count=host.get_num_bugfix_updates %}{% if count != 0 %}{{ count }}{% else %} {% endif %}{% endwith %} |
- {% with count=host.errata.count %}{% if count != 0 %}{{ count }}{% else %} {% endif %}{% endwith %} |
+ {% with count=host.get_num_errata %}{% if count != 0 %}{{ count }}{% else %} {% endif %}{% endwith %} |
{{ host.kernel }} |
{{ host.osvariant }} |
{{ host.lastreport }}{% report_alert host.lastreport %} |
diff --git a/hosts/views.py b/hosts/views.py
index faad410b6..7631ee25c 100644
--- a/hosts/views.py
+++ b/hosts/views.py
@@ -38,8 +38,9 @@
@login_required
def host_list(request):
hosts = Host.objects.with_counts('get_num_security_updates',
- 'get_num_bugfix_updates') \
- .select_related()
+ 'get_num_bugfix_updates',
+ 'get_num_errata') \
+ .select_related('osvariant__arch')
if 'domain_id' in request.GET:
hosts = hosts.filter(domain=request.GET['domain_id'])
@@ -97,7 +98,8 @@ def host_list(request):
filter_list.append(Filter(request, 'Domain', 'domain_id', Domain.objects.all()))
filter_list.append(Filter(request, 'OS Release', 'osrelease_id',
OSRelease.objects.filter(osvariant__host__in=hosts)))
- filter_list.append(Filter(request, 'OS Variant', 'osvariant_id', OSVariant.objects.filter(host__in=hosts)))
+ filter_list.append(Filter(request, 'OS Variant', 'osvariant_id',
+ OSVariant.objects.filter(host__in=hosts).select_related('arch')))
filter_list.append(Filter(request, 'Architecture', 'arch_id', MachineArchitecture.objects.filter(host__in=hosts)))
filter_list.append(Filter(request, 'Reboot Required', 'reboot_required', {'true': 'Yes', 'false': 'No'}))
filter_bar = FilterBar(request, filter_list)
diff --git a/packages/views.py b/packages/views.py
index cd53fa6e0..70b5e645c 100644
--- a/packages/views.py
+++ b/packages/views.py
@@ -117,7 +117,7 @@ def package_list(request):
@login_required
def package_name_list(request):
- packages = PackageName.objects.select_related()
+ packages = PackageName.objects.select_related().prefetch_related('package_set')
if 'arch_id' in request.GET:
packages = packages.filter(package__arch=request.GET['arch_id']).distinct()
diff --git a/security/views.py b/security/views.py
index 58a686b55..2f42fab0a 100644
--- a/security/views.py
+++ b/security/views.py
@@ -70,7 +70,10 @@ def cwe_detail(request, cwe_id):
@login_required
def cve_list(request):
- cves = CVE.objects.select_related()
+ cves = CVE.objects.select_related() \
+ .prefetch_related('cvss_scores',
+ 'cwes',
+ 'erratum_set')
if 'erratum_id' in request.GET:
cves = cves.filter(erratum=request.GET['erratum_id'])
diff --git a/util/views.py b/util/views.py
index fb27c33bf..a512f3350 100644
--- a/util/views.py
+++ b/util/views.py
@@ -21,8 +21,7 @@
from django.contrib.auth.decorators import login_required
from django.contrib.sites.models import Site
-from django.db.models import Count, Exists, F, OuterRef
-from django.db.models.functions import Coalesce
+from django.db.models import Exists, F, OuterRef
from hosts.models import Host
from operatingsystems.models import OSVariant, OSRelease
@@ -41,8 +40,9 @@ def dashboard(request):
site = {'name': '', 'domainname': ''}
hosts = Host.objects.with_counts('get_num_security_updates',
- 'get_num_bugfix_updates') \
- .select_related()
+ 'get_num_bugfix_updates',
+ 'get_num_errata') \
+ .select_related('osvariant__arch')
osvariants = OSVariant.objects.all().prefetch_related('host_set')
osreleases = OSRelease.objects.all()
repos = Repository.objects.all().prefetch_related('mirror_set')
@@ -104,10 +104,10 @@ def dashboard(request):
possible_mirrors = {}
mirrors = Mirror.objects.all() \
- .annotate(packages_count=Coalesce(Count('packages', distinct=True), 0)) \
+ .filter(id__in=Package.objects.order_by().distinct().values_list('mirror', flat=True)) \
.select_related()
for mirror in mirrors:
- if mirror.packages_checksum != 'yast' and mirror.packages_count > 0:
+ if mirror.packages_checksum != 'yast':
if mirror.packages_checksum not in checksums:
checksums[mirror.packages_checksum] = []
checksums[mirror.packages_checksum].append(mirror)