Skip to content

Commit

Permalink
[JENKINS-21119] Extend loggning to show assigned priority
Browse files Browse the repository at this point in the history
Add decision-logging where the decisions taken to 
calculate the priority is more clearly shown.
  • Loading branch information
emsa23 committed Dec 31, 2013
1 parent d684e37 commit 6d8ae69
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 0 deletions.
Expand Up @@ -37,6 +37,7 @@ public class ItemTransitionLogger {

static public void logNewItem(ItemInfo info) {
LOGGER.fine("New Item: " + info.toString());
LOGGER.finer("New Item: " + info.toString() + "\n" + info.getDescisionLog());
}

static public void logBlockedItem(ItemInfo info) {
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/jenkins/advancedqueue/PriorityConfiguration.java
Expand Up @@ -184,14 +184,17 @@ public PriorityConfigurationCallback getPriority(Queue.Item item, PriorityConfig
// [JENKINS-8597]
// For MatrixConfiguration use the latest assigned Priority from the MatrixProject
if (job instanceof MatrixConfiguration) {
priorityCallback.addDecisionLog("Job is MatrixConfiguration ...");
MatrixProject matrixProject = ((MatrixConfiguration) job).getParent();
ItemInfo itemInfo = QueueItemCache.get().getItem(matrixProject.getName());
// Can be null (for example) at startup when the MatrixBuild got lost (was running at
// restart)
if (itemInfo != null) {
priorityCallback.addDecisionLog("MatrixProject found in cache, using priority from queue-item [" + itemInfo.getItemId() + "]");
return priorityCallback.setPrioritySelection(itemInfo.getPriority(), itemInfo.getJobGroupId(),
itemInfo.getPriorityStrategy());
}
priorityCallback.addDecisionLog("MatrixProject not found in cache, assigning global default priority");
return priorityCallback.setPrioritySelection(PrioritySorterConfiguration.get().getStrategy()
.getDefaultPriority());
}
Expand All @@ -203,13 +206,16 @@ public PriorityConfigurationCallback getPriority(Queue.Item item, PriorityConfig
if (priority == PriorityCalculationsUtil.getUseDefaultPriorityPriority()) {
priority = PrioritySorterConfiguration.get().getStrategy().getDefaultPriority();
}
priorityCallback.addDecisionLog("Using priority taken directly from the Job");
return priorityCallback.setPrioritySelection(priority);
}
}
//
for (JobGroup jobGroup : jobGroups) {
priorityCallback.addDecisionLog("Evaluating JobGroup [" + jobGroup.getId() + "] ...");
Collection<View> views = Jenkins.getInstance().getViews();
nextView: for (View view : views) {
priorityCallback.addDecisionLog(" Evaluating View [" + view.getViewName() + "] ...");
if (view.getViewName().equals(jobGroup.getView())) {
// getItem() always returns the item
TopLevelItem jobItem = view.getItem(job.getName());
Expand All @@ -219,19 +225,24 @@ public PriorityConfigurationCallback getPriority(Queue.Item item, PriorityConfig
// If filtering is used but the pattern is empty regard
// it as a match all
if (!jobGroup.isUseJobFilter() || jobGroup.getJobPattern().trim().isEmpty()) {
priorityCallback.addDecisionLog(" Not using filter ...");
return getPriorityForJobGroup(priorityCallback, jobGroup, item);
} else {
priorityCallback.addDecisionLog(" Using filter ...");
// So filtering is on - use the priority if there's
// a match
try {
if (job.getName().matches(jobGroup.getJobPattern())) {
priorityCallback.addDecisionLog(" Job is matching the filter ...");
return getPriorityForJobGroup(priorityCallback, jobGroup, item);
} else {
priorityCallback.addDecisionLog(" Job is not matching the filter ...");
continue nextView;
}
} catch (PatternSyntaxException e) {
// If the pattern is broken treat this a non
// match
priorityCallback.addDecisionLog(" Filter has syntax error");
continue nextView;
}
}
Expand All @@ -249,10 +260,13 @@ private PriorityConfigurationCallback getPriorityForJobGroup(PriorityConfigurati
int priority = jobGroup.getPriority();
PriorityStrategy reason = null;
if (jobGroup.isUsePriorityStrategies()) {
priorityCallback.addDecisionLog(" Evaluating strategies ...");
List<JobGroup.PriorityStrategyHolder> priorityStrategies = jobGroup.getPriorityStrategies();
for (JobGroup.PriorityStrategyHolder priorityStrategy : priorityStrategies) {
PriorityStrategy strategy = priorityStrategy.getPriorityStrategy();
priorityCallback.addDecisionLog(" Evaluating strategy [" + strategy.getDescriptor().getDisplayName() + "] ...");
if (strategy.isApplicable(item)) {
priorityCallback.addDecisionLog(" Strategy is applicable");
int foundPriority = strategy.getPriority(item);
if (foundPriority > 0
&& foundPriority <= PrioritySorterConfiguration.get().getStrategy().getNumberOfPriorities()) {
Expand All @@ -263,6 +277,9 @@ private PriorityConfigurationCallback getPriorityForJobGroup(PriorityConfigurati
}
}
}
if(reason == null) {
priorityCallback.addDecisionLog(" Using JobGroup default");
}
if (priority == PriorityCalculationsUtil.getUseDefaultPriorityPriority()) {
priority = PrioritySorterConfiguration.get().getStrategy().getDefaultPriority();
}
Expand Down
Expand Up @@ -7,5 +7,7 @@ public interface PriorityConfigurationCallback {
PriorityConfigurationCallback setPrioritySelection(int priority);

PriorityConfigurationCallback setPrioritySelection(int priority, int jobGroupId, PriorityStrategy reason);

PriorityConfigurationCallback addDecisionLog(String log);

}
19 changes: 19 additions & 0 deletions src/main/java/jenkins/advancedqueue/sorter/ItemInfo.java
Expand Up @@ -25,6 +25,10 @@

import static jenkins.advancedqueue.ItemTransitionLogger.logBlockedItem;
import static jenkins.advancedqueue.ItemTransitionLogger.logBuilableItem;

import java.util.ArrayList;
import java.util.List;

import hudson.model.Queue.Item;
import jenkins.advancedqueue.PriorityConfigurationCallback;
import jenkins.advancedqueue.priority.PriorityStrategy;
Expand Down Expand Up @@ -52,6 +56,8 @@ public class ItemInfo implements PriorityConfigurationCallback, SorterStrategyCa
private int priority;

private ItemStatus itemStatus;

private List<String> decisionLog = new ArrayList<String>(10);

ItemInfo(Item item) {
this.itemId = item.id;
Expand All @@ -67,6 +73,11 @@ public PriorityConfigurationCallback setPrioritySelection(int priority, int jobG
return this;
}

public PriorityConfigurationCallback addDecisionLog(String log) {
this.decisionLog.add(log);
return this;
}

public PriorityConfigurationCallback setPrioritySelection(int priority) {
setPrioritySelection(priority, -1, null);
return this;
Expand Down Expand Up @@ -134,5 +145,13 @@ public String toString() {
return String.format("Id: %s JobName: %s, jobGroupId: %s, priority: %s, weight: %s, status: %s", itemId,
jobName, jobGroupId, priority, weight, itemStatus);
}

public String getDescisionLog() {
StringBuffer buffer = new StringBuffer();
for (String log : decisionLog) {
buffer.append(log).append("\n");
}
return buffer.toString();
}

}

0 comments on commit 6d8ae69

Please sign in to comment.