Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Problem: "Plugin usage" plugin does not report on Maven projects
... since data is only collected for items that are instances of
class hudson.model.Project. But a "Maven project" is *not* a Project.

Solution:
- globally replace hudson.model.Project with hudson.model.AbstractProject
- fix up analyzers that call methods that really only work on a Project,
  either by ignoring items that aren't Projects (BuilderJobAnalyzer)
  or using another method that works on a wider range of items
  (BuildWrapperJobAnalyzer)
  • Loading branch information
rschupp committed Jan 31, 2017
1 parent 31a6884 commit c5a849d
Show file tree
Hide file tree
Showing 9 changed files with 68 additions and 59 deletions.
@@ -1,7 +1,7 @@
package org.jenkinsci.plugins.pluginusage;

import hudson.PluginWrapper;
import hudson.model.Project;
import hudson.model.AbstractProject;

import java.util.ArrayList;
import java.util.HashMap;
Expand All @@ -10,19 +10,19 @@
public class JobsPerPlugin {

private PluginWrapper plugin;
private HashMap<String, Project> jobMap = new HashMap<String, Project>();
private HashMap<String, AbstractProject> jobMap = new HashMap<String, AbstractProject>();


public JobsPerPlugin(PluginWrapper plugin) {
this.plugin = plugin;
}

public void addProject(Project project) {
public void addProject(AbstractProject project) {
this.jobMap.put(project.getDisplayName(), project);
}

public List<Project> getProjects() {
ArrayList<Project> projects = new ArrayList<Project>();
public List<AbstractProject> getProjects() {
ArrayList<AbstractProject> projects = new ArrayList<AbstractProject>();
projects.addAll(jobMap.values());

return projects;
Expand Down
Expand Up @@ -3,9 +3,11 @@
import hudson.DescriptorExtensionList;
import hudson.PluginWrapper;
import hudson.model.Descriptor;
import hudson.model.Project;
import hudson.model.AbstractProject;
import hudson.model.BuildableItemWithBuildWrappers;
import hudson.tasks.BuildWrapper;
import hudson.tasks.Builder;
import hudson.util.DescribableList;

import java.util.ArrayList;
import java.util.HashMap;
Expand All @@ -24,28 +26,31 @@ public BuildWrapperJobAnalyzer() {
}
}

protected void doJobAnalyze(Project item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
protected void doJobAnalyze(AbstractProject item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
{
super.doJobAnalyze(null, mapJobsPerPlugin);
Map<Descriptor<BuildWrapper>,BuildWrapper> buildWrappers = item.getBuildWrappers();
for (Map.Entry<Descriptor<BuildWrapper>,BuildWrapper> entry : buildWrappers.entrySet())
if (item instanceof BuildableItemWithBuildWrappers)
{
PluginWrapper usedPlugin = getUsedPlugin(entry.getKey().clazz);
if(usedPlugin!=null)
{
JobsPerPlugin jobsPerPlugin = mapJobsPerPlugin.get(usedPlugin);
if(jobsPerPlugin!=null)
{
jobsPerPlugin.addProject(item);
}
else
{
JobsPerPlugin jobsPerPlugin2 = new JobsPerPlugin(usedPlugin);
jobsPerPlugin2.addProject(item);
mapJobsPerPlugin.put(usedPlugin, jobsPerPlugin2);
}
}
DescribableList<BuildWrapper,Descriptor<BuildWrapper>> buildWrappers = ((BuildableItemWithBuildWrappers)item).getBuildWrappersList();
Map<Descriptor<BuildWrapper>,BuildWrapper> map = buildWrappers.toMap();
for (Map.Entry<Descriptor<BuildWrapper>,BuildWrapper> entry : map.entrySet())
{
PluginWrapper usedPlugin = getUsedPlugin(entry.getKey().clazz);
if(usedPlugin!=null)
{
JobsPerPlugin jobsPerPlugin = mapJobsPerPlugin.get(usedPlugin);
if(jobsPerPlugin!=null)
{
jobsPerPlugin.addProject(item);
}
else
{
JobsPerPlugin jobsPerPlugin2 = new JobsPerPlugin(usedPlugin);
jobsPerPlugin2.addProject(item);
mapJobsPerPlugin.put(usedPlugin, jobsPerPlugin2);
}
}
}
}
}

}
Expand Up @@ -3,6 +3,7 @@
import hudson.DescriptorExtensionList;
import hudson.PluginWrapper;
import hudson.model.Descriptor;
import hudson.model.AbstractProject;
import hudson.model.Project;
import hudson.tasks.Builder;

Expand All @@ -25,28 +26,31 @@ public BuilderJobAnalyzer() {
}
}

protected void doJobAnalyze(Project item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
protected void doJobAnalyze(AbstractProject item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
{
super.doJobAnalyze(null, mapJobsPerPlugin);
List<Builder> builders = item.getBuilders();
for(Builder builder: builders)
{
PluginWrapper usedPlugin = getUsedPlugin(builder.getDescriptor().clazz);
if(usedPlugin!=null)
{
JobsPerPlugin jobsPerPlugin = mapJobsPerPlugin.get(usedPlugin);
if(jobsPerPlugin!=null)
{
jobsPerPlugin.addProject(item);
}
else
{
JobsPerPlugin jobsPerPlugin2 = new JobsPerPlugin(usedPlugin);
jobsPerPlugin2.addProject(item);
mapJobsPerPlugin.put(usedPlugin, jobsPerPlugin2);
}
}
}
if (item instanceof Project)
{
List<Builder> builders = ((Project)item).getBuilders();
for(Builder builder: builders)
{
PluginWrapper usedPlugin = getUsedPlugin(builder.getDescriptor().clazz);
if(usedPlugin!=null)
{
JobsPerPlugin jobsPerPlugin = mapJobsPerPlugin.get(usedPlugin);
if(jobsPerPlugin!=null)
{
jobsPerPlugin.addProject(item);
}
else
{
JobsPerPlugin jobsPerPlugin2 = new JobsPerPlugin(usedPlugin);
jobsPerPlugin2.addProject(item);
mapJobsPerPlugin.put(usedPlugin, jobsPerPlugin2);
}
}
}
}
}

}
Expand Up @@ -6,7 +6,7 @@
import org.jenkinsci.plugins.pluginusage.JobsPerPlugin;

import hudson.PluginWrapper;
import hudson.model.Project;
import hudson.model.AbstractProject;
import jenkins.model.Jenkins;


Expand All @@ -19,7 +19,7 @@ protected PluginWrapper getUsedPlugin(Class clazz) {
return instance.getPluginManager().whichPlugin(clazz);
}

protected void doJobAnalyze(Project item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
protected void doJobAnalyze(AbstractProject item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
{
for(PluginWrapper plugin: plugins)
{
Expand Down
@@ -1,7 +1,7 @@
package org.jenkinsci.plugins.pluginusage.analyzer;

import hudson.PluginWrapper;
import hudson.model.Project;
import hudson.model.AbstractProject;

import java.util.ArrayList;
import java.util.HashMap;
Expand All @@ -27,9 +27,9 @@ public JobCollector() {
public HashMap<PluginWrapper, JobsPerPlugin> getJobsPerPlugin()
{
HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin = new HashMap<PluginWrapper, JobsPerPlugin>();
List<Project> allItems = Jenkins.getInstance().getAllItems(Project.class);
List<AbstractProject> allItems = Jenkins.getInstance().getAllItems(AbstractProject.class);

for(Project item: allItems)
for(AbstractProject item: allItems)
{
for(JobAnalyzer analyser: analysers)
{
Expand All @@ -40,7 +40,7 @@ public HashMap<PluginWrapper, JobsPerPlugin> getJobsPerPlugin()
}

public int getNumberOfJobs() {
List<Project> allItems = Jenkins.getInstance().getAllItems(Project.class);
List<AbstractProject> allItems = Jenkins.getInstance().getAllItems(AbstractProject.class);
return allItems.size();
}

Expand Down
Expand Up @@ -3,7 +3,7 @@
import hudson.PluginWrapper;
import hudson.model.JobProperty;
import hudson.model.JobPropertyDescriptor;
import hudson.model.Project;
import hudson.model.AbstractProject;

import java.util.HashMap;
import java.util.Map;
Expand All @@ -14,7 +14,7 @@
public class PropertiesJobAnalyzer extends JobAnalyzer{


protected void doJobAnalyze(Project item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
protected void doJobAnalyze(AbstractProject item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
{
Map<JobPropertyDescriptor,JobProperty> properties = item.getProperties();
for (Map.Entry<JobPropertyDescriptor,JobProperty> entry : properties.entrySet())
Expand Down
Expand Up @@ -3,7 +3,7 @@
import hudson.DescriptorExtensionList;
import hudson.PluginWrapper;
import hudson.model.Descriptor;
import hudson.model.Project;
import hudson.model.AbstractProject;
import hudson.tasks.BuildWrapper;
import hudson.tasks.Publisher;
import hudson.util.DescribableList;
Expand All @@ -25,7 +25,7 @@ public PublisherJobAnalyzer() {
}
}

protected void doJobAnalyze(Project item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
protected void doJobAnalyze(AbstractProject item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
{
super.doJobAnalyze(null, mapJobsPerPlugin);
DescribableList<Publisher,Descriptor<Publisher>> publisherList = item.getPublishersList();
Expand Down
Expand Up @@ -3,7 +3,7 @@
import hudson.DescriptorExtensionList;
import hudson.PluginWrapper;
import hudson.model.Descriptor;
import hudson.model.Project;
import hudson.model.AbstractProject;
import hudson.scm.SCMDescriptor;
import hudson.scm.SCM;
import hudson.tasks.BuildWrapper;
Expand All @@ -24,7 +24,7 @@ public SCMJobAnalyzer() {
}
}

protected void doJobAnalyze(Project item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
protected void doJobAnalyze(AbstractProject item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
{
super.doJobAnalyze(null, mapJobsPerPlugin);
PluginWrapper scmPlugin = getUsedPlugin(item.getScm().getDescriptor().clazz);
Expand Down
Expand Up @@ -3,7 +3,7 @@
import hudson.DescriptorExtensionList;
import hudson.PluginWrapper;
import hudson.model.Descriptor;
import hudson.model.Project;
import hudson.model.AbstractProject;
import hudson.tasks.BuildWrapper;
import hudson.triggers.Trigger;
import hudson.triggers.TriggerDescriptor;
Expand All @@ -25,7 +25,7 @@ public TriggerJobAnalyzer() {
}
}

protected void doJobAnalyze(Project item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
protected void doJobAnalyze(AbstractProject item, HashMap<PluginWrapper, JobsPerPlugin> mapJobsPerPlugin)
{
super.doJobAnalyze(null, mapJobsPerPlugin);
Map<TriggerDescriptor,Trigger> triggers = item.getTriggers();
Expand Down

0 comments on commit c5a849d

Please sign in to comment.