infrastructure-tests/src/test/java/org/gcube/phd/ContextStatistic.java

89 lines
3.0 KiB
Java

package org.gcube.phd;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
import org.gcube.common.resources.gcore.GCoreEndpoint;
import org.gcube.common.resources.gcore.GenericResource;
import org.gcube.common.resources.gcore.HostingNode;
import org.gcube.common.resources.gcore.Resource;
import org.gcube.common.resources.gcore.ServiceEndpoint;
import org.gcube.common.resources.gcore.Software;
import org.gcube.common.scope.impl.ScopeBean;
import org.gcube.resources.discovery.client.api.DiscoveryClient;
import org.gcube.resources.discovery.client.queries.api.SimpleQuery;
import org.gcube.resources.discovery.icclient.ICFactory;
public class ContextStatistic {
private ScopeBean scopeBean;
public ScopeBean getScopeBean() {
return scopeBean;
}
private Map<Class<? extends Resource>,Set<ResourceInfo<? extends Resource>>> resourceMap;
private Map<Class<? extends Resource>,SummaryStatistics> statisticsMap;
public ContextStatistic(ScopeBean scopeBean) {
this.scopeBean = scopeBean;
}
public <R extends Resource> void analizeInstances(Class<R> clz) throws Exception {
Set<ResourceInfo<? extends Resource>> resources = resourceMap.get(clz);
DiscoveryClient<R> client = ICFactory.clientFor(clz);
SimpleQuery query = ICFactory.queryFor(clz);
List<R> instances = client.submit(query);
for(R r : instances) {
ResourceInfo<R> resourceInfo = new ResourceInfo<R>(r);
resources.add(resourceInfo);
}
}
public Map<Class<? extends Resource>,Set<ResourceInfo<? extends Resource>>> getAllResources() throws Exception {
if(resourceMap == null) {
resourceMap = new HashMap<>();
List<Class<? extends Resource>> classes = new ArrayList<>();
classes.add(GCoreEndpoint.class);
classes.add(HostingNode.class);
classes.add(ServiceEndpoint.class);
classes.add(GenericResource.class);
classes.add(Software.class);
for(Class<? extends Resource> clz : classes) {
analizeInstances(clz);
}
}
return resourceMap;
}
public static Map<Class<? extends Resource>,SummaryStatistics> generateStatistics(
Map<Class<? extends Resource>,Set<ResourceInfo<? extends Resource>>> resourceMap)
throws UnsupportedEncodingException {
Map<Class<? extends Resource>,SummaryStatistics> statisticsMap = new HashMap<>();
for(Class<? extends Resource> clz : resourceMap.keySet()) {
SummaryStatistics summaryStatistics = new SummaryStatistics();
Set<ResourceInfo<? extends Resource>> resources = resourceMap.get(clz);
for(ResourceInfo<? extends Resource> resourceInfo : resources) {
summaryStatistics.addValue(resourceInfo.getSize());
}
}
return statisticsMap;
}
public Map<Class<? extends Resource>,SummaryStatistics> getStatistcs() throws Exception {
if(statisticsMap == null) {
getAllResources();
statisticsMap = generateStatistics(resourceMap);
}
return statisticsMap;
}
}