package schedframe.scheduling; import eduni.simjava.Sim_event; import eduni.simjava.Sim_type_p; import gridsim.GridSimTags; import gridsim.IO_data; import gridsim.dcworms.DCWormsTags; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Properties; import schedframe.exceptions.ResourceException; import schedframe.resources.ResourceStatus; import schedframe.resources.ResourceType; import schedframe.resources.computing.ComputingResource; import schedframe.resources.providers.ResourceProvider; import schedframe.resources.units.ResourceUnit; import schedframe.resources.units.ResourceUnitName; import schedframe.scheduling.manager.resources.ResourceManager; import schedframe.scheduling.plugin.ModuleType; import schedframe.scheduling.plugin.grid.ResourceDiscovery; import schedframe.scheduling.tasks.requirements.AbstractResourceRequirements; public class GridResourceDiscovery implements ResourceManager, ResourceDiscovery { protected Scheduler gridBroker; public GridResourceDiscovery(Scheduler broker){ this.gridBroker = broker; } public List getAdministrationDomains(SecurityContext secContext) { throw new RuntimeException("Not implemented."); } public List getProviders(SecurityContext secContext) { throw new RuntimeException("Not implemented."); } public List getProviders(String admDomain, SecurityContext secContext) { throw new RuntimeException("Not implemented."); } public List getProviders( AbstractResourceRequirements reqDesc, SecurityContext secContext) { throw new RuntimeException("Not implemented."); } public List getResources( AbstractResourceRequirements reqDesc, SecurityContext secContext) { throw new RuntimeException("Not implemented."); } public List getResources(SecurityContext secContext) { List resourceList = gridBroker.getChildren(); for(int i = 0; i < resourceList.size(); i++){ int resourceId = resourceList.get(i).get_id(); gridBroker.send(resourceId, GridSimTags.SCHEDULE_NOW, DCWormsTags.QUERY_RESOURCE_DESC, null); } //filter only the query response messages Sim_type_p pred = new Sim_type_p(DCWormsTags.QUERY_RESOURCE_DESC_RESULT); Sim_event ev = new Sim_event(); List result = new ArrayList(resourceList.size()); for (int i = 0; i < resourceList.size(); ++i) { gridBroker.sim_get_next(pred , ev); IO_data ioData = (IO_data) ev.get_data(); SchedulerDescription resDesc = (SchedulerDescription) ioData.getData(); result.add(resDesc); } return result; } public List getResources() { for(int i = 0; i < gridBroker.getChildren().size(); i++){ int resourceId = gridBroker.getChildren().get(i).get_id(); gridBroker.send(resourceId, GridSimTags.SCHEDULE_NOW, DCWormsTags.QUERY_RESOURCE_DESC, null); } //filter only the query response messages Sim_type_p pred = new Sim_type_p(DCWormsTags.QUERY_RESOURCE_DESC_RESULT); Sim_event ev = new Sim_event(); List result = new ArrayList(gridBroker.getChildren().size()); for (int i = 0; i < gridBroker.getChildren().size(); ++i) { gridBroker.sim_get_next(pred , ev); IO_data ioData = (IO_data) ev.get_data(); SchedulerDescription resDesc = (SchedulerDescription) ioData.getData(); result.add(resDesc); } return result; } public List getSchedulers() { return gridBroker.getChildren(); } @Override public boolean areResourcesAchievable(ResourceType type) { throw new UnsupportedOperationException("Not available at Grid level. Please use getResources() method instead to explore available resource providers"); } @Override public List getResourcesOfType(ResourceType type){ throw new UnsupportedOperationException("Not available at Grid level. Please use getResources() method instead to explore available resource providers"); } @Override public ComputingResource getResourceByName(String resourceName) { throw new UnsupportedOperationException("Not available at Grid level. Please use getResources() method instead to explore available resource providers"); } @Override public List getResourcesByTypeWithStatus(ResourceType type, ResourceStatus status) { throw new UnsupportedOperationException("Not available at Grid level. Please use getResources() method instead to explore available resource providers"); } /*@Override public ResourceCharacteristics getResourceCharacteristic() { throw new UnsupportedOperationException("Not available at Grid level. Please use getResources() method instead to explore available resource providers"); }*/ @Override public Map> getSharedResourceUnits() { throw new UnsupportedOperationException("Not available at Grid level. Please use getResources() method instead to explore available resource providers"); } @Override public List getDistributedResourceUnits(ResourceUnitName unitName) { throw new UnsupportedOperationException("Not available at Grid level. Please use getResources() method instead to explore available resource providers"); } @Override public List filterResources(Properties properties) { throw new UnsupportedOperationException("Not available at Grid level. Please use getResources() method instead to explore available resource providers"); } @Override public String getSchedulerName(String resourceName) { throw new UnsupportedOperationException("Not available at Grid level. Please use getResources() method instead to explore available resource providers"); } public void dispose() { } public ModuleType getType() { return ModuleType.RESOURCE_DISCOVERY; } public void init(Properties properties) { } }