Commit 63216add authored by ibuler's avatar ibuler

[Update] 修改connectivity

parent 9dd951dd
from .user import * from .asset import *
from .label import Label from .label import Label
from .user import *
from .cluster import * from .cluster import *
from .group import * from .group import *
from .domain import * from .domain import *
from .node import * from .node import *
from .asset import *
from .cmd_filter import * from .cmd_filter import *
from .utils import *
from .authbook import * from .authbook import *
from .utils import *
...@@ -12,8 +12,8 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -12,8 +12,8 @@ from django.utils.translation import ugettext_lazy as _
from django.core.validators import MinValueValidator, MaxValueValidator from django.core.validators import MinValueValidator, MaxValueValidator
from .user import AdminUser, SystemUser from .user import AdminUser, SystemUser
from .utils import Connectivity
from orgs.mixins import OrgModelMixin, OrgManager from orgs.mixins import OrgModelMixin, OrgManager
from ..utils import Connectivity
__all__ = ['Asset', 'Protocol'] __all__ = ['Asset', 'Protocol']
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
......
...@@ -5,7 +5,6 @@ from django.db import models ...@@ -5,7 +5,6 @@ from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from orgs.mixins import OrgManager from orgs.mixins import OrgManager
from ..utils import Connectivity
from .base import AssetUser from .base import AssetUser
__all__ = ['AuthBook'] __all__ = ['AuthBook']
...@@ -72,8 +71,6 @@ class AuthBook(AssetUser): ...@@ -72,8 +71,6 @@ class AuthBook(AssetUser):
@property @property
def connectivity(self): def connectivity(self):
if self._connectivity:
return self._connectivity
return self.get_asset_connectivity(self.asset) return self.get_asset_connectivity(self.asset)
@property @property
......
...@@ -6,7 +6,6 @@ from hashlib import md5 ...@@ -6,7 +6,6 @@ from hashlib import md5
import sshpubkeys import sshpubkeys
from django.db import models from django.db import models
from django.core.cache import cache
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.conf import settings from django.conf import settings
...@@ -16,9 +15,7 @@ from common.utils import ( ...@@ -16,9 +15,7 @@ from common.utils import (
from common.validators import alphanumeric from common.validators import alphanumeric
from common import fields from common import fields
from orgs.mixins import OrgModelMixin from orgs.mixins import OrgModelMixin
from .utils import private_key_validator from .utils import private_key_validator, Connectivity
from ..utils import Connectivity
from .. import const
signer = get_signer() signer = get_signer()
...@@ -167,12 +164,12 @@ class AssetUser(OrgModelMixin): ...@@ -167,12 +164,12 @@ class AssetUser(OrgModelMixin):
def get_asset_connectivity(self, asset): def get_asset_connectivity(self, asset):
i = self.generate_id_with_asset(asset) i = self.generate_id_with_asset(asset)
key = self.CONNECTIVITY_ASSET_CACHE_KEY.format(i) key = self.CONNECTIVITY_ASSET_CACHE_KEY.format(i)
return cache.get(key, const.CONN_UNKNOWN) return Connectivity.get(key)
def set_asset_connectivity(self, asset, c): def set_asset_connectivity(self, asset, c):
i = self.generate_id_with_asset(asset) i = self.generate_id_with_asset(asset)
key = self.CONNECTIVITY_ASSET_CACHE_KEY.format(i) key = self.CONNECTIVITY_ASSET_CACHE_KEY.format(i)
cache.set(key, c, 3600) Connectivity.set(key, c, 3600)
def load_specific_asset_auth(self, asset): def load_specific_asset_auth(self, asset):
from ..backends import AssetUserManager from ..backends import AssetUserManager
...@@ -225,17 +222,24 @@ class AssetUser(OrgModelMixin): ...@@ -225,17 +222,24 @@ class AssetUser(OrgModelMixin):
} }
def generate_id_with_asset(self, asset): def generate_id_with_asset(self, asset):
i = '{}_{}'.format(asset.id, self.id) user_id = str(self.id).split('-')[:3]
i = uuid.UUID(md5(i.encode()).hexdigest()) asset_id = str(asset.id).split('-')[3:]
return i ids = user_id + asset_id
return '-'.join(ids)
def construct_to_authbook(self, asset): def construct_to_authbook(self, asset):
from . import AuthBook
fields = [
'name', 'username', 'comment', 'org_id',
'_password', '_private_key', '_public_key',
'date_created', 'date_updated', 'created_by'
]
i = self.generate_id_with_asset(asset) i = self.generate_id_with_asset(asset)
self.id = i obj = AuthBook(id=i, asset=asset, version=0, is_latest=True)
self.asset = asset for field in fields:
self.version = 0 value = getattr(self, field)
self.is_latest = True setattr(obj, field, value)
return self return obj
class Meta: class Meta:
abstract = True abstract = True
......
...@@ -2,11 +2,17 @@ ...@@ -2,11 +2,17 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
from django.utils import timezone
from django.core.cache import cache
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
from common.utils import validate_ssh_private_key from common.utils import validate_ssh_private_key
__all__ = ['init_model', 'generate_fake'] __all__ = [
'init_model', 'generate_fake', 'private_key_validator', 'Connectivity',
]
def init_model(): def init_model():
...@@ -31,5 +37,63 @@ def private_key_validator(value): ...@@ -31,5 +37,63 @@ def private_key_validator(value):
) )
if __name__ == '__main__': class Connectivity:
pass 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):
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.value == other.value
...@@ -23,24 +23,19 @@ class AdminUserSerializer(BulkOrgResourceModelSerializer): ...@@ -23,24 +23,19 @@ class AdminUserSerializer(BulkOrgResourceModelSerializer):
list_serializer_class = AdaptedBulkListSerializer list_serializer_class = AdaptedBulkListSerializer
model = AdminUser model = AdminUser
fields = [ fields = [
'id', 'name', 'username', 'assets_amount', 'id', 'name', 'username', 'password', 'comment',
'reachable_amount', 'unreachable_amount', 'password', 'comment', 'connectivity_amount', 'assets_amount',
'date_created', 'date_updated', 'become', 'become_method', 'date_created', 'date_updated', 'created_by',
'become_user', 'created_by',
] ]
extra_kwargs = { extra_kwargs = {
'date_created': {'label': _('Date created')}, 'date_created': {'read_only': True},
'date_updated': {'label': _('Date updated')}, 'date_updated': {'read_only': True},
'become': {'read_only': True}, 'become_method': {'read_only': True}, 'created_by': {'read_only': True},
'become_user': {'read_only': True}, 'created_by': {'read_only': True}, 'assets_amount': {'label': _('Asset')},
'assets_amount': {'label', _('Asset')} 'connectivity_amount': {'label': _('Connectivity')},
} }
def get_field_names(self, declared_fields, info):
fields = super().get_field_names(declared_fields, info)
return [f for f in fields if not f.startswith('_')]
class AdminUserAuthSerializer(AuthSerializer): class AdminUserAuthSerializer(AuthSerializer):
......
...@@ -16,8 +16,8 @@ from ops.celery.decorator import ( ...@@ -16,8 +16,8 @@ from ops.celery.decorator import (
) )
from .models import SystemUser, AdminUser from .models import SystemUser, AdminUser
from .models.utils import Connectivity
from . import const from . import const
from .utils import Connectivity
FORKS = 10 FORKS = 10
......
...@@ -75,27 +75,29 @@ function initTable() { ...@@ -75,27 +75,29 @@ function initTable() {
}}, }},
{targets: 4, createdCell: function (td, cellData) { {targets: 4, createdCell: function (td, cellData) {
var innerHtml = ""; var innerHtml = "";
if (cellData !== 0) { var data = cellData['reachable'];
innerHtml = "<span class='text-navy'>" + cellData + "</span>"; if (data !== 0) {
innerHtml = "<span class='text-navy'>" + data + "</span>";
} else { } else {
innerHtml = "<span>" + cellData + "</span>"; innerHtml = "<span>" + data + "</span>";
} }
$(td).html('<span href="javascript:void(0);" data-toggle="tooltip" title="' + cellData +'">' + innerHtml + '</span>'); $(td).html('<span href="javascript:void(0);" data-toggle="tooltip" title="' + data +'">' + innerHtml + '</span>');
}}, }},
{targets: 5, createdCell: function (td, cellData) { {targets: 5, createdCell: function (td, cellData) {
var data = cellData['unreachable'];
var innerHtml = ""; var innerHtml = "";
if (cellData !== 0) { if (data !== 0) {
innerHtml = "<span class='text-danger'>" + cellData + "</span>"; innerHtml = "<span class='text-danger'>" + data + "</span>";
} else { } else {
innerHtml = "<span>" + cellData + "</span>"; innerHtml = "<span>" + data + "</span>";
} }
$(td).html('<span href="javascript:void(0);" data-toggle="tooltip" title="' + cellData + '">' + innerHtml + '</span>'); $(td).html('<span href="javascript:void(0);" data-toggle="tooltip" title="' + data + '">' + innerHtml + '</span>');
}}, }},
{targets: 6, createdCell: function (td, cellData, rowData) { {targets: 6, createdCell: function (td, cellData, rowData) {
var val = 0; var val = 0;
var innerHtml = ""; var innerHtml = "";
var total = rowData.assets_amount; var total = rowData.assets_amount;
var reachable = rowData.reachable_amount; var reachable = cellData.reachable;
if (total !== 0) { if (total !== 0) {
val = reachable/total * 100; val = reachable/total * 100;
} }
...@@ -114,8 +116,11 @@ function initTable() { ...@@ -114,8 +116,11 @@ function initTable() {
$(td).html(update_btn + del_btn) $(td).html(update_btn + del_btn)
}}], }}],
ajax_url: '{% url "api-assets:admin-user-list" %}', ajax_url: '{% url "api-assets:admin-user-list" %}',
columns: [{data: function(){return ""}}, {data: "name"}, {data: "username" }, {data: "assets_amount" }, columns: [
{data: "reachable_amount"}, {data: "unreachable_amount"}, {data: "id"}, {data: "comment"}, {data: "id"}] {data: function(){return ""}}, {data: "name"}, {data: "username" }, {data: "assets_amount" },
{data: "connectivity_amount"}, {data: "connectivity_amount"}, {data: "connectivity_amount"},
{data: "comment"}, {data: "id"}
]
}; };
admin_user_table = jumpserver.initServerSideDataTable(options); admin_user_table = jumpserver.initServerSideDataTable(options);
return admin_user_table return admin_user_table
......
...@@ -5,7 +5,7 @@ from django.core.cache import cache ...@@ -5,7 +5,7 @@ from django.core.cache import cache
from django.utils import timezone from django.utils import timezone
from common.utils import get_object_or_none from common.utils import get_object_or_none
from .models import Asset, SystemUser, Label from .models import SystemUser, Label
def get_assets_by_id_list(id_list): def get_assets_by_id_list(id_list):
...@@ -47,60 +47,4 @@ class LabelFilter: ...@@ -47,60 +47,4 @@ class LabelFilter:
return queryset return queryset
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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment