Fix Scan raw unit test where the annotation column resolves to 3 bytes instead
of 5 when normalized from milliseconds to seconds.

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add the Pair class since Map.Entry<?, ?> doesn't deserialize in Jackson
automatically or easily and we don't want to include a library like Apache
Commons for a single class.

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add ByteArrayPair utility class for storing two byte arrays in a list with
a comparator that sorts on the bytes. Also allows storing nulls for the key
or value of the pair. This will be needed for some situations where we may
query for a tagk without a tagv or a tagv without a tagk.

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Make RowKey.metricNameAsync() public so it can be used elsewhere

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Extend SearchQuery for lookups with a metric and a tags field.

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add overloads to parse() and parseWithMetric() in the Tags class for parsing a
time series lookup query where a metric, tag, and or tagv may be missing. These
overloads allow for null values in the results.
Add unit test for the new overloads
Add unit tests for the normal Tags.parseWithMetric() method.

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add the TimeSeriesLookup.java for looking up time series related to a metric,
tag name and/or tagk. Includes unit tests.

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Implement /api/search/lookup in the SearchRpc class

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add the Search CLI tool

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>