* -------------------------------------------------------------------------
* This file is part of the MindStudio project.
* Copyright (c) 2025 Huawei Technologies Co.,Ltd.
*
* MindStudio is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------
*/
import {
GetAICoreParams,
GetAICoreParamsResult,
GetOverallMetricsMoreListParams,
GetOverallMetricsMoreListResult,
GetOverallMetricsParams,
GetOverallMetricsResult,
GetOverallMetricsResultItem,
GetMemcpyOverallResult,
GetMemcpyOverallResultItem,
ParseCardsParam,
SetCardAliasParams,
QueryOperatorDispatchParams,
OperatorDispatchResult,
QueryAllSameOperatorsDurationResult,
QueryAllSameOperatorsDurationParams,
QueryCommunicationKernelDetailParams,
QueryCommunicationKernelDetailResult,
CreateCurveParams, CreateCurveResult, GetUnitFlowsParams, GetUnitFlowsResult,
GetOverallMetricsMoreListResultItem,
GetMemcpyOverallMetricsMoreListResultItem,
QueryTimelineOffsetParams,
QueryTimelineOffsetResult,
} from './interface';
import connector from '../connection';
export const parseCards = async(param: ParseCardsParam): Promise<any> => {
return window.requestData('parse/cards', param, 'timeline');
};
export const getOverallMetrics = async (params: GetOverallMetricsParams): Promise<GetOverallMetricsResult> => {
const res = await window.requestData('systemView/overall', params, 'timeline', { silent: true });
const maxDepth = 10;
const addCatField = (data: GetOverallMetricsResultItem[], parentCat: string[] = [], depth = 1): void => {
if (depth > maxDepth) {
return;
}
data?.forEach(item => {
item.categoryList = [...parentCat, item.name];
if (item.children && item.children.length > 0) {
addCatField(item.children, item.categoryList, depth + 1);
}
});
};
if (res.data.length !== 0) {
addCatField(res.data);
return res;
}
return new Promise((resolve) => {
connector.addListener('OverallMetrics', async (e) => {
if (e?.data?.body?.data?.dbId !== params.dbPath) {
return;
}
const result = await window.requestData('systemView/overall', params, 'timeline', { silent: true });
addCatField(result.data);
resolve(result);
});
});
};
export const getOverallMetricsMoreList = async (params: GetOverallMetricsMoreListParams): Promise<
GetOverallMetricsMoreListResult<GetOverallMetricsMoreListResultItem>> => {
return window.requestData('systemView/overall/more/details', params, 'timeline');
};
export const getMemcpyOverallMetrics = async (params: GetOverallMetricsParams): Promise<GetMemcpyOverallResult> => {
const res = await window.requestData('memcpy/total/list', params, 'timeline', { silent: true });
const maxDepth = 10;
const addCatField = (data: GetMemcpyOverallResultItem[], parentCat: string[] = [], depth = 1): void => {
if (depth > maxDepth) {
return;
}
data?.forEach(item => {
item.categoryList = [...parentCat, item.key];
item.rowKey = item.categoryList.join('-');
if (item.children && item.children.length > 0) {
addCatField(item.children, item.categoryList, depth + 1);
}
});
};
if (res.data.length !== 0) {
addCatField(res.data);
}
return res;
};
export const getMemcpyOverallMetricsMoreList = async (params: GetOverallMetricsMoreListParams): Promise<
GetOverallMetricsMoreListResult<GetMemcpyOverallMetricsMoreListResultItem>> => {
return window.requestData('memcpy/detail/list', params, 'timeline');
};
export const setCardAliasReq = async (params: SetCardAliasParams): Promise<any> => {
return window.requestData('unit/setCardAlias', params, 'timeline');
};
export const queryExpertAnalysis = async (params: GetAICoreParams): Promise<GetAICoreParamsResult> => {
return window.requestData('expertAnalysis/AICoreFreq', params, 'timeline');
};
export const queryOperatorDispatch = async (params: QueryOperatorDispatchParams): Promise<OperatorDispatchResult> => {
return window.requestData('advisor/operatorDispatch', params, 'advisor');
};
export async function queryAllSameOperatorsDuration(params: QueryAllSameOperatorsDurationParams): Promise<QueryAllSameOperatorsDurationResult> {
return window.requestData('query/all/same/operators/duration', params, 'timeline');
}
export async function queryCommunicationKernelDetail(params: QueryCommunicationKernelDetailParams): Promise<QueryCommunicationKernelDetailResult> {
return window.requestData('unit/kernelDetail', params, 'timeline');
}
export async function createCurve(params: CreateCurveParams): Promise<CreateCurveResult> {
return window.requestData('create/curve', params, 'timeline');
}
export async function getUnitFlows(params: GetUnitFlowsParams): Promise<GetUnitFlowsResult> {
return window.requestData('unit/flows', params, 'timeline');
}
export async function queryTimelineOffset(params: QueryTimelineOffsetParams): Promise<QueryTimelineOffsetResult> {
return window.requestData('timeline/rankOffset', params, 'timeline');
}