Esempio n. 1
0
    def generate_fake(cls, count=100):
        from random import seed, choice
        from django.db import IntegrityError
        from .node import Node
        from orgs.utils import get_current_org
        from orgs.models import Organization
        org = get_current_org()
        if not org or not org.is_real():
            Organization.default().change_to()

        nodes = list(Node.objects.all())
        seed()
        for i in range(count):
            ip = [str(i) for i in random.sample(range(255), 4)]
            asset = cls(ip='.'.join(ip),
                        hostname='.'.join(ip),
                        admin_user=choice(AdminUser.objects.all()),
                        created_by='Fake')
            try:
                asset.save()
                asset.protocols = 'ssh/22'
                if nodes and len(nodes) > 3:
                    _nodes = random.sample(nodes, 3)
                else:
                    _nodes = [Node.default_node()]
                asset.nodes.set(_nodes)
                asset.system_users = [
                    choice(SystemUser.objects.all()) for i in range(3)
                ]
                logger.debug('Generate fake asset : %s' % asset.ip)
            except IntegrityError:
                print('Error continue')
                continue
Esempio n. 2
0
 def create_org_root_node(cls):
     # 如果使用current_org 在set_current_org时会死循环
     ori_org = get_current_org()
     with transaction.atomic():
         if not ori_org.is_real():
             return cls.default_node()
         key = cls.get_next_org_root_node_key()
         root = cls.objects.create(key=key, value=ori_org.name)
         return root
Esempio n. 3
0
 def get_obj(self):
     user_id = self.kwargs.get('pk', '')
     if user_id:
         user = get_object_or_404(User, id=user_id)
     else:
         self.current_org = get_current_org()
         set_to_root_org()
         user = self.request.user
     return user
Esempio n. 4
0
    def generate_fake(cls, count=100):
        import random
        org = get_current_org()
        if not org or not org.is_real():
            Organization.default().change_to()

        for i in range(count):
            node = random.choice(cls.objects.all())
            node.create_child('Node {}'.format(i))
Esempio n. 5
0
 def create_root_node(cls):
     # 如果使用current_org 在set_current_org时会死循环
     _current_org = get_current_org()
     with transaction.atomic():
         if not _current_org.is_real():
             return cls.default_node()
         set_current_org(Organization.root())
         org_nodes_roots = cls.objects.filter(key__regex=r'^[0-9]+$')
         org_nodes_roots_keys = org_nodes_roots.values_list('key', flat=True) or ['1']
         key = max([int(k) for k in org_nodes_roots_keys])
         key = str(key + 1) if key != 0 else '2'
         set_current_org(_current_org)
         root = cls.objects.create(key=key, value=_current_org.name)
         return root
Esempio n. 6
0
 def create_root_node(cls):
     # 如果使用current_org 在set_current_org时会死循环
     _current_org = get_current_org()
     with transaction.atomic():
         if _current_org.is_default():
             key = '0'
         else:
             set_current_org(Organization.root())
             org_nodes_roots = cls.objects.filter(key__regex=r'^[0-9]+$')
             org_nodes_roots_keys = org_nodes_roots.values_list('key', flat=True) or [0]
             key = max([int(k) for k in org_nodes_roots_keys]) + 1
             set_current_org(_current_org)
         root = cls.objects.create(key=key, value=_current_org.name)
         return root
Esempio n. 7
0
 def create_root_node(cls):
     # 如果使用current_org 在set_current_org时会死循环
     _current_org = get_current_org()
     with transaction.atomic():
         if not _current_org.is_real():
             return cls.default_node()
         set_current_org(Organization.root())
         org_nodes_roots = cls.objects.filter(key__regex=r'^[0-9]+$')
         org_nodes_roots_keys = org_nodes_roots.values_list('key', flat=True) or ['1']
         key = max([int(k) for k in org_nodes_roots_keys])
         key = str(key + 1) if key != 0 else '2'
         set_current_org(_current_org)
         root = cls.objects.create(key=key, value=_current_org.name)
         return root
Esempio n. 8
0
    def generate_fake(cls, count=100):
        import random
        org = get_current_org()
        if not org or not org.is_real():
            Organization.default().change_to()
        nodes = list(cls.objects.all())
        if count > 100:
            length = 100
        else:
            length = count

        for i in range(length):
            node = random.choice(nodes)
            child = node.create_child('Node {}'.format(i))
            print("{}. {}".format(i, child))
Esempio n. 9
0
    def generate_fake(cls, count=100):
        from ..hands import User, Node, SystemUser
        import random

        org = get_current_org()
        if not org or not org.is_real():
            Organization.default().change_to()

        nodes = list(Node.objects.all())
        assets = list(Asset.objects.all())
        system_users = list(SystemUser.objects.all())
        users = User.objects.filter(username='******')

        for i in range(count):
            name = "fake_perm_to_admin_{}".format(str(uuid.uuid4())[:6])
            perm = cls(name=name)
            try:
                perm.save()
                perm.users.set(users)
                if system_users and len(system_users) > 3:
                    _system_users = random.sample(system_users, 3)
                elif system_users:
                    _system_users = [system_users[0]]
                else:
                    _system_users = []
                perm.system_users.set(_system_users)

                if nodes and len(nodes) > 3:
                    _nodes = random.sample(nodes, 3)
                else:
                    _nodes = [Node.default_node()]
                perm.nodes.set(_nodes)

                if assets and len(assets) > 3:
                    _assets = random.sample(assets, 3)
                elif assets:
                    _assets = [assets[0]]
                else:
                    _assets = []
                perm.assets.set(_assets)

                logger.debug('Generate fake perm: %s' % perm.name)

            except Exception as e:
                print('Error continue')
                continue
