@alauda-fe/common
Version:
Alauda frontend team common codes.
79 lines • 13.2 kB
JavaScript
import { get } from 'lodash-es';
import { take, map, combineLatest, startWith } from 'rxjs';
import { formatCPU, formatMemory, RESOURCE_REQUIREMENT_KEYS, } from '../../core/public-api';
export function setupErrorMapper(resource, translate) {
const defaultRequest = get(resource, 'spec.limits[0].defaultRequest');
const max = get(resource, 'spec.limits[0].max');
if (max && defaultRequest) {
return {
cpu_max: translate.get('cpu_should_not_greater_than', {
maxCPU: max.cpu.endsWith('m')
? max.cpu
: max.cpu + translate.get('unit_core'),
}),
memory_max: translate.get('memory_should_not_greater_than', {
maxMemory: max.memory,
}),
};
}
}
export const getResourceLimitValidatorFn = (type, limitRange, unit) => {
return control => limitResourceValidator(limitRange, control, type, unit);
};
export function getResourceLimitAsyncValidatorFn(type, limitRange$, unit) {
return control => limitRange$.pipe(map(resource => getResourceLimitValidatorFn(type, get(resource, ['spec', 'limits', 0]), unit)(control)), take(1));
}
function limitResourceValidator(limitRange, control, type, unit) {
if (!limitRange) {
return null;
}
const { max } = limitRange;
if (unit) {
return limitLessThanMax(max, { value: control.value, unit }, type)
? null
: { [`${type}_max`]: true };
}
return limitLessThanMax(max, control.value, type)
? null
: { [`${type}_max`]: true };
}
/**
* request值不能大于max值
* 如果max值为空,则一定通过
*/
function limitLessThanMax(max, request, type) {
return type === 'cpu'
? !max?.cpu ||
formatCPU(max?.cpu) >= formatCPU((request.value || 0) + request.unit)
: !max?.memory ||
formatMemory(max?.memory) >=
formatMemory((request.value || 0) + request.unit);
}
export const initGreaterValidator = (type, control) => {
const paths = [];
RESOURCE_REQUIREMENT_KEYS.forEach(key => {
['value', 'unit'].forEach(valueType => {
paths.push([key, type, valueType]);
});
});
return combineLatest(paths.map(path => {
const ctl = control.get(path);
return ctl.valueChanges.pipe(startWith(ctl.value));
})).subscribe(([_requestValue, unit, maxValue, maxUnit]) => {
if ((!_requestValue && _requestValue !== 0) ||
(!maxValue && maxValue !== 0)) {
return;
}
const res = getResourceLimitValidatorFn(type, {
max: {
[type]: maxValue ? maxValue + maxUnit : '',
},
}, unit)(control.get(['requests', type, 'value']));
const limitValueControl = control.get(['limits', type, 'value']);
if (!limitValueControl.errors ||
['cpu_max', 'memory_max'].includes(Object.keys(limitValueControl.errors)[0])) {
limitValueControl.setErrors(res);
}
});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbGltaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvZm9ybS92YWxpZGF0b3JzL3Jlc291cmNlLWxpbWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFjLElBQUksRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RSxPQUFPLEVBSUwsU0FBUyxFQUNULFlBQVksRUFFWix5QkFBeUIsR0FDMUIsTUFBTSx1QkFBdUIsQ0FBQztBQVUvQixNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFFBQW9CLEVBQ3BCLFNBQTJCO0lBRTNCLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsK0JBQStCLENBQUMsQ0FBQztJQUN0RSxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUc3QyxDQUFDO0lBQ0YsSUFBSSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDMUIsT0FBTztZQUNMLE9BQU8sRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLDZCQUE2QixFQUFFO2dCQUNwRCxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUMzQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUc7b0JBQ1QsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7YUFDekMsQ0FBQztZQUNGLFVBQVUsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxFQUFFO2dCQUMxRCxTQUFTLEVBQUUsR0FBRyxDQUFDLE1BQU07YUFDdEIsQ0FBQztTQUNILENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFN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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0YWtlLCBtYXAsIGNvbWJpbmVMYXRlc3QsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBMaW1pdFJhbmdlLFxuICBMaW1pdFJhbmdlSXRlbSxcbiAgU3RyaW5nTWFwLFxuICBmb3JtYXRDUFUsXG4gIGZvcm1hdE1lbW9yeSxcbiAgUkVTT1VSQ0VfTUFDX1RZUEVTLFxuICBSRVNPVVJDRV9SRVFVSVJFTUVOVF9LRVlTLFxufSBmcm9tICcuLi8uLi9jb3JlL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3RyYW5zbGF0ZS9wdWJsaWMtYXBpJztcblxuZXhwb3J0IHR5cGUgQXZhaWxhYmxlUmVzb3VyY2VUeXBlID0gKHR5cGVvZiBSRVNPVVJDRV9NQUNfVFlQRVMpW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDb250cm9sIHtcbiAgdmFsdWU6IHN0cmluZztcbiAgdW5pdDogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBFcnJvck1hcHBlcihcbiAgcmVzb3VyY2U6IExpbWl0UmFuZ2UsXG4gIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbikge1xuICBjb25zdCBkZWZhdWx0UmVxdWVzdCA9IGdldChyZXNvdXJjZSwgJ3NwZWMubGltaXRzWzBdLmRlZmF1bHRSZXF1ZXN0Jyk7XG4gIGNvbnN0IG1heCA9IGdldChyZXNvdXJjZSwgJ3NwZWMubGltaXRzWzBdLm1heCcpIGFzIHtcbiAgICBjcHU6IHN0cmluZztcbiAgICBtZW1vcnk6IHN0cmluZztcbiAgfTtcbiAgaWYgKG1heCAmJiBkZWZhdWx0UmVxdWVzdCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcHVfbWF4OiB0cmFuc2xhdGUuZ2V0KCdjcHVfc2hvdWxkX25vdF9ncmVhdGVyX3RoYW4nLCB7XG4gICAgICAgIG1heENQVTogbWF4LmNwdS5lbmRzV2l0aCgnbScpXG4gICAgICAgICAgPyBtYXguY3B1XG4gICAgICAgICAgOiBtYXguY3B1ICsgdHJhbnNsYXRlLmdldCgndW5pdF9jb3JlJyksXG4gICAgICB9KSxcbiAgICAgIG1lbW9yeV9tYXg6IHRyYW5zbGF0ZS5nZXQoJ21lbW9yeV9zaG91bGRfbm90X2dyZWF0ZXJfdGhhbicsIHtcbiAgICAgICAgbWF4TWVtb3J5OiBtYXgubWVtb3J5LFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UmVzb3VyY2VMaW1pdFZhbGlkYXRvckZuID0gKFxuICB0eXBlOiBBdmFpbGFibGVSZXNvdXJjZVR5cGUsXG4gIGxpbWl0UmFuZ2U6IE9taXQ8TGltaXRSYW5nZUl0ZW0sICd0eXBlJz4sXG4gIHVuaXQ/OiBzdHJpbmcsXG4pOiBWYWxpZGF0b3JGbiA9PiB7XG4gIHJldHVybiBjb250cm9sID0+IGxpbWl0UmVzb3VyY2VWYWxpZGF0b3IobGltaXRSYW5nZSwgY29udHJvbCwgdHlwZSwgdW5pdCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2VMaW1pdEFzeW5jVmFsaWRhdG9yRm4oXG4gIHR5cGU6IEF2YWlsYWJsZVJlc291cmNlVHlwZSxcbiAgbGltaXRSYW5nZSQ6IE9ic2VydmFibGU8TGltaXRSYW5nZT4sXG4gIHVuaXQ/OiBzdHJpbmcsXG4pOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIGNvbnRyb2wgPT5cbiAgICBsaW1pdFJhbmdlJC5waXBlKFxuICAgICAgbWFwKHJlc291cmNlID0+XG4gICAgICAgIGdldFJlc291cmNlTGltaXRWYWxpZGF0b3JGbihcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGdldChyZXNvdXJjZSwgWydzcGVjJywgJ2xpbWl0cycsIDBdKSxcbiAgICAgICAgICB1bml0LFxuICAgICAgICApKGNvbnRyb2wpLFxuICAgICAgKSxcbiAgICAgIHRha2UoMSksXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gbGltaXRSZXNvdXJjZVZhbGlkYXRvcihcbiAgbGltaXRSYW5nZTogT21pdDxMaW1pdFJhbmdlSXRlbSwgJ3R5cGUnPixcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICB0eXBlOiBBdmFpbGFibGVSZXNvdXJjZVR5cGUsXG4gIHVuaXQ/OiBzdHJpbmcsXG4pIHtcbiAgaWYgKCFsaW1pdFJhbmdlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgeyBtYXggfSA9IGxpbWl0UmFuZ2U7XG4gIGlmICh1bml0KSB7XG4gICAgcmV0dXJuIGxpbWl0TGVzc1RoYW5NYXgobWF4LCB7IHZhbHVlOiBjb250cm9sLnZhbHVlLCB1bml0IH0sIHR5cGUpXG4gICAgICA/IG51bGxcbiAgICAgIDogeyBbYCR7dHlwZX1fbWF4YF06IHRydWUgfTtcbiAgfVxuICByZXR1cm4gbGltaXRMZXNzVGhhbk1heChtYXgsIGNvbnRyb2wudmFsdWUsIHR5cGUpXG4gICAgPyBudWxsXG4gICAgOiB7IFtgJHt0eXBlfV9tYXhgXTogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIHJlcXVlc3TlgLzkuI3og73lpKfkuo5tYXjlgLxcbiAqIOWmguaenG1heOWAvOS4uuepuu+8jOWImeS4gOWumumAmui/h1xuICovXG5mdW5jdGlvbiBsaW1pdExlc3NUaGFuTWF4KFxuICBtYXg6IFN0cmluZ01hcCxcbiAgcmVxdWVzdDogUmVzb3VyY2VDb250cm9sLFxuICB0eXBlOiBBdmFpbGFibGVSZXNvdXJjZVR5cGUsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGUgPT09ICdjcHUnXG4gICAgPyAhbWF4Py5jcHUgfHxcbiAgICAgICAgZm9ybWF0Q1BVKG1heD8uY3B1KSA+PSBmb3JtYXRDUFUoKHJlcXVlc3QudmFsdWUgfHwgMCkgKyByZXF1ZXN0LnVuaXQpXG4gICAgOiAhbWF4Py5tZW1vcnkgfHxcbiAgICAgICAgZm9ybWF0TWVtb3J5KG1heD8ubWVtb3J5KSA+PVxuICAgICAgICAgIGZvcm1hdE1lbW9yeSgocmVxdWVzdC52YWx1ZSB8fCAwKSArIHJlcXVlc3QudW5pdCk7XG59XG5cbmV4cG9ydCBjb25zdCBpbml0R3JlYXRlclZhbGlkYXRvciA9IChcbiAgdHlwZTogQXZhaWxhYmxlUmVzb3VyY2VUeXBlLFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4pID0+IHtcbiAgY29uc3QgcGF0aHM6IHN0cmluZ1tdW10gPSBbXTtcbiAgUkVTT1VSQ0VfUkVRVUlSRU1FTlRfS0VZUy5mb3JFYWNoKGtleSA9PiB7XG4gICAgWyd2YWx1ZScsICd1bml0J10uZm9yRWFjaCh2YWx1ZVR5cGUgPT4ge1xuICAgICAgcGF0aHMucHVzaChba2V5LCB0eXBlLCB2YWx1ZVR5cGVdKTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBjb21iaW5lTGF0ZXN0KFxuICAgIHBhdGhzLm1hcChwYXRoID0+IHtcbiAgICAgIGNvbnN0IGN0bCA9IGNvbnRyb2wuZ2V0KHBhdGgpO1xuICAgICAgcmV0dXJuIGN0bC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgoY3RsLnZhbHVlKSk7XG4gICAgfSksXG4gICkuc3Vic2NyaWJlKChbX3JlcXVlc3RWYWx1ZSwgdW5pdCwgbWF4VmFsdWUsIG1heFVuaXRdKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKCFfcmVxdWVzdFZhbHVlICYmIF9yZXF1ZXN0VmFsdWUgIT09IDApIHx8XG4gICAgICAoIW1heFZhbHVlICYmIG1heFZhbHVlICE9PSAwKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXMgPSBnZXRSZXNvdXJjZUxpbWl0VmFsaWRhdG9yRm4oXG4gICAgICB0eXBlLFxuICAgICAge1xuICAgICAgICBtYXg6IHtcbiAgICAgICAgICBbdHlwZV06IG1heFZhbHVlID8gbWF4VmFsdWUgKyBtYXhVbml0IDogJycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdW5pdCxcbiAgICApKGNvbnRyb2wuZ2V0KFsncmVxdWVzdHMnLCB0eXBlLCAndmFsdWUnXSkpO1xuICAgIGNvbnN0IGxpbWl0VmFsdWVDb250cm9sID0gY29udHJvbC5nZXQoWydsaW1pdHMnLCB0eXBlLCAndmFsdWUnXSk7XG4gICAgaWYgKFxuICAgICAgIWxpbWl0VmFsdWVDb250cm9sLmVycm9ycyB8fFxuICAgICAgWydjcHVfbWF4JywgJ21lbW9yeV9tYXgnXS5pbmNsdWRlcyhcbiAgICAgICAgT2JqZWN0LmtleXMobGltaXRWYWx1ZUNvbnRyb2wuZXJyb3JzKVswXSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGxpbWl0VmFsdWVDb250cm9sLnNldEVycm9ycyhyZXMpO1xuICAgIH1cbiAgfSk7XG59O1xuIl19