public static <M extends VMTRootObject> void setUsedForPod( @Nonnull Class<M> cls, EReference classCommRef, EReference pod2EntityRef, EReference entityCommRef) { @SuppressWarnings("unchecked") Iterable<ServiceEntity> ses = (Iterable<ServiceEntity>) rg.getInstances(cls); for (ServiceEntity se : ses) { if (se.isIsTemplate() || se.getParticipatesIn() == null || !se.getParticipatesIn().isMainMarket()) continue; float cpuUsed = 0f, memUsed = 0f, stAmount = 0f, flow1Used = 0f, flow2Used = 0f; for (VMTRootObject vmtObj : se.getRef(pod2EntityRef, AnalysisPackage.eINSTANCE.getServiceEntity())) { for (VMTRootObject commObj : vmtObj.getRef(entityCommRef, AnalysisPackage.eINSTANCE.getCommodity())) { Commodity comm = (Commodity) commObj; if (comm instanceof CPU) cpuUsed += comm.getUsed(); else if (comm instanceof Mem) memUsed += comm.getUsed(); else if (comm instanceof StorageAmount) stAmount += comm.getUsed(); else if (comm instanceof Flow) { if (comm.getKey().contains(PodUtil.FLOW_KEYS[1])) flow1Used += comm.getUsed(); else if (comm.getKey().contains(PodUtil.FLOW_KEYS[2])) flow2Used += comm.getUsed(); } } } CPUAllocation cpuAllocation = (CPUAllocation) se.getRef(classCommRef, AbstractionPackage.eINSTANCE.getCPUAllocation()).get(0); MemAllocation memAllocation = (MemAllocation) se.getRef(classCommRef, AbstractionPackage.eINSTANCE.getMemAllocation()).get(0); List<VMTRootObject> flowAllocation = se.getRef(classCommRef, AbstractionPackage.eINSTANCE.getFlowAllocation()); cpuAllocation.setUsed(cpuUsed); memAllocation.setUsed(memUsed); if (se.getRef(classCommRef, AbstractionPackage.eINSTANCE.getStorageAllocation()).size() > 0) { StorageAllocation stAllocation = (StorageAllocation) se.getRef(classCommRef, AbstractionPackage.eINSTANCE.getStorageAllocation()).get(0); stAllocation.setUsed(stAmount); } for (VMTRootObject flowAllocObj : flowAllocation) { Commodity flowComm = (Commodity) flowAllocObj; if (flowComm.getKey().contains(PodUtil.FLOW_KEYS[1])) flowComm.setUsed(flow1Used); else if (flowComm.getKey().contains(PodUtil.FLOW_KEYS[2])) flowComm.setUsed(flow2Used); } } }
private static void setUsedForDpodCommBought() { for (DPod se : rg.getInstances(DPod.class)) { if (se.isIsTemplate() || se.getParticipatesIn() == null || !se.getParticipatesIn().isMainMarket()) continue; float used = 0; for (Commodity comm : se.getCommoditiesBought()) { if (!comm.getConsumes().isEmpty()) { Commodity commSoldByProvider = comm.getConsumes().get(0); ServiceEntity provider = commSoldByProvider.getSoldBy(); for (VMTRootObject vmtObj : provider.getRef( getRelatedEntitiesRef(provider), AnalysisPackage.eINSTANCE.getServiceEntity())) { if (vmtObj instanceof VirtualMachine) { VirtualMachine vm = (VirtualMachine) vmtObj; float entityCommmodityUsed = 0; for (Commodity entityCommodity : vm.getCommoditiesBought()) { if (entityCommodity.eClass() == commAllocation2CommMap.get(comm.eClass())) { if (entityCommodity.getKey() != null && !comm.getKey().contains(entityCommodity.getKey())) continue; entityCommmodityUsed = entityCommodity.getUsed(); break; } } used += entityCommmodityUsed; } } comm.setUsed(used); used = 0; } else { logger.warn("The commodity " + comm.getDisplayName() + " is not consuming anything"); } } } }