func MetricsByTagPair(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) (interface{}, error) { vars := mux.Vars(r) tagk := vars["tagk"] tagv := vars["tagv"] values := schedule.Search.MetricsByTagPair(tagk, tagv) return values, nil }
func FilteredTagsetsByMetric(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) (interface{}, error) { vars := mux.Vars(r) metric := vars["metric"] tagset := opentsdb.TagSet{} var err error ts := r.FormValue("tags") if ts != "" { if tagset, err = opentsdb.ParseTags(ts); err != nil { return nil, err } } return schedule.Search.FilteredTagSets(metric, tagset) }
// ExprGraph returns an svg graph. // The basename of the requested svg file should be a base64 encoded expression. func ExprGraph(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) (interface{}, error) { vars := mux.Vars(r) bs := vars["bs"] b, err := base64.StdEncoding.DecodeString(bs) if err != nil { return nil, err } q := string(b) if len(q) == 0 { return nil, fmt.Errorf("missing expression") } autods := 1000 if a := r.FormValue("autods"); a != "" { i, err := strconv.Atoi(a) if err != nil { return nil, err } autods = i } now := time.Now().UTC() if n := r.FormValue("now"); n != "" { i, err := strconv.ParseInt(n, 10, 64) if err != nil { return nil, err } now = time.Unix(i, 0).UTC() } e, err := expr.New(q, schedule.Conf.Funcs()) if err != nil { return nil, err } else if e.Root.Return() != parse.TypeSeriesSet { return nil, fmt.Errorf("egraph: requires an expression that returns a series") } // it may not strictly be necessary to recreate the contexts each time, but we do to be safe tsdbContext := schedule.Conf.TSDBContext() graphiteContext := schedule.Conf.GraphiteContext() ls := schedule.Conf.LogstashElasticHosts influx := schedule.Conf.InfluxConfig es := schedule.Conf.ElasticHosts res, _, err := e.Execute(tsdbContext, graphiteContext, ls, es, influx, cacheObj, t, now, autods, false, schedule.Search, nil, nil) if err != nil { return nil, err } if err := schedule.ExprSVG(t, w, 800, 600, "", res.Results); err != nil { return nil, err } return nil, nil }
func TagValuesByTagKey(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) (interface{}, error) { vars := mux.Vars(r) tagk := vars["tagk"] s := r.FormValue("since") var since opentsdb.Duration if s == "default" { since = schedule.Conf.SearchSince } else if s != "" { var err error since, err = opentsdb.ParseDuration(s) if err != nil { return nil, err } } return schedule.Search.TagValuesByTagKey(tagk, time.Duration(since)) }
func TagValuesByMetricTagKey(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) (interface{}, error) { vars := mux.Vars(r) metric := vars["metric"] tagk := vars["tagk"] q := r.URL.Query() var values []string if len(q) > 0 { tsf := make(map[string]string) for k, v := range q { tsf[k] = strings.Join(v, "") } values = schedule.Search.FilteredTagValuesByMetricTagKey(metric, tagk, tsf) } else { values = schedule.Search.TagValuesByMetricTagKey(metric, tagk, 0) } return values, nil }
func MetricsByTagKey(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) (interface{}, error) { vars := mux.Vars(r) tagk := vars["tagk"] tagValues, err := schedule.Search.TagValuesByTagKey(tagk, time.Duration(schedule.Conf.SearchSince)) if err != nil { return nil, err } // map[tagv][metrics...] tagvMetrics := make(map[string][]string) for _, tagv := range tagValues { metrics, err := schedule.Search.MetricsByTagPair(tagk, tagv) if err != nil { return nil, err } tagvMetrics[tagv] = metrics } return tagvMetrics, nil }
func TagValuesByMetricTagKey(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) (interface{}, error) { vars := mux.Vars(r) metric := vars["metric"] tagk := vars["tagk"] return schedule.Search.TagValuesByMetricTagKey(metric, tagk, 0) }
func TagKeysByMetric(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) (interface{}, error) { vars := mux.Vars(r) metric := vars["metric"] keys := schedule.Search.TagKeysByMetric(metric) return keys, nil }