package hudson.plugins.statusmonitor; import hudson.Extension; import hudson.model.*; import org.kohsuke.stapler.export.Exported; import org.kohsuke.stapler.export.ExportedBean; import javax.servlet.jsp.jstl.core.LoopTagStatus; import java.util.ArrayList; import java.util.List; /** * Status Monitor, shows the configured Jobs in a single screen overview * * @author Daniel Gal�n y Martins */ @ExportedBean (defaultVisibility = 999) @Extension public class MonitorAction implements RootAction { private static final long serialVersionUID = 1L; private static final int COLUMNS = 2; public String getDisplayName() { // The Name on the Dashboard return "Status Monitor"; } public String getIconFileName() { return MonitorDescriptor.ACTION_LOGO_MEDIUM; } public String getUrlName() { // The name of the URL path segment return "/monitor"; } /** * @return list projects that will be displayed */ private List<AbstractProject> getProjects() { List<AbstractProject> result = new ArrayList<AbstractProject>(); List<TopLevelItem> topLevelItems = Hudson.getInstance().getItems(); for (TopLevelItem topLevelItem : topLevelItems) { if (topLevelItem instanceof AbstractProject) { AbstractProject abstractProject = (AbstractProject) topLevelItem; if (abstractProject.getPublishersList().get(MonitorPublisher.DESCRIPTOR) != null) { result.add(abstractProject); } } } return result; } public String getResult(AbstractProject project) { String result; if ((project.getLastCompletedBuild() != null) && (project.getLastCompletedBuild().getResult() != null)) { if (project.isDisabled()) { result = "DISABLED"; } else { result = project.getLastCompletedBuild().getResult().toString(); } } else { result = "NOT_BUILD"; } return result; } private int getRows() { int size = getProjects().size(); if (size <= 3) { return size; } return ((size % COLUMNS) == 0) ? (size / COLUMNS) : ((size + 1) / COLUMNS); } @Exported public double getRowsHeight() { return 100 / new Double(getRows()); } @Exported public AbstractProject[][] getProjectsArray() { int rows = getRows(); AbstractProject[][] result = new AbstractProject[rows][]; List<AbstractProject> projects = getProjects(); for (int i = 0; i < rows; i++) { AbstractProject[] row = result[i]; if (row == null) { if (projects.size() <= 3) { row = new AbstractProject[1]; row[0] = projects.get(i); } else { // last row and uneven if (((i + 1) == rows) && ((projects.size() % 2) != 0)) { row = new AbstractProject[1]; row[0] = projects.get(i * COLUMNS); } else { row = new AbstractProject[COLUMNS]; for (int j = 0; j < COLUMNS; j++) { row[j] = projects.get((i * COLUMNS) + j); } } } result[i] = row; } } return result; } @Exported public int getStyleId(LoopTagStatus varStatus, AbstractProject[][] projectsArray) { boolean lastLine = varStatus.isLast() && (projectsArray.length > 1) && (projectsArray[projectsArray.length - 1].length == 1); boolean oneDimenional = (projectsArray[0].length == 1); if (oneDimenional || lastLine) { return 1; } return 2; } }