package hudson.plugins.disk_usage; import hudson.Extension; import hudson.Plugin; import hudson.Util; import hudson.model.AbstractProject; import hudson.model.Hudson; import hudson.model.Job; import hudson.model.ManagementLink; import java.io.IOException; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.servlet.ServletException; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; /** * Entry point of the the plugin. * * @author dvrzalik * @plugin */ public class DiskUsagePlugin extends Plugin { private transient final DiskUsageThread duThread = new DiskUsageThread(); private static DiskUsage diskUsageSum; @Extension public static class DiskUsageManagementLink extends ManagementLink { public final String[] COLUMNS = new String[]{"Project name", "Builds", "Workspace"}; public String getIconFileName() { return "/plugin/disk-usage/icons/diskusage48.png"; } public String getDisplayName() { return "Disk usage"; } public String getUrlName() { return "plugin/disk-usage/"; } @Override public String getDescription() { return "Displays per-project disk usage"; } } /** * @return DiskUsage for given project (shortcut for the view). Never null. */ public static DiskUsage getDiskUsage(Job project) { ProjectDiskUsageAction action = project.getAction(ProjectDiskUsageAction.class); if (action != null) { return action.getDiskUsage(); } return new DiskUsage(0, 0); } //Another shortcut public static String getProjectUrl(Job project) { return Util.encode(project.getAbsoluteUrl()); } /** * @return Project list sorted by occupied disk space */ public static List getProjectList() { Comparator<AbstractProject> comparator = new Comparator<AbstractProject>() { public int compare(AbstractProject o1, AbstractProject o2) { DiskUsage du1 = getDiskUsage(o1); DiskUsage du2 = getDiskUsage(o2); long result = du2.wsUsage + du2.buildUsage - du1.wsUsage - du1.buildUsage; if(result > 0) return 1; if(result < 0) return -1; return 0; } }; List<AbstractProject> projectList = Util.createSubList(Hudson.getInstance().getItems(), AbstractProject.class); Collections.sort(projectList, comparator); //calculate sum DiskUsage sum = new DiskUsage(0, 0); for(AbstractProject project: projectList) { DiskUsage du = getDiskUsage(project); sum.buildUsage += du.buildUsage; sum.wsUsage += du.wsUsage; } diskUsageSum = sum; return projectList; } public static DiskUsage getDiskUsageSum() { return diskUsageSum; } public void doRecordDiskUsage(StaplerRequest req, StaplerResponse res) throws ServletException, IOException { duThread.doRun(); res.forwardToPreviousPage(req); } public int getCountInterval(){ return duThread.COUNT_INTERVAL_MINUTES; } }