コード例 #1
0
class TestActivityLogResourceTypesView(APITestCase):
    def setUp(self):
        self.project_id = "000"
        self.user = get_testing_user()
        self.log_client = UserActivityLogClient(
            project_id=self.project_id,
            user=self.user.username,
        )
        self.log_client.log_add(
            resource="testing",
            resource_type="testcase",
        )

    def test_nologin(self):
        url = reverse('activity_log:api.project.activity_log_resource_types')
        response = self.client.get(url)
        self.assertEqual(response.status_code, 401)
        self.assertIn("code", response.json())

    def test_get(self):
        url = reverse('activity_log:api.project.activity_log_resource_types')
        self.force_authenticate(self.user)
        response = self.client.get(url)
        result = response.json()
        self.assertEqual(result["code"], 0)
        data = result["data"]
        self.assertTrue(bool(data))
コード例 #2
0
 def setUp(self):
     self.project_id = "000"
     self.user = get_testing_user()
     self.log_client = UserActivityLogClient(
         project_id=self.project_id,
         user=self.user.username,
     )
     self.log_client.log_add(
         resource="testing",
         resource_type="testcase",
     )
コード例 #3
0
 def __init__(self):
     self.ignore_models = set()
     self.model_checkers = OrderedDict()
     self.activity_log_client = UserActivityLogClient(
         activity_status="completed", )
コード例 #4
0
class DjangoSignalHooks(object):
    def __init__(self):
        self.ignore_models = set()
        self.model_checkers = OrderedDict()
        self.activity_log_client = UserActivityLogClient(
            activity_status="completed", )

    def activity_check(self, params):
        return params

    def register(self, model):
        checker = getattr(model, "activity_check")
        if isinstance(checker, str):
            checker = getattr(model, checker)
        if checker:
            self.model_checkers[model] = checker

    def find_checker_by_instance(self, instance):
        model_cls = instance.__class__
        checker = self.model_checkers.get(model_cls)
        if checker:
            return checker
        if model_cls in self.ignore_models:
            return
        for model, checker in self.model_checkers.items():
            if isinstance(instance, model):
                return checker
        self.ignore_models.add(model_cls)

    def setup_hook(self):
        @receiver(post_save)
        def log_model_activity_create_and_modify(sender, instance, created,
                                                 **kwargs):
            if created:
                activity_type = "add"
            else:
                activity_type = "modify"
            check_and_log(instance, dict(activity_type=activity_type, ))

        @receiver(post_delete)
        def log_model_activity_delete(sender, instance, **kwargs):
            check_and_log(instance, dict(activity_type="delete", ))

        def check_and_log(instance, params):
            checker = self.find_checker_by_instance(instance)

            try:
                username = local.request.user.username or force_text(
                    local.request.user)
            except Exception:
                username = "******"  # celery backend process
            params.setdefault("user", username)

            if not checker:
                return
            try:
                params = checker(params)
                if params is not None:
                    self.activity_log_client.log(**params)
            except Exception as err:
                logger.exception("activity model log error: %s", err)
                return
