You can optimise this workflow by removing the following lines:
/*
* Get id for "inventory"
*/
entitySetName = 'FilterSpecGroups';
filter = "FilterSpecGroupName eq 'inventory'";
entities = vCACEntityManager.readModelEntitiesBySystemQuery(vcachost.id, modelName, entitySetName, filter, null, null,null, null, null);
var filterSpecGroupId = entities[0].getProperty("FilterSpecGroupID");
/*
* Get filterspec for "vSphere" and "inventory"
*/
entitySetName = 'FilterSpecs';
filter = "FilterSpecName eq 'vSphere'";
entities = vCACEntityManager.readModelEntitiesBySystemQuery(vcachost.id, modelName, entitySetName, filter, null, null,null, null, null);
for( i = 0;i < entities.length; i++){
if( entities[i].getLink(vcachost,"FilterSpecGroup")[0].getProperty("FilterSpecGroupID") == filterSpecGroupId){
var filterSpecID = entities[i].getProperty("FilterSpecID");
break;
}
}
/*
* Filter DataCollectionStatuses for the cluster, "vspehere" and "inventory"
* This should filter datastatuses to number of agents installed
*/
entitySetName = 'DataCollectionStatuses';
filter = null// Well filter does ot work here "EntityID eq '"+hostId+"'";
entities = vCACEntityManager.readModelEntitiesBySystemQuery(vcachost.id, modelName, entitySetName, filter, null, null,null, null, null);
and replacing them with this reduces your queries down from 3 to 1...
var strFilter = "FilterSpec/FilterSpecGroup/FilterSpecGroupName eq 'inventory' and FilterSpec/FilterSpecName eq 'vSphere'";
var arrVCACEntity = vCACEntityManager.readModelEntitiesBySystemQuery(objVCACHost.id, "ManagementModelEntities.svc", "DataCollectionStatuses", strFilter, null, null,null, null, null);