summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHongyuan Ma2018-07-24 17:34:31 +0000
committerHongyuan Ma2018-07-24 17:34:31 +0000
commit6ec07d6ffb08774b4ea197e9b65e6a76d6005791 (patch)
tree6f95e3be3985307a75cebb12d914f8bd212a1ba0
parent323d777d1231d1bb21b8c36adc06fafcc4dfef9c (diff)
add record interface
-rw-r--r--web/apps/test_records/filters.py4
-rw-r--r--web/apps/test_records/models.py37
-rw-r--r--web/apps/test_records/views.py59
-rw-r--r--web/apps/util/common.py0
-rw-r--r--web/apps/util/exception_handler.py4
-rw-r--r--web/pgperffarm/urls.py7
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'),