Documentation ¶
Overview ¶
Package service exposes core UI and API endpoints.
Index ¶
- Constants
- Variables
- func ForbiddenHandler(w http.ResponseWriter, r *http.Request)
- func GetListener(addr string) (net.Listener, error)
- func GetProject(r *http.Request) *model.Project
- func GetProjectContext(r *http.Request) (projectContext, error)
- func GetRESTContext(r *http.Request) (*model.Context, error)
- func GetRESTv1App(evgService restAPIService) *gimlet.APIApp
- func GetRouter(ctx context.Context, as *APIServer, uis *UIServer) (http.Handler, error)
- func GetServer(addr string, n http.Handler) *http.Server
- func GetTLSListener(addr string, conf *tls.Config) (net.Listener, error)
- func GetTask(r *http.Request) *task.Task
- func MakeTemplateFuncs(fo TemplateFunctionOptions) map[string]interface{}
- func MustHaveProject(r *http.Request) *model.Project
- func MustHaveProjectContext(r *http.Request) projectContext
- func MustHaveRESTContext(r *http.Request) *model.Context
- func MustHaveTask(r *http.Request) *task.Task
- func MustHaveUser(r *http.Request) *user.DBUser
- func NewErrorFlash(message string) flashMessage
- func NewSuccessFlash(message string) flashMessage
- func PopFlashes(store *sessions.CookieStore, r *http.Request, w http.ResponseWriter) []interface{}
- func PushFlash(store *sessions.CookieStore, r *http.Request, w http.ResponseWriter, ...)
- func RedirectIfSpruceSet(w http.ResponseWriter, r *http.Request, u *user.DBUser, ...) bool
- func RedirectSpruceUsers(w http.ResponseWriter, r *http.Request, redirect string) bool
- type APIServer
- type BuildInfo
- type PatchAPIResponse
- type PatchInfo
- type RestPatch
- type RestTask
- type TaskInfo
- type TemplateFunctionOptions
- type TestServer
- type UIBuild
- type UIBuildVariant
- type UIDisplayTask
- type UIProject
- type UIServer
- func (uis *UIServer) GetCommonViewData(w http.ResponseWriter, r *http.Request, needsUser, needsProject bool) ViewData
- func (uis *UIServer) GetManifest(w http.ResponseWriter, r *http.Request)
- func (uis *UIServer) GetPluginHandler(uiPage *plugin.UIPage) func(http.ResponseWriter, *http.Request)
- func (uis *UIServer) GetServiceApp() *gimlet.APIApp
- func (uis *UIServer) GetSettings() evergreen.Settings
- func (uis *UIServer) LoggedError(w http.ResponseWriter, r *http.Request, code int, err error)
- func (uis *UIServer) RedirectToLogin(w http.ResponseWriter, r *http.Request)
- type UIStats
- type UITask
- type ViewData
Constants ¶
const ( FlashSeveritySuccess = "success" FlashSeverityError = "danger" )
const ( ProjectCookieName string = "mci-project-cookie" // Key values used to map user and project data to request context. // These are private custom types to avoid key collisions. RequestProjectContext reqCtxKey = iota )
const ( WebRootPath = "service" Templates = "templates" DefaultLimit = 10 )
const ( // Initial number of revisions to return on first page load InitRevisionsBefore = 50 InitRevisionsAfter = 100 // Number of revisions to return on subsequent requests NoRevisions = 0 MaxNumRevisions = 50 )
const DefaultLogMessages = 100 // passed as a limit, so 0 means don't limit
the task's most recent log messages
const FlashSession = "mci-session"
const (
IncludeSpawnedHosts = "includeSpawnedHosts"
)
const NumRecentVersions = 10
const RestContext restContextKey = 0
const ( // The resolution of times stored in the database TimePrecision = time.Millisecond )
Variables ¶
var ( HostRename = "changeHostDisplayName" HostPasswordUpdate = "updateRDPPassword" HostInstanceTypeUpdate = "updateInstanceType" HostTagUpdate = "updateHostTags" HostExpirationExtension = "extendHostExpiration" HostTerminate = "terminate" HostStop = "stop" HostStart = "start" VolumeRename = "changeVolumeDisplayName" VolumeExtendExpiration = "extendVolumeExpiration" VolumeSetNoExpiration = "setVolumeNoExpiration" VolumeSetHasExpiration = "setVolumeHasExpiration" VolumeAttach = "attachVolume" VolumeDetach = "detachVolume" VolumeDelete = "deleteVolume" )
Functions ¶
func ForbiddenHandler ¶
func ForbiddenHandler(w http.ResponseWriter, r *http.Request)
ForbiddenHandler logs a rejected request befure returning a 403 to the client
func GetListener ¶
GetListener creates a network listener on the given address.
func GetProject ¶
GetProject loads the project attached to a request into request context.
func GetProjectContext ¶
GetProjectContext fetches the projectContext associated with the request. Returns an error if no projectContext has been loaded and attached to the request.
func GetRESTContext ¶
GetRESTContext fetches the context associated with the request.
func GetRESTv1App ¶
GetRESTv1App attaches a router at the given root that hooks up REST endpoint URIs to be handled by the given restAPIService.
func GetTLSListener ¶
GetTLSListener creates an encrypted listener with the given TLS config and address.
func MakeTemplateFuncs ¶
func MakeTemplateFuncs(fo TemplateFunctionOptions) map[string]interface{}
MakeTemplateFuncs creates and registers all of our built-in template functions.
func MustHaveProject ¶
MustHaveProject gets the project from the HTTP request and panics if there is no project specified
func MustHaveProjectContext ¶
MustHaveProjectContext gets the projectContext from the request, or panics if it does not exist.
func MustHaveRESTContext ¶
MustHaveRESTContext fetches the model.Context stored with the request, and panics if the key is not set.
func MustHaveTask ¶
MustHaveTask gets the task from an HTTP Request. Panics if the task is not in request context.
func MustHaveUser ¶
MustHaveUser gets the user from the request or panics if it does not exist.
func NewErrorFlash ¶
func NewErrorFlash(message string) flashMessage
func NewSuccessFlash ¶
func NewSuccessFlash(message string) flashMessage
func PopFlashes ¶
func PopFlashes(store *sessions.CookieStore, r *http.Request, w http.ResponseWriter) []interface{}
func PushFlash ¶
func PushFlash(store *sessions.CookieStore, r *http.Request, w http.ResponseWriter, msg flashMessage)
func RedirectIfSpruceSet ¶
func RedirectIfSpruceSet(w http.ResponseWriter, r *http.Request, u *user.DBUser, redirect, UIv2Url string) bool
RedirectIfSpruceSet redirects the user to spruce only if they aren't visiting this page from spruce already and have spruce enabled
func RedirectSpruceUsers ¶
Types ¶
type APIServer ¶
type APIServer struct { UserManager gimlet.UserManager Settings evergreen.Settings // contains filtered or unexported fields }
APIServer handles communication with Evergreen agents and other back-end requests.
func NewAPIServer ¶
NewAPIServer returns an APIServer initialized with the given settings and plugins.
func (*APIServer) FetchTask ¶
func (as *APIServer) FetchTask(w http.ResponseWriter, r *http.Request)
FetchTask loads the task from the database and sends it to the requester.
func (*APIServer) GetServiceApp ¶
NewRouter returns the root router for all APIServer endpoints. These routes are deprecated; any new functionality should be added to REST v2
func (*APIServer) GetSettings ¶
GetSettings returns the global evergreen settings.
func (*APIServer) LoggedError ¶
LoggedError logs the given error and writes an HTTP response with its details formatted as JSON if the request headers indicate that it's acceptable (or plaintext otherwise).
type PatchAPIResponse ¶
type PatchAPIResponse struct { Message string `json:"message"` Action string `json:"action"` Patch *patch.Patch `json:"patch"` }
PatchAPIResponse is returned by all patch-related API calls
type PatchInfo ¶
type PatchInfo struct { Id string `json:"id"` Version string `json:"version"` Author string `json:"author"` CreateTime time.Time `json:"create_time"` Project string `json:"project"` Description string `json:"description"` Githash string `json:"githash"` BaseVersionId string `json:"base_version_id"` Alias string `json:"alias"` }
type RestPatch ¶
type RestPatch struct { Id string `json:"_id"` Description string `json:"desc"` Project string `json:"project"` Revision string `json:"revision"` PatchNumber int `json:"patch_number"` Author string `json:"author"` Version string `json:"version"` CreateTime time.Time `json:"create_time"` Patches []patch.ModulePatch `json:"patches"` }
type RestTask ¶
type RestTask struct { Id string `json:"id"` CreateTime time.Time `json:"create_time"` ScheduledTime time.Time `json:"scheduled_time"` DispatchTime time.Time `json:"dispatch_time"` StartTime time.Time `json:"start_time"` FinishTime time.Time `json:"finish_time"` Version string `json:"version"` Project string `json:"project"` Revision string `json:"revision"` Priority int64 `json:"priority"` LastHeartbeat time.Time `json:"last_heartbeat"` Activated bool `json:"activated"` BuildId string `json:"build_id"` DistroId string `json:"distro"` Container string `json:"container,omitempty"` BuildVariant string `json:"build_variant"` DependsOn []task.Dependency `json:"depends_on"` DisplayName string `json:"display_name"` HostId string `json:"host_id"` Execution int `json:"execution"` Archived bool `json:"archived"` RevisionOrderNumber int `json:"order"` Requester string `json:"requester"` Status string `json:"status"` StatusDetails taskStatusDetails `json:"status_details"` Aborted bool `json:"aborted"` TimeTaken time.Duration `json:"time_taken"` ExpectedDuration time.Duration `json:"expected_duration"` LocalTestResults taskTestResultsByName `json:"test_results"` MinQueuePos int `json:"min_queue_pos"` PatchNumber int `json:"patch_number,omitempty"` PatchId string `json:"patch_id,omitempty"` ModulePaths map[string]string `json:"module_paths,omitempty"` // Artifacts and binaries Files []taskFile `json:"files"` }
type TaskInfo ¶
type TaskInfo struct { Id string `json:"id"` DisplayName string `json:"display_name"` Status string `json:"status"` Details apimodels.TaskEndDetail `json:"status_details"` }
type TemplateFunctionOptions ¶
FuncOptions are global variables injected into our templating functions.
type TestServer ¶
type TestServer struct { URL string net.Listener *APIServer // contains filtered or unexported fields }
func CreateTestServer ¶
func (*TestServer) Close ¶
func (s *TestServer) Close()
type UIBuild ¶
type UIBuild struct { Id string `json:"id"` CreateTime time.Time `json:"create_time"` StartTime time.Time `json:"start_time"` FinishTime time.Time `json:"finish_time"` Version string `json:"version"` Status string `json:"status"` TimeTaken int64 `json:"time_taken"` }
UIBuild has the fields that are necessary to send over the wire for builds
type UIBuildVariant ¶
type UIBuildVariant struct { Name string `json:"name"` TaskNames []string `json:"task_names"` DisplayTasks []UIDisplayTask `json:"display_tasks"` }
UIBuildVariant contains the name of the build variant and the tasks associated with that build variant.
type UIDisplayTask ¶
type UIProject ¶
type UIProject struct { Name string `json:"name"` BuildVariants []UIBuildVariant `json:"build_variants"` TaskNames []string `json:"task_names"` }
UIProject has all the tasks that are in a project and all the BuildVariants.
type UIServer ¶
type UIServer struct { // Home is the root path on disk from which relative urls are constructed for loading // plugins or other assets. Home string // The root URL of the server, used in redirects for instance. RootURL string Settings evergreen.Settings CookieStore *sessions.CookieStore plugin.PanelManager // contains filtered or unexported fields }
UIServer provides a web interface for Evergreen.
func NewUIServer ¶
func NewUIServer(env evergreen.Environment, queue amboy.Queue, home string, fo TemplateFunctionOptions) (*UIServer, error)
func (*UIServer) GetCommonViewData ¶
func (uis *UIServer) GetCommonViewData(w http.ResponseWriter, r *http.Request, needsUser, needsProject bool) ViewData
GetCommonViewData returns a struct that can supplement the struct used to provide data to views. It contains data that is used for most/all Evergreen pages. The needsUser and needsProject params will cause an error to be logged if there is no user/project. Data will not be returned if the project cannot be found.
func (*UIServer) GetManifest ¶
func (uis *UIServer) GetManifest(w http.ResponseWriter, r *http.Request)
func (*UIServer) GetPluginHandler ¶
func (uis *UIServer) GetPluginHandler(uiPage *plugin.UIPage) func(http.ResponseWriter, *http.Request)
GetPluginHandler returns a handler function given the template route and data to go to that page.
func (*UIServer) GetServiceApp ¶
NewRouter sets up a request router for the UI, installing hard-coded routes as well as those belonging to plugins.
func (*UIServer) GetSettings ¶
GetSettings returns the global evergreen settings.
func (*UIServer) LoggedError ¶
LoggedError logs the given error and writes an HTTP response with its details formatted as JSON if the request headers indicate that it's acceptable (or plaintext otherwise).
func (*UIServer) RedirectToLogin ¶
func (uis *UIServer) RedirectToLogin(w http.ResponseWriter, r *http.Request)
RedirectToLogin forces a redirect to the login page. The redirect param is set on the query so that the user will be returned to the original page after they login.
type UIStats ¶
type UIStats struct { Tasks []*UITask `json:"tasks"` Builds []*UIBuild `json:"builds"` Versions []model.Version `json:"versions"` Patches []patch.Patch `json:"patches"` }
UIStats is all of the data that the stats page might need.
type UITask ¶
type UITask struct { Id string `json:"id"` CreateTime time.Time `json:"create_time"` DispatchTime time.Time `json:"dispatch_time"` ScheduledTime time.Time `json:"scheduled_time"` ContainerAllocatedTime time.Time `json:"container_allocated_time,omitempty"` StartTime time.Time `json:"start_time"` FinishTime time.Time `json:"finish_time"` Version string `json:"version"` Status string `json:"status"` Host string `json:"host"` Distro string `json:"distro"` Container string `json:"container,omitempty"` IsDisplay bool `json:"is_display"` }
UITask has the fields that are necessary to send over the wire for tasks
type ViewData ¶
type ViewData struct { User *user.DBUser ProjectData projectContext Project model.Project Flashes []interface{} Banner string BannerTheme string Csrf htmlTemplate.HTML JiraHost string NewRelic evergreen.NewRelicConfig IsAdmin bool NewUILink string }
ViewData contains common data that is provided to all Evergreen pages
Source Files ¶
- admin.go
- api.go
- api_patch.go
- api_status.go
- api_test_utils.go
- build.go
- distros.go
- doc.go
- event_log.go
- flash.go
- forms.go
- host.go
- middleware.go
- middleware_helpers_current.go
- models.go
- notifications.go
- patch.go
- plugin.go
- pod.go
- project.go
- rest.go
- rest_build.go
- rest_locals.go
- rest_patch.go
- rest_project.go
- rest_task.go
- rest_version.go
- service.go
- spawn.go
- stats.go
- task.go
- task_history.go
- task_queue.go
- templatefuncs.go
- timeline.go
- ui.go
- ui_plugin_build_baron.go
- ui_plugin_manifest.go
- user.go
- version.go
- waterfall.go