Skip to content

Commit

Permalink
Added Extension for Job Restriction Plugin
Browse files Browse the repository at this point in the history
This extension will enable Node usage based on Job
Priority, addressing [JENKINS-23640].
  • Loading branch information
emsa23 committed May 18, 2015
1 parent c33c5d8 commit e56aa37
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 4 deletions.
15 changes: 11 additions & 4 deletions pom.xml
@@ -1,4 +1,5 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
Expand Down Expand Up @@ -46,8 +47,8 @@
<artifactId>maven-hpi-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<compatibleSinceVersion>3.1</compatibleSinceVersion>
</configuration>
<compatibleSinceVersion>3.1</compatibleSinceVersion>
</configuration>
</plugin>
<!-- http://stackoverflow.com/questions/15166781/mvn-releaseprepare-not-committing-changes-to-pom-xml -->
<plugin>
Expand All @@ -68,14 +69,20 @@
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>matrix-project</artifactId>
<version>1.4</version>
<optional>true</optional>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>cloudbees-folder</artifactId>
<version>4.2</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.synopsys.arc.jenkinsci.plugins</groupId>
<artifactId>job-restrictions</artifactId>
<version>0.4</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>sectioned-view</artifactId>
Expand Down
@@ -0,0 +1,84 @@
package jenkins.advancedqueue.jobrestrictions;

import hudson.Extension;
import hudson.model.Queue.BuildableItem;
import hudson.model.Run;
import hudson.util.ListBoxModel;
import jenkins.advancedqueue.PrioritySorterConfiguration;
import jenkins.advancedqueue.sorter.ItemInfo;
import jenkins.advancedqueue.sorter.QueueItemCache;
import jenkins.advancedqueue.util.PrioritySorterUtil;

import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.QueryParameter;

import com.synopsys.arc.jenkinsci.plugins.jobrestrictions.restrictions.JobRestriction;
import com.synopsys.arc.jenkinsci.plugins.jobrestrictions.restrictions.JobRestrictionDescriptor;

/**
* @since 3.3
*/
public class PrioritySorterRestriction extends JobRestriction {

@Extension(optional = true)
public static class DescriptorImpl extends JobRestrictionDescriptor {

@Override
public String getDisplayName() {
return "Priority from PrioritySorter";
}

public ListBoxModel doFillFromPriorityItems() {
return PrioritySorterUtil.fillPriorityItems(PrioritySorterConfiguration.get().getStrategy()
.getNumberOfPriorities());
}

public ListBoxModel doFillToPriorityItems() {
return PrioritySorterUtil.fillPriorityItems(PrioritySorterConfiguration.get().getStrategy()
.getNumberOfPriorities());
}

public ListBoxModel doUpdateFromPriorityItems(@QueryParameter("value") String strValue) {
int value = 1;
try {
value = Integer.valueOf(strValue);
} catch (NumberFormatException e) {
// Use default value
}
ListBoxModel items = PrioritySorterUtil.fillPriorityItems(value, PrioritySorterConfiguration.get()
.getStrategy().getNumberOfPriorities());
return items;
}

}

private int fromPriority;

private int toPriority;

public int getFromPriority() {
return fromPriority;
}

public int getToPriority() {
return toPriority;
}

@DataBoundConstructor
public PrioritySorterRestriction(int fromPriority, int toPriority) {
this.fromPriority = fromPriority;
this.toPriority = toPriority;
}

@Override
public boolean canTake(BuildableItem buildableItem) {
ItemInfo item = QueueItemCache.get().getItem(buildableItem.id);
int priority = item.getPriority();
return priority >= fromPriority && priority <= toPriority;
}

@Override
public boolean canTake(Run run) {
return true;
}
}
@@ -0,0 +1,12 @@
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:sl="/hudson/plugins/sidebar_link">
<f:entry title="From Priority (inclusive)" field="fromPriority">
<f:select
id="fromPriority"
default="${descriptor.defaultPriority}"
onchange="updateListBox('toPriority','${rootURL}/descriptorByName/jenkins.advancedqueue.jobrestrictions.PrioritySorterRestriction/updateFromPriorityItems?value='+encode(this.value))" />
</f:entry>
<f:entry title="To Priority (inclusive)" field="toPriority">
<f:select id="toPriority" default="${descriptor.defaultPriority}"/>
</f:entry>
</j:jelly>

0 comments on commit e56aa37

Please sign in to comment.