add record interface
authorHongyuan Ma <CS_MaleicAcid@163.com>
Tue, 24 Jul 2018 17:34:31 +0000 (01:34 +0800)
committerHongyuan Ma <CS_MaleicAcid@163.com>
Tue, 24 Jul 2018 17:34:31 +0000 (01:34 +0800)
web/apps/test_records/filters.py
web/apps/test_records/models.py
web/apps/test_records/views.py
web/apps/util/common.py [new file with mode: 0644]
web/apps/util/exception_handler.py
web/pgperffarm/urls.py

index 252e358de9e69fe29ccf7799d6d42bf0dc8f7c5d..3c3b8fb6141cd7908f1eb3b2ec9d83cd420a8675 100644 (file)
@@ -11,7 +11,7 @@ class TestRecordListFilter(django_filters.rest_framework.FilterSet):
     TestRecordListFilter
     """
     date = django_filters.DateTimeFilter(name='add_time',lookup_expr='gt')
-
+    branch = django_filters.CharFilter(name='branch__branch_name')
     class Meta:
         model = TestRecord
-        fields = ['date', ]
\ No newline at end of file
+        fields = ['date', 'branch']
\ No newline at end of file
index e2ea185798f82e5d8e0c9c6ae4f022200e2dcf2c..ce9785353148c75dfca1f377e3d74d709c34e885 100644 (file)
@@ -44,7 +44,40 @@ class TestCategory(models.Model):
 class PGInfo(models.Model):
     """
     pg info
+
+    "settings": {
+        "checkpoint_timeout": "15min",
+        "log_temp_files": "32",
+        "work_mem": "64MB",
+        "log_line_prefix": "%n %t ",
+        "shared_buffers": "1GB",
+        "log_autovacuum_min_duration": "0",
+        "checkpoint_completion_target": "0.9",
+        "maintenance_work_mem": "128MB",
+        "log_checkpoints": "on",
+        "max_wal_size": "4GB",
+        "min_wal_size": "2GB"
+    }
     """
+    checkpoint_timeout =models.IntegerField(verbose_name="checkpoint_timeout", help_text="checkpoint_timeout")
+    log_temp_files = models.IntegerField(verbose_name="log_temp_files", help_text="log_temp_files")
+    work_mem = models.IntegerField(verbose_name="work_mem", help_text="work_mem")
+    log_line_prefix = models.CharField(max_length=64,verbose_name="checkpoint_timeout", help_text="checkpoint_timeout")
+    shared_buffers = models.IntegerField(verbose_name="shared_buffers", help_text="shared_buffers")
+    log_autovacuum_min_duration =models.IntegerField(verbose_name="log_autovacuum_min_duration", help_text="log_autovacuum_min_duration")
+
+
+    checkpoint_completion_target =models.DecimalField(max_digits=8, decimal_places=4,verbose_name="checkpoint_completion_target", help_text="checkpoint_completion_target")
+    maintenance_work_mem = models.IntegerField(verbose_name="maintenance_work_mem", help_text="maintenance_work_mem")
+
+    CHECKPOINTS_CHOICE = (
+        ('on', 'on'),
+        ('off', 'off'),
+    )
+    log_checkpoints = models.CharField(max_length=8,choices=CHECKPOINTS_CHOICE,verbose_name="log_checkpoints", help_text="log_checkpoints")
+    max_wal_size =models.IntegerField(verbose_name="max_wal_size", help_text="max_wal_size")
+    min_wal_size =models.IntegerField(verbose_name="min_wal_size", help_text="min_wal_size")
+
     pg_branch = models.ForeignKey(TestBranch, verbose_name="pg branch", help_text="pg branch")
 
     class Meta:
@@ -57,7 +90,7 @@ class PGInfo(models.Model):
 
 class MetaInfo(models.Model):
     """
-    pg info
+    meta info
     """
     date = models.DateTimeField(verbose_name="date", help_text="date")
     uname = models.TextField(verbose_name="uname", help_text="uname")
@@ -102,6 +135,8 @@ class TestRecord(models.Model):
     hash = models.CharField(unique=True, default='', max_length=128, verbose_name="record hash",
                             help_text="record hash")
     uuid = models.CharField(unique=True, default='', max_length=64, verbose_name="record uuid", help_text="record uuid")
+    commit = models.CharField(max_length=64, verbose_name="record commit", help_text="record commit")
+
     add_time = models.DateTimeField(default=timezone.now, verbose_name="test added time")
 
     class Meta:
index fd0c2d5d071362a277f9c66f3671ce2a82cce1f1..81f3fe787c62b460a3527fa0db60d719e2d58f36 100644 (file)
@@ -33,17 +33,18 @@ class StandardResultsSetPagination(PageNumberPagination):
     page_size_query_param = 'page_size'
     max_page_size = 100
 
+class BigResultsSetPagination(PageNumberPagination):
+    page_size = 1000
+    page_size_query_param = 'page_size'
 
-class TestRecordListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
+class TestBranchListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
     """
     List test records
     """
 
-    queryset = TestRecord.objects.all().order_by('add_time')
-    serializer_class = TestRecordListSerializer
-    pagination_class = StandardResultsSetPagination
-    filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
-    filter_class = TestRecordListFilter
+    queryset = TestBranch.objects.all().order_by('branch_order')
+    serializer_class = TestBranchSerializer
+    pagination_class = BigResultsSetPagination
 
 class TestRecordListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
     """
@@ -56,25 +57,36 @@ class TestRecordListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
     filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
     filter_class = TestRecordListFilter
 
-@api_view(['GET'])
-def GetStatusRecordList(request, format=None):
+class TestRecordListByBranchViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
     """
-    List lastest test records involve all branches
+    List test records
     """
 
