func (e *OpenTsdbExecutor) parseResponse(query OpenTsdbQuery, res *http.Response) (map[string]*tsdb.QueryResult, error) { queryResults := make(map[string]*tsdb.QueryResult) queryRes := tsdb.NewQueryResult() body, err := ioutil.ReadAll(res.Body) defer res.Body.Close() if err != nil { return nil, err } if res.StatusCode/100 != 2 { plog.Info("Request failed", "status", res.Status, "body", string(body)) return nil, fmt.Errorf("Request failed status: %v", res.Status) } var data []OpenTsdbResponse err = json.Unmarshal(body, &data) if err != nil { plog.Info("Failed to unmarshal opentsdb response", "error", err, "status", res.Status, "body", string(body)) return nil, err } for _, val := range data { series := tsdb.TimeSeries{ Name: val.Metric, } for timeString, value := range val.DataPoints { timestamp, err := strconv.ParseFloat(timeString, 64) if err != nil { plog.Info("Failed to unmarshal opentsdb timestamp", "timestamp", timeString) return nil, err } series.Points = append(series.Points, tsdb.NewTimePoint(null.FloatFrom(value), timestamp)) } queryRes.Series = append(queryRes.Series, &series) } queryResults["A"] = queryRes return queryResults, nil }
func parseResponse(value pmodel.Value, query *PrometheusQuery) (map[string]*tsdb.QueryResult, error) { queryResults := make(map[string]*tsdb.QueryResult) queryRes := tsdb.NewQueryResult() data, ok := value.(pmodel.Matrix) if !ok { return queryResults, fmt.Errorf("Unsupported result format: %s", value.Type().String()) } for _, v := range data { series := tsdb.TimeSeries{ Name: formatLegend(v.Metric, query), } for _, k := range v.Values { series.Points = append(series.Points, tsdb.NewTimePoint(null.FloatFrom(float64(k.Value)), float64(k.Timestamp.Unix()*1000))) } queryRes.Series = append(queryRes.Series, &series) } queryResults["A"] = queryRes return queryResults, nil }