Documentation
¶
Overview ¶
Package metrics defines a set of primitives for declaring and managing metrics within Bigslice. Users declare metrics (such as a counter) using the registration mechanisms provided by this package (e.g., NewCounter). These return handles that are used for metric operations (e.g., incrementing a counter).
Every operation on a metric is performed in a Scope. Scopes are provided by the Bigslice runtime and represent an operational scope in which the metric is aggregated. For example, Bigslice defines a Scope that is attached to each task scheduled by the system. Scopes are merged by the Bigslice runtime to provide aggregated metrics across larger operations (e.g., a single session.Run).
User functions called by Bigslice are supplied a scope through the optional context.Context argument. The user must retrieve this Scope using the ContextScope func.
Metrics cannot be declared concurrently.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Counter ¶
type Counter struct {
// contains filtered or unexported fields
}
Counter is a simple counter metric. Counters implement atomic addition and subtraction on top of an int64.
Example ¶
package main import ( "context" "fmt" "log" "github.com/grailbio/bigslice" "github.com/grailbio/bigslice/exec" "github.com/grailbio/bigslice/metrics" ) func main() { filterCount := metrics.NewCounter() filterFunc := bigslice.Func(func() (slice bigslice.Slice) { slice = bigslice.Const(1, []int{1, 2, 3, 4, 5, 6}) slice = bigslice.Filter(slice, func(ctx context.Context, i int) bool { scope := metrics.ContextScope(ctx) if i%2 == 0 { filterCount.Incr(scope, 1) return false } return true }) return }) sess := exec.Start(exec.Local) res, err := sess.Run(context.Background(), filterFunc) if err != nil { log.Fatal(err) } fmt.Println("filtered:", filterCount.Value(res.Scope())) }
Output: filtered: 3
func NewCounter ¶
func NewCounter() Counter
NewCounter creates, registers, and returns a new Counter metric.
type Metric ¶
type Metric interface {
// contains filtered or unexported methods
}
Metric is the abstract type of a metric. Each metric type must implement a set of generic operations; the metric-specific operations are provided by the metric types themselves.
TODO(marius): eventually consider opening up this interface to allow users to provide their own metrics implementations.
type Scope ¶
type Scope struct {
// contains filtered or unexported fields
}
Scope is a collection of metric instances.
func ContextScope ¶
ContextScope returns the scope attached to the provided context. ContextScope panics if the context does not have an attached scope.