2016-08-09 09:27:37 +00:00
|
|
|
# ~*~ coding: utf-8 ~*~
|
|
|
|
#
|
2019-06-21 12:57:51 +00:00
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from django.core.cache import cache
|
|
|
|
from django.utils import timezone
|
2018-01-26 06:47:10 +00:00
|
|
|
|
2017-12-10 16:29:25 +00:00
|
|
|
from common.utils import get_object_or_none
|
2018-01-26 06:47:10 +00:00
|
|
|
from .models import Asset, SystemUser, Label
|
2016-09-04 09:43:03 +00:00
|
|
|
|
2017-12-06 10:31:51 +00:00
|
|
|
|
|
|
|
def get_assets_by_id_list(id_list):
|
2018-12-10 02:11:54 +00:00
|
|
|
return Asset.objects.filter(id__in=id_list).filter(is_active=True)
|
|
|
|
|
|
|
|
|
|
|
|
def get_system_users_by_id_list(id_list):
|
|
|
|
return SystemUser.objects.filter(id__in=id_list)
|
2017-12-07 05:01:33 +00:00
|
|
|
|
|
|
|
|
2017-12-10 16:29:25 +00:00
|
|
|
def get_system_user_by_name(name):
|
|
|
|
system_user = get_object_or_none(SystemUser, name=name)
|
|
|
|
return system_user
|
2017-12-12 04:19:45 +00:00
|
|
|
|
|
|
|
|
2018-12-10 02:11:54 +00:00
|
|
|
def get_system_user_by_id(id):
|
|
|
|
system_user = get_object_or_none(SystemUser, id=id)
|
|
|
|
return system_user
|
|
|
|
|
|
|
|
|
2018-01-26 06:47:10 +00:00
|
|
|
class LabelFilter:
|
|
|
|
def filter_queryset(self, queryset):
|
2018-01-26 07:53:43 +00:00
|
|
|
queryset = super().filter_queryset(queryset)
|
2018-01-26 06:47:10 +00:00
|
|
|
query_keys = self.request.query_params.keys()
|
|
|
|
all_label_keys = Label.objects.values_list('name', flat=True)
|
|
|
|
valid_keys = set(all_label_keys) & set(query_keys)
|
|
|
|
labels_query = {}
|
|
|
|
for key in valid_keys:
|
|
|
|
labels_query[key] = self.request.query_params.get(key)
|
|
|
|
|
|
|
|
conditions = []
|
|
|
|
for k, v in labels_query.items():
|
|
|
|
query = {'labels__name': k, 'labels__value': v}
|
|
|
|
conditions.append(query)
|
|
|
|
|
|
|
|
if conditions:
|
|
|
|
for kwargs in conditions:
|
|
|
|
queryset = queryset.filter(**kwargs)
|
|
|
|
return queryset
|
2019-06-21 12:57:51 +00:00
|
|
|
|
|
|
|
|
|
|
|
class Connectivity:
|
|
|
|
UNREACHABLE, REACHABLE, UNKNOWN = range(0, 3)
|
|
|
|
CONNECTIVITY_CHOICES = (
|
|
|
|
(UNREACHABLE, _("Unreachable")),
|
|
|
|
(REACHABLE, _('Reachable')),
|
|
|
|
(UNKNOWN, _("Unknown")),
|
|
|
|
)
|
|
|
|
|
|
|
|
value = UNKNOWN
|
|
|
|
datetime = timezone.now()
|
|
|
|
|
|
|
|
def __init__(self, value, datetime):
|
|
|
|
self.value = value
|
|
|
|
self.datetime = datetime
|
|
|
|
|
|
|
|
def display(self):
|
|
|
|
return dict(self.__class__.CONNECTIVITY_CHOICES).get(self.value)
|
|
|
|
|
|
|
|
def is_reachable(self):
|
|
|
|
return self.value == self.REACHABLE
|
|
|
|
|
|
|
|
def is_unreachable(self):
|
|
|
|
return self.value == self.UNREACHABLE
|
|
|
|
|
|
|
|
def is_unknown(self):
|
|
|
|
return self.value == self.UNKNOWN
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def unreachable(cls):
|
|
|
|
return cls(cls.UNREACHABLE, timezone.now())
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def reachable(cls):
|
|
|
|
return cls(cls.REACHABLE, timezone.now())
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def unknown(cls):
|
|
|
|
return cls(cls.UNKNOWN, timezone.now())
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def set(cls, key, value, ttl=0):
|
|
|
|
cache.set(key, value, ttl)
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def get(cls, key):
|
|
|
|
return cache.get(key, cls.UNKNOWN)
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def set_unreachable(cls, key, ttl=0):
|
|
|
|
cls.set(key, cls.unreachable(), ttl)
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def set_reachable(cls, key, ttl=0):
|
|
|
|
cls.set(key, cls.reachable(), ttl)
|
|
|
|
|
|
|
|
def __eq__(self, other):
|
|
|
|
return self.value == other.value
|