diff options
author | Hongyuan Ma | 2018-07-24 17:34:31 +0000 |
---|---|---|
committer | Hongyuan Ma | 2018-07-24 17:34:31 +0000 |
commit | 6ec07d6ffb08774b4ea197e9b65e6a76d6005791 (patch) | |
tree | 6f95e3be3985307a75cebb12d914f8bd212a1ba0 | |
parent | 323d777d1231d1bb21b8c36adc06fafcc4dfef9c (diff) |
add record interface
-rw-r--r-- | web/apps/test_records/filters.py | 4 | ||||
-rw-r--r-- | web/apps/test_records/models.py | 37 | ||||
-rw-r--r-- | web/apps/test_records/views.py | 59 | ||||
-rw-r--r-- | web/apps/util/common.py | 0 | ||||
-rw-r--r-- | web/apps/util/exception_handler.py | 4 | ||||
-rw-r--r-- | web/pgperffarm/urls.py | 7 |
6 files changed, 82 insertions, 29 deletions
diff --git a/web/apps/test_records/filters.py b/web/apps/test_records/filters.py index 252e358..3c3b8fb 100644 --- a/web/apps/test_records/filters.py +++ b/web/apps/test_records/filters.py @@ -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 diff --git a/web/apps/test_records/models.py b/web/apps/test_records/models.py index e2ea185..ce97853 100644 --- a/web/apps/test_records/models.py +++ b/web/apps/test_records/models.py @@ -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: diff --git a/web/apps/test_records/views.py b/web/apps/test_records/views.py index fd0c2d5..81f3fe7 100644 --- a/web/apps/test_records/views.py +++ b/web/apps/test_records/views.py @@ -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 index 0000000..e69de29 --- /dev/null +++ b/web/apps/util/common.py diff --git a/web/apps/util/exception_handler.py b/web/apps/util/exception_handler.py index b5d4e62..a58227a 100644 --- a/web/apps/util/exception_handler.py +++ b/web/apps/util/exception_handler.py @@ -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 diff --git a/web/pgperffarm/urls.py b/web/pgperffarm/urls.py index c2d5d43..904d055 100644 --- a/web/pgperffarm/urls.py +++ b/web/pgperffarm/urls.py @@ -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'), |