github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/service/rest_build.go (about)

     1  package service
     2  
     3  import (
     4  	"net/http"
     5  	"time"
     6  )
     7  
     8  type buildStatusContent struct {
     9  	Id           string            `json:"build_id"`
    10  	BuildVariant string            `json:"build_variant"`
    11  	Tasks        buildStatusByTask `json:"tasks"`
    12  }
    13  
    14  type restBuild struct {
    15  	Id                  string            `json:"id"`
    16  	CreateTime          time.Time         `json:"create_time"`
    17  	StartTime           time.Time         `json:"start_time"`
    18  	FinishTime          time.Time         `json:"finish_time"`
    19  	PushTime            time.Time         `json:"push_time"`
    20  	Version             string            `json:"version"`
    21  	Project             string            `json:"project"`
    22  	Revision            string            `json:"revision"`
    23  	BuildVariant        string            `json:"variant"`
    24  	BuildNumber         string            `json:"number"`
    25  	Status              string            `json:"status"`
    26  	Activated           bool              `json:"activated"`
    27  	ActivatedTime       time.Time         `json:"activated_time"`
    28  	RevisionOrderNumber int               `json:"order"`
    29  	Tasks               buildStatusByTask `json:"tasks"`
    30  	TimeTaken           time.Duration     `json:"time_taken"`
    31  	DisplayName         string            `json:"name"`
    32  	Requester           string            `json:"requester"`
    33  }
    34  
    35  type buildStatus struct {
    36  	Id        string        `json:"task_id"`
    37  	Status    string        `json:"status"`
    38  	TimeTaken time.Duration `json:"time_taken"`
    39  }
    40  
    41  type buildStatusByTask map[string]buildStatus
    42  
    43  // Returns a JSON response with the marshaled output of the build
    44  // specified in the request.
    45  func (restapi *restAPI) getBuildInfo(w http.ResponseWriter, r *http.Request) {
    46  	projCtx := MustHaveRESTContext(r)
    47  	b := projCtx.Build
    48  	if b == nil {
    49  		restapi.WriteJSON(w, http.StatusNotFound, responseError{Message: "error finding build"})
    50  		return
    51  	}
    52  
    53  	destBuild := &restBuild{}
    54  	destBuild.Id = b.Id
    55  	destBuild.CreateTime = b.CreateTime
    56  	destBuild.StartTime = b.StartTime
    57  	destBuild.FinishTime = b.FinishTime
    58  	destBuild.PushTime = b.PushTime
    59  	destBuild.Version = b.Version
    60  	destBuild.Project = b.Project
    61  	destBuild.Revision = b.Revision
    62  	destBuild.BuildVariant = b.BuildVariant
    63  	destBuild.BuildNumber = b.BuildNumber
    64  	destBuild.Status = b.Status
    65  	destBuild.Activated = b.Activated
    66  	destBuild.ActivatedTime = b.ActivatedTime
    67  	destBuild.RevisionOrderNumber = b.RevisionOrderNumber
    68  	destBuild.TimeTaken = b.TimeTaken
    69  	destBuild.DisplayName = b.DisplayName
    70  	destBuild.Requester = b.Requester
    71  
    72  	destBuild.Tasks = make(buildStatusByTask, len(b.Tasks))
    73  	for _, task := range b.Tasks {
    74  		status := buildStatus{
    75  			Id:        task.Id,
    76  			Status:    task.Status,
    77  			TimeTaken: task.TimeTaken,
    78  		}
    79  		destBuild.Tasks[task.DisplayName] = status
    80  	}
    81  
    82  	restapi.WriteJSON(w, http.StatusOK, destBuild)
    83  	return
    84  }
    85  
    86  // Returns a JSON response with the status of the specified build.
    87  // The keys of the object are the task names.
    88  func (restapi restAPI) getBuildStatus(w http.ResponseWriter, r *http.Request) {
    89  	projCtx := MustHaveRESTContext(r)
    90  	b := projCtx.Build
    91  	if b == nil {
    92  		restapi.WriteJSON(w, http.StatusNotFound, responseError{Message: "error finding build"})
    93  		return
    94  	}
    95  
    96  	result := buildStatusContent{
    97  		Id:           b.Id,
    98  		BuildVariant: b.BuildVariant,
    99  		Tasks:        make(buildStatusByTask, len(b.Tasks)),
   100  	}
   101  
   102  	for _, task := range b.Tasks {
   103  		status := buildStatus{
   104  			Id:        task.Id,
   105  			Status:    task.Status,
   106  			TimeTaken: task.TimeTaken,
   107  		}
   108  		result.Tasks[task.DisplayName] = status
   109  	}
   110  
   111  	restapi.WriteJSON(w, http.StatusOK, result)
   112  	return
   113  
   114  }