// gatherDataForEndpoint serves api/hosts pages. // metricStore is the metric store. // endpoint is the endpoint from which we are getting historical metrics. // canonicalPath is the path of the metrics or the empty string for all // metrics. canonicalPath is returned from canonicalisePath(). // history is the amount of time to go back in minutes. // If isSingleton is true, fetched metrics have to match canonicalPath // exactly. // Otherwise fetched metrics have to be found underneath canonicalPath. // On no match, gatherDataForEndpoint returns an empty // messages.EndpointMetricsList instance func gatherDataForEndpoint( metricStore *store.Store, endpoint *collector.Endpoint, canonicalPath string, history int, isSingleton bool) (result messages.EndpointMetricList) { result = make(messages.EndpointMetricList, 0) now := duration.TimeToFloat(time.Now()) appender := newEndpointMetricsAppender(&result) if canonicalPath == "" { metricStore.ByEndpointStrategy( endpoint, now-60.0*float64(history), math.Inf(1), store.GroupMetricByKey, appender) } else { metricStore.ByNameAndEndpointStrategy( canonicalPath, endpoint, now-60.0*float64(history), math.Inf(1), store.GroupMetricByKey, appender) if len(result) == 0 && !isSingleton { metricStore.ByPrefixAndEndpointStrategy( canonicalPath+"/", endpoint, now-60.0*float64(history), math.Inf(1), store.GroupMetricByKey, appender) } } sortMetricsByPath(result) return }