diff --git a/lib/app/reportdatasources/report_objectdetaillinks.py b/lib/app/reportdatasources/report_objectdetaillinks.py index d42e0f2921eaddcd777b05113de55c3914bd9f43..1400492b3e5bb367a0a73d33b49e1b5496375556 100644 --- a/lib/app/reportdatasources/report_objectdetaillinks.py +++ b/lib/app/reportdatasources/report_objectdetaillinks.py @@ -55,7 +55,8 @@ class ReportObjectDetailLinks(BaseReportColumn): {"$match": match}, {"$group": group}, {"$sort": {"_id": 1}}, - ] + ], + {"allowDiskUse": True}, ) ) for val in value: diff --git a/lib/app/reportdatasources/report_objectifacesstatusstat.py b/lib/app/reportdatasources/report_objectifacesstatusstat.py index 435d8bbef14f007aaae96cabcb256a93e102556a..ade30464ef517ac5aeee469c49f7415b84051ab0 100644 --- a/lib/app/reportdatasources/report_objectifacesstatusstat.py +++ b/lib/app/reportdatasources/report_objectifacesstatusstat.py @@ -61,7 +61,10 @@ class ReportObjectIfacesStatusStat(BaseReportColumn): value = ( get_db()["noc.interfaces"] .with_options(read_preference=ReadPreference.SECONDARY_PREFERRED) - .aggregate([{"$match": match}, {"$group": {"_id": group, "count": {"$sum": 1}}}]) + .aggregate( + [{"$match": match}, {"$group": {"_id": group, "count": {"$sum": 1}}}], + {"allowDiskUse": True}, + ) ) r = defaultdict(lambda: [""] * len(self.ATTRS)) # @todo Fix Down diff --git a/lib/app/reportdatasources/report_objectlinkcount.py b/lib/app/reportdatasources/report_objectlinkcount.py index 44252ad3fd7771343290f9ea6183fb0149d0d224..a5575f7ec436325c3698c982b1d06e79cc43cd27 100644 --- a/lib/app/reportdatasources/report_objectlinkcount.py +++ b/lib/app/reportdatasources/report_objectlinkcount.py @@ -43,7 +43,8 @@ class ReportObjectLinkCount(BaseReportColumn): # {"$match": {"int.managed_object": {"$in": self.sync_ids}}}, {"$group": {"_id": "$int.managed_object", "count": {"$sum": 1}}}, {"$sort": {"_id": 1}}, - ] + ], + {"allowDiskUse": True}, ) ) for v in value: diff --git a/services/web/apps/fm/reportavailability/views.py b/services/web/apps/fm/reportavailability/views.py index cbc835937bee9d4e144a20c83540afbce94c1f45..d54dabbfe3ccdb03235bd16ee577c8bca8814aa5 100644 --- a/services/web/apps/fm/reportavailability/views.py +++ b/services/web/apps/fm/reportavailability/views.py @@ -19,6 +19,7 @@ from mongoengine.queryset.visitor import Q from noc.fm.models.outage import Outage from noc.fm.models.reboot import Reboot from noc.sa.models.managedobject import ManagedObject +from noc.sa.models.administrativedomain import AdministrativeDomain from noc.core.mongo.connection import get_db from noc.inv.models.interfaceprofile import InterfaceProfile from noc.sa.models.profile import Profile @@ -41,6 +42,11 @@ class ReportForm(forms.Form): from_date = forms.CharField(widget=AdminDateWidget, label=_("From Date"), required=True) to_date = forms.CharField(widget=AdminDateWidget, label=_("To Date"), required=False) + adm_domain = forms.ModelChoiceField( + label=_("Administrative Domain"), + required=False, + queryset=AdministrativeDomain.objects.order_by("name"), + ) skip_avail = forms.BooleanField(label=_("Skip full available"), required=False) skip_zero_avail = forms.BooleanField(label=_("Skip zero available"), required=False) filter_zero_access = forms.BooleanField(label=_("Skip zero access port"), required=False) @@ -112,6 +118,7 @@ class ReportAvailabilityApplication(SimpleReport): interval=1, from_date=None, to_date=None, + adm_domain=None, skip_avail=False, skip_zero_avail=False, filter_zero_access=False, @@ -142,6 +149,8 @@ class ReportAvailabilityApplication(SimpleReport): if not request.user.is_superuser: mos = mos.filter(administrative_domain__in=UserAccess.get_domains(request.user)) + if adm_domain: + mos = mos.filter(administrative_domain__in=adm_domain.get_nested()) if skip_avail: mos = mos.filter(id__in=list(a)) mos_id = list(mos.order_by("id").values_list("id", flat=True))