コード例 #1
0
ファイル: __init__.py プロジェクト: zhyh329/netbox
    def get(self, request):

        connected_consoleports = ConsolePort.objects.restrict(
            request.user, 'view').prefetch_related('_path').filter(
                _path__destination_id__isnull=False)
        connected_powerports = PowerPort.objects.restrict(
            request.user, 'view').prefetch_related('_path').filter(
                _path__destination_id__isnull=False)
        connected_interfaces = Interface.objects.restrict(
            request.user, 'view').prefetch_related('_path').filter(
                _path__destination_id__isnull=False,
                pk__lt=F('_path__destination_id'))

        # Report Results
        report_content_type = ContentType.objects.get(app_label='extras',
                                                      model='report')
        report_results = JobResult.objects.filter(
            obj_type=report_content_type,
            status__in=JobResultStatusChoices.TERMINAL_STATE_CHOICES).defer(
                'data')[:10]

        stats = {

            # Organization
            'site_count':
            Site.objects.restrict(request.user, 'view').count(),
            'location_count':
            Location.objects.restrict(request.user, 'view').count(),
            'tenant_count':
            Tenant.objects.restrict(request.user, 'view').count(),

            # DCIM
            'rack_count':
            Rack.objects.restrict(request.user, 'view').count(),
            'devicetype_count':
            DeviceType.objects.restrict(request.user, 'view').count(),
            'device_count':
            Device.objects.restrict(request.user, 'view').count(),
            'interface_connections_count':
            connected_interfaces.count(),
            'cable_count':
            Cable.objects.restrict(request.user, 'view').count(),
            'console_connections_count':
            connected_consoleports.count(),
            'power_connections_count':
            connected_powerports.count(),
            'powerpanel_count':
            PowerPanel.objects.restrict(request.user, 'view').count(),
            'powerfeed_count':
            PowerFeed.objects.restrict(request.user, 'view').count(),

            # IPAM
            'vrf_count':
            VRF.objects.restrict(request.user, 'view').count(),
            'aggregate_count':
            Aggregate.objects.restrict(request.user, 'view').count(),
            'prefix_count':
            Prefix.objects.restrict(request.user, 'view').count(),
            'ipaddress_count':
            IPAddress.objects.restrict(request.user, 'view').count(),
            'vlan_count':
            VLAN.objects.restrict(request.user, 'view').count(),

            # Circuits
            'provider_count':
            Provider.objects.restrict(request.user, 'view').count(),
            'circuit_count':
            Circuit.objects.restrict(request.user, 'view').count(),

            # Secrets
            'secret_count':
            Secret.objects.restrict(request.user, 'view').count(),

            # Virtualization
            'cluster_count':
            Cluster.objects.restrict(request.user, 'view').count(),
            'virtualmachine_count':
            VirtualMachine.objects.restrict(request.user, 'view').count(),
        }

        changelog = ObjectChange.objects.restrict(request.user,
                                                  'view').prefetch_related(
                                                      'user',
                                                      'changed_object_type')

        # Check whether a new release is available. (Only for staff/superusers.)
        new_release = None
        if request.user.is_staff or request.user.is_superuser:
            latest_release, release_url = get_latest_release()
            if isinstance(latest_release, version.Version):
                current_version = version.parse(settings.VERSION)
                if latest_release > current_version:
                    new_release = {
                        'version': str(latest_release),
                        'url': release_url,
                    }

        return render(
            request, self.template_name, {
                'search_form': SearchForm(),
                'stats': stats,
                'report_results': report_results,
                'changelog': changelog[:15],
                'new_release': new_release,
            })
コード例 #2
0
    def get(self, request):

        connected_consoleports = ConsolePort.objects.filter(
            connected_endpoint__isnull=False)
        connected_powerports = PowerPort.objects.filter(
            _connected_poweroutlet__isnull=False)
        connected_interfaces = Interface.objects.filter(
            _connected_interface__isnull=False,
            pk__lt=F('_connected_interface'))
        cables = Cable.objects.all()

        stats = {

            # Organization
            'site_count': Site.objects.count(),
            'tenant_count': Tenant.objects.count(),

            # DCIM
            'rack_count': Rack.objects.count(),
            'devicetype_count': DeviceType.objects.count(),
            'device_count': Device.objects.count(),
            'interface_connections_count': connected_interfaces.count(),
            'cable_count': cables.count(),
            'console_connections_count': connected_consoleports.count(),
            'power_connections_count': connected_powerports.count(),
            'powerpanel_count': PowerPanel.objects.count(),
            'powerfeed_count': PowerFeed.objects.count(),

            # IPAM
            'vrf_count': VRF.objects.count(),
            'aggregate_count': Aggregate.objects.count(),
            'prefix_count': Prefix.objects.count(),
            'ipaddress_count': IPAddress.objects.count(),
            'vlan_count': VLAN.objects.count(),

            # Circuits
            'provider_count': Provider.objects.count(),
            'circuit_count': Circuit.objects.count(),

            # Secrets
            'secret_count': Secret.objects.count(),

            # Virtualization
            'cluster_count': Cluster.objects.count(),
            'virtualmachine_count': VirtualMachine.objects.count(),
        }

        # Check whether a new release is available. (Only for staff/superusers.)
        new_release = None
        if request.user.is_staff or request.user.is_superuser:
            latest_release, release_url = get_latest_release()
            if isinstance(latest_release, version.Version):
                current_version = version.parse(settings.VERSION)
                if latest_release > current_version:
                    new_release = {
                        'version': str(latest_release),
                        'url': release_url,
                    }

        return render(
            request, self.template_name, {
                'search_form':
                SearchForm(),
                'stats':
                stats,
                'report_results':
                ReportResult.objects.order_by('-created')[:10],
                'changelog':
                ObjectChange.objects.prefetch_related(
                    'user', 'changed_object_type')[:15],
                'new_release':
                new_release,
            })