Documentation ¶
Index ¶
- Constants
- Variables
- func BucketPermissions(c context.Context, buckets ...string) (bbAccess.Permissions, error)
- func Duration(start *timestamp.Timestamp, ends ...*timestamp.Timestamp) string
- func EnsurePubSubSubscribed(c context.Context, settings *config.Settings) error
- func GetSettings(c context.Context) *config.Settings
- func HumanDuration(d time.Duration) string
- func IsAdmin(c context.Context) (bool, error)
- func IsAllowed(c context.Context, project string) (bool, error)
- func LuciConfigURL(c context.Context, configSet, path, revision string) string
- func MergeStrings(sss ...[]string) []string
- func ReplaceNSEWith(err errors.MultiError, replacement error) error
- func TagGRPC(c context.Context, err error) error
- func UpdateConsoles(c context.Context) error
- func UpdateServiceConfig(c context.Context) (*config.Settings, error)
- func WithAccessClient(c context.Context, a *AccessClient) context.Context
- type AccessClient
- type Console
- func GetAllConsoles(c context.Context, builderID string) ([]*Console, error)
- func GetConsole(c context.Context, proj, id string) (*Console, error)
- func GetConsoles(c context.Context, consoles []ConsoleID) ([]*Console, error)
- func GetProjectConsoles(c context.Context, projectID string) ([]*Console, error)
- type ConsoleID
- type Interval
- type Project
- type PubSubMessage
- type PubSubSubscription
- type ServiceConfig
Constants ¶
const ServiceConfigID = "service_config"
ServiceConfigID is the key for the service config entity in datastore.
Variables ¶
var ErrConsoleNotFound = errors.New("console not found")
ErrConsoleNotFound is returned from GetConsole if the requested console isn't known to exist.
Functions ¶
func BucketPermissions ¶
BucketPermissions gets permissions for the current identity for all given buckets.
TODO(mknyszek): If a cache entry expires, then there could be QPS issues if all instances query buildbucket for an update simultaneously. Evaluate whether there's an issue in practice, and if so, consider expiring cache entries randomly.
func Duration ¶
Duration returns duration between start and the earliest of ends. Ignores nil ends. Fallbacks to "N/A" on insufficient data.
func EnsurePubSubSubscribed ¶
EnsurePubSubSubscribed makes sure the following subscriptions are in place: * buildbucket, via the settings.Buildbucket.Topic setting
func GetSettings ¶
GetSettings returns the service (aka global) config for the current instance of Milo from the datastore. Returns an empty config and warn heavily if none is found. TODO(hinoka): Use process cache to cache configs.
func HumanDuration ¶
HumanDuration translates d into a human readable string of x units y units, where x and y could be in days, hours, minutes, or seconds, whichever is the largest.
func IsAllowed ¶
IsAllowed checks to see if the user in the context is allowed to access the given project.
func LuciConfigURL ¶
LuciConfigURL returns a user friendly URL that specifies where to view this console definition.
func MergeStrings ¶
MergeStrings merges multiple string slices together into a single slice, removing duplicates.
func ReplaceNSEWith ¶
func ReplaceNSEWith(err errors.MultiError, replacement error) error
ReplaceNSEWith takes an errors.MultiError returned by a datastore.Get() on a slice (which is always a MultiError), filters out all datastore.ErrNoSuchEntity or replaces it with replacement instances, and returns an error generated by errors.LazyMultiError.
func TagGRPC ¶
TagGRPC annotates some gRPC with Milo specific semantics, specifically: * Marks the error as Unauthorized if the user is not logged in, and the underlying error was a 403 or 404. * Otherwise, tag the error with the original error code.
func UpdateConsoles ¶
UpdateConsoles updates internal console definitions entities based off luci-config.
func UpdateServiceConfig ¶
UpdateServiceConfig fetches the service config from luci-config and then stores a snapshot of the configuration in datastore.
func WithAccessClient ¶
func WithAccessClient(c context.Context, a *AccessClient) context.Context
WithAccessClient attaches an AccessClient to the given context.
Types ¶
type AccessClient ¶
type AccessClient struct { accessProto.AccessClient Host string }
AccessClient wraps an accessProto.AccessClient and exports its Host.
func GetAccessClient ¶
func GetAccessClient(c context.Context) *AccessClient
GetAccessClient retrieves an AccessClient from the given context.
func NewAccessClient ¶
func NewAccessClient(c context.Context) (*AccessClient, error)
NewAccessClient creates a new AccessClient for talking to this milo instance's buildbucket instance.
type Console ¶
type Console struct { // Parent is a key to the parent Project entity where this console was // defined in. Parent *datastore.Key `gae:"$parent"` // ID is the ID of the console. ID string `gae:"$id"` // Ordinal specifies the console's ordering in its project's consoles list. Ordinal int // The URL to the luci-config definition of this console. ConfigURL string // The luci-config reivision from when this Console was retrieved. ConfigRevision string `gae:",noindex"` // (indexed) All builder IDs mentioned by this console config. Builders []string // Def is the actual underlying proto Console definition. Def config.Console `gae:",noindex"` // contains filtered or unexported fields }
Console is a datastore entity representing a single console.
func GetAllConsoles ¶
GetAllConsoles returns all Consoles (across all projects) which contain the builder ID. If builderID is empty, then this retrieves all Consoles.
TODO-perf(iannucci): Maybe memcache this too.
func GetConsole ¶
GetConsole returns the requested console.
TODO-perf(iannucci,hinoka): Memcache this.
func GetConsoles ¶
GetConsoles returns the requested consoles.
TODO-perf(iannucci,hinoka): Memcache this.
func GetProjectConsoles ¶
GetProjectConsoles returns all consoles for the given project ordered as in config.
func (*Console) FilterBuilders ¶
func (c *Console) FilterBuilders(perms access.Permissions)
FilterBuilders uses an access.Permissions to filter out builder IDs and builders from the definition, and builders in the definition's header, which are not allowed by the permissions.
type ConsoleID ¶
ConsoleID is a reference to a console.
func ParseConsoleID ¶
ParseConsoleID reformats the string into a ConsoleID.
type Interval ¶
func ToInterval ¶
type Project ¶
type Project struct { ID string `gae:"$id"` LogoURL string BuildBugTemplate config.BugTemplate }
Project is a datastore entity representing a single project. Its children are consoles.
func GetAllProjects ¶
GetAllProjects returns all projects the current user has access to.
type PubSubMessage ¶
type PubSubSubscription ¶
type PubSubSubscription struct { Message PubSubMessage `json:"message"` Subscription string `json:"subscription"` }
func (*PubSubSubscription) GetData ¶
func (m *PubSubSubscription) GetData() ([]byte, error)
GetData returns the expanded form of Data (decoded from base64).
type ServiceConfig ¶
type ServiceConfig struct { // ID is the datastore key. This should be static, as there should only be // one service config. ID string `gae:"$id"` // Revision is the revision of the config, taken from luci-config. This is used // to determine if the entry needs to be refreshed. Revision string // Data is the binary proto of the config. Data []byte `gae:",noindex"` // Text is the text format of the config. For human consumption only. Text string `gae:",noindex"` // LastUpdated is the time this config was last updated. LastUpdated time.Time }
ServiceConfig is a container for the instance's service config.
func GetCurrentServiceConfig ¶
func GetCurrentServiceConfig(c context.Context) (*ServiceConfig, error)
GetCurrentServiceConfig gets the service config for the instance from either process cache or datastore cache.