Skip to content

Commit

Permalink
Merge pull request #1071 from bosun-monitor/funcSigs
Browse files Browse the repository at this point in the history
Documenting function parameter types and returns
  • Loading branch information
captncraig committed Jun 16, 2015
2 parents 986cb9c + 6ab5aa0 commit 1cc2fd6
Show file tree
Hide file tree
Showing 10 changed files with 152 additions and 152 deletions.
12 changes: 6 additions & 6 deletions cmd/bosun/conf/conf.go
Original file line number Diff line number Diff line change
Expand Up @@ -1102,7 +1102,7 @@ func (c *Conf) NewExpr(s string) *expr.Expr {
c.error(err)
}
switch exp.Root.Return() {
case eparse.TypeNumber, eparse.TypeScalar:
case eparse.TypeNumberSet, eparse.TypeScalar:
break
default:
c.errorf("expression must return a number")
Expand Down Expand Up @@ -1216,7 +1216,7 @@ func (c *Conf) Funcs() map[string]eparse.Func {
if err != nil {
return nil, err
}
if a.returnType != eparse.TypeNumber {
if a.returnType != eparse.TypeNumberSet {
return nil, fmt.Errorf("alert requires a number-returning expression (got %v)", a.returnType)
}
return e.Root.Tags()
Expand All @@ -1225,19 +1225,19 @@ func (c *Conf) Funcs() map[string]eparse.Func {
funcs := map[string]eparse.Func{
"alert": {
Args: []eparse.FuncType{eparse.TypeString, eparse.TypeString},
Return: eparse.TypeNumber,
Return: eparse.TypeNumberSet,
Tags: tagAlert,
F: c.alert,
},
"lookup": {
Args: []eparse.FuncType{eparse.TypeString, eparse.TypeString},
Return: eparse.TypeNumber,
Return: eparse.TypeNumberSet,
Tags: lookupTags,
F: lookup,
},
"lookupSeries": {
Args: []eparse.FuncType{eparse.TypeSeries, eparse.TypeString, eparse.TypeString},
Return: eparse.TypeNumber,
Args: []eparse.FuncType{eparse.TypeSeriesSet, eparse.TypeString, eparse.TypeString},
Return: eparse.TypeNumberSet,
Tags: lookupSeriesTags,
F: lookupSeries,
},
Expand Down
6 changes: 3 additions & 3 deletions cmd/bosun/expr/expr.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ func marshalFloat(n float64) ([]byte, error) {

type Number float64

func (n Number) Type() parse.FuncType { return parse.TypeNumber }
func (n Number) Type() parse.FuncType { return parse.TypeNumberSet }
func (n Number) Value() interface{} { return n }
func (n Number) MarshalJSON() ([]byte, error) { return marshalFloat(float64(n)) }

Expand All @@ -156,7 +156,7 @@ func (s Scalar) MarshalJSON() ([]byte, error) { return marshalFloat(float64(s))
// Series is the standard form within bosun to represent timeseries data.
type Series map[time.Time]float64

func (s Series) Type() parse.FuncType { return parse.TypeSeries }
func (s Series) Type() parse.FuncType { return parse.TypeSeriesSet }
func (s Series) Value() interface{} { return s }

func (s Series) MarshalJSON() ([]byte, error) {
Expand Down Expand Up @@ -605,7 +605,7 @@ func (e *State) walkFunc(node *parse.FuncNode, T miniprofiler.Timer) *Results {
panic(err)
}
}
if node.Return() == parse.TypeNumber {
if node.Return() == parse.TypeNumberSet {
for _, r := range res.Results {
e.AddComputation(r, node.String(), r.Value.(Number))
}
Expand Down
116 changes: 58 additions & 58 deletions cmd/bosun/expr/funcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,13 @@ func tagRename(args []parse.Node) (parse.Tags, error) {
var Graphite = map[string]parse.Func{
"graphiteBand": {
Args: []parse.FuncType{parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeScalar},
Return: parse.TypeSeries,
Return: parse.TypeSeriesSet,
Tags: graphiteTagQuery,
F: GraphiteBand,
},
"graphite": {
Args: []parse.FuncType{parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeString},
Return: parse.TypeSeries,
Return: parse.TypeSeriesSet,
Tags: graphiteTagQuery,
F: GraphiteQuery,
},
Expand All @@ -102,13 +102,13 @@ var Graphite = map[string]parse.Func{
var TSDB = map[string]parse.Func{
"band": {
Args: []parse.FuncType{parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeScalar},
Return: parse.TypeSeries,
Return: parse.TypeSeriesSet,
Tags: tagQuery,
F: Band,
},
"change": {
Args: []parse.FuncType{parse.TypeString, parse.TypeString, parse.TypeString},
Return: parse.TypeNumber,
Return: parse.TypeNumberSet,
Tags: tagQuery,
F: Change,
},
Expand All @@ -119,13 +119,13 @@ var TSDB = map[string]parse.Func{
},
"q": {
Args: []parse.FuncType{parse.TypeString, parse.TypeString, parse.TypeString},
Return: parse.TypeSeries,
Return: parse.TypeSeriesSet,
Tags: tagQuery,
F: Query,
},
"window": {
Args: []parse.FuncType{parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeScalar, parse.TypeString},
Return: parse.TypeSeries,
Return: parse.TypeSeriesSet,
Tags: tagQuery,
F: Window,
Check: windowCheck,
Expand All @@ -136,115 +136,115 @@ var builtins = map[string]parse.Func{
// Reduction functions

"avg": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Avg,
},
"dev": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Dev,
},
"diff": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Diff,
},
"first": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: First,
},
"forecastlr": {
Args: []parse.FuncType{parse.TypeSeries, parse.TypeScalar},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet, parse.TypeScalar},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Forecast_lr,
},
"last": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Last,
},
"len": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Length,
},
"max": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Max,
},
"median": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Median,
},
"min": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Min,
},
"percentile": {
Args: []parse.FuncType{parse.TypeSeries, parse.TypeScalar},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet, parse.TypeScalar},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Percentile,
},
"since": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Since,
},
"sum": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Sum,
},
"streak": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Streak,
},

// Group functions
"rename": {
Args: []parse.FuncType{parse.TypeSeries, parse.TypeString},
Return: parse.TypeSeries,
Args: []parse.FuncType{parse.TypeSeriesSet, parse.TypeString},
Return: parse.TypeSeriesSet,
Tags: tagRename,
F: Rename,
},

"t": {
Args: []parse.FuncType{parse.TypeNumber, parse.TypeString},
Return: parse.TypeSeries,
Args: []parse.FuncType{parse.TypeNumberSet, parse.TypeString},
Return: parse.TypeSeriesSet,
Tags: tagTranspose,
F: Transpose,
},
"ungroup": {
Args: []parse.FuncType{parse.TypeNumber},
Args: []parse.FuncType{parse.TypeNumberSet},
Return: parse.TypeScalar,
F: Ungroup,
},

// Other functions

"abs": {
Args: []parse.FuncType{parse.TypeNumber},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeNumberSet},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Abs,
},
Expand All @@ -254,26 +254,26 @@ var builtins = map[string]parse.Func{
F: Duration,
},
"des": {
Args: []parse.FuncType{parse.TypeSeries, parse.TypeScalar, parse.TypeScalar},
Return: parse.TypeSeries,
Args: []parse.FuncType{parse.TypeSeriesSet, parse.TypeScalar, parse.TypeScalar},
Return: parse.TypeSeriesSet,
Tags: tagFirst,
F: Des,
},
"dropge": {
Args: []parse.FuncType{parse.TypeSeries, parse.TypeScalar},
Return: parse.TypeSeries,
Args: []parse.FuncType{parse.TypeSeriesSet, parse.TypeScalar},
Return: parse.TypeSeriesSet,
Tags: tagFirst,
F: DropGe,
},
"drople": {
Args: []parse.FuncType{parse.TypeSeries, parse.TypeScalar},
Return: parse.TypeSeries,
Args: []parse.FuncType{parse.TypeSeriesSet, parse.TypeScalar},
Return: parse.TypeSeriesSet,
Tags: tagFirst,
F: DropLe,
},
"dropna": {
Args: []parse.FuncType{parse.TypeSeries},
Return: parse.TypeSeries,
Args: []parse.FuncType{parse.TypeSeriesSet},
Return: parse.TypeSeriesSet,
Tags: tagFirst,
F: DropNA,
},
Expand All @@ -283,26 +283,26 @@ var builtins = map[string]parse.Func{
F: Epoch,
},
"filter": {
Args: []parse.FuncType{parse.TypeSeries, parse.TypeNumber},
Return: parse.TypeSeries,
Args: []parse.FuncType{parse.TypeSeriesSet, parse.TypeNumberSet},
Return: parse.TypeSeriesSet,
Tags: tagFirst,
F: Filter,
},
"limit": {
Args: []parse.FuncType{parse.TypeNumber, parse.TypeScalar},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeNumberSet, parse.TypeScalar},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Limit,
},
"nv": {
Args: []parse.FuncType{parse.TypeNumber, parse.TypeScalar},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeNumberSet, parse.TypeScalar},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: NV,
},
"sort": {
Args: []parse.FuncType{parse.TypeNumber, parse.TypeString},
Return: parse.TypeNumber,
Args: []parse.FuncType{parse.TypeNumberSet, parse.TypeString},
Return: parse.TypeNumberSet,
Tags: tagFirst,
F: Sort,
},
Expand Down Expand Up @@ -659,7 +659,7 @@ func windowCheck(t *parse.Tree, f *parse.FuncNode) error {
if !ok {
return fmt.Errorf("expr: Window: unknown function %v", name)
}
if len(v.Args) != 1 || v.Args[0] != parse.TypeSeries || v.Return != parse.TypeNumber {
if len(v.Args) != 1 || v.Args[0] != parse.TypeSeriesSet || v.Return != parse.TypeNumberSet {
return fmt.Errorf("expr: Window: %v is not a reduction function", name)
}
return nil
Expand Down
4 changes: 2 additions & 2 deletions cmd/bosun/expr/logstash.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ var lsClient *elastic.Client
var LogstashElastic = map[string]parse.Func{
"lscount": {
Args: []parse.FuncType{parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeString},
Return: parse.TypeSeries,
Return: parse.TypeSeriesSet,
Tags: logstashTagQuery,
F: LSCount,
},
"lsstat": {
Args: []parse.FuncType{parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeString, parse.TypeString},
Return: parse.TypeSeries,
Return: parse.TypeSeriesSet,
Tags: logstashTagQuery,
F: LSStat,
},
Expand Down
8 changes: 4 additions & 4 deletions cmd/bosun/expr/parse/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -254,14 +254,14 @@ func (b *BinaryNode) StringAST() string {
func (b *BinaryNode) Check(t *Tree) error {
t1 := b.Args[0].Return()
t2 := b.Args[1].Return()
if t1 == TypeSeries && t2 == TypeSeries {
if t1 == TypeSeriesSet && t2 == TypeSeriesSet {
return fmt.Errorf("parse: type error in %s: at least one side must be a number", b)
}
check := t1
if t1 == TypeSeries {
if t1 == TypeSeriesSet {
check = t2
}
if check != TypeNumber && check != TypeScalar {
if check != TypeNumberSet && check != TypeScalar {
return fmt.Errorf("parse: type error in %s: expected a number", b)
}
if err := b.Args[0].Check(t); err != nil {
Expand Down Expand Up @@ -327,7 +327,7 @@ func (u *UnaryNode) StringAST() string {

func (u *UnaryNode) Check(t *Tree) error {
switch rt := u.Arg.Return(); rt {
case TypeNumber, TypeSeries, TypeScalar:
case TypeNumberSet, TypeSeriesSet, TypeScalar:
return u.Arg.Check(t)
default:
return fmt.Errorf("parse: type error in %s, expected %s, got %s", u, "number", rt)
Expand Down
Loading

0 comments on commit 1cc2fd6

Please sign in to comment.