Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bump plugin from 4.15 to 4.17 #1

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>4.15</version>
<version>4.17</version>
<relativePath />
</parent>
<properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import javax.annotation.Nonnull;

import jenkins.advancedqueue.sorter.ItemInfo;
import jenkins.model.Jenkins;

/**
* @author Magnus Sandberg
Expand Down
14 changes: 9 additions & 5 deletions src/main/java/jenkins/advancedqueue/JobGroup.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,23 @@

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;

import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;
import org.kohsuke.stapler.StaplerRequest;

import hudson.model.Descriptor;
import hudson.model.Queue.Item;
import jenkins.advancedqueue.jobinclusion.JobInclusionStrategy;
import jenkins.advancedqueue.jobinclusion.strategy.ViewBasedJobInclusionStrategy;
import javax.annotation.Nonnull;

import jenkins.advancedqueue.priority.PriorityStrategy;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.StaplerRequest;

/**
* Describes job group for Advanced Queue Sorter.
*
Expand Down
107 changes: 47 additions & 60 deletions src/main/java/jenkins/advancedqueue/PriorityConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,25 +23,6 @@
*/
package jenkins.advancedqueue;

import hudson.DescriptorExtensionList;
import hudson.Extension;
import hudson.ExtensionList;
import hudson.Plugin;
import hudson.matrix.MatrixConfiguration;
import hudson.matrix.MatrixProject;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.model.Job;
import hudson.model.Queue;
import hudson.model.RootAction;
import hudson.model.TopLevelItem;
import hudson.model.ViewGroup;
import hudson.model.View;
import hudson.security.ACL;
import hudson.security.Permission;
import hudson.util.FormValidation;
import hudson.util.ListBoxModel;

import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
Expand All @@ -50,48 +31,62 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;

import javax.servlet.ServletException;

import org.jenkinsci.plugins.workflow.support.steps.ExecutorStepExecution;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;

import hudson.DescriptorExtensionList;
import hudson.Extension;
import hudson.ExtensionList;
import hudson.Plugin;
import hudson.matrix.MatrixConfiguration;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.model.Job;
import hudson.model.Queue;
import hudson.model.RootAction;
import hudson.model.TopLevelItem;
import hudson.model.View;
import hudson.model.ViewGroup;
import hudson.security.ACL;
import hudson.security.ACLContext;
import hudson.util.FormValidation;
import hudson.util.ListBoxModel;
import jenkins.advancedqueue.jobinclusion.JobInclusionStrategy;
import jenkins.advancedqueue.priority.PriorityStrategy;
import jenkins.advancedqueue.sorter.ItemInfo;
import jenkins.advancedqueue.sorter.QueueItemCache;
import jenkins.model.GlobalConfiguration;
import jenkins.model.Jenkins;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.acegisecurity.context.SecurityContext;
import org.acegisecurity.context.SecurityContextHolder;
import org.jenkinsci.plugins.workflow.support.steps.ExecutorStepExecution;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;

