Optimize details
authorHongyuan Ma <CS_MaleicAcid@163.com>
Tue, 31 Jul 2018 14:42:05 +0000 (22:42 +0800)
committerHongyuan Ma <CS_MaleicAcid@163.com>
Tue, 31 Jul 2018 14:42:05 +0000 (22:42 +0800)
front-end/src/component/result-filter/index.jsx
front-end/src/page/detailInfo/index.jsx
front-end/src/page/status/index.jsx
front-end/src/util/basic-table/index.jsx
front-end/src/util/constant.jsx
front-end/src/util/machine-record-table/index.jsx
front-end/src/util/record-table/index.jsx
web/apps/test_records/serializer.py
web/apps/test_records/views.py
web/apps/user_operation/filters.py
web/apps/users/serializer.py

index b9ad705a21deaeb379e71755ad06f45259a74968..2ae1141ce3cc97eedcd1c46c1a97cfc114413fcb 100644 (file)
@@ -153,6 +153,8 @@ class ResultFilter extends React.Component {
             isClear: true
         });
 
+        console.log('the lastest selected')
+        console.dir(newSelected)
     }
 
 
@@ -198,7 +200,6 @@ class ResultFilter extends React.Component {
         this.props.onIsLoadingChange(true);
         let branches = this.getSelectedBranches()
 
-        console.dir(branches)
         this.props.onApplyBtnClick(branches);
         // console.log('isLoading:' + this.props.isLoading)
 
index af9008e50bd704b9729d207019887fed6bbf8e70..419c70f020d0619360a0a5beb5054cc676f7a9a3 100644 (file)
@@ -48,6 +48,7 @@ class DetailInfo extends React.Component {
         let machine = this.state.recordInfo.test_machine || {};
         let dataset = this.state.recordInfo.dataset_info || {};
         let meta_info = this.state.recordInfo.meta_info || {};
+        let pg_info = this.state.recordInfo.pg_info || {};
         let linux_info = this.state.recordInfo.linux_info || {};
         let hardware_info = this.state.recordInfo.hardware_info || {};
         let ro = dataset.ro || {};
@@ -294,6 +295,7 @@ class DetailInfo extends React.Component {
 
 
                             <InfoList name="Meta" info={meta_info}> </InfoList>
+                            <InfoList name="PG Settings" info={pg_info}> </InfoList>
                             <InfoList name="Operating System" info={linux_info}> </InfoList>
                             <InfoList name="Hardward" info={hardware_info}> </InfoList>
                         </div>
index cab19e604147aac843020b6720de5d23bb08ac0a..d1a2b33f761c800478ab833ea6d9fd545fdc8d3b 100644 (file)
@@ -47,12 +47,11 @@ class Status extends React.Component {
         console.log('handle apply!')
 
         let _this = this
-        let selected_branches = branches
-        if(selected_branches === undefined || selected_branches.length == 0) {
-            selected_branches = this.state.branch_list
-            for (let i = 0; i < selected_branches.length; i++) {
-                selected_branches[i].isSelected = true;
-            }
+        let selected_branches = []
+        if(branches === undefined || branches.length == 0) {
+            selected_branches = this.adjustBranchList([])
+        }else{
+            selected_branches = branches
         }
         this.setState({
             selected_branches: selected_branches,
@@ -60,17 +59,37 @@ class Status extends React.Component {
         });
 
     }
+    adjustBranchList(branches){
+        let selected_branches = []
+        if(branches === undefined || branches.length == 0) {
+            branches = this.state.branch_list
+
+            for (let i = 0; i < branches.length; i++) {
+                let newItem = {}
+                newItem['name'] = branches[i].branch_name
+                newItem['value'] = branches[i].branch_name
+                newItem['isSelected'] = true;
+                selected_branches.push(newItem)
+            }
+
+        }
+
+        return selected_branches
+    }
 
     loadBranchList() {
         _record.getBranchList().then(res => {
-            let selected_branches = res.results
-            for (let i = 0; i < selected_branches.length; i++) {
-                selected_branches[i].isSelected = true;
-            }
-
+            // let selected_branches = res.results
+            // for (let i = 0; i < selected_branches.length; i++) {
+            //     selected_branches[i].isSelected = true;
+            // }
+            let _this = this
             this.setState({
                 branch_list: res.results,
-                selected_branches: selected_branches,
+            },()=>{
+                this.setState({
+                    selected_branches: _this.adjustBranchList([]),
+                });
             });
             console.log('now console the branch_list')
             console.dir(res.results)
@@ -137,7 +156,7 @@ class Status extends React.Component {
         let table_list = this.state.selected_branches.map((value, index) => {
             if (value.isSelected == true) {
                 return (
-                    <RecordTable branch={value.branch_name}/>
+                    <RecordTable branch={value.name}/>
                 );
             }
         });
index 22d5b41c621312cc7dcd5933e402fd0546f242d0..a2eb1a69d26f055d292fef6a63e6cde70b9c243f 100644 (file)
@@ -80,7 +80,7 @@ class BasicTable extends React.Component {
             display: 'show'
         };
         let listBody = _list.map((record, index) => {
-            let machine = record.machine_info[0];
+            let machine = record.machine_info;
             let system = machine.os_name + ' ' + machine.os_version + ' ' + machine.comp_name + ' ' + machine.comp_version;
             let alias = machine.alias;
 
index f0e6e6aa69d306b63ee947cf1590238a0686975e..1752b7676b3f6e6842234c225601c842f9391fba 100644 (file)
@@ -6,5 +6,6 @@ const object = {
     UnauthorizedCode:401,// unlogin
     AuthorizedErrorCode:400,// username or pwd mistake
 
+    PG_GITHUB_MIRROR:'https://github.com/postgres/postgres/commit/'
 };
 export default object;
\ No newline at end of file
index 27c34c728df5a8515543997be57450d6381da5a7..c8b999adc51f633432aecf80f3ee9fc5db8c2a51 100644 (file)
@@ -2,6 +2,7 @@ import React from 'react';
 import {Link}     from 'react-router-dom';
 import {Icon, Table, Label, Message, Button} from 'semantic-ui-react'
 import Pagination from 'util/pagination/index.jsx'
+import PGConstant from 'util/constant.jsx'
 import './index.css';
 
 function Bubble(props) {
@@ -45,7 +46,7 @@ class MachineRecordTable extends React.Component {
             display: 'show'
         };
         let listBody = _list.map((record, index) => {
-            let machine = record.machine_info[0];
+            let machine = record.machine_info;
             let system = machine.os_name + ' ' + machine.os_version + ' ' + machine.comp_name + ' ' + machine.comp_version;
             let alias = machine.alias;
 
@@ -58,7 +59,11 @@ class MachineRecordTable extends React.Component {
 
                 <Table.Row key={index}>
                     {/*alias*/}
-                    <Table.Cell><a href="#">{alias}</a></Table.Cell>
+                    <Table.Cell>
+                        <Link color='linkedin' to={'machineInfo/' + machine.machine_sn}>
+                            {alias}
+                        </Link>
+                    </Table.Cell>
 
                     {/*system*/}
                     {/*<Table.Cell><a href="#">{system}</a></Table.Cell>*/}
@@ -89,6 +94,8 @@ class MachineRecordTable extends React.Component {
                         </Link>
                     </Table.Cell>
 
+                    {/*commit*/}
+                    <Table.Cell><a target="_blank" href={ PGConstant.PG_GITHUB_MIRROR + record.commit}>{ record.commit.substring(0, 7)}</a></Table.Cell>
 
                     {/*date*/}
                     <Table.Cell>{record.add_time}</Table.Cell>
@@ -108,6 +115,7 @@ class MachineRecordTable extends React.Component {
                         {/*<Table.HeaderCell rowSpan='2'>Branch</Table.HeaderCell>*/}
                         <Table.HeaderCell colSpan='3'>Trending</Table.HeaderCell>
                         <Table.HeaderCell rowSpan='2'>Detail</Table.HeaderCell>
+                        <Table.HeaderCell rowSpan='2'>Commit</Table.HeaderCell>
                         <Table.HeaderCell rowSpan='2'>Date</Table.HeaderCell>
                     </Table.Row>
                     <Table.Row>
index bffb95567339c45761d5502e308c3e2eba8a023b..dc731cce365fa91f981588ed23f0bdf3e72a6530 100644 (file)
@@ -5,6 +5,7 @@ import Pagination from 'util/pagination/index.jsx'
 import Record      from 'service/record-service.jsx'
 import './index.css';
 const _record = new Record();
+import PGConstant from 'util/constant.jsx'
 function Bubble(props) {
 
     if (props.num <= 0) {
@@ -109,7 +110,7 @@ class RecordTable extends React.Component {
             display: 'show'
         };
         let listBody = _list.map((record, index) => {
-            let machine = record.machine_info[0];
+            let machine = record.machine_info;
             let system = machine.os_name + ' ' + machine.os_version + ' ' + machine.comp_name + ' ' + machine.comp_version;
             let alias = machine.alias;
 
@@ -122,10 +123,14 @@ class RecordTable extends React.Component {
 
                 <Table.Row key={index}>
                     {/*alias*/}
-                    <Table.Cell><a href="#">{alias}</a></Table.Cell>
+                    <Table.Cell>
+                        <Link color='linkedin' to={'machineInfo/' + machine.machine_sn}>
+                            {alias}
+                        </Link>
+                    </Table.Cell>
 
                     {/*system*/}
-                    <Table.Cell><a href="#">{system}</a></Table.Cell>
+                    <Table.Cell>{system}</Table.Cell>
 
                     {/*branch*/}
                     {/*<Table.Cell>{branch}</Table.Cell>*/}
@@ -153,7 +158,8 @@ class RecordTable extends React.Component {
                         </Link>
                     </Table.Cell>
 
-
+                    {/*commit*/}
+                    <Table.Cell><a target="_blank" href={ PGConstant.PG_GITHUB_MIRROR + record.commit}>{ record.commit.substring(0, 7)}</a></Table.Cell>
                     {/*date*/}
                     <Table.Cell>{record.add_time}</Table.Cell>
                 </Table.Row>
@@ -162,6 +168,15 @@ class RecordTable extends React.Component {
 
         return (
             <Table celled structured compact textAlign='center'>
+                <Table.Header>
+                    {/*<Table.Row>*/}
+                    {/*<Table.HeaderCell rowSpan='9'>Branch: {this.state.branch}</Table.HeaderCell>*/}
+                    {/*</Table.Row>*/}
+                    <Table.Row>
+                        <Table.HeaderCell colSpan='11'>{this.state.branch}</Table.HeaderCell>
+                    </Table.Row>
+
+                </Table.Header>
                 <Table.Header>
                     {/*<Table.Row>*/}
                         {/*<Table.HeaderCell rowSpan='9'>Branch: {this.state.branch}</Table.HeaderCell>*/}
@@ -172,6 +187,7 @@ class RecordTable extends React.Component {
                         {/*<Table.HeaderCell rowSpan='2'>Branch</Table.HeaderCell>*/}
                         <Table.HeaderCell colSpan='3'>Trending</Table.HeaderCell>
                         <Table.HeaderCell rowSpan='2'>Detail</Table.HeaderCell>
+                        <Table.HeaderCell rowSpan='2'>Commit</Table.HeaderCell>
                         <Table.HeaderCell rowSpan='2'>Date</Table.HeaderCell>
                     </Table.Row>
                     <Table.Row>
index be3f2957d62c4632a0dd1b63dc32affc1f801416..574ab70bb2b33dd381cda7aae7f8c48b1eccb88c 100644 (file)
@@ -15,7 +15,7 @@ class TestBranchSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = TestBranch
-        fields = ('branch_name','id')
+        fields = ('branch_name', 'id')
 
 
 class TestCategorySerializer(serializers.ModelSerializer):
@@ -65,29 +65,32 @@ class PGInfoSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = PGInfo
-        fields = "__all__"
+        fields = ('checkpoint_timeout', 'log_temp_files', 'work_mem', 'log_line_prefix', 'shared_buffers',
+                  'log_autovacuum_min_duration', 'checkpoint_completion_target', 'maintenance_work_mem',
+                  'log_checkpoints', 'max_wal_size', 'min_wal_size')
 
     def get_log_checkpoints(self, obj):
         new_dict = {v: k for k, v in DB_ENUM["general_switch"].items()}
         return new_dict[obj.log_checkpoints]
 
     def get_checkpoint_timeout(self, obj):
-        return obj['checkpoint_timeout'].__str__() + 'min'
+        return obj.checkpoint_timeout.__str__() + 'min'
 
     def get_work_mem(self, obj):
-        return obj['work_mem'].__str__() + 'MB'
+        return obj.work_mem.__str__() + 'MB'
 
     def get_shared_buffers(self, obj):
-        return obj['shared_buffers'].__str__() + 'GB'
+        return obj.shared_buffers.__str__() + 'GB'
 
     def get_maintenance_work_mem(self, obj):
-        return obj['maintenance_work_mem'].__str__() + 'MB'
+        return obj.maintenance_work_mem.__str__() + 'MB'
 
     def get_max_wal_size(self, obj):
-        return obj['max_wal_size'].__str__() + 'GB'
+        return obj.max_wal_size.__str__() + 'GB'
 
     def get_min_wal_size(self, obj):
-        return obj['min_wal_size'].__str__() + 'GB'
+        return obj.min_wal_size.__str__() + 'GB'
+
 
 class HardwareInfoDetailSerializer(serializers.ModelSerializer):
     '''
@@ -148,6 +151,7 @@ class CreateTestResultSerializer(serializers.ModelSerializer):
         model = TestResult
         fields = "__all__"
 
+
 class TestResultSerializer(serializers.ModelSerializer):
     '''
     use TestResultSerializer
@@ -196,6 +200,7 @@ class CreateTestDateSetSerializer(serializers.ModelSerializer):
         model = TestDataSet
         fields = "__all__"
 
+
 class TestStatusRecordListSerializer(serializers.ModelSerializer):
     '''
     use ModelSerializer
@@ -255,11 +260,12 @@ class TestStatusRecordListSerializer(serializers.ModelSerializer):
     #     rw_client_num = TestResult.objects.filter(Q(test_record_id=obj.id ) ,test_cate_id=2).order_by('clients').distinct('clients').count()
     #     return max(ro_client_num,rw_client_num)
 
+
 class TestRecordListSerializer(serializers.ModelSerializer):
     '''
     use ModelSerializer
     '''
-    pg_info = PGInfoSerializer()
+    pg_info = PGInfoSerializer()
     linux_info = LinuxInfoSerializer()
     meta_info = MetaInfoSerializer()
     branch = serializers.SerializerMethodField()
@@ -269,7 +275,7 @@ class TestRecordListSerializer(serializers.ModelSerializer):
     # client_max_num = serializers.SerializerMethodField()
     class Meta:
         model = TestRecord
-        fields = ('uuid', 'add_time', 'machine_info', 'pg_info', 'branch', 'trend', 'linux_info', 'meta_info')
+        fields = ('uuid', 'add_time', 'machine_info', 'branch', 'trend', 'linux_info', 'meta_info', 'commit')
 
     def get_branch(self, obj):
         branch = TestBranch.objects.filter(id=obj.branch.id).first()
@@ -304,9 +310,9 @@ class TestRecordListSerializer(serializers.ModelSerializer):
         return trend
 
     def get_machine_info(self, obj):
-        machine_data = UserMachine.objects.filter(id=obj.test_machine_id)
+        machine_data = UserMachine.objects.filter(id=obj.test_machine_id).get()
 
-        machine_info_serializer = UserMachineSerializer(machine_data, many=True)
+        machine_info_serializer = UserMachineSerializer(machine_data)
         return machine_info_serializer.data
 
     # def get_client_max_num(self, obj):
@@ -403,18 +409,6 @@ class TestRecordDetailSerializer(serializers.ModelSerializer):
 
         return dataset
 
-    # def get_ro_info(self, obj):
-    #     all_data = TestResult.objects.filter(Q(test_record_id=obj.id ) ,test_cate_id=1)
-    #
-    #     ro_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']})
-    #     return ro_info_serializer.data
-    #
-    # def get_rw_info(self, obj):
-    #     all_data = TestResult.objects.filter(Q(test_record_id=obj.id) ,test_cate_id=2)
-    #
-    #     rw_info_serializer = TestResultSerializer(all_data, many=True, context={'request': self.context['request']})
-    #     return rw_info_serializer.data
-
 
 class MachineHistoryRecordSerializer(serializers.ModelSerializer):
     '''
@@ -423,6 +417,7 @@ class MachineHistoryRecordSerializer(serializers.ModelSerializer):
     machine_info = serializers.SerializerMethodField()
     reports = serializers.SerializerMethodField()
     branches = serializers.SerializerMethodField()
+
     class Meta:
         model = UserMachine
         fields = ('machine_info', 'reports', 'branches')
@@ -436,7 +431,7 @@ class MachineHistoryRecordSerializer(serializers.ModelSerializer):
             item = {}
             item['branch'] = branch_item[0]
 
-            records = TestRecord.objects.filter(test_machine_id=obj.id,branch_id=branch_item[0])
+            records = TestRecord.objects.filter(test_machine_id=obj.id, branch_id=branch_item[0])
 
             serializer = TestRecordListSerializer(records, many=True)
             item['records'] = serializer.data
index 80b981f431ca3b52df1a50d22583aca2a1403e59..0b6c776320449c5163ecf22675eb9c50b032afef 100644 (file)
@@ -101,7 +101,7 @@ class TestRecordDetailViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet
 
 class MachineHistoryRecordViewSet( mixins.RetrieveModelMixin, viewsets.GenericViewSet):
     """
-    detail test records
+    machine info page
     """
     lookup_field = 'machine_sn'
     queryset = UserMachine.objects.all().order_by('add_time')
index 743728bf0be9b5b97ebc0c68463b9fb8b71c69af..7208055bd0a6b94459a0381cdeb1e7d770228678 100644 (file)
@@ -10,8 +10,8 @@ class MachineRecordListFilter(django_filters.rest_framework.FilterSet):
     """
     TestRecordListFilter
     """
-    branch__id = django_filters.NumberFilter(lookup_expr='icontains')
-    test_machine__machine_sn = django_filters.NumberFilter(lookup_expr='icontains')
+    branch__id = django_filters.NumberFilter()
+    test_machine__machine_sn = django_filters.CharFilter()
 
     class Meta:
         model = TestRecord
index 91346b3aa3489dd0b854f6c84447e30fec66e3b3..553f456001287c9a43c8d62371eb19e5a1ad3fbf 100644 (file)
@@ -24,7 +24,7 @@ class UserMachineSerializer(serializers.ModelSerializer):
     avatar = serializers.SerializerMethodField()
     class Meta:
         model = UserMachine
-        fields = ('alias', 'os_name', 'os_version', 'comp_name', 'comp_version', 'reports', 'owner' , 'avatar')
+        fields = ('alias', 'os_name', 'os_version', 'comp_name', 'comp_version', 'reports', 'owner' , 'avatar', 'machine_sn')
 
     def get_alias(self, obj):
         target_alias = Alias.objects.filter(id=obj.alias_id).first()