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 }