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
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
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
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))
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
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
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
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))
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
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
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)
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))
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
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
def initial(self, *args, **kwargs): super().initial(*args, *kwargs) self.current_org = get_current_org() set_to_root_org() self.obj = self.get_obj()