github.com/go-graphite/carbonapi@v0.17.0/expr/functions/setXFilesFactor/function.go (about) 1 package setXFilesFactor 2 3 import ( 4 "context" 5 "strconv" 6 7 "github.com/go-graphite/carbonapi/expr/helper" 8 "github.com/go-graphite/carbonapi/expr/interfaces" 9 "github.com/go-graphite/carbonapi/expr/types" 10 "github.com/go-graphite/carbonapi/pkg/parser" 11 ) 12 13 type setXFilesFactor struct{} 14 15 func GetOrder() interfaces.Order { 16 return interfaces.Any 17 } 18 19 func New(_ string) []interfaces.FunctionMetadata { 20 res := make([]interfaces.FunctionMetadata, 0) 21 f := &setXFilesFactor{} 22 functions := []string{"setXFilesFactor", "xFilesFactor"} 23 for _, n := range functions { 24 res = append(res, interfaces.FunctionMetadata{Name: n, F: f}) 25 } 26 return res 27 } 28 29 // setXFilesFactor(seriesList, xFilesFactor) 30 func (f *setXFilesFactor) Do(ctx context.Context, eval interfaces.Evaluator, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) ([]*types.MetricData, error) { 31 if e.ArgsLen() < 2 { 32 return nil, parser.ErrMissingArgument 33 } 34 35 args, err := helper.GetSeriesArg(ctx, eval, e.Arg(0), from, until, values) 36 if err != nil { 37 return nil, err 38 } 39 40 xFilesFactor, err := e.GetFloatArg(1) 41 if err != nil { 42 return nil, err 43 } 44 45 results := make([]*types.MetricData, 0, len(args)) 46 for _, a := range args { 47 r := a.CopyLink() 48 r.XFilesFactor = float32(xFilesFactor) 49 r.Tags["xFilesFactor"] = strconv.FormatFloat(xFilesFactor, 'g', -1, 64) 50 results = append(results, r) 51 } 52 return results, nil 53 } 54 55 // Description is auto-generated description, based on output of https://github.com/graphite-project/graphite-web 56 func (f *setXFilesFactor) Description() map[string]types.FunctionDescription { 57 return map[string]types.FunctionDescription{ 58 "setXFilesFactor": { 59 Description: "Takes one metric or a wildcard seriesList and an xFilesFactor value between 0 and 1. When a series needs to be consolidated, this sets the fraction of values in an interval that must\nnot be null for the consolidation to be considered valid. If there are not enough values then None will be returned for that interval.\n\nExample:\n\n.. code-block:: none\n\n &target=xFilesFactor(Sales.widgets.largeBlue, 0.5)\n &target=Servers.web01.sda1.free_space|consolidateBy('max')|xFilesFactor(0.5)", 60 Function: "setXFilesFactor(seriesList, xFilesFactor)", 61 Group: "Transform", 62 Module: "graphite.render.functions", 63 Name: "setXFilesFactor", 64 Params: []types.FunctionParam{ 65 { 66 Name: "seriesList", 67 Required: true, 68 Type: types.SeriesList, 69 }, 70 { 71 Name: "xFilesFactor", 72 Required: false, 73 Type: types.Float, 74 }, 75 }, 76 }, 77 "xFilesFactor": { 78 Description: "Takes one metric or a wildcard seriesList and an xFilesFactor value between 0 and 1. When a series needs to be consolidated, this sets the fraction of values in an interval that must\nnot be null for the consolidation to be considered valid. If there are not enough values then None will be returned for that interval.\n\nExample:\n\n.. code-block:: none\n\n &target=xFilesFactor(Sales.widgets.largeBlue, 0.5)\n &target=Servers.web01.sda1.free_space|consolidateBy('max')|xFilesFactor(0.5)", 79 Function: "xFilesFactor(seriesList, xFilesFactor)", 80 Group: "Transform", 81 Module: "graphite.render.functions", 82 Name: "xFilesFactor", 83 Params: []types.FunctionParam{ 84 { 85 Name: "seriesList", 86 Required: true, 87 Type: types.SeriesList, 88 }, 89 { 90 Name: "xFilesFactor", 91 Required: false, 92 Type: types.Float, 93 }, 94 }, 95 }, 96 } 97 }