Esempio n. 10
0
    def generate_fake(cls, count=100, is_finished=True):
        import random
        from orgs.models import Organization
        from users.models import User
        from assets.models import Asset, SystemUser
        from orgs.utils import get_current_org
        from common.utils.random import random_datetime, random_ip

        org = get_current_org()
        if not org or org.is_root():
            Organization.default().change_to()
        i = 0
        users = User.objects.all()[:100]
        assets = Asset.objects.all()[:100]
        system_users = SystemUser.objects.all()[:100]
        while i < count:
            user_random = random.choices(users, k=10)
            assets_random = random.choices(assets, k=10)
            system_users = random.choices(system_users, k=10)

            ziped = zip(user_random, assets_random, system_users)
            sessions = []
            now = timezone.now()
            month_ago = now - timezone.timedelta(days=30)
            for user, asset, system_user in ziped:
                ip = random_ip()
                date_start = random_datetime(month_ago, now)
                date_end = random_datetime(
                    date_start, date_start + timezone.timedelta(hours=2))
                data = dict(
                    user=str(user),
                    user_id=user.id,
                    asset=str(asset),
                    asset_id=asset.id,
                    system_user=str(system_user),
                    system_user_id=system_user.id,
                    remote_addr=ip,
                    date_start=date_start,
                    date_end=date_end,
                    is_finished=is_finished,
                )
                sessions.append(Session(**data))
            cls.objects.bulk_create(sessions)
            i += 10
Esempio n. 11
0
def on_system_user_assets_change(instance, action, model, pk_set, **kwargs):
    """
    当系统用户和资产关系发生变化时,应该重新推送系统用户到新添加的资产中
    """
    logger.debug("System user assets change signal recv: {}".format(instance))

    if not instance:
        logger.debug('No system user found')
        return

    if model == Asset:
        system_user_ids = [instance.id]
        asset_ids = pk_set
    else:
        system_user_ids = pk_set
        asset_ids = [instance.id]

    # 通过 through 创建的没有 org_id
    current_org_id = get_current_org().id
    with tmp_to_root_org():
        authbooks = AuthBook.objects.filter(asset_id__in=asset_ids,
                                            systemuser_id__in=system_user_ids)
        authbooks.update(org_id=current_org_id)

    save_action_mapper = {
        'pre_add': pre_save,
        'post_add': post_save,
        'pre_remove': pre_delete,
        'post_remove': post_delete
    }

    for ab in authbooks:
        ab.org_id = current_org_id

        post_action = save_action_mapper[action]
        logger.debug('Send AuthBook post save signal: {} -> {}'.format(
            action, ab.id))
        post_action.send(sender=AuthBook, instance=ab, created=True)

    if action == 'post_add':
        for system_user_id in system_user_ids:
            push_system_user_to_assets.delay(system_user_id, asset_ids)
Esempio n. 12
0
    def org_root(cls):
        # 如果使用current_org 在set_current_org时会死循环
        ori_org = get_current_org()

        if ori_org and ori_org.is_default():
            return cls.default_node()
        if ori_org and ori_org.is_root():
            return None

        org_roots = cls.org_root_nodes()
        org_roots_length = len(org_roots)

        if org_roots_length == 1:
            return org_roots[0]
        elif org_roots_length == 0:
            root = cls.create_org_root_node()
            return root
        else:
            raise ValueError(
                'Current org root node not 1, get {}'.format(org_roots_length))
Esempio n. 13
0
    def start(self):
        self.task.latest_history = self
        self.task.save()
        current_org = get_current_org()
        set_to_root_org()
        time_start = time.time()
        date_start = timezone.now()
        is_success = False
        summary = {}
        raw = ''

        try:
            date_start_s = datetime.datetime.now().strftime(
                '%Y-%m-%d %H:%M:%S')
            print(_("{} Start task: {}").format(date_start_s, self.task.name))
            raw, summary = self.start_runner()
            is_success = summary.get('success', False)
        except Exception as e:
            logger.error(e, exc_info=True)
            raw = {"dark": {"all": str(e)}, "contacted": []}
        finally:
            date_end = timezone.now()
            date_end_s = date_end.strftime('%Y-%m-%d %H:%M:%S')
            print(_("{} Task finish").format(date_end_s))
            print('.\n\n.')
            task = Task.objects.get(id=self.task_id)
            task.total_run_amount = models.F('total_run_amount') + 1
            if is_success:
                task.success_run_amount = models.F('success_run_amount') + 1
            task.save()
            AdHocRunHistory.objects.filter(id=self.id).update(
                date_start=date_start,
                is_finished=True,
                is_success=is_success,
                date_finished=timezone.now(),
                timedelta=time.time() - time_start,
                summary=summary)
            set_current_org(current_org)
            return raw, summary
Esempio n. 14
0
 def create_org_root_node(cls):
     ori_org = get_current_org()
     with transaction.atomic():
         key = cls.get_next_org_root_node_key()
         root = cls.objects.create(key=key, value=ori_org.name)
         return root
Esempio n. 15
0
 def initial(self, *args, **kwargs):
     super().initial(*args, *kwargs)
     self.current_org = get_current_org()
     set_to_root_org()
     self.obj = self.get_obj()