package org.ovirt.engine.ui.frontend.server.dashboard;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.ovirt.engine.ui.frontend.server.dashboard.dao.HostDwhDao;
import org.ovirt.engine.ui.frontend.server.dashboard.dao.StorageDomainDwhDao;
import org.ovirt.engine.ui.frontend.server.dashboard.dao.VmDwhDao;
import org.ovirt.engine.ui.frontend.server.dashboard.models.ResourceUsage;
import org.ovirt.engine.ui.frontend.server.dashboard.models.ResourcesTotal;
import org.ovirt.engine.ui.frontend.server.dashboard.models.VmStorage;
public class HourlySummaryHelper {
public static void getCpuMemSummary(GlobalUtilization utilization, DataSource dataSource)
throws DashboardDataException {
GlobalUtilizationResourceSummary cpuSummary = new GlobalUtilizationCpuSummary();
GlobalUtilizationResourceSummary memSummary = new GlobalUtilizationResourceSummary();
getTotalCpuMemCount(cpuSummary, memSummary, dataSource);
getHourlyCpuMemUsage(cpuSummary, memSummary, dataSource);
getVirtualCpuMemCount(cpuSummary, memSummary, dataSource);
UtilizationHelper.populateCpuUtilization(cpuSummary.getUtilization(), dataSource);
utilization.setCpu(cpuSummary);
UtilizationHelper.populateMemoryUtilization(memSummary.getUtilization(), dataSource);
utilization.setMemory(memSummary);
}
private static void getVirtualCpuMemCount(GlobalUtilizationResourceSummary cpuSummary,
GlobalUtilizationResourceSummary memSummary, DataSource dwhDataSource) throws DashboardDataException {
VmDwhDao dao = new VmDwhDao(dwhDataSource);
ResourcesTotal resourcesTotal = dao.getVirtualCpuMemCount();
cpuSummary.setVirtualTotal(resourcesTotal.getCpuTotal());
cpuSummary.setVirtualUsed(resourcesTotal.getCpuUsed());
memSummary.setVirtualTotal(resourcesTotal.getMemTotal());
memSummary.setVirtualUsed(resourcesTotal.getMemUsed());
}
private static void getTotalCpuMemCount(GlobalUtilizationResourceSummary cpuSummary,
GlobalUtilizationResourceSummary memSummary, DataSource dwhDataSource) throws DashboardDataException {
HostDwhDao dao = new HostDwhDao(dwhDataSource);
ResourcesTotal total = dao.getTotalCpuMemCount();
cpuSummary.setPhysicalTotal(total.getCpuTotal());
//Transform MB to GB.
memSummary.setPhysicalTotal(total.getMemTotal() / 1024);
}
private static void getHourlyCpuMemUsage(GlobalUtilizationResourceSummary cpuSummary,
GlobalUtilizationResourceSummary memSummary, DataSource dataSource) throws DashboardDataException {
List<HistoryNode> cpuHistory = new ArrayList<>();
List<HistoryNode> memHistory = new ArrayList<>();
HostDwhDao dao = new HostDwhDao(dataSource);
List<ResourceUsage> history = dao.getHourlyCpuMemUsage();
for (ResourceUsage item: history) {
cpuHistory.add(new HistoryNode(item.getEpoch(), item.getCpuValue()));
memHistory.add(new HistoryNode(item.getEpoch(), item.getMemValue() * memSummary.getTotal() / 100));
}
ResourceUsage last5minUsage = dao.getLast5MinCpuMemUsage();
cpuSummary.setUsed(last5minUsage.getCpuValue());
memSummary.setUsed(last5minUsage.getMemValue() * memSummary.getTotal() / 100);
cpuSummary.setHistory(cpuHistory);
memSummary.setHistory(memHistory);
}
public static GlobalUtilizationResourceSummary getStorageSummary(DataSource dataSource)
throws DashboardDataException {
GlobalUtilizationResourceSummary result = new GlobalUtilizationResourceSummary(new StorageUtilization());
result.setPhysicalTotal(getTotalStorageCount(dataSource));
result.setHistory(getHourlyStorageHistory(dataSource));
result.setUsed(getLast5MinutesStorageAverage(dataSource));
getVirtualStorageCount(result, dataSource);
UtilizationHelper.populateStorageUtilization(result.getUtilization(), dataSource);
return result;
}
private static List<HistoryNode> getHourlyStorageHistory(DataSource dwhDataSource) throws DashboardDataException {
List<HistoryNode> history = new ArrayList<>();
StorageDomainDwhDao dao = new StorageDomainDwhDao(dwhDataSource);
List<ResourceUsage> usageList = dao.getHourlyStorageHistory();
for (ResourceUsage usage: usageList) {
//Transform GB to TB.
history.add(new HistoryNode(usage.getEpoch(), usage.getStorageValue() / 1024));
}
return history;
}
private static double getLast5MinutesStorageAverage(DataSource dwhDataSource) throws DashboardDataException {
StorageDomainDwhDao dao = new StorageDomainDwhDao(dwhDataSource);
//Transform GB to TB.
return dao.getLast5MinutesStorageAverage() / 1024;
}
private static Double getTotalStorageCount(DataSource dwhDataSource) throws DashboardDataException {
StorageDomainDwhDao dao = new StorageDomainDwhDao(dwhDataSource);
//Transform GB to TB.
return dao.getTotalStorageCount() / 1024;
}
private static void getVirtualStorageCount(GlobalUtilizationResourceSummary storageSummary,
DataSource dwhDataSource) throws DashboardDataException {
VmDwhDao dao = new VmDwhDao(dwhDataSource);
VmStorage storageCount = dao.getVirtualStorageCount();
storageSummary.setVirtualUsed(storageCount.getUsed());
storageSummary.setVirtualTotal(storageCount.getTotal());
}
}