function validateFailureCriteria()

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 : ""};
}