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
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:
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")
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:
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):
"""
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):
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
}
'test_desc': 'here is desc',
'meta_time': metaInfoRet.date,
'hash': record_hash,
+ 'commit': commit,
'uuid': shortuuid.uuid()
}
testRecord = CreateTestRecordSerializer(data=test_record_data)
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
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
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")
# 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'),