final boolean rate = parts[--i].startsWith("rate");
final RateOptions rate_options = QueryRpc.parseRateOptions(rate, parts[i]);
if (rate) {
i--; // Move to the next part.
}
final Query tsdbquery = tsdb.newQuery();
try {
tsdbquery.setTimeSeries(metric, parsedtags, agg, rate, rate_options);
} catch (NoSuchUniqueName e) {
throw new BadRequestException(e.getMessage());
}
// downsampling function & interval.
if (i > 0) {
final int dash = parts[1].indexOf('-', 1); // 1st char can't be `-'.
if (dash < 0) {
throw new BadRequestException("Invalid downsampling specifier '"
+ parts[1] + "' in m=" + m);
}
Aggregator downsampler;
try {
downsampler = Aggregators.get(parts[1].substring(dash + 1));
} catch (NoSuchElementException e) {
throw new BadRequestException("No such downsampling function: "
+ parts[1].substring(dash + 1));
}
final long interval = DateTime.parseDuration(parts[1].substring(0, dash));
tsdbquery.downsample(interval, downsampler);
} else {
tsdbquery.downsample(1000, agg);
}
tsdbqueries[nqueries++] = tsdbquery;
}
return tsdbqueries;
}