diff --git a/appStore/api/router.py b/appStore/api/router.py index c6ffdecd9ba0419bc0650479c7c1a0d482e4bb7c..6c3393f416c7005da12f56c1fb86f946cd6d9836 100644 --- a/appStore/api/router.py +++ b/appStore/api/router.py @@ -40,6 +40,7 @@ urlpatterns = [ # url(r'^y_upload_file/', y_upload_file), # upload_file url(r'', include(router.urls)), url('^get_filter_name/', ProjectViewSet.as_view({'get': 'get_filter_name'}), name='get_filter_name'), + url('^merge_data/', ProjectViewSet.as_view({'post': 'merge_data'}), name='merge_data'), url('^stream_data/', StreamViewSet.as_view({'get': 'get_stream_data'}), name='stream_data'), url('^change_password/', UserProfileViewSet.as_view({'put': 'change_password'}), name='change_password'), ] diff --git a/appStore/fio/views.py b/appStore/fio/views.py index 251eecc90e2a87db478b877be4fd98626fdcabb7..8c75d2ceb4d2cc08a76c1a84c1a06407d42cc499 100644 --- a/appStore/fio/views.py +++ b/appStore/fio/views.py @@ -111,10 +111,10 @@ class FioViewSet(CusModelViewSet): new_datas.append(data_) # new_datas是12组数据 for data_ in new_datas: - bs_list = [d.bs for d in data_] - io_list = [d.io for d in data_] - iops_list = [d.iops for d in data_] - bw_list = [d.bw for d in data_] + bs_list = [d.bs for d in data_ if d.bs is not None] + io_list = [d.io for d in data_ if d.io is not None] + iops_list = [d.iops for d in data_ if d.iops is not None] + bw_list = [d.bw for d in data_ if d.bw is not None] # 获取bs、io、iops的平均值 bs = 0 for bs_ in bs_list: @@ -223,8 +223,10 @@ class FioViewSet(CusModelViewSet): def get_left_data(self, serializer_): datas = [] - groups = set([d.mark_name for d in serializer_]) - filter_datas = serializer_.filter(mark_name=list(groups)[0]) + # groups = set([d.mark_name for d in serializer_]) + # 如果使用group的方式,set时无序的,当其它数据部分内容没有数据时旧会导致全都不展示对应的数据,所有这里想到好一点的方法就是 + # 时用0-0,首先就要确保0-0的数据必须时最全的 + filter_datas = serializer_.filter(mark_name='0-0') for data in filter_datas: data_ = {'rw': data.rw + '(' + str(data.bs + ')'), 'bs': data.bs, diff --git a/appStore/iozone/views.py b/appStore/iozone/views.py index 068933874ad668594d0324bd7ece728a43ea2a63..2ff0cf07a028322629cb5af932c02de2f51c061c 100644 --- a/appStore/iozone/views.py +++ b/appStore/iozone/views.py @@ -190,7 +190,7 @@ class IozoneViewSet(CusModelViewSet): for mark_name in groups: temp_mark_datas = serializer_.filter(mark_name=mark_name) # 基准数据和对比数据的全部数据 - datas[0]['column' + str(column_index)] = 'unixbench#' + str(title_index) + datas[0]['column' + str(column_index)] = 'Iozone#' + str(title_index) datas[1]['column' + str(column_index)] = temp_mark_datas[0].execute_cmd datas[2]['column' + str(column_index)] = temp_mark_datas[0].modify_parameters for data in temp_mark_datas: diff --git a/appStore/jvm2008/views.py b/appStore/jvm2008/views.py index f7b75bafebcd0c00ff8d6174e9952f891b7ecc24..b6a8b861376ce2b69d9de0a48852a606dd8b40c3 100644 --- a/appStore/jvm2008/views.py +++ b/appStore/jvm2008/views.py @@ -89,18 +89,18 @@ class Jvm2008ViewSet(CusModelViewSet): base_data_ = serializer_.filter(tune_type='base') peak_data_ = serializer_.filter(tune_type='peak') # base数据,将每个字典转换为NumPy数组 - base_compiler_list = [d.compiler for d in base_data_] - base_compress_list = [d.compress for d in base_data_] - base_crypto_list = [d.crypto for d in base_data_] - base_derby_list = [d.derby for d in base_data_] - base_mpegaudio_list = [d.mpegaudio for d in base_data_] - base_scimark_large_list = [d.scimark_large for d in base_data_] - base_scimark_small_list = [d.scimark_small for d in base_data_] - base_serial_list = [d.serial for d in base_data_] - base_startup_list = [d.startup for d in base_data_] - base_sunflow_list = [d.sunflow for d in base_data_] - base_xml_list = [d.xml for d in base_data_] - base_Noncompliant_pomposite_result_list = [d.Noncompliant_pomposite_result for d in base_data_] + base_compiler_list = [d.compiler for d in base_data_ if d.compiler is not None] + base_compress_list = [d.compress for d in base_data_ if d.compress is not None] + base_crypto_list = [d.crypto for d in base_data_ if d.crypto is not None] + base_derby_list = [d.derby for d in base_data_ if d.derby is not None] + base_mpegaudio_list = [d.mpegaudio for d in base_data_ if d.mpegaudio is not None] + base_scimark_large_list = [d.scimark_large for d in base_data_ if d.scimark_large is not None] + base_scimark_small_list = [d.scimark_small for d in base_data_ if d.scimark_small is not None] + base_serial_list = [d.serial for d in base_data_ if d.serial is not None] + base_startup_list = [d.startup for d in base_data_ if d.startup is not None] + base_sunflow_list = [d.sunflow for d in base_data_ if d.sunflow is not None] + base_xml_list = [d.xml for d in base_data_ if d.xml is not None] + base_Noncompliant_pomposite_result_list = [d.Noncompliant_pomposite_result for d in base_data_ if d.Noncompliant_pomposite_result is not None] # 计算每个数组的平均值 average_base_compiler = np.mean(base_compiler_list).round(2) if not np.isnan(np.mean(base_compiler_list)) else None average_base_compress = np.mean(base_compress_list).round(2) if not np.isnan(np.mean(base_compress_list)) else None @@ -144,7 +144,7 @@ class Jvm2008ViewSet(CusModelViewSet): # 查到mark-name相同的数据拼接为一组:serializer.data for mark_name in groups: temp_datas = serializer_.filter(mark_name=mark_name) - datas[0]['column' + str(column_index)] = 'unixbench#' + str(title_index) + datas[0]['column' + str(column_index)] = 'Jvm2008#' + str(title_index) datas[1]['column' + str(column_index)] = temp_datas[0].execute_cmd datas[2]['column' + str(column_index)] = temp_datas[0].modify_parameters # 基准数据和对比数据的全部数据 diff --git a/appStore/project/views.py b/appStore/project/views.py index 70de894fdef1aa844c448fc7b231af07e9a99866..9c2c271abfcf7e949772e74d572d0d5ff998d0a3 100644 --- a/appStore/project/views.py +++ b/appStore/project/views.py @@ -63,37 +63,6 @@ class ProjectViewSet(CusModelViewSet): serializer = self.get_serializer(queryset, many=True) return json_response(serializer.data, status.HTTP_200_OK, '修改project数据完成') - def delete(self, request): - id = request.data.get('id', None) - if not id: - return json_response({}, status.HTTP_205_RESET_CONTENT, '请传递项目id') - user_name = Project.objects.filter(id=id).first().user_name - if request.user.is_superuser or request.user.chinese_name == user_name: - project_data = Project.objects.filter(id=id).first() - if not project_data: - return json_response({}, status.HTTP_205_RESET_CONTENT, '没有该数据') - if project_data.stream: - Stream.objects.filter(id=project_data.env_id).delete() - if project_data.unixbench: - Unixbench.objects.filter(id=project_data.env_id).delete() - if project_data.lmbench: - Lmbench.objects.filter(id=project_data.env_id).delete() - if project_data.fio: - Fio.objects.filter(id=project_data.env_id).delete() - if project_data.iozone: - Iozone.objects.filter(id=project_data.env_id).delete() - if project_data.jvm2008: - Jvm2008.objects.filter(id=project_data.env_id).delete() - if project_data.cpu2006: - Cpu2006.objects.filter(id=project_data.env_id).delete() - if project_data.cpu2017: - Cpu2017.objects.filter(id=project_data.env_id).delete() - Env.objects.filter(id=project_data.env_id).delete() - Project.objects.filter(id=id).delete() - return json_response({}, status.HTTP_200_OK, '删除成功') - else: - return json_response({}, status.HTTP_205_RESET_CONTENT, '此用户不允许删除该数据') - def get_filter_name(self, request, *args, **kwargs): project_queryset = Project.objects.all() serializer = self.get_serializer(project_queryset, many=True) @@ -108,6 +77,172 @@ class ProjectViewSet(CusModelViewSet): datas = {'projectNames': projectNames, 'userNames': userNames, 'osNames': osNames, 'cpuNames': cpuNames} return json_response(datas, status.HTTP_200_OK, '筛选数据获取完成') + def merge_data(self, request, *args, **kwargs): + env_id = request.data.get('env_id', None) + env_ids = request.data.get('env_ids', None) + + # 1、修改数据的env_id和mark_name + stream_number = 0 + lmbench_number = 0 + unixbench_number = -1 + fio_number = -1 + iozone_number = -1 + jvm2008_number = -1 + cpu2006_number = -1 + cpu2017_number = -1 + # 多数据测试项目,project的表中在直接替换成这个数据+1 + if Unixbench.objects.filter(env_id=env_id[0]): + unixbench_mark_name_list = set([d.mark_name for d in Unixbench.objects.filter(env_id=env_id[0])]) + unixbench_number = max(int(string[-1]) for string in unixbench_mark_name_list) + + if Fio.objects.filter(env_id=env_id[0]): + fio_mark_name_list = set([d.mark_name for d in Fio.objects.filter(env_id=env_id[0])]) + fio_number = max(int(string[-1]) for string in fio_mark_name_list) + + if Iozone.objects.filter(env_id=env_id[0]): + iozone_mark_name_list = set([d.mark_name for d in Iozone.objects.filter(env_id=env_id[0])]) + iozone_number = max(int(string[-1]) for string in iozone_mark_name_list) + + if Jvm2008.objects.filter(env_id=env_id[0]): + jvm2008_mark_name_list = set([d.mark_name for d in Jvm2008.objects.filter(env_id=env_id[0])]) + jvm2008_number = max(int(string[-1]) for string in jvm2008_mark_name_list) + + if Cpu2006.objects.filter(env_id=env_id[0]): + cpu2006_mark_name_list = set([d.mark_name for d in Cpu2006.objects.filter(env_id=env_id[0])]) + cpu2006_number = max(int(string[-1]) for string in cpu2006_mark_name_list) + + if Cpu2017.objects.filter(env_id=env_id[0]): + cpu2017_mark_name_list = set([d.mark_name for d in Cpu2017.objects.filter(env_id=env_id[0])]) + cpu2017_number = max(int(string[-1]) for string in cpu2017_mark_name_list) + + print('原始数据的unixbench_number= ', unixbench_number) + print('原始数据的fio_number= ', fio_number) + print('原始数据的iozone_number= ', iozone_number) + print('原始数据的jvm2008_number= ', jvm2008_number) + print('原始数据的cpu2006_number= ', cpu2006_number) + print('原始数据的cpu2017_number= ', cpu2017_number) + + for id in env_ids: + print(Stream.objects.filter(env_id=id), 111111) + if Stream.objects.filter(env_id=id): + print('stream 合并成功') + stream_number += len(Stream.objects.filter(env_id=id)) + print(stream_number) + Stream.objects.filter(env_id=id).update(env_id=env_id[0]) + if Lmbench.objects.filter(env_id=id): + print('Lmbench 合并成功') + lmbench_number += len(Lmbench.objects.filter(env_id=id)) + print(lmbench_number) + Lmbench.objects.filter(env_id=id).update(env_id=env_id[0]) + max_unixbench_number = 0 + if Unixbench.objects.filter(env_id=id): + for obj in Unixbench.objects.filter(env_id=id): + new_unixbench_number = unixbench_number + (int(obj.mark_name[-1]) + 1) + max_unixbench_number = max(max_unixbench_number, new_unixbench_number) + new_mark_name = obj.mark_name[:-1] + str(new_unixbench_number) + obj.env_id = env_id[0] + obj.mark_name = new_mark_name + print('unixbench合并env_id=', id) + print('unixbench的mark_name=', new_mark_name) + obj.save() + unixbench_number = max_unixbench_number + print('fio的max_unixbench_number(代表最新数据有多少-1条)=', unixbench_number) + max_fio_number = 0 + if Fio.objects.filter(env_id=id): + for obj in Fio.objects.filter(env_id=id): + new_fio_number = fio_number + (int(obj.mark_name[-1]) + 1) + max_fio_number = max(max_fio_number, new_fio_number) + new_mark_name = obj.mark_name[:-1] + str(new_fio_number) + obj.env_id = env_id[0] + obj.mark_name = new_mark_name + print('fio合并env_id=', id) + print('fio的mark_name=', new_mark_name) + obj.save() + fio_number = max_fio_number + print('fio的fio_number(代表最新数据有多少+1条)=', fio_number) + max_iozone_number = 0 + if Iozone.objects.filter(env_id=id): + for obj in Iozone.objects.filter(env_id=id): + new_iozone_number = iozone_number + (int(obj.mark_name[-1]) + 1) + max_iozone_number = max(max_iozone_number, new_iozone_number) + new_mark_name = obj.mark_name[:-1] + str(new_iozone_number) + obj.env_id = env_id[0] + obj.mark_name = new_mark_name + print('iozone合并env_id=', id) + print('iozone的mark_name=', new_mark_name) + obj.save() + iozone_number = max_iozone_number + print('iozone的iozone_number(代表最新数据有多少-1条)=', iozone_number) + max_jvm2008_number = 0 + if Jvm2008.objects.filter(env_id=id): + for obj in Jvm2008.objects.filter(env_id=id): + new_jvm2008_number = jvm2008_number + (int(obj.mark_name[-1]) + 1) + max_jvm2008_number = max(max_jvm2008_number, new_jvm2008_number) + new_mark_name = obj.mark_name[:-1] + str(new_jvm2008_number) + obj.env_id = env_id[0] + obj.mark_name = new_mark_name + print('jvm2008合并env_id=', id) + print('jvm2008的mark_name=', new_mark_name) + obj.save() + jvm2008_number = max_jvm2008_number + print('jvm2008的jvm2008_number(代表最新数据有多少-1条)=', jvm2008_number) + max_cpu2006_number = 0 + if Cpu2006.objects.filter(env_id=id): + for obj in Cpu2006.objects.filter(env_id=id): + new_cpu2006_number = cpu2006_number + (int(obj.mark_name[-1]) + 1) + max_cpu2006_number = max(max_cpu2006_number, new_cpu2006_number) + new_mark_name = obj.mark_name[:-1] + str(new_cpu2006_number) + obj.env_id = env_id[0] + obj.mark_name = new_mark_name + print('cpu2006合并env_id=', id) + print('cpu2006的mark_name=', new_mark_name) + obj.save() + cpu2006_number = max_cpu2006_number + print('cpu2006的cpu2006_number(代表最新数据有多少-1条)=', cpu2006_number) + max_cpu2017_number = 0 + if Cpu2017.objects.filter(env_id=id): + for obj in Cpu2017.objects.filter(env_id=id): + new_cpu2017_number = cpu2017_number + (int(obj.mark_name[-1]) + 1) + max_cpu2017_number = max(max_cpu2017_number, new_cpu2017_number) + new_mark_name = obj.mark_name[:-1] + str(new_cpu2017_number) + obj.env_id = env_id[0] + obj.mark_name = new_mark_name + print('cpu2017合并env_id=', id) + print('cpu2017的mark_name=', new_mark_name) + obj.save() + cpu2017_number = max_cpu2017_number + print('cpu2017的cpu2017_number(代表最新数据有多少-1条)=', cpu2017_number) + + # 2、删除env_id的env表,删除env_id对应的project表 + Env.objects.filter(id__in=env_ids).delete() + Project.objects.filter(env_id__in=env_ids).delete() + # 3、修改project表对应测试项目的值 + print('------') + print(Project.objects.filter(env_id=env_id[0]).first().stream, stream_number, 1111) + stream_number = Project.objects.filter(env_id=env_id[0]).first().stream + stream_number + lmbench_number = Project.objects.filter(env_id=env_id[0]).first().lmbench + lmbench_number + print('project中stream=', stream_number) + print('project中lmbench=', lmbench_number) + print('project中unixbench=', unixbench_number + 1) + print('project中fio=', fio_number + 1) + print('project中iozone=', iozone_number + 1) + print('project中jvm2008=', jvm2008_number + 1) + print('project中cpu2006=', cpu2006_number + 1) + print('project中cpu2017=', cpu2017_number + 1) + + Project.objects.filter(env_id=env_id[0]).update( + stream=stream_number, + lmbench=lmbench_number, + unixbench=unixbench_number + 1, + fio=fio_number + 1, + iozone=iozone_number + 1, + jvm2008=jvm2008_number + 1, + cpu2006=cpu2006_number + 1, + cpu2017=cpu2017_number + 1 + ) + + return json_response({}, status.HTTP_200_OK, '合并数据成功') + def create(self, request, *args, **kwargs): data_project = {} data_project['env_id'] = request.__dict__['data_project']['env_id'] @@ -166,3 +301,35 @@ class ProjectViewSet(CusModelViewSet): print(serializer_project.errors, "project") return json_response(serializer_project.errors, status.HTTP_400_BAD_REQUEST, get_error_message(serializer_project)) + + + def delete(self, request): + id = request.data.get('id', None) + if not id: + return json_response({}, status.HTTP_205_RESET_CONTENT, '请传递项目id') + user_name = Project.objects.filter(id=id).first().user_name + if request.user.is_superuser or request.user.chinese_name == user_name: + project_data = Project.objects.filter(id=id).first() + if not project_data: + return json_response({}, status.HTTP_205_RESET_CONTENT, '没有该数据') + if project_data.stream: + Stream.objects.filter(id=project_data.env_id).delete() + if project_data.unixbench: + Unixbench.objects.filter(id=project_data.env_id).delete() + if project_data.lmbench: + Lmbench.objects.filter(id=project_data.env_id).delete() + if project_data.fio: + Fio.objects.filter(id=project_data.env_id).delete() + if project_data.iozone: + Iozone.objects.filter(id=project_data.env_id).delete() + if project_data.jvm2008: + Jvm2008.objects.filter(id=project_data.env_id).delete() + if project_data.cpu2006: + Cpu2006.objects.filter(id=project_data.env_id).delete() + if project_data.cpu2017: + Cpu2017.objects.filter(id=project_data.env_id).delete() + Env.objects.filter(id=project_data.env_id).delete() + Project.objects.filter(id=id).delete() + return json_response({}, status.HTTP_200_OK, '删除成功') + else: + return json_response({}, status.HTTP_205_RESET_CONTENT, '此用户不允许删除该数据') \ No newline at end of file diff --git a/appStore/unixbench/views.py b/appStore/unixbench/views.py index f098640d98fcd82495ecb6d8ef87c18afa56cc7c..587ea011bf0bf29558d65013b05c895fa81f6e2b 100644 --- a/appStore/unixbench/views.py +++ b/appStore/unixbench/views.py @@ -27,6 +27,34 @@ class UnixbenchViewSet(CusModelViewSet): def get_data(self, serializer_, datas, title_index, column_index, base_column_index): serializer = self.get_serializer(serializer_, many=True) groups = set([d.mark_name for d in serializer_]) + + single_Dhrystone = None + single_Double_Precision = None + single_execl_throughput = None + single_file_copy_1024 = None + single_file_copy_256 = None + single_file_copy_4096 = None + single_pipe_throughput = None + single_pipe_based = None + single_process_creation = None + single_shell_scripts_1 = None + single_shell_scripts_8 = None + single_system_call_overhead = None + single_index_score = None + multi_Dhrystone = None + multi_Double_Precision = None + multi_execl_throughput = None + multi_file_copy_1024 = None + multi_file_copy_256 = None + multi_file_copy_4096 = None + multi_pipe_throughput = None + multi_pipe_based = None + multi_process_creation = None + multi_shell_scripts_1 = None + multi_shell_scripts_8 = None + multi_system_call_overhead = None + multi_index_score = None + if not groups or len(groups) == 1: if not groups: # 基准数据和对比数据的全部数据 diff --git a/templates/front-project/src/api/api.js b/templates/front-project/src/api/api.js index 547e854e0d8eba65d840fd9ff80c0c4b2363cec5..aa5e1fb35b94615722226629f17f1ad3f4480fd5 100644 --- a/templates/front-project/src/api/api.js +++ b/templates/front-project/src/api/api.js @@ -26,14 +26,32 @@ export function project(type, data) { }) } +// project 合并数据接口 +export function mergeData(data) { + return service({ + method: 'post', + url: '/merge_data/', + data + }) +} + // 筛选字段接口 -export function get_filter_name() { +export function getFilterName() { return service({ method: 'get', url: '/get_filter_name/', }) } +// env +export function env(params) { + return service({ + method: 'get', + url: '/env/', + params + }) +} + // stream export function stream(params) { return service({ diff --git a/templates/front-project/src/components/ComparData.vue b/templates/front-project/src/components/ComparData.vue index 031295b477a9250f62b27eb5163085a447b8aa4a..8ff4f0d03591bb386d965d4db7eea70d44014c38 100644 --- a/templates/front-project/src/components/ComparData.vue +++ b/templates/front-project/src/components/ComparData.vue @@ -1,6 +1,6 @@