/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package controllers;
import static controllers.security.Security.isSecurityAdmin;
import static controllers.security.Security.isSystemAdminOrRestrictedSystemAdmin;
import static controllers.security.Security.isSystemAuditor;
import static controllers.security.Security.isSystemMonitor;
import static controllers.security.Security.isTenantAdmin;
import static com.emc.vipr.client.core.util.ResourceUtils.uri;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import models.datatable.RecentOrdersDataTable;
import play.mvc.Controller;
import play.mvc.Http;
import play.mvc.With;
import util.CatalogServiceUtils;
import util.DisasterRecoveryUtils;
import util.datatable.DataTableParams;
import util.datatable.DataTablesSupport;
import com.emc.vipr.model.catalog.CatalogServiceRestRep;
import com.google.common.collect.Lists;
import controllers.auth.LDAPsources;
import controllers.catalog.Orders;
import controllers.catalog.ServiceCatalog;
import controllers.compute.Hosts;
import controllers.infra.AuditLog;
import controllers.security.Security;
import controllers.util.Models;
@With(Common.class)
public class Dashboard extends Controller {
private static final int ORDER_FETCH_LIMIT = 5;
public static void index() {
if (isSystemAdminOrRestrictedSystemAdmin() || isSystemMonitor()) {
AdminDashboard.dashboard();
}
else if (isSecurityAdmin()) {
LDAPsources.list();
}
else if (isSystemAuditor()) {
AuditLog.list();
}
else if (isTenantAdmin()) {
Hosts.list();
}
recentActivity();
}
public static void recentActivity() {
List<ServiceCatalog.ServiceDef> services = Lists.newArrayList();
Http.Cookie recentCookie = request.cookies.get(Orders.RECENT_ACTIVITIES);
List<String> ids = Lists.newArrayList();
List<String> removedIds = Lists.newArrayList();
if (recentCookie != null && recentCookie.value != null && DisasterRecoveryUtils.isActiveSite()) {
ids.addAll(Arrays.asList(recentCookie.value.split(",")));
for (String serviceId : ids) {
CatalogServiceRestRep service = CatalogServiceUtils.getCatalogService(uri(serviceId));
if (service != null) {
services.add(ServiceCatalog.createService(service, ""));
} else {
removedIds.add(serviceId);
}
}
// handle services that has been deleted by removing them from the cookie
if (!removedIds.isEmpty()) {
ids.removeAll(removedIds);
response.setCookie(Orders.RECENT_ACTIVITIES, StringUtils.join(ids, ","));
}
}
DashboardOrdersDataTable dataTable = new DashboardOrdersDataTable();
render(dataTable, services);
}
public static void listJson() {
DataTableParams dataTableParams = DataTablesSupport.createParams(params);
DashboardOrdersDataTable dataTable = new DashboardOrdersDataTable();
renderJSON(DataTablesSupport.createJSON(dataTable.fetchData(dataTableParams), params));
}
public static class DashboardOrdersDataTable extends RecentOrdersDataTable {
public DashboardOrdersDataTable() {
super(Models.currentTenant());
alterColumn("createdDate").setRenderFunction("render.relativeDate").setCssClass("createdRelativeDate");
setMaxOrders(ORDER_FETCH_LIMIT);
setUserInfo(Security.getUserInfo());
}
}
}