blob: 753c166d32667e60788d71bab463c67cccde09ed [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export function fixedZero(val) {
return val * 1 < 10 ? `0${val}` : val;
}
export function avgTimeSeries(list) {
const filteredList = list.filter(_ => _ > 0);
return filteredList.length > 0 ?
parseFloat((filteredList.reduce(
(acc, curr) => acc + curr) / filteredList.length).toFixed(2)) : 0;
}
export function avgTS(list) {
const filteredList = list.map(_ => _.value).filter(_ => _ > 0);
return filteredList.length > 0 ?
parseFloat((filteredList.reduce(
(acc, curr) => acc + curr) / filteredList.length).toFixed(2)) : 0;
}
export function getPlainNode(nodeList, parentPath = '') {
const arr = [];
nodeList.forEach((node) => {
const item = node;
item.path = `${parentPath}/${item.path || ''}`.replace(/\/+/g, '/');
item.exact = true;
if (item.children && !item.component) {
arr.push(...getPlainNode(item.children, item.path));
} else {
if (item.children && item.component) {
item.exact = false;
}
arr.push(item);
}
});
return arr;
}
function getRelation(str1, str2) {
if (str1 === str2) {
console.warn('Two path are equal!'); // eslint-disable-line
}
const arr1 = str1.split('/');
const arr2 = str2.split('/');
if (arr2.every((item, index) => item === arr1[index])) {
return 1;
} else if (arr1.every((item, index) => item === arr2[index])) {
return 2;
}
return 3;
}
function getRenderArr(routes) {
let renderArr = [];
renderArr.push(routes[0]);
for (let i = 1; i < routes.length; i += 1) {
let isAdd = false;
isAdd = renderArr.every(item => getRelation(item, routes[i]) === 3);
renderArr = renderArr.filter(item => getRelation(item, routes[i]) !== 1);
if (isAdd) {
renderArr.push(routes[i]);
}
}
return renderArr;
}
/**
* Get router routing configuration
* { path:{name,...param}}=>Array<{name,path ...param}>
* @param {string} path
* @param {routerData} routerData
*/
export function getRoutes(path, routerData) {
let routes = Object.keys(routerData).filter(routePath =>
routePath.indexOf(path) === 0 && routePath !== path);
// Replace path to '' eg. path='user' /user/name => name
routes = routes.map(item => item.replace(path, ''));
// Get the route to be rendered to remove the deep rendering
const renderArr = getRenderArr(routes);
// Conversion and stitching parameters
const renderRoutes = renderArr.map((item) => {
const exact = !routes.some(route => route !== item && getRelation(route, item) === 1);
return {
...routerData[`${path}${item}`],
key: `${path}${item}`,
path: `${path}${item}`,
exact,
};
});
return renderRoutes;
}
/* eslint no-useless-escape:0 */
const reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g;
export function isUrl(path) {
return reg.test(path);
}
export function getServiceInstanceId(serviceInstanceInfo) {
const { attributes } = serviceInstanceInfo;
if (!attributes || attributes.length < 1) {
return '';
}
let host = getAttributes(attributes, 'host');
const ipv4 = getAttributes(attributes, 'ipv4');
if (ipv4 && ipv4.length > 0) {
[host] = ipv4;
}
return `${getAttributes(attributes, 'pid')}@${host}`;
}
export function getAttributes(attributes, name) {
if (!attributes || attributes.length < 1) {
return '';
}
const a = attributes.find(_ => _.name === name);
return a ? a.value : '';
}
export function redirect(history, pathname, param) {
if (history.location && history.location.pathname === pathname) {
return;
}
history.push({ pathname, state: param });
}