diff --git a/src/main/java/hudson/plugins/global_build_stats/GlobalBuildStatsPlugin.java b/src/main/java/hudson/plugins/global_build_stats/GlobalBuildStatsPlugin.java index 7d6044b..ecddc3c 100644 --- a/src/main/java/hudson/plugins/global_build_stats/GlobalBuildStatsPlugin.java +++ b/src/main/java/hudson/plugins/global_build_stats/GlobalBuildStatsPlugin.java @@ -4,9 +4,9 @@ import hudson.Plugin; import hudson.model.ManagementLink; import hudson.model.TaskListener; -import hudson.model.AbstractBuild; import hudson.model.Api; import hudson.model.Hudson; +import hudson.model.Run; import hudson.model.listeners.ItemListener; import hudson.model.listeners.RunListener; import hudson.plugins.global_build_stats.business.GlobalBuildStatsBusiness; @@ -21,6 +21,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.servlet.ServletException; @@ -44,6 +46,8 @@ @ExportedBean public class GlobalBuildStatsPlugin extends Plugin { + private static final Logger LOGGER = Logger.getLogger(GlobalBuildStatsPlugin.class.getName()); + /** * List of aggregated job build results * This list will grow over time, but will be monthly sharded in different files to keep @@ -193,22 +197,15 @@ public String getDescription() { * persisted data */ @Extension - public static class GlobalBuildStatsRunListener extends RunListener{ - public GlobalBuildStatsRunListener() { - super(AbstractBuild.class); - } - + public static class GlobalBuildStatsRunListener extends RunListener>{ @Override - public void onCompleted(AbstractBuild r, TaskListener listener) { - super.onCompleted(r, listener); - + public void onCompleted(Run r, TaskListener listener) { + LOGGER.log(Level.FINEST, "GlobalBuildStatsRunListener onCompleted " + r.getExternalizableId()); getPluginBusiness().onJobCompleted(r); } @Override - public void onDeleted(AbstractBuild build) { - super.onDeleted(build); - + public void onDeleted(Run build) { getPluginBusiness().onBuildDeleted(build); } } diff --git a/src/main/java/hudson/plugins/global_build_stats/JobBuildResultFactory.java b/src/main/java/hudson/plugins/global_build_stats/JobBuildResultFactory.java index 550c7a4..8244bd3 100644 --- a/src/main/java/hudson/plugins/global_build_stats/JobBuildResultFactory.java +++ b/src/main/java/hudson/plugins/global_build_stats/JobBuildResultFactory.java @@ -15,10 +15,12 @@ public class JobBuildResultFactory { private JobBuildResultFactory(){ } - public JobBuildResult createJobBuildResult(AbstractBuild build){ - String buildName = build.getProject().getFullName(); + public JobBuildResult createJobBuildResult(Run build){ + String buildName = build.getParent().getFullName(); long duration = build.getDuration(); - String nodeName = build.getBuiltOnStr(); + String nodeName = (build instanceof AbstractBuild) + ? ((AbstractBuild) build).getBuiltOnStr() + : ""; /* Can't do that since MavenModuleSet is in maven-plugin artefact which is in test scope if(build.getProject() instanceof MavenModuleSet){ buildName = ((MavenModuleSet)build.getProject()).getRootModule().toString(); @@ -27,7 +29,7 @@ public JobBuildResult createJobBuildResult(AbstractBuild build){ build.getNumber(), build.getTimestamp(), duration, nodeName, extractUserNameIn(build)); } - public JobBuildSearchResult createJobBuildSearchResult(AbstractBuild build){ + public JobBuildSearchResult createJobBuildSearchResult(Run build){ return createJobBuildSearchResult(createJobBuildResult(build)); } @@ -49,7 +51,7 @@ public JobBuildSearchResult createJobBuildSearchResult(JobBuildResult r){ return new JobBuildSearchResult(r, isJobAccessible, isBuildAccessible); } - public static String extractUserNameIn(AbstractBuild build){ + public static String extractUserNameIn(Run build){ String userName; @SuppressWarnings("deprecation") Cause.UserCause uc = build.getCause(Cause.UserCause.class); Cause.UserIdCause uic = build.getCause(Cause.UserIdCause.class); diff --git a/src/main/java/hudson/plugins/global_build_stats/business/GlobalBuildStatsBusiness.java b/src/main/java/hudson/plugins/global_build_stats/business/GlobalBuildStatsBusiness.java index e973adb..6317938 100644 --- a/src/main/java/hudson/plugins/global_build_stats/business/GlobalBuildStatsBusiness.java +++ b/src/main/java/hudson/plugins/global_build_stats/business/GlobalBuildStatsBusiness.java @@ -1,11 +1,11 @@ package hudson.plugins.global_build_stats.business; import hudson.model.TopLevelItem; -import hudson.model.AbstractBuild; import hudson.model.AbstractProject; import hudson.model.Hudson; import hudson.model.Item; import hudson.model.Job; +import hudson.model.Run; import hudson.plugins.global_build_stats.GlobalBuildStatsPlugin; import hudson.plugins.global_build_stats.JobBuildResultFactory; import hudson.plugins.global_build_stats.model.*; @@ -52,7 +52,8 @@ public GlobalBuildStatsBusiness(GlobalBuildStatsPlugin _plugin){ /** * Records the result of a build. */ - public void onJobCompleted(final AbstractBuild build) { + public void onJobCompleted(final Run build) { + LOGGER.log(Level.FINEST, "GlobalBuildStatsBusiness onJobCompleted " + build.getExternalizableId()); for(RetentionStrategy s : plugin.getRetentionStrategies()){ s.onBuildCompleted(build, pluginSaver); } @@ -366,13 +367,13 @@ public List createDataSetBuilder(BuildStatConfi return dimensions; } - private static void addBuild(List jobBuildResultsRead, AbstractBuild build){ + private static void addBuild(List jobBuildResultsRead, Run build){ jobBuildResultsRead.add(JobBuildResultFactory.INSTANCE.createJobBuildResult(build)); } private static void addBuildsFrom(List jobBuildResultsRead, AbstractProject project){ - List builds = project.getBuilds(); - Iterator buildIterator = builds.iterator(); + List> builds = project.getBuilds(); + Iterator> buildIterator = builds.iterator(); while (buildIterator.hasNext()) { addBuild(jobBuildResultsRead, buildIterator.next()); @@ -404,7 +405,7 @@ public void reloadPlugin() { } } - public void onBuildDeleted(AbstractBuild build) { + public void onBuildDeleted(Run build) { for(RetentionStrategy s : plugin.getRetentionStrategies()){ s.onBuildDeleted(build, pluginSaver); } diff --git a/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/DiscardResultsOlderThanDays.java b/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/DiscardResultsOlderThanDays.java index d705164..0db773f 100644 --- a/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/DiscardResultsOlderThanDays.java +++ b/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/DiscardResultsOlderThanDays.java @@ -1,6 +1,6 @@ package hudson.plugins.global_build_stats.rententionstrategies; -import hudson.model.AbstractBuild; +import hudson.model.Run; import hudson.plugins.global_build_stats.GlobalBuildStatsPlugin; import hudson.plugins.global_build_stats.JobBuildResultFactory; import hudson.plugins.global_build_stats.business.GlobalBuildStatsPluginSaver; @@ -47,7 +47,7 @@ public void strategyActivated(GlobalBuildStatsPluginSaver pluginSaver) { purgeOldBuildResults(pluginSaver, System.currentTimeMillis()); } - public void buildCompleted(AbstractBuild buils, GlobalBuildStatsPluginSaver pluginSaver) { + public void buildCompleted(Run buils, GlobalBuildStatsPluginSaver pluginSaver) { final long now = System.currentTimeMillis(); if(lastPurgeDate == null || now > lastPurgeDate.getTime() + PURGE_FREQUENCY){ purgeOldBuildResults(pluginSaver, now); diff --git a/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/DoNotKeepBuildResultWhenDiscarded.java b/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/DoNotKeepBuildResultWhenDiscarded.java index 6e7f59a..b163f22 100644 --- a/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/DoNotKeepBuildResultWhenDiscarded.java +++ b/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/DoNotKeepBuildResultWhenDiscarded.java @@ -1,6 +1,6 @@ package hudson.plugins.global_build_stats.rententionstrategies; -import hudson.model.AbstractBuild; +import hudson.model.Run; import hudson.plugins.global_build_stats.GlobalBuildStatsPlugin; import hudson.plugins.global_build_stats.JobBuildResultFactory; import hudson.plugins.global_build_stats.business.GlobalBuildStatsPluginSaver; @@ -18,7 +18,7 @@ public String getConfigPage() { return "doNotKeepBuildResultWhenDiscarded.jelly"; } - public void buildDeleted(final AbstractBuild build, GlobalBuildStatsPluginSaver pluginSaver) { + public void buildDeleted(final Run build, GlobalBuildStatsPluginSaver pluginSaver) { pluginSaver.updatePlugin(new GlobalBuildStatsPluginSaver.BeforeSavePluginCallback() { @Override public void changePluginStateBeforeSavingIt(GlobalBuildStatsPlugin plugin) { diff --git a/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/RetentionStrategy.java b/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/RetentionStrategy.java index ed72a2a..aec4464 100644 --- a/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/RetentionStrategy.java +++ b/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/RetentionStrategy.java @@ -1,7 +1,7 @@ package hudson.plugins.global_build_stats.rententionstrategies; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import hudson.model.AbstractBuild; +import hudson.model.Run; import hudson.plugins.global_build_stats.business.GlobalBuildStatsPluginSaver; import hudson.plugins.global_build_stats.rententionstrategies.strategybehaviours.BuildCompletedListener; import hudson.plugins.global_build_stats.rententionstrategies.strategybehaviours.BuildDeletedListener; @@ -54,14 +54,14 @@ public void from(T strategyToCopy) { } // Overridable if retention strategy is a build deleted listener - public void onBuildDeleted(AbstractBuild build, GlobalBuildStatsPluginSaver pluginSaver) { + public void onBuildDeleted(Run build, GlobalBuildStatsPluginSaver pluginSaver) { if(this instanceof BuildDeletedListener){ ((BuildDeletedListener)this).buildDeleted(build, pluginSaver); } } // Overridable if retention strategy is a build completed listener - public void onBuildCompleted(AbstractBuild build, GlobalBuildStatsPluginSaver pluginSaver) { + public void onBuildCompleted(Run build, GlobalBuildStatsPluginSaver pluginSaver) { if(this instanceof BuildCompletedListener){ ((BuildCompletedListener)this).buildCompleted(build, pluginSaver); } diff --git a/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/strategybehaviours/BuildCompletedListener.java b/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/strategybehaviours/BuildCompletedListener.java index 0700310..669458c 100644 --- a/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/strategybehaviours/BuildCompletedListener.java +++ b/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/strategybehaviours/BuildCompletedListener.java @@ -1,11 +1,11 @@ package hudson.plugins.global_build_stats.rententionstrategies.strategybehaviours; -import hudson.model.AbstractBuild; +import hudson.model.Run; import hudson.plugins.global_build_stats.business.GlobalBuildStatsPluginSaver; /** * @author fcamblor */ public interface BuildCompletedListener { - public void buildCompleted(AbstractBuild buils, GlobalBuildStatsPluginSaver pluginSaver); + public void buildCompleted(Run buils, GlobalBuildStatsPluginSaver pluginSaver); } diff --git a/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/strategybehaviours/BuildDeletedListener.java b/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/strategybehaviours/BuildDeletedListener.java index 61ee567..63131d5 100644 --- a/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/strategybehaviours/BuildDeletedListener.java +++ b/src/main/java/hudson/plugins/global_build_stats/rententionstrategies/strategybehaviours/BuildDeletedListener.java @@ -1,11 +1,11 @@ package hudson.plugins.global_build_stats.rententionstrategies.strategybehaviours; -import hudson.model.AbstractBuild; +import hudson.model.Run; import hudson.plugins.global_build_stats.business.GlobalBuildStatsPluginSaver; /** * @author fcamblor */ public interface BuildDeletedListener { - public void buildDeleted(AbstractBuild buils, GlobalBuildStatsPluginSaver pluginSaver); + public void buildDeleted(Run buils, GlobalBuildStatsPluginSaver pluginSaver); } diff --git a/src/main/java/hudson/plugins/global_build_stats/xstream/migration/AbstractMigrator.java b/src/main/java/hudson/plugins/global_build_stats/xstream/migration/AbstractMigrator.java index 9a8d38b..2e95d60 100644 --- a/src/main/java/hudson/plugins/global_build_stats/xstream/migration/AbstractMigrator.java +++ b/src/main/java/hudson/plugins/global_build_stats/xstream/migration/AbstractMigrator.java @@ -2,9 +2,9 @@ import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; -import hudson.model.AbstractBuild; import hudson.model.Hudson; import hudson.model.Job; +import hudson.model.Run; import hudson.plugins.global_build_stats.model.BuildStatConfiguration; import hudson.plugins.global_build_stats.model.JobBuildResult; import hudson.plugins.global_build_stats.model.JobBuildResultSharder; @@ -92,10 +92,10 @@ protected boolean registerBuildStatConfigId(){ return true; } - protected static AbstractBuild retrieveBuildFromJobBuildResult(JobBuildResult jbr){ + protected static Run retrieveBuildFromJobBuildResult(JobBuildResult jbr){ Job job = (Job)Hudson.getInstance().getItemByFullName(jbr.getJobName()); if(job != null){ - return (AbstractBuild)job.getBuildByNumber(jbr.getBuildNumber()); + return (Run)job.getBuildByNumber(jbr.getBuildNumber()); } return null; } diff --git a/src/main/java/hudson/plugins/global_build_stats/xstream/migration/PreV8AbstractMigrator.java b/src/main/java/hudson/plugins/global_build_stats/xstream/migration/PreV8AbstractMigrator.java index a92700f..60a51b8 100644 --- a/src/main/java/hudson/plugins/global_build_stats/xstream/migration/PreV8AbstractMigrator.java +++ b/src/main/java/hudson/plugins/global_build_stats/xstream/migration/PreV8AbstractMigrator.java @@ -1,8 +1,8 @@ package hudson.plugins.global_build_stats.xstream.migration; -import hudson.model.AbstractBuild; import hudson.model.Hudson; import hudson.model.Job; +import hudson.model.Run; import hudson.plugins.global_build_stats.model.BuildStatConfiguration; import hudson.plugins.global_build_stats.model.JobBuildResult; import hudson.plugins.global_build_stats.model.ModelIdGenerator; @@ -79,10 +79,10 @@ protected boolean registerBuildStatConfigId(){ return true; } - protected static AbstractBuild retrieveBuildFromJobBuildResult(JobBuildResult jbr){ + protected static Run retrieveBuildFromJobBuildResult(JobBuildResult jbr){ Job job = (Job)Hudson.getInstance().getItemByFullName(jbr.getJobName()); if(job != null){ - return (AbstractBuild)job.getBuildByNumber(jbr.getBuildNumber()); + return (Run)job.getBuildByNumber(jbr.getBuildNumber()); } return null; } diff --git a/src/main/java/hudson/plugins/global_build_stats/xstream/migration/PreV9AbstractMigrator.java b/src/main/java/hudson/plugins/global_build_stats/xstream/migration/PreV9AbstractMigrator.java index 27458b5..2836a27 100644 --- a/src/main/java/hudson/plugins/global_build_stats/xstream/migration/PreV9AbstractMigrator.java +++ b/src/main/java/hudson/plugins/global_build_stats/xstream/migration/PreV9AbstractMigrator.java @@ -4,9 +4,9 @@ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; -import hudson.model.AbstractBuild; import hudson.model.Hudson; import hudson.model.Job; +import hudson.model.Run; import hudson.plugins.global_build_stats.model.BuildStatConfiguration; import hudson.plugins.global_build_stats.model.JobBuildResult; import hudson.plugins.global_build_stats.model.JobBuildResultSharder; @@ -82,10 +82,10 @@ protected boolean registerBuildStatConfigId(){ return true; } - protected static AbstractBuild retrieveBuildFromJobBuildResult(JobBuildResult jbr){ + protected static Run retrieveBuildFromJobBuildResult(JobBuildResult jbr){ Job job = (Job) Jenkins.getInstance().getItemByFullName(jbr.getJobName()); if(job != null){ - return (AbstractBuild)job.getBuildByNumber(jbr.getBuildNumber()); + return (Run)job.getBuildByNumber(jbr.getBuildNumber()); } return null; } diff --git a/src/main/java/hudson/plugins/global_build_stats/xstream/migration/v3/V2ToV3Migrator.java b/src/main/java/hudson/plugins/global_build_stats/xstream/migration/v3/V2ToV3Migrator.java index baa06f0..a21c757 100644 --- a/src/main/java/hudson/plugins/global_build_stats/xstream/migration/v3/V2ToV3Migrator.java +++ b/src/main/java/hudson/plugins/global_build_stats/xstream/migration/v3/V2ToV3Migrator.java @@ -1,6 +1,7 @@ package hudson.plugins.global_build_stats.xstream.migration.v3; import hudson.model.AbstractBuild; +import hudson.model.Run; import hudson.plugins.global_build_stats.model.JobBuildResult; import hudson.plugins.global_build_stats.xstream.migration.PreV8AbstractMigrator; import hudson.plugins.global_build_stats.xstream.migration.v2.V2GlobalBuildStatsPOJO; @@ -29,10 +30,12 @@ protected List migrateJobBuildResults( // Providing JobBuildResult.duration & nodeName attributes long duration = JobBuildResult.EMPTY_DURATION; String nodeName = JobBuildResult.EMPTY_NODE_NAME; - AbstractBuild b = retrieveBuildFromJobBuildResult(jbr); + Run b = retrieveBuildFromJobBuildResult(jbr); if(b != null){ duration = b.getDuration(); - nodeName = b.getBuiltOnStr(); + nodeName = (b instanceof AbstractBuild) + ? ((AbstractBuild) b).getBuiltOnStr() + : ""; } jbr.setDuration(duration); diff --git a/src/main/java/hudson/plugins/global_build_stats/xstream/migration/v7/V6ToV7Migrator.java b/src/main/java/hudson/plugins/global_build_stats/xstream/migration/v7/V6ToV7Migrator.java index 27fc41b..d62c52d 100644 --- a/src/main/java/hudson/plugins/global_build_stats/xstream/migration/v7/V6ToV7Migrator.java +++ b/src/main/java/hudson/plugins/global_build_stats/xstream/migration/v7/V6ToV7Migrator.java @@ -1,6 +1,6 @@ package hudson.plugins.global_build_stats.xstream.migration.v7; -import hudson.model.AbstractBuild; +import hudson.model.Run; import hudson.plugins.global_build_stats.FieldFilterFactory; import hudson.plugins.global_build_stats.JobBuildResultFactory; import hudson.plugins.global_build_stats.model.BuildSearchCriteria; @@ -54,7 +54,7 @@ protected List migrateJobBuildResults(List jobBu ArrayList migratedJobBuildResults = new ArrayList(); for(JobBuildResult jbr : jobBuildResults){ - AbstractBuild b = retrieveBuildFromJobBuildResult(jbr); + Run b = retrieveBuildFromJobBuildResult(jbr); if(b != null){ String userName = JobBuildResultFactory.extractUserNameIn(b); jbr.setUserName(userName);