Version: v0.0.0-...-4a11b79 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Sep 2, 2020 License: Apache-2.0 Imports: 22 Imported by: 0



Package buildmerge implements the build.proto tracking and merging logic for luciexe host applications.

You probably want to use `` instead.

This package is separate from luciexe/host to avoid unnecessary entaglement with butler/logdog; All the logic here is implemented to avoid:

* interacting with the environment
* interacting with butler/logdog (except by implementing callbacks for
  those, but only acting on simple datastructures/proto messages)
* handling errors in any 'brutal' ways (all errors in this package are
  handled by reporting them directly in the data structures that this
  package manipulates).

This is done to simplify testing (as much as it can be) by concentrating all the environment stuff into luciexe/host, and all the 'pure' functional stuff here (search "imperative shell, functional core").



This section is empty.


This section is empty.


This section is empty.


type Agent

type Agent struct {
	// MergedBuildC is the channel of all the merged builds generated by this
	// Agent.
	// The rate at which Agent merges Builds is governed by the consumption of
	// this channel; Consuming it slowly will have Agent merge less frequently,
	// and consuming it rapidly will have Agent merge more frequently.
	// The last build before the channel closes will always be the final state of
	// all builds at the time this Agent was Close()'d.
	MergedBuildC <-chan *bbpb.Build

	// Wait on this channel for the Agent to drain. Will only drain after calling
	// Close() at least once.
	DrainC <-chan struct{}
	// contains filtered or unexported fields

Agent holds all the logic around merging build.proto streams.

func New

func New(ctx context.Context, userNamespace types.StreamName, base *bbpb.Build, calculateURLs CalcURLFn) *Agent

New returns a new Agent.


* ctx - used for logging, clock and cancelation. When canceled, the Agent
  will cease sending updates on MergedBuildC, but you must still invoke
  Agent.Close() in order to clean up all resources associated with the
* userNamespace - The logdog namespace (with a trailing slash) under which
  we should monitor streams.
* base - The "model" Build message that all generated builds should start
  with. All build proto streams will be merged onto a copy of this message.
  Any Output.Log's which have non-absolute URLs will have their Url and
  ViewUrl absolutized relative to userNamespace using calculateURLs.
* calculateURLs - A function to calculate Log.Url and Log.ViewUrl values.
  Should be a pure function.

The following fields will be merged into `base` from the user controlled build.proto stream(s):


The frequency of updates from this Agent is governed by how quickly the caller consumes from Agent.MergedBuildC.

func (*Agent) Attach

func (a *Agent) Attach(b *butler.Butler)

Attach should be called once to attach this to a Butler.

This must be done before the butler receives any build.proto streams.

func (*Agent) Close

func (a *Agent) Close()

Close causes the Agent to stop collecting data, emit a final merged build, and then shut down all internal routines.

type CalcURLFn

type CalcURLFn func(namespaceSlash, streamName types.StreamName) (url, viewUrl string)

CalcURLFn is a stateless function which can calculate the absolute url and viewUrl from a given logdog namespace (with trailing slash) and streamName.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL