func viewAdapterForInstantQuery(node Node, timestamp time.Time) (viewAdapter *viewAdapter, err error) { analyzer := NewQueryAnalyzer() analyzer.AnalyzeQueries(node) viewBuilder := metric.NewViewRequestBuilder() for fingerprint, rangeDuration := range analyzer.FullRanges { viewBuilder.GetMetricRange(fingerprint, timestamp.Add(-rangeDuration), timestamp) } for fingerprint := range analyzer.IntervalRanges { viewBuilder.GetMetricAtTime(fingerprint, timestamp) } view, err := queryStorage.MakeView(viewBuilder, time.Duration(60)*time.Second) if err == nil { viewAdapter = NewViewAdapter(view) } return }
func viewAdapterForRangeQuery(node Node, start time.Time, end time.Time, interval time.Duration) (viewAdapter *viewAdapter, err error) { analyzer := NewQueryAnalyzer() analyzer.AnalyzeQueries(node) viewBuilder := metric.NewViewRequestBuilder() for fingerprint, rangeDuration := range analyzer.FullRanges { // TODO: we should support GetMetricRangeAtInterval() or similar ops in the view builder. for t := start; t.Before(end); t = t.Add(interval) { viewBuilder.GetMetricRange(fingerprint, t.Add(-rangeDuration), t) } } for fingerprint := range analyzer.IntervalRanges { viewBuilder.GetMetricAtInterval(fingerprint, start, end, interval) } view, err := queryStorage.MakeView(viewBuilder, time.Duration(60)*time.Second) if err == nil { viewAdapter = NewViewAdapter(view) } return }