jumpserver/apps/assets/models/utils.py

109 lines
2.6 KiB
Python
Raw Normal View History

2016-12-20 16:43:52 +00:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
2019-06-24 06:23:29 +00:00
from django.utils import timezone
from django.core.cache import cache
from django.core.exceptions import ValidationError
2019-06-24 06:23:29 +00:00
from django.utils.translation import ugettext_lazy as _
from common.utils import validate_ssh_private_key
2016-12-20 16:43:52 +00:00
2019-06-24 06:23:29 +00:00
__all__ = [
'init_model', 'generate_fake', 'private_key_validator', 'Connectivity',
]
2016-12-20 16:43:52 +00:00
2017-04-04 03:14:59 +00:00
def init_model():
2018-03-21 10:13:16 +00:00
from . import SystemUser, AdminUser, Asset
for cls in [SystemUser, AdminUser, Asset]:
2016-12-20 16:43:52 +00:00
if hasattr(cls, 'initial'):
cls.initial()
def generate_fake():
2018-03-21 10:13:16 +00:00
from . import SystemUser, AdminUser, Asset
for cls in [SystemUser, AdminUser, Asset]:
2017-01-07 14:34:12 +00:00
if hasattr(cls, 'generate_fake'):
cls.generate_fake()
2016-12-20 16:43:52 +00:00
def private_key_validator(value):
if not validate_ssh_private_key(value):
raise ValidationError(
_('%(value)s is not an even number'),
params={'value': value},
)
2019-06-24 06:23:29 +00:00
class Connectivity:
UNREACHABLE, REACHABLE, UNKNOWN = range(0, 3)
CONNECTIVITY_CHOICES = (
(UNREACHABLE, _("Unreachable")),
(REACHABLE, _('Reachable')),
(UNKNOWN, _("Unknown")),
)
status = UNKNOWN
2019-06-24 06:23:29 +00:00
datetime = timezone.now()
def __init__(self, status, datetime):
self.status = status
2019-06-24 06:23:29 +00:00
self.datetime = datetime
def display(self):
return dict(self.__class__.CONNECTIVITY_CHOICES).get(self.status)
2019-06-24 06:23:29 +00:00
def is_reachable(self):
return self.status == self.REACHABLE
2019-06-24 06:23:29 +00:00
def is_unreachable(self):
return self.status == self.UNREACHABLE
2019-06-24 06:23:29 +00:00
def is_unknown(self):
return self.status == self.UNKNOWN
2019-06-24 06:23:29 +00:00
@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):
value = cache.get(key, cls.unknown())
if not isinstance(value, cls):
value = cls.unknown()
return value
@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.status == other.status
2019-07-04 13:17:39 +00:00
def __gt__(self, other):
return self.status > other.status
def __lt__(self, other):
return not self.__gt__(other)
def __str__(self):
return self.display()