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  }