-    queryset = TestBranch.objects.all().order_by('branch_order').values_list('id','branch_name').annotate(num_records=Count('testrecord')).filter(num_records__gt=0)
-    # print queryset # <QuerySet [(1, u'HEAD', 3), (2, u'10_STABLE', 2)]>
-
-    ret = {'branch_num':queryset.__len__(),'result':[]}
-    for branch_item in queryset:
+    queryset = TestRecord.objects.order_by('test_machine_id','-add_time').distinct('test_machine_id').all()
+    serializer_class = TestRecordListSerializer
+    pagination_class = StandardResultsSetPagination
+    filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
+    filter_class = TestRecordListFilter
 
-        target_record = TestRecord.objects.filter(branch_id=branch_item[0]).order_by('test_machine_id','-add_time').distinct('test_machine_id').all()
-        # print target_record  # <QuerySet [(1, u'HEAD', 3), (2, u'10_STABLE', 2)]>
-        data = TestRecordListSerializer(target_record,many=True)
-        obj = {'branch':branch_item[1],'data':data.data}
-        ret["result"].append(obj)
-    # msg = 'ok!'
-    return Response(ret, status=status.HTTP_201_CREATED)
+# @api_view(['GET'])
+# def GetStatusRecordList(request, format=None):
+#     """
+#     List lastest test records involve all branches
+#     """
+#
+#     queryset = TestBranch.objects.all().order_by('branch_order').values_list('id','branch_name').annotate(num_records=Count('testrecord')).filter(num_records__gt=0)
+#     # print queryset # <QuerySet [(1, u'HEAD', 3), (2, u'10_STABLE', 2)]>
+#
+#     ret = {'branch_num':queryset.__len__(),'result':[]}
+#     for branch_item in queryset:
+#
+#         target_record = TestRecord.objects.filter(branch_id=branch_item[0]).order_by('test_machine_id','-add_time').distinct('test_machine_id').all()
+#         # print target_record  # <QuerySet [(1, u'HEAD', 3), (2, u'10_STABLE', 2)]>
+#         data = TestRecordListSerializer(target_record,many=True)
+#         obj = {'branch':branch_item[1],'data':data.data}
+#         ret["result"].append(obj)
+#     # msg = 'ok!'
+#     return Response(ret, status=status.HTTP_201_CREATED)
 
 
 class TestRecordDetailViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
@@ -143,7 +155,9 @@ def TestRecordCreate(request, format=None):
                 msg = 'metaInfo invalid'
                 raise TestDataUploadError(msg)
 
-            # pg_data = json_data['postgres']
+            pg_data = json_data['postgres']
+            commit = pg_data['commit']
+            pg_settings = pg_data['settings']
             pg_data = {
                 'pg_branch': 1
             }
@@ -163,6 +177,7 @@ def TestRecordCreate(request, format=None):
                 'test_desc': 'here is desc',
                 'meta_time': metaInfoRet.date,
                 'hash': record_hash,
+                'commit': commit,
                 'uuid': shortuuid.uuid()
             }
             testRecord = CreateTestRecordSerializer(data=test_record_data)
diff --git a/web/apps/util/common.py b/web/apps/util/common.py
new file mode 100644 (file)
index 0000000..e69de29
index b5d4e62d3c749b989f9e347c3246638ef9f21942..a58227ad6c3c5e30292c0faf23e94d4b55fea216 100644 (file)
@@ -10,7 +10,7 @@ def custom_exception_handler(exc, context):
     if response is not None:
         response.data['code'] = response.status_code
         response.data['desc'] = response.data['detail']
-        # response.data['data'] = None #可以存在
-        del response.data['detail']  # 删除detail字段
+        # response.data['data'] = None #
+        del response.data['detail']  # delete detail field
 
     return response
index c2d5d43002cf424e9c29539b42407d176c32d6e0..904d055e9e73f7629780fe40a3297f9cb1722425 100644 (file)
@@ -22,7 +22,7 @@ from django.views.generic.base import RedirectView
 from rest_framework.documentation import include_docs_urls
 from rest_framework.routers import DefaultRouter
 from test_records.views import TestRecordListViewSet, TestRecordCreate, TestRecordDetailViewSet, \
-    MachineHistoryRecordViewSet, GetStatusRecordList
+    MachineHistoryRecordViewSet, TestBranchListViewSet, TestRecordListByBranchViewSet
 from test_records.auth import MachineAuthToken
 # from test_records.view_base import TestListView
 
@@ -35,6 +35,9 @@ from user_operation.views import UserMachineListViewSet, UserPortalInfoViewSet,
 
 router = DefaultRouter()
 router.register(r'records', TestRecordListViewSet, base_name="records")
+
+router.register(r'branches', TestBranchListViewSet, base_name="branches")
+router.register(r'records-by-branch', TestRecordListByBranchViewSet, base_name="records-by-branch")
 # router.register(r'status-records', TestStatusRecordListViewSet, base_name="status-records")
 router.register(r'detail', TestRecordDetailViewSet, base_name="detail")
 router.register(r'machine-records', MachineHistoryRecordViewSet, base_name="machine-records")
@@ -61,7 +64,7 @@ urlpatterns = [
     # url(r'status/$', TestListView.as_view(), name='test-list'),
     # url(r'detail', TestRecordDetailViewSet ,name="detail"),
     url(r'upload/$', TestRecordCreate, name='test-upload'),
-    url(r'status-records/$', GetStatusRecordList, name='status-records'),
+    url(r'status-records/$', GetStatusRecordList, name='status-records'),
 
     # url(r'portal/$', UserPortalInfoViewSet, name='portal'),
     # url(r'my-machine/$', UserMachineList.as_view(), name='my-machine'),