Skip to content
This repository was archived by the owner on Aug 23, 2023. It is now read-only.

Commit

Permalink
Merge pull request #1326 from DeleurApps/fallbackSeries
Browse files Browse the repository at this point in the history
Added fallbackSeries function
  • Loading branch information
Dieterbe authored May 28, 2019
2 parents 9b52b1a + d13dd4c commit eeb3107
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 1 deletion.
2 changes: 1 addition & 1 deletion docs/graphite.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ See also:
| events | | No |
| exclude(seriesList, pattern) seriesList | | Stable |
| exponentialMovingAverage | | No |
| fallbackSeries | | No |
| fallbackSeries | | Stable |
| filterSeries(seriesList, func, operator, threshold) seriesList | | Stable |
| grep(seriesList, pattern) seriesList | | Stable |
| group | | No |
Expand Down
40 changes: 40 additions & 0 deletions expr/func_fallbackSeries.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package expr

import (
"github.com/grafana/metrictank/api/models"
)

type FuncFallbackSeries struct {
in GraphiteFunc
fallback GraphiteFunc
}

func NewFallbackSeries() GraphiteFunc {
return &FuncFallbackSeries{}
}

func (s *FuncFallbackSeries) Signature() ([]Arg, []Arg) {
return []Arg{
ArgSeriesList{val: &s.in},
ArgSeriesList{val: &s.fallback, key: "fallback"},
}, []Arg{ArgSeriesList{}}
}

func (s *FuncFallbackSeries) Context(context Context) Context {
return context
}

func (s *FuncFallbackSeries) Exec(cache map[Req][]models.Series) ([]models.Series, error) {
series, err := s.in.Exec(cache)
if err != nil {
return nil, err
}

if len(series) == 0 {
series, err = s.fallback.Exec(cache)
if err != nil {
return nil, err
}
}
return series, nil
}
76 changes: 76 additions & 0 deletions expr/func_fallbackseries_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package expr

import (
"testing"

"github.com/grafana/metrictank/api/models"
)

func getNewFallbackSeries(in []models.Series, fallback []models.Series) *FuncFallbackSeries {
f := NewFallbackSeries()
s := f.(*FuncFallbackSeries)
s.in = NewMock(in)
s.fallback = NewMock(fallback)
return s
}

func TestFallbackSeriesNo(t *testing.T) {
f := getNewFallbackSeries(
[]models.Series{
{
Interval: 10,
QueryPatt: "a",
Target: "a",
Datapoints: getCopy(a),
},
},
[]models.Series{
{
Interval: 10,
QueryPatt: "b",
Target: "b",
Datapoints: getCopy(b),
},
},
)
out := []models.Series{
{
Interval: 10,
QueryPatt: "a",
Target: "a",
Datapoints: getCopy(a),
},
}

got, err := f.Exec(make(map[Req][]models.Series))
if err := equalOutput(out, got, nil, err); err != nil {
t.Fatal(err)
}
}

func TestFallbackSeriesYes(t *testing.T) {
f := getNewFallbackSeries(
[]models.Series{},
[]models.Series{
{
Interval: 10,
QueryPatt: "b",
Target: "b",
Datapoints: getCopy(b),
},
},
)
out := []models.Series{
{
Interval: 10,
QueryPatt: "b",
Target: "b",
Datapoints: getCopy(b),
},
}

got, err := f.Exec(make(map[Req][]models.Series))
if err := equalOutput(out, got, nil, err); err != nil {
t.Fatal(err)
}
}
1 change: 1 addition & 0 deletions expr/funcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ func init() {
"divideSeries": {NewDivideSeries, true},
"divideSeriesLists": {NewDivideSeriesLists, true},
"exclude": {NewExclude, true},
"fallbackSeries": {NewFallbackSeries, true},
"filterSeries": {NewFilterSeries, true},
"grep": {NewGrep, true},
"groupByTags": {NewGroupByTags, true},
Expand Down

0 comments on commit eeb3107

Please sign in to comment.