github.com/go-graphite/carbonapi@v0.17.0/expr/functions/aliasByMetric/function.go (about)

     1  package aliasByMetric
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/go-graphite/carbonapi/expr/helper"
     7  	"github.com/go-graphite/carbonapi/expr/interfaces"
     8  	"github.com/go-graphite/carbonapi/expr/types"
     9  	"github.com/go-graphite/carbonapi/pkg/parser"
    10  
    11  	"strings"
    12  )
    13  
    14  type aliasByMetric struct{}
    15  
    16  func GetOrder() interfaces.Order {
    17  	return interfaces.Any
    18  }
    19  
    20  func New(configFile string) []interfaces.FunctionMetadata {
    21  	res := make([]interfaces.FunctionMetadata, 0)
    22  	f := &aliasByMetric{}
    23  	for _, n := range []string{"aliasByMetric"} {
    24  		res = append(res, interfaces.FunctionMetadata{Name: n, F: f})
    25  	}
    26  	return res
    27  }
    28  
    29  func (f *aliasByMetric) Do(ctx context.Context, eval interfaces.Evaluator, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) ([]*types.MetricData, error) {
    30  	return helper.ForEachSeriesDo1(ctx, eval, e, from, until, values, func(a *types.MetricData) *types.MetricData {
    31  		metric := types.ExtractNameTag(a.Name)
    32  		part := strings.Split(metric, ".")
    33  		name := part[len(part)-1]
    34  		ret := a.CopyLinkTags()
    35  		ret.Name = name
    36  		ret.PathExpression = name
    37  		return ret
    38  	})
    39  }
    40  
    41  // Description is auto-generated description, based on output of https://github.com/graphite-project/graphite-web
    42  func (f *aliasByMetric) Description() map[string]types.FunctionDescription {
    43  	return map[string]types.FunctionDescription{
    44  		"aliasByMetric": {
    45  			Description: "Takes a seriesList and applies an alias derived from the base metric name.\n\n.. code-block:: none\n\n  &target=aliasByMetric(carbon.agents.graphite.creates)",
    46  			Function:    "aliasByMetric(seriesList)",
    47  			Group:       "Alias",
    48  			Module:      "graphite.render.functions",
    49  			Name:        "aliasByMetric",
    50  			Params: []types.FunctionParam{
    51  				{
    52  					Name:     "seriesList",
    53  					Required: true,
    54  					Type:     types.SeriesList,
    55  				},
    56  			},
    57  			NameChange: true, // name changed
    58  			TagsChange: true, // name tag changed
    59  		},
    60  	}
    61  }