コード例 #5
0
class TestActivityLogView(APITestCase):
    def setUp(self):
        self.project_id = "000"
        self.user = get_testing_user()
        self.log_client = UserActivityLogClient(
            project_id=self.project_id,
            user=self.user.username,
        )
        self.log_client.log_add(
            resource="testing",
            resource_type="testcase",
        )

    def test_nologin(self):
        url = reverse('activity_log:api.project.activity_logs',
                      kwargs={
                          "project_id": self.project_id,
                      })
        response = self.client.get(url)
        self.assertEqual(response.status_code, 401)
        self.assertIn("code", response.json())

    def test_get(self):
        url = reverse('activity_log:api.project.activity_logs',
                      kwargs={
                          "project_id": self.project_id,
                      })
        self.force_authenticate(self.user)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        result = response.json()
        self.assertEqual(result["code"], 0)
        data = result["data"]
        results = data["results"]
        self.assertEqual(len(results), 1)

    def test_filter(self):
        url = reverse('activity_log:api.project.activity_logs',
                      kwargs={
                          "project_id": self.project_id,
                      })
        self.log_client.log_note(
            resource="testing",
            resource_type="testcase",
        )
        self.force_authenticate(self.user)
        response = self.client.get(url,
                                   data={
                                       "activity_type": "note",
                                       "begin_time": "2017-03-27 09:30:00",
                                       "end_time": "2117-03-27 09:30:00",
                                   })
        self.assertEqual(response.status_code, 200)
        result = response.json()
        self.assertEqual(result["code"], 0)
        data = result["data"]
        results = data["results"]
        self.assertEqual(len(results), 1)

    def test_ordering(self):
        url = reverse('activity_log:api.project.activity_logs',
                      kwargs={
                          "project_id": self.project_id,
                      })
        self.log_client.log_note(
            resource_id="3",
            resource_type="ordering",
        )
        self.log_client.log_note(
            resource_id="2",
            resource_type="ordering",
        )
        self.log_client.log_note(
            resource_id="1",
            resource_type="ordering",
        )
        self.force_authenticate(self.user)
        response = self.client.get(url,
                                   data={
                                       "resource_type": "ordering",
                                       "limit": 100,
                                   })
        self.assertEqual(response.status_code, 200)
        result = response.json()
        self.assertEqual(result["code"], 0)
        data = result["data"]
        results = data["results"]
        self.assertEqual(results[0]["resource_id"], "1")
        self.assertEqual(results[1]["resource_id"], "2")
        self.assertEqual(results[2]["resource_id"], "3")
コード例 #6
0
class TestActivityEventView(APITestCase):
    def setUp(self):
        self.project_id = "000"
        self.user = get_testing_user()
        self.log_client = UserActivityLogClient(
            project_id=self.project_id,
            user=self.user.username,
        )
        self.log_client.log_add(
            resource="testing",
            resource_type="testcase",
        )

    def test_nologin(self):
        url = reverse('activity_log:api.project.activity_events',
                      kwargs={
                          "project_id": self.project_id,
                      })
        response = self.client.get(url)
        self.assertEqual(response.status_code, 401)
        self.assertIn("code", response.json())

    @mock.patch("backend.activity_log.views.ActivityEventView.query_events")
    @mock.patch("backend.components.paas_cc.get_all_clusters")
    def test_get(self, get_all_clusters, query_events):
        url = reverse('activity_log:api.project.activity_events',
                      kwargs={
                          "project_id": self.project_id,
                      })
        self.force_authenticate(self.user)
        cluster_id = "BCS-10001"
        cluster_name = "测试集群"
        query_events.return_value = {
            "code":
            0,
            "data": [{
                "_id": "59cdf3a98118af1d406d26dc",
                "clusterId": cluster_id,
                "component": "kublet",
                "createTime": "2017-09-29 15:18:01",
                "data": {
                    "a": "1",
                    "b": "2"
                },
                "describe": "wow its killing itself",
                "env": "mesos",
                "eventTime": "2017-09-29 12:02:00",
                "kind": "rc",
                "level": "warning",
                "type": "killing"
            }],
            "total":
            10,
            "message":
            "Success",
            "result":
            True
        }
        get_all_clusters.return_value = {
            "code": 0,
            "data": {
                "count":
                3,
                "results": [{
                    "area_id": 1,
                    "artifactory": "",
                    "capacity_updated_at": None,
                    "cluster_id": cluster_id,
                    "cluster_num": 15002,
                    "config_svr_count": 0,
                    "created_at": "2017-10-18T11:11:40+08:00",
                    "creator": "admin",
                    "description": "测试集群",
                    "disabled": False,
                    "environment": "stag",
                    "master_count": 0,
                    "name": cluster_name,
                    "node_count": 0,
                    "project_id": self.project_id,
                    "remain_cpu": 0,
                    "remain_disk": 0,
                    "remain_mem": 0,
                    "status": "",
                    "total_cpu": 0,
                    "total_disk": 0,
                    "total_mem": 0,
                    "type": "k8s",
                    "updated_at": "2017-10-18T14:37:06+08:00"
                }]
            },
            "message": "获取集群成功",
            "result": True
        }
        response = self.client.get(url)
        result = response.json()
        self.assertEqual(result["code"], 0)
        data = result["data"]
        self.assertEqual(data["count"], 10)
        results = data["results"]
        self.assertTrue(len(results), 1)
        result = results[0]
        self.assertEqual(result["cluster_id"], cluster_id)
        self.assertEqual(result["cluster_name"], cluster_name)