frontend/app/validation.jsx (50 lines of code) (raw):
const mustHaveVolumes = [
"Multimedia2",
"Proxies2",
"StudioPipe2"
];
function validateMdcPing(mdcPing){
const visibleMdcList = mdcPing.filter(entry=>entry.visible);
if(visibleMdcList.length===0){
return "problem";
}
if(visibleMdcList.length!==mdcPing.length){
return "warning";
}
const highPacketCounts = mdcPing.filter(entry=>entry.packetloss>0);
if(highPacketCounts.length>0){
return "warning";
}
return "normal";
}
function validateRecord(record){
console.debug("validateRecord", record);
if(record.model!=="Mac Pro" && record.model!=="Mac Studio"){
return "unimportant";
}
if(record.ipAddresses.length<2){
console.log(record.hostName + " has no metadata network");
return "unimportant";
}
if(record.fcWWN.length<2){
console.log(record.hostName + " has insufficient fibre interfaces");
return "problem";
}
if(!record.mdcPing) return "warning";
const mdcStatus = validateMdcPing(record.mdcPing);
if(mdcStatus!=="normal") return mdcStatus;
const actualLunCount = record.fcLunCount.filter(entry=>entry>0);
if(actualLunCount[0]!==20){
console.log(record.hostName + " only has " + actualLunCount + " LUNs visible (expected 20)");
return "problem";
}
if(record.model=="Mac Studio") {
if (!record.denyDlcVolumes) return "warning";
if (record.denyDlcVolumes[0] != "false") return "warning";
}
const sanMountsNames = record.sanMounts.map(entry=>entry.name);
if(sanMountsNames.length<mustHaveVolumes.length) return "warning";
if(!record.sanMounts) return "warning";
return "normal";
}
export {validateRecord};