in src/Utils/YamlValidationUtil.ts [169:230]
function validateFailureCriteria(failureCriteria: any) : ValidationModel {
if(!Array.isArray(failureCriteria)) {
if(!isDictionary(failureCriteria)){
return {valid : false, error : `The value "${failureCriteria?.toString()}" for failureCriteria is invalid. Provide a valid dictionary with keys as ${ValidCriteriaTypes.clientMetrics} and ${ValidCriteriaTypes.serverMetrics}.`};
}
let keys = Object.keys(failureCriteria);
for(let i = 0; i < keys.length; i++){
let key = keys[i];
if(!isValidFailureCriteriaType(key)){
return {valid : false, error : `The value "${key}" for failureCriteria is invalid. Provide a valid dictionary with keys as ${ValidCriteriaTypes.clientMetrics} and ${ValidCriteriaTypes.serverMetrics}.`};
}
if(!Array.isArray(failureCriteria[key])){
return {valid : false, error : `The value "${failureCriteria[key]?.toString()}" for ${key} in failureCriteria is invalid. Provide a valid list of criteria.`};
}
}
if(failureCriteria[ValidCriteriaTypes.serverMetrics]){
let serverMetrics = failureCriteria[ValidCriteriaTypes.serverMetrics];
for(let i = 0; i < serverMetrics.length; i++){
let serverMetric = serverMetrics[i];
if(!isDictionary(serverMetric)){
return {valid : false, error : `The value "${serverMetric?.toString()}" for ${ValidCriteriaTypes.serverMetrics} in failureCriteria is invalid. Provide a valid dictionary with metricName, aggregation, condition, value and optionally metricNamespace.`};
}
if(isInvalidString(serverMetric.resourceId)){
return {valid : false, error : `The value "${serverMetric.resourceId?.toString()}" for resourceId in ${ValidCriteriaTypes.serverMetrics} in failureCriteria is invalid. Provide a valid string.`};
}
if(isInvalidString(serverMetric.metricNameSpace, true)){
return {valid : false, error : `The value "${serverMetric.metricNameSpace?.toString()}" for metricNameSpace in ${ValidCriteriaTypes.serverMetrics} in failureCriteria is invalid. Provide a valid string.`};
}
if(isInvalidString(serverMetric.metricName)){
return {valid : false, error : `The value "${serverMetric.metricName?.toString()}" for metricName in ${ValidCriteriaTypes.serverMetrics} in failureCriteria is invalid. Provide a valid string.`};
}
if(isInvalidString(serverMetric.aggregation)){
return {valid : false, error : `The value "${serverMetric.aggregation?.toString()}" for aggregation in ${ValidCriteriaTypes.serverMetrics} in failureCriteria is invalid. Provide a valid string.`};
}
if(isInvalidString(serverMetric.condition)){
return {valid : false, error : `The value "${serverMetric.condition?.toString()}" for condition in ${ValidCriteriaTypes.serverMetrics} in failureCriteria is invalid. Provide a valid condition from "${ValidConditionsEnumValuesList.GreaterThan}", "${ValidConditionsEnumValuesList.LessThan}".`};
}
if(isNullOrUndefined(serverMetric.value) || typeof serverMetric.value != 'number' || isNaN(serverMetric.value)){
return {valid : false, error : `The value "${serverMetric.value?.toString()}" for value in ${ValidCriteriaTypes.serverMetrics} in failureCriteria is invalid. Provide a valid number.`};
}
if(!isValidConditionEnumString(serverMetric.condition)){
return {valid : false, error : `The value "${serverMetric.condition?.toString()}" for condition in ${ValidCriteriaTypes.serverMetrics} in failureCriteria is invalid. Provide a valid condition from "${ValidConditionsEnumValuesList.GreaterThan}", "${ValidConditionsEnumValuesList.LessThan}".`};
}
}
}
if(failureCriteria[ValidCriteriaTypes.clientMetrics]) {
let clientMetrics = failureCriteria[ValidCriteriaTypes.clientMetrics];
for(let clientMetric of clientMetrics){
if(!isDictionary(clientMetric) && typeof clientMetric != 'string'){
return {valid : false, error : `The value "${clientMetric?.toString()}" for ${ValidCriteriaTypes.clientMetrics} in failureCriteria is invalid. Provide a valid criteria.`};
}
}
}
} else {
for(let criteria of failureCriteria){
if(!isDictionary(criteria) && typeof criteria != 'string'){
return {valid : false, error : `The value "${criteria?.toString()}" for failureCriteria is invalid. Provide a valid criteria.`};
}
}
}
return {valid : true, error : ""};
}