func (*InfluxdbQueryParser) parseTags(model *simplejson.Json) ([]*Tag, error) { var result []*Tag for _, t := range model.Get("tags").MustArray() { tagJson := simplejson.NewFromAny(t) tag := &Tag{} var err error tag.Key, err = tagJson.Get("key").String() if err != nil { return nil, err } tag.Value, err = tagJson.Get("value").String() if err != nil { return nil, err } operator, err := tagJson.Get("operator").String() if err == nil { tag.Operator = operator } condition, err := tagJson.Get("condition").String() if err == nil { tag.Condition = condition } result = append(result, tag) } return result, nil }
func (*InfluxdbQueryParser) parseQueryPart(model *simplejson.Json) (*QueryPart, error) { typ, err := model.Get("type").String() if err != nil { return nil, err } var params []string for _, paramObj := range model.Get("params").MustArray() { param := simplejson.NewFromAny(paramObj) stringParam, err := param.String() if err == nil { params = append(params, stringParam) continue } intParam, err := param.Int() if err == nil { params = append(params, strconv.Itoa(intParam)) continue } return nil, err } qp, err := NewQueryPart(typ, params) if err != nil { return nil, err } return qp, nil }
func findPanelQueryByRefId(panel *simplejson.Json, refId string) *simplejson.Json { for _, targetsObj := range panel.Get("targets").MustArray() { target := simplejson.NewFromAny(targetsObj) if target.Get("refId").MustString() == refId { return target } } return nil }
func addGettingStartedPanelToHomeDashboard(dash *simplejson.Json) { rows := dash.Get("rows").MustArray() row := simplejson.NewFromAny(rows[0]) newpanel := simplejson.NewFromAny(map[string]interface{}{ "type": "gettingstarted", "id": 123123, "span": 12, }) panels := row.Get("panels").MustArray() panels = append(panels, newpanel) row.Set("panels", panels) }
func newThresholdEvaluator(typ string, model *simplejson.Json) (*ThresholdEvaluator, error) { params := model.Get("params").MustArray() if len(params) == 0 { return nil, alerting.ValidationError{Reason: "Evaluator missing threshold parameter"} } firstParam, ok := params[0].(json.Number) if !ok { return nil, alerting.ValidationError{Reason: "Evaluator has invalid parameter"} } defaultEval := &ThresholdEvaluator{Type: typ} defaultEval.Threshold, _ = firstParam.Float64() return defaultEval, nil }
func (qp *InfluxdbQueryParser) parseGroupBy(model *simplejson.Json) ([]*QueryPart, error) { var result []*QueryPart for _, groupObj := range model.Get("groupBy").MustArray() { groupJson := simplejson.NewFromAny(groupObj) queryPart, err := qp.parseQueryPart(groupJson) if err != nil { return nil, err } result = append(result, queryPart) } return result, nil }
func (qp *InfluxdbQueryParser) Parse(model *simplejson.Json, dsInfo *tsdb.DataSourceInfo) (*Query, error) { policy := model.Get("policy").MustString("default") rawQuery := model.Get("query").MustString("") interval := model.Get("interval").MustString("") measurement := model.Get("measurement").MustString("") resultFormat, err := model.Get("resultFormat").String() if err != nil { return nil, err } tags, err := qp.parseTags(model) if err != nil { return nil, err } groupBys, err := qp.parseGroupBy(model) if err != nil { return nil, err } selects, err := qp.parseSelects(model) if err != nil { return nil, err } if interval == "" { dsInterval := dsInfo.JsonData.Get("timeInterval").MustString("") if dsInterval != "" { interval = dsInterval } } return &Query{ Measurement: measurement, Policy: policy, ResultFormat: resultFormat, GroupBy: groupBys, Tags: tags, Selects: selects, RawQuery: rawQuery, Interval: interval, }, nil }
func NewAlertEvaluator(model *simplejson.Json) (AlertEvaluator, error) { typ := model.Get("type").MustString() if typ == "" { return nil, alerting.ValidationError{Reason: "Evaluator missing type property"} } if inSlice(typ, defaultTypes) { return newThresholdEvaluator(typ, model) } if inSlice(typ, rangedTypes) { return newRangedEvaluator(typ, model) } if typ == "no_value" { return &NoValueEvaluator{}, nil } return nil, alerting.ValidationError{Reason: "Evaluator invalid evaluator type: " + typ} }
func newRangedEvaluator(typ string, model *simplejson.Json) (*RangedEvaluator, error) { params := model.Get("params").MustArray() if len(params) == 0 { return nil, alerting.ValidationError{Reason: "Evaluator missing threshold parameter"} } firstParam, ok := params[0].(json.Number) if !ok { return nil, alerting.ValidationError{Reason: "Evaluator has invalid parameter"} } secondParam, ok := params[1].(json.Number) if !ok { return nil, alerting.ValidationError{Reason: "Evaluator has invalid second parameter"} } rangedEval := &RangedEvaluator{Type: typ} rangedEval.Lower, _ = firstParam.Float64() rangedEval.Upper, _ = secondParam.Float64() return rangedEval, nil }
func NewQueryCondition(model *simplejson.Json, index int) (*QueryCondition, error) { condition := QueryCondition{} condition.Index = index condition.HandleRequest = tsdb.HandleRequest queryJson := model.Get("query") condition.Query.Model = queryJson.Get("model") condition.Query.From = queryJson.Get("params").MustArray()[1].(string) condition.Query.To = queryJson.Get("params").MustArray()[2].(string) if err := validateFromValue(condition.Query.From); err != nil { return nil, err } if err := validateToValue(condition.Query.To); err != nil { return nil, err } condition.Query.DatasourceId = queryJson.Get("datasourceId").MustInt64() reducerJson := model.Get("reducer") condition.Reducer = NewSimpleReducer(reducerJson.Get("type").MustString()) evaluatorJson := model.Get("evaluator") evaluator, err := NewAlertEvaluator(evaluatorJson) if err != nil { return nil, err } condition.Evaluator = evaluator return &condition, nil }
func (qp *InfluxdbQueryParser) parseSelects(model *simplejson.Json) ([]*Select, error) { var result []*Select for _, selectObj := range model.Get("select").MustArray() { selectJson := simplejson.NewFromAny(selectObj) var parts Select for _, partObj := range selectJson.MustArray() { part := simplejson.NewFromAny(partObj) queryPart, err := qp.parseQueryPart(part) if err != nil { return nil, err } parts = append(parts, *queryPart) } result = append(result, &parts) } return result, nil }
func (qp *InfluxdbQueryParser) Parse(model *simplejson.Json) (*Query, error) { policy := model.Get("policy").MustString("default") rawQuery := model.Get("query").MustString("") measurement := model.Get("measurement").MustString("") resultFormat, err := model.Get("resultFormat").String() if err != nil { return nil, err } tags, err := qp.parseTags(model) if err != nil { return nil, err } groupBys, err := qp.parseGroupBy(model) if err != nil { return nil, err } selects, err := qp.parseSelects(model) if err != nil { return nil, err } return &Query{ Measurement: measurement, Policy: policy, ResultFormat: resultFormat, GroupBy: groupBys, Tags: tags, Selects: selects, RawQuery: rawQuery, }, nil }
func (qp *QueryParser) Parse(model *simplejson.Json, dsInfo *models.DataSource, queryContext *tsdb.QueryContext) (*Query, error) { query := &Query{TimeRange: queryContext.TimeRange} query.AddClusterToAlias = model.Get("addClusterToAlias").MustBool(false) query.AddHostToAlias = model.Get("addHostToAlias").MustBool(false) query.UseRawQuery = model.Get("rawQuery").MustBool(false) query.RawQuery = model.Get("query").MustString("") query.Cluster = model.Get("cluster").MustStringArray([]string{}) query.Hosts = model.Get("hosts").MustStringArray([]string{}) var metrics []Metric var err error for _, metricsObj := range model.Get("metrics").MustArray() { metricJson := simplejson.NewFromAny(metricsObj) var m Metric m.Alias = metricJson.Get("alias").MustString("") m.Metric, err = metricJson.Get("metric").String() if err != nil { return nil, err } metrics = append(metrics, m) } query.Metrics = metrics var functions []Function for _, functionListObj := range model.Get("functionList").MustArray() { functionListJson := simplejson.NewFromAny(functionListObj) var f Function f.Func = functionListJson.Get("func").MustString("") if err != nil { return nil, err } if f.Func != "" { functions = append(functions, f) } } query.FunctionList = functions return query, nil }