Пример #1
0
 def get_queryset(self, request):
     """
     Annotate direct iface and slivers counter to allow ordering
     on change list. Intercept search query to allow search nodes
     by management network IP
     """
     related = ('group', 'island')
     qs = super(NodeAdmin,
                self).get_queryset(request).select_related(*related)
     qs = qs.annotate(models.Count('direct_ifaces', distinct=True))
     # FIXME: try to move to slices to avoid coupling nodes with slices app
     qs = qs.annotate(models.Count('slivers', distinct=True))
     # HACK for searching nodes by IP
     search = request.GET.get('q', False)
     if search:
         for query in search.split(' '):
             try:
                 node = mgmt_reverse(query)
             except InvalidMgmtAddress:
                 pass
             else:
                 # Skip django admin filtering
                 request.GET._mutable = True
                 request.GET.pop('q')
                 request.GET._mutable = False
                 qs = qs.filter(id=node.id)
                 break
     return qs
Пример #2
0
 def queryset(self, request):
     """
     Annotate direct iface and slivers counter to allow ordering
     on change list. Intercept search query to allow search nodes
     by management network IP
     """
     related = ('group', 'island')
     qs = super(NodeAdmin, self).queryset(request).select_related(*related)
     qs = qs.annotate(models.Count('direct_ifaces', distinct=True))
     # FIXME: try to move to slices to avoid coupling nodes with slices app
     qs = qs.annotate(models.Count('slivers', distinct=True))
     # HACK for searching nodes by IP
     search = request.GET.get('q', False)
     if search:
         for query in search.split(' '):
             try:
                 node = mgmt_reverse(query)
             except InvalidMgmtAddress:
                 pass
             else:
                 # Skip django admin filtering
                 request.GET._mutable = True
                 request.GET.pop('q')
                 request.GET._mutable = False
                 qs = qs.filter(id=node.id)
                 break
     return qs
Пример #3
0
    def process_view(self, request, view_func, view_args, view_kwargs):
        if view_func.func_name in ("NodeDetail", "SliverDetail"):
            from controller.core.exceptions import InvalidMgmtAddress
            from mgmtnetworks.utils import reverse as mgmt_reverse

            META = request.META
            remote_addr = META.get("HTTP_X_REAL_IP", META["REMOTE_ADDR"])
            try:
                client = mgmt_reverse(remote_addr)
            except InvalidMgmtAddress:
                return
            from nodes.models import Node

            if isinstance(client, Node):
                from .models import State

                if view_func.func_name == "NodeDetail":
                    State.register_heartbeat(client)
                elif view_func.func_name == "SliverDetail":
                    from slices.models import Sliver

                    try:
                        sliver = Sliver.objects.get(pk=view_kwargs.get("pk"))
                    except Sliver.DoesNotExist:
                        pass
                    else:
                        State.register_heartbeat(sliver)
Пример #4
0
 def process_view(self, request, view_func, view_args, view_kwargs):
     if view_func.func_name in ('NodeDetail', 'SliverDetail'):
         from controller.core.exceptions import InvalidMgmtAddress
         from mgmtnetworks.utils import reverse as mgmt_reverse
         META = request.META
         remote_addr = META.get('HTTP_X_REAL_IP', META['REMOTE_ADDR'])
         try:
             client = mgmt_reverse(remote_addr)
         except InvalidMgmtAddress:
             return
         from nodes.models import Node
         if isinstance(client, Node):
             from .models import State
             if view_func.func_name == 'NodeDetail':
                 State.register_heartbeat(client)
             elif view_func.func_name == 'SliverDetail':
                 from slices.models import Sliver
                 try:
                     sliver = Sliver.objects.get(pk=view_kwargs.get('pk'))
                 except Sliver.DoesNotExist:
                     pass
                 else:
                     State.register_heartbeat(sliver)