Skip to content

Commit

Permalink
Show queued builds'
Browse files Browse the repository at this point in the history
  • Loading branch information
Surya Gaddipati committed Jan 30, 2015
1 parent f017656 commit baa876c
Show file tree
Hide file tree
Showing 7 changed files with 174 additions and 88 deletions.
Expand Up @@ -66,26 +66,14 @@ public BranchHistoryWidget(DynamicProject project) {
}


// public void doAjax(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
// req.getView(this, "ajax_build_history.jelly").forward(req, rsp);
// }
//
// public Iterable<DynamicBuild> getAjaxList() {
// StaplerRequest req = Stapler.getCurrentRequest();
// int firstBuildNumber = Integer.parseInt(req.getParameter("firstBuildNumber"));
// int lastBuildNumber = Integer.parseInt(req.getParameter("lastBuildNumber"));
// return model.getBuildsInProgress(firstBuildNumber, lastBuildNumber);
// }







public RowStyling getRowStyling(DynamicBuild dynamicBuild){
return RowStyling.get(dynamicBuild);
}


public Iterable<BuildHistoryTab> getTabs(){
return tabs;
Expand Down
Expand Up @@ -25,54 +25,27 @@
package com.groupon.jenkins.branchhistory;

import com.groupon.jenkins.dynamic.build.DynamicBuild;
import hudson.model.Queue;
import hudson.model.Result;
import jenkins.model.Jenkins;

import java.io.IOException;

public class BuildHistoryRow {
private DynamicBuild build;
public abstract class BuildHistoryRow {

public BuildHistoryRow(DynamicBuild build){
this.build = build;
}
public int getNumber(){
return build.getNumber();
}
public String getResult(){
if(build.isBuilding()){
return "IN_PROGRESS";
}
return build.getResult().toString();
}
public String getIcon(){
public abstract int getNumber();

if(build.isBuilding()){
return "fa-circle-o-notch fa-spin";
}
if( Result.SUCCESS.equals( build.getResult())){
return "fa-check";
public abstract String getResult();

}
if(Result.FAILURE.equals(build.getResult())){
return "fa-times" ;
}
return"fa-ban" ;
}
public String getMessage() throws IOException {
return Jenkins.getInstance().getMarkupFormatter().translate(build.getCause().getCommitInfo().getMessage()) ;
}
public String getCommitUrl(){
return build.getCause().getCommitInfo().getCommitUrl();
}
public abstract String getIcon();

public String getCommitDisplayString(){
return build.getCause().getCommitInfo().getDisplayString();
}
public String getCommitter(){
return build.getCause().getCommitInfo().getCommitter();
}
public String getDisplayTime(){
return build.getDisplayTime();
}
public abstract String getMessage() throws IOException;

public abstract String getCommitUrl();

public abstract String getCommitDisplayString();

public abstract String getCommitter();

public abstract String getDisplayTime();
}
Expand Up @@ -27,16 +27,17 @@
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.groupon.jenkins.SetupConfig;
import com.groupon.jenkins.dynamic.build.DbBackedProject;
import com.groupon.jenkins.dynamic.build.DynamicBuild;
import com.groupon.jenkins.dynamic.build.DynamicProject;
import com.groupon.jenkins.dynamic.build.DynamicProjectBranchTabsProperty;
import com.groupon.jenkins.dynamic.build.repository.DynamicBuildRepository;
import hudson.model.Queue;
import jenkins.model.Jenkins;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.*;

public class BuildHistoryTab {

Expand Down Expand Up @@ -73,14 +74,25 @@ private DynamicBuildRepository getDynamicBuildRepository(){

public Iterable<BuildHistoryRow> getBuilds() {
String branch = getUrl().equals("all")?null:getUrl();
return Iterables.transform(filterSkipped(isMyBuilds() ? getDynamicBuildRepository().<DynamicBuild>getCurrentUserBuilds(project, BranchHistoryWidget.BUILD_COUNT) : getDynamicBuildRepository().<DynamicBuild>getLast(project, BranchHistoryWidget.BUILD_COUNT, branch)), getBuildTransformer());
Iterable<BuildHistoryRow> processedBuilds = Iterables.transform(filterSkipped(isMyBuilds() ? getDynamicBuildRepository().<DynamicBuild>getCurrentUserBuilds(project, BranchHistoryWidget.BUILD_COUNT) : getDynamicBuildRepository().<DynamicBuild>getLast(project, BranchHistoryWidget.BUILD_COUNT, branch)), getBuildTransformer());
return Iterables.concat(getQueuedBuilds(),processedBuilds);
}

private Iterable<BuildHistoryRow> getQueuedBuilds() {
ArrayList<BuildHistoryRow> queuedBuilds = new ArrayList<BuildHistoryRow>();
final List<Queue.Item> queuedItems = getQueuedItems();
for(int i=0 ; i < queuedItems.size(); i++){
int number = queuedItems.size() == 1 ? project.getNextBuildNumber() : project.getNextBuildNumber() + queuedItems.size() - i - 1;
queuedBuilds.add(new QueuedBuildHistoryRow(queuedItems.get(i),number));
}
return queuedBuilds;
}

private Function<DynamicBuild, BuildHistoryRow> getBuildTransformer() {
return new Function<DynamicBuild, BuildHistoryRow>() {
@Override
public BuildHistoryRow apply(DynamicBuild dynamicBuild) {
return new BuildHistoryRow(dynamicBuild);
return new ProcessedBuildHistoryRow(dynamicBuild);
}
};
}
Expand Down Expand Up @@ -139,4 +151,24 @@ private static DynamicProjectBranchTabsProperty getTabsProperty(DynamicProject p
public boolean isMyBuilds() {
return getName().equals("mine");
}

public List<Queue.Item> getQueuedItems() {
LinkedList<Queue.Item> list = new LinkedList<Queue.Item>();
for (Queue.Item item : Jenkins.getInstance().getQueue().getApproximateItemsQuickly()) {
if (item.task == project) {
list.addFirst(item);
}
}
return list;
}
// public void doAjax(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {
// req.getView(this, "ajax_build_history.jelly").forward(req, rsp);
// }
//
// public Iterable<DynamicBuild> getAjaxList() {
// StaplerRequest req = Stapler.getCurrentRequest();
// int firstBuildNumber = Integer.parseInt(req.getParameter("firstBuildNumber"));
// int lastBuildNumber = Integer.parseInt(req.getParameter("lastBuildNumber"));
// return model.getBuildsInProgress(firstBuildNumber, lastBuildNumber);
// }
}
Expand Up @@ -26,48 +26,62 @@

import com.groupon.jenkins.dynamic.build.DynamicBuild;
import hudson.model.Result;
import jenkins.model.Jenkins;

public enum RowStyling {
IN_PROGRESS("#fffcf4", "fa-circle-o-notch fa-spin","#E7D100"),
SUCCESS("#fafffa", "fa-check","#038035"),
FAILURE("snow","fa-times","#c00"),
ABORTED("#fdfdfd","fa-ban","#666")
;
import java.io.IOException;

RowStyling(String backgroundColor, String statusIconFont, String statusIconFontColor) {
this.backgroundColor = backgroundColor;
this.statusIconFont = statusIconFont;
this.statusIconFontColor = statusIconFontColor;
}
public class ProcessedBuildHistoryRow extends BuildHistoryRow {
private DynamicBuild build;

public String getBackgroundColor() {
return backgroundColor;
public ProcessedBuildHistoryRow(DynamicBuild build){
this.build = build;
}

public String getStatusIconFont() {
return statusIconFont;
@Override
public int getNumber(){
return build.getNumber();
}

public String getStatusIconFontColor() {
return statusIconFontColor;
@Override
public String getResult(){
if(build.isBuilding()){
return "IN_PROGRESS";
}
return build.getResult().toString();
}
@Override
public String getIcon(){

private String backgroundColor;
private String statusIconFont;
private String statusIconFontColor;

public static RowStyling get(DynamicBuild build) {
if(build.isBuilding()){
return RowStyling.IN_PROGRESS;
return "fa-circle-o-notch fa-spin";
}
if( Result.SUCCESS.equals( build.getResult())){
return RowStyling.SUCCESS;
return "fa-check";

}
if(Result.FAILURE.equals(build.getResult())){
return RowStyling.FAILURE;
return "fa-times" ;
}
return RowStyling.ABORTED;
return"fa-ban" ;
}
@Override
public String getMessage() throws IOException {
return Jenkins.getInstance().getMarkupFormatter().translate(build.getCause().getCommitInfo().getMessage()) ;
}
@Override
public String getCommitUrl(){
return build.getCause().getCommitInfo().getCommitUrl();
}

@Override
public String getCommitDisplayString(){
return build.getCause().getCommitInfo().getDisplayString();
}
@Override
public String getCommitter(){
return build.getCause().getCommitInfo().getCommitter();
}
@Override
public String getDisplayTime(){
return build.getDisplayTime();
}
}
@@ -0,0 +1,79 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2014, Groupon, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

package com.groupon.jenkins.branchhistory;

import hudson.model.Queue;

import java.io.IOException;

public class QueuedBuildHistoryRow extends BuildHistoryRow {
private Queue.Item item;
private int number;

public QueuedBuildHistoryRow(Queue.Item item, int number) {
this.item = item;
this.number = number;
}

@Override
public int getNumber() {
return number;
}

@Override
public String getResult() {
return "QUEUED";
}

@Override
public String getIcon() {
return "fa-paper-plane-o";
}

@Override
public String getMessage() throws IOException {
return "Pending " + item.getCausesDescription();
}

@Override
public String getCommitUrl() {
return "-";
}

@Override
public String getCommitDisplayString() {
return "-";
}

@Override
public String getCommitter() {
return item.getCauseOfBlockage().getShortDescription();
}

@Override
public String getDisplayTime() {
return "-";
}
}
Expand Up @@ -33,7 +33,7 @@ THE SOFTWARE.
<th>Started</th>
</tr>
</thead>
<st:include page="pending_builds.jelly" />
<!--<st:include page="pending_builds.jelly" />-->
<j:forEach var="build" items="${it.builds}">
<st:include page="build_row.jelly" />
</j:forEach>
Expand Down
Expand Up @@ -26,7 +26,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class ="navbar-brand" href="${it.githubRepoUrl}" style="color:grey"> ${not empty it.parent.fullDisplayName?it.parent.fullDisplayName+'/':''}${it.displayName}<span class="octicon octicon-mark-github"/> </a>
<a class ="navbar-brand" href="${it.githubRepoUrl}" style="color:grey"> ${not empty it.parent.fullDisplayName?it.parent.fullDisplayName+'/':''}${it.displayName}<span class=" octicon octicon-mark-github"/> </a>
</div>

<ul class="nav navbar-nav navbar-left">
Expand Down

0 comments on commit baa876c

Please sign in to comment.