github.com/go-graphite/carbonapi@v0.17.0/expr/functions/logit/function.go (about) 1 package logit 2 3 import ( 4 "context" 5 "fmt" 6 "math" 7 8 "github.com/go-graphite/carbonapi/expr/helper" 9 "github.com/go-graphite/carbonapi/expr/interfaces" 10 "github.com/go-graphite/carbonapi/expr/types" 11 "github.com/go-graphite/carbonapi/pkg/parser" 12 ) 13 14 type logit 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 := &logit{} 23 functions := []string{"logit"} 24 for _, n := range functions { 25 res = append(res, interfaces.FunctionMetadata{Name: n, F: f}) 26 } 27 return res 28 } 29 30 // logarithm(seriesList, base=10) 31 // Alias: log 32 func (f *logit) Do(ctx context.Context, eval interfaces.Evaluator, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) ([]*types.MetricData, error) { 33 arg, err := helper.GetSeriesArg(ctx, eval, e.Arg(0), from, until, values) 34 if err != nil { 35 return nil, err 36 } 37 38 var results []*types.MetricData 39 for _, a := range arg { 40 r := a.CopyLink() 41 r.Name = fmt.Sprintf("logit(%s)", a.Name) 42 r.Values = make([]float64, len(a.Values)) 43 r.Tags["logit"] = "logit" 44 45 for i, v := range a.Values { 46 if math.IsNaN(v) || v == 1 { 47 r.Values[i] = math.NaN() 48 } else { 49 r.Values[i] = math.Log(v / (1 - v)) 50 } 51 } 52 results = append(results, r) 53 } 54 return results, nil 55 } 56 57 // Description is auto-generated description, based on output of https://github.com/graphite-project/graphite-web 58 func (f *logit) Description() map[string]types.FunctionDescription { 59 return map[string]types.FunctionDescription{ 60 "logit": { 61 Description: "Takes one metric or a wildcard seriesList and applies the logit function log(x / (1 - x)) to each datapoint.\n\nExample:\n\n.. code-block:: none\n\n &target=logit(Server.instance01.threads.busy)\n&target=logit(Server.instance*.threads.busy)", 62 Function: "logit(seriesList)", 63 Group: "Transform", 64 Module: "graphite.render.functions", 65 Name: "logit", 66 Params: []types.FunctionParam{ 67 { 68 Name: "seriesList", 69 Required: true, 70 Type: types.SeriesList, 71 }, 72 }, 73 }, 74 } 75 }