/**
* @author Magnus Sandberg
* @since 2.0
*/
@Extension
public class PriorityConfiguration extends Descriptor<PriorityConfiguration> implements RootAction, Describable<PriorityConfiguration> {

private final static Logger LOGGER = Logger.getLogger(PriorityConfiguration.class.getName());
public class PriorityConfiguration extends GlobalConfiguration implements RootAction {

private static final Logger LOGGER = Logger.getLogger(PriorityConfiguration.class.getName());
transient private Map<Integer, JobGroup> id2jobGroup;
transient private PriorityConfigurationMatrixHelper priorityConfigurationMatrixHelper;
transient private PriorityConfigurationPlaceholderTaskHelper placeholderTaskHelper = new PriorityConfigurationPlaceholderTaskHelper();
private List<JobGroup> jobGroups;
private List<JobGroup> jobGroups = new LinkedList<JobGroup>();

@DataBoundConstructor
public PriorityConfiguration() {
super(PriorityConfiguration.class);
jobGroups = new LinkedList<JobGroup>();
load();
//
Collections.sort(jobGroups, new Comparator<JobGroup>() {
public int compare(JobGroup o1, JobGroup o2) {
return o1.getId() - o2.getId();
Expand All @@ -110,8 +105,10 @@ public int compare(JobGroup.PriorityStrategyHolder o1, JobGroup.PriorityStrategy
//
Plugin plugin = Jenkins.get().getPlugin("matrix-project");
if(plugin == null || !plugin.getWrapper().isEnabled()){
LOGGER.log(Level.FINE, "The matrix-project plugin is not installed or enable.");
priorityConfigurationMatrixHelper = null;
} else {
LOGGER.log(Level.FINE, "The matrix-project plugin is installed and enable.");
priorityConfigurationMatrixHelper = new PriorityConfigurationMatrixHelper();
}
}
Expand Down Expand Up @@ -147,28 +144,22 @@ public List<JobGroup> getJobGroups() {
return jobGroups;
}

public JobGroup getJobGroup(int id) {
return id2jobGroup.get(id);
}

public ExtensionList<Descriptor<PriorityStrategy>> getPriorityStrategyDescriptors() {
return PriorityStrategy.all();
}

public DescriptorExtensionList<JobInclusionStrategy, Descriptor<JobInclusionStrategy>> getJobInclusionStrategyDescriptors() {
return JobInclusionStrategy.all();
}


public ListBoxModel getPriorities() {
ListBoxModel items = PrioritySorterConfiguration.get().doGetPriorityItems();
return items;
}

public void doPriorityConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
jobGroups = new LinkedList<JobGroup>();
id2jobGroup = new HashMap<Integer, JobGroup>();
//

String parameter = req.getParameter("json");
JSONObject jobGroupsObject = JSONObject.fromObject(parameter);
JSONArray jsonArray = JSONArray.fromObject(jobGroupsObject.get("jobGroup"));
Expand All @@ -180,16 +171,11 @@ public void doPriorityConfigSubmit(StaplerRequest req, StaplerResponse rsp) thro
}
JobGroup jobGroup = JobGroup.newInstance(req, jobGroupObject, id++);
jobGroups.add(jobGroup);
id2jobGroup.put(jobGroup.getId(), jobGroup);
}
save();
rsp.sendRedirect(Jenkins.get().getRootUrl());
}

public Descriptor<PriorityConfiguration> getDescriptor() {
return this;
}

public FormValidation doCheckJobPattern(@QueryParameter String value) throws IOException, ServletException {
if (value.length() > 0) {
try {
Expand All @@ -202,11 +188,8 @@ public FormValidation doCheckJobPattern(@QueryParameter String value) throws IOE
}

public PriorityConfigurationCallback getPriority(Queue.Item item, PriorityConfigurationCallback priorityCallback) {
SecurityContext saveCtx = ACL.impersonate(ACL.SYSTEM);
try {
try (ACLContext ctx = ACL.as(ACL.SYSTEM)) {
return getPriorityInternal(item, priorityCallback);
} finally {
SecurityContextHolder.setContext(saveCtx);
}
}

Expand All @@ -223,7 +206,7 @@ private PriorityConfigurationCallback getPriorityInternal(Queue.Item item, Prior
}

Job<?, ?> job = (Job<?, ?>) item.task;

if (priorityConfigurationMatrixHelper != null && priorityConfigurationMatrixHelper.isMatrixConfiguration(job)) {
return priorityConfigurationMatrixHelper.getPriority((MatrixConfiguration) job, priorityCallback);
}
Expand All @@ -238,29 +221,29 @@ private PriorityConfigurationCallback getPriorityInternal(Queue.Item item, Prior
return priorityCallback.setPrioritySelection(PrioritySorterConfiguration.get().getStrategy().getDefaultPriority());
}

@CheckForNull
@CheckForNull
public JobGroup getJobGroup(@Nonnull PriorityConfigurationCallback priorityCallback, @Nonnull Job<?, ?> job) {
if (!(job instanceof TopLevelItem)) {
priorityCallback.addDecisionLog(0, "Job is not a TopLevelItem [" + job.getClass().getName() + "] ...");
return null;
}
for (JobGroup jobGroup : jobGroups) {
priorityCallback.addDecisionLog(0, "Evaluating JobGroup [" + jobGroup.getId() + "] ...");
if (jobGroup.getJobGroupStrategy().contains(priorityCallback, job)) {
if (jobGroup.getJobGroupStrategy() != null && jobGroup.getJobGroupStrategy().contains(priorityCallback, job)) {
return jobGroup;
}
}
return null;
}

private boolean isJobInView(Job<?, ?> job, View view) {
if(view instanceof ViewGroup) {
return isJobInViewGroup(job, (ViewGroup) view);
} else {
return view.contains((TopLevelItem) job);
return view.contains((TopLevelItem) job);
}
}

private boolean isJobInViewGroup(Job<?, ?> job, ViewGroup viewGroup) {
Collection<View> views = viewGroup.getViews();
for (View view : views) {
Expand All @@ -270,7 +253,7 @@ private boolean isJobInViewGroup(Job<?, ?> job, ViewGroup viewGroup) {
}
return false;
}

private PriorityConfigurationCallback getPriorityForJobGroup(PriorityConfigurationCallback priorityCallback, JobGroup jobGroup, Queue.Item item) {
int priority = jobGroup.getPriority();
PriorityStrategy reason = null;
Expand Down Expand Up @@ -304,4 +287,8 @@ static public PriorityConfiguration get() {
return (PriorityConfiguration) Jenkins.get().getDescriptor(PriorityConfiguration.class);
}


// static public PriorityConfiguration get() {
// return GlobalConfiguration.all().get(PriorityConfiguration.class);
// }
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@

class PriorityConfigurationPlaceholderTaskHelper {

private static final Logger LOGGER = Logger.getLogger(PriorityConfigurationPlaceholderTaskHelper.class.getName());
private static final Logger LOGGER = Logger.getLogger(PriorityConfigurationPlaceholderTaskHelper.class.getName());
boolean isPlaceholderTask(Queue.Task task) {
return isPlaceholderTaskUsed() && task instanceof ExecutorStepExecution.PlaceholderTask;
}
Expand Down
Loading