public Map<Locator, MetricData> getDatapointsForRange(List<Locator> locators, Range range, Granularity gran) {
        ListMultimap<ColumnFamily, Locator> locatorsByCF =
                ArrayListMultimap.create();
        Map<Locator, MetricData> results = new HashMap<Locator, MetricData>();
        for (Locator locator : locators) {
            try {
                RollupType rollupType = RollupType.fromString(
                        metaCache.get(locator, MetricMetadata.ROLLUP_TYPE.name().toLowerCase()));

                ColumnFamily cf = CassandraModel.getColumnFamily(rollupType, gran);
                List<Locator> locs = locatorsByCF.get(cf);
                locs.add(locator);
            } catch (Exception e) {
                // pass for now. need metric to figure this stuff out.
                log.error(String.format("error getting datapoints for locator %s, range %s, granularity %s", locator, range.toString(), gran.toString()), e);
            }
        }

        for (ColumnFamily CF : locatorsByCF.keySet()) {
            List<Locator> locs = locatorsByCF.get(CF);
            results.putAll(getNumericDataForRangeLocatorList(range, gran, CF, locs));
        }

        return results;
    }
public Map < Locator , MetricData > getDatapointsForRange ( List < Locator > locators , Range range , Granularity gran ) { ListMultimap < ColumnFamily , Locator > locatorsByCF = ArrayListMultimap . create ( ) ; Map < Locator , MetricData > results = new HashMap < Locator , MetricData > ( ) ; for ( Locator locator : locators ) { try { RollupType rollupType = RollupType . fromString ( metaCache . get ( locator , MetricMetadata . ROLLUP_TYPE . name ( ) . toLowerCase ( ) ) ) ; ColumnFamily cf = CassandraModel . getColumnFamily ( rollupType , gran ) ; List < Locator > locs = locatorsByCF . get ( cf ) ; locs . add ( locator ) ; } catch ( Exception e ) { log . error ( String . format ( "error getting datapoints for locator %s, range %s, granularity %s" , locator , range . toString ( ) , gran . toString ( ) ) , e ) ; } } for ( ColumnFamily CF : locatorsByCF . keySet ( ) ) { List < Locator > locs = locatorsByCF . get ( CF ) ; results . putAll ( getNumericDataForRangeLocatorList ( range , gran , CF , locs ) ) ; } return results ; }
Get data points for multiple {@link Locator}, for the specified {@link Range} and
{@link Granularity}.

This method is eventually called from all the output handlers for query requests.

@param locators
@param range
@param gran
@return