private String getStaticValueOfAssignedSetting( RequestedFederationScenario scenario, ResourceRequest resReq, ResourceSettingInstance assignedSetting) { if ((assignedSetting.getStaticValue() != null) && assignedSetting.getAssignSetting().size() == 0) // if there is available only the static value return assignedSetting .getStaticValue(); // we currently search only for the next assigned resource else if ((resReq.getRuntimeInfo() != null) && (resReq.getRuntimeInfo().getStatus() == RuntimeElementStatus.ONLINE)) { // ask resource proxy, if it is possible to update its values and then return the value! String officeName = ((Office) resReq.getRefOfferedResource().getImplOfferedService().eContainer()).getName(); for (IProvisionResource p : Activator.getDefault().getProvisionPlugins()) { if (p.supportsOffice(officeName)) { String val = p.readResource(officeName, scenario, resReq, assignedSetting, true); assignedSetting.setStaticValue(val); return val; } } } // else { //else dig further to the next setting // for (SettingInstance s : assignedSetting.getAssignSetting() ) { // return getStaticValueOfAssignedSetting(s); // } // } return null; }
private IStatus runProvisionJob(IProgressMonitor monitor) { RuntimeElement rtInfo = resourceReq.getRuntimeInfo(); broadcastResourceStatus(RuntimeElementStatus.OFFLINE); Random r1 = new Random(); ScenarioSolver solver = new ScenarioSolver(); if (!solver.resourceRequestHasAllAssignementsResolved( scenario, resourceReq)) { // r1.nextInt(20)>5 ){//ResourceSettingsAreNotOK ){ broadcastResourceStatus(RuntimeElementStatus.WAITING); Random r = new Random(); this.schedule(1000 * r.nextInt(60) + 1000); // reschedule the job in 60random seconds System.out.println("RESCHEDULED : " + resourceReq.getName()); return Status.OK_STATUS; } monitor.beginTask("Provisioning " + resourceReq.getName(), 1); if (monitor.isCanceled()) { parentJob.NotifyResJobFinished(this); System.out.println("ProvisionResourceJob, Cancel provisioning : " + resourceReq.getName()); broadcastResourceStatus(RuntimeElementStatus.UNKNOWN); return Status.CANCEL_STATUS; } String guid = ""; String officeName = ((Office) resourceReq.getRefOfferedResource().getImplOfferedService().eContainer()) .getName(); for (IProvisionResource p : Activator.getDefault().getProvisionPlugins()) { if (p.supportsOffice(officeName)) { broadcastResourceStatus(RuntimeElementStatus.STARTING); guid = p.provisionResource(officeName, scenario, resourceReq); rtInfo.setGUID(guid); } } // try { // Random r = new Random(); // Thread.sleep(1000 * r.nextInt(10) ); // guid="temp"; // rtInfo.setGUID(guid+"."+resourceReq.getName()); // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } if ("".equals(guid)) broadcastResourceStatus(RuntimeElementStatus.ERROR); else broadcastResourceStatus(RuntimeElementStatus.ONLINE); monitor.worked(1); monitor.done(); parentJob.NotifyResJobFinished(this); return Status.OK_STATUS; }
public boolean resourceRequestHasAllAssignementsResolved( RequestedFederationScenario scenario, ResourceRequest resReq) { for (ResourceSettingInstance s : resReq.getReqResourceSettings()) { if (s.getAssignSetting().size() > 0) { String value = null; for (SettingInstance assignedSetting : s.getAssignSetting()) { ResourceRequest assignedResource = (ResourceRequest) ((ResourceSettingInstance) assignedSetting).eContainer(); value = getStaticValueOfAssignedSetting( scenario, assignedResource, (ResourceSettingInstance) assignedSetting); if ((value == null)) { System.out.println( "Setting:" + s.getName() + " of resource " + resReq.getName() + " has assigned value to:" + assignedSetting.getName() + " which cannot be resolved yet!"); return false; // exit immediately. We currently cannot resolve this } value = value + ","; } value = value.substring(0, value.length() - 1); // to cut the last comma s.setStaticValue(value); s.getAssignSetting().clear(); // if came here then it is ok and everything assigned } } // check now if everything is OK to go for (ResourceSettingInstance s : resReq.getReqResourceSettings()) { if (s.getRefResourceSetting().isWritable()) if ((s.getStaticValue() == null) || (s.getAssignSetting().size() > 0)) { System.out.println( "Setting:" + s.getName() + " of resource " + resReq.getName() + " cannot be resolved yet!"); return false; } } return true; // everything is resolved..so go }
private IStatus runShutDownResourceJob(IProgressMonitor monitor) { RuntimeElement rtInfo = resourceReq.getRuntimeInfo(); monitor.beginTask("Shutting down " + resourceReq.getName(), 1); if (monitor.isCanceled()) { parentJob.NotifyResJobFinished(this); System.out.println("ProvisionResourceJob, Cancel provisioning : " + resourceReq.getName()); broadcastResourceStatus(RuntimeElementStatus.UNKNOWN); ; return Status.CANCEL_STATUS; } String guid = ""; String officeName = ((Office) resourceReq.getRefOfferedResource().getImplOfferedService().eContainer()) .getName(); for (IProvisionResource p : Activator.getDefault().getProvisionPlugins()) { if (p.supportsOffice(officeName)) { if ((rtInfo.getStatus() != RuntimeElementStatus.NOT_EXISTS)) { try { Random r = new Random(); Thread.sleep(1000 * r.nextInt(60)); // sleep randomly..shutdown to avoid collisions. } catch (InterruptedException e) { e.printStackTrace(); } guid = p.deleteResource(officeName, scenario, resourceReq); } rtInfo.setGUID(guid); } } broadcastResourceStatus(RuntimeElementStatus.NOT_EXISTS); monitor.worked(1); monitor.done(); System.out.println("ProvisionResourceJob, OK Provisioning : " + resourceReq.getName()); parentJob.NotifyResJobFinished(this); return Status.OK_STATUS; }
/** * It will create a new scenario based on the given one, if the given one is not already saved. * The returned scenario will have some (or all if possible) assignments on resource settings * resolved. The method calls internally {@link #resolveAssignments(RequestedFederationScenario)} * * @param The requested scenario * @return a new scenario based on the requested, with resolved dependencies (if possible at first * pass) */ public RequestedFederationScenario prepareScenarioRequest(RequestedFederationScenario scenario) { RequestedFederationScenario newScenario; if (scenario.getRuntimeInfo() == null) { newScenario = FederationscenariosFactory.eINSTANCE.createRequestedFederationScenario(); newScenario = (RequestedFederationScenario) EcoreUtil.copy(scenario); RuntimeElement rtinfo = ExperimentRuntimeFactory.eINSTANCE.createRuntimeElement(); rtinfo.setDescription( "Scenario is based on request by:" + scenario.eResource().getURI().path()); newScenario.setRuntimeInfo(rtinfo); for (ResourceRequest resReq : newScenario.getInfrastructureRequest().getReqOfferedResources()) { RuntimeElement rtInfo = ExperimentRuntimeFactory.eINSTANCE.createRuntimeElement(); resReq.setRuntimeInfo(rtInfo); rtInfo.setStatus(RuntimeElementStatus.NOT_EXISTS); } } else { newScenario = scenario; } resolveAssignments(newScenario); return newScenario; }
@Override public boolean belongsTo(Object family) { return resourceReq.eContainer().equals(family); }
private void broadcastResourceStatus(RuntimeElementStatus status) { resourceReq.getRuntimeInfo().setStatus(status); ProvisioningJobBroadcaster.getInstance().eventOccuredOnResource(resourceReq); }
@Override public Object execute(ExecutionEvent event) throws ExecutionException { ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getSelection(); if (selection != null & selection instanceof IStructuredSelection) { IStructuredSelection strucSelection = (IStructuredSelection) selection; for (Object obj : strucSelection.toArray()) { System.out.println("Object =" + obj.toString()); if (obj instanceof ui_TaxonomyTreeItem) { if ((((ui_TaxonomyTreeItem) obj).getOfficeElement() instanceof RequestedFederationScenario)) { // http://nam.ece.upatras.gr/fstoolkit/utils/resourcesmap.php?x[0]=38.288291,21.788884 String req = ""; RequestedFederationScenario scenario = (RequestedFederationScenario) ((ui_TaxonomyTreeItem) obj).getOfficeElement(); ArrayList<myMarker> sitelist = new ArrayList<myMarker>(); for (ResourceRequest resReq : scenario.getInfrastructureRequest().getReqOfferedResources()) { if (resReq.getRefOfferedResource() != null) { System.out.println( "resReq.getRefOfferedResource() = " + resReq.getRefOfferedResource().getName()); Site site = (Site) resReq.getRefOfferedResource().eContainer(); if ((site != null) && (!sitelist.contains(site))) { myMarker mymarker = null; for (myMarker m : sitelist) { if (m.site.equals(site)) mymarker = m; } if (mymarker == null) { mymarker = new myMarker(); mymarker.site = site; mymarker.descriptions = ""; sitelist.add(mymarker); } mymarker.descriptions += resReq.getName() + " : <i>" + resReq.getRefOfferedResource().getName() + "</i></br>"; } } } int i = 0; for (myMarker mymarker : sitelist) { if (mymarker.site.getLocatedAt() != null) { ResourcesProvider r = (ResourcesProvider) mymarker.site.eContainer(); req = req + "x[" + i + "]=" + mymarker.site.getLocatedAt().getGeocoords() + "&"; req = req + "c[" + i + "]=<b>" + r.getName() + "</b><br>" + "<small>" + mymarker.descriptions + "</small>" + "&"; } i++; } req = req.substring(0, req.length() - 1); req = "http://nam.ece.upatras.gr/fstoolkit/utils/resourcesmap.php?" + req; System.out.println("req = " + req); IWorkbenchBrowserSupport support = PlatformUI.getWorkbench().getBrowserSupport(); IWebBrowser browser; try { browser = support.createBrowser( IWorkbenchBrowserSupport.AS_VIEW, ((ui_TaxonomyTreeItem) obj).getOfficeElement().getName() + ".webbrowser.fstoolkit", "Map for " + ((ui_TaxonomyTreeItem) obj).getOfficeElement().getName(), "A world map for " + ((ui_TaxonomyTreeItem) obj).getOfficeElement().getName()); browser.openURL(new URL(req)); } catch (PartInitException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } } } } } return null; }
String text(ResourceRequest sr) { // return "Request "+ sr.getNumOfServices()+", "+sr.getName(); return sr.getName() + " of " + sr.getRefOfferedResource().getName(); }