// This file is part of OpenTSDB. // Copyright (C) 2011-2012 The OpenTSDB Authors. // // This program is free software: you can redistribute it and/or modify it // under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 2.1 of the License, or (at your // option) any later version. This program is distributed in the hope that it // will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser // General Public License for more details. You should have received a copy // of the GNU Lesser General Public License along with this program. If not, // see <http://www.gnu.org/licenses/>. package net.opentsdb.core; import java.util.ArrayList; import java.util.Map; import org.hbase.async.Bytes; import org.hbase.async.KeyValue; import org.hbase.async.Scanner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * <strong>This class is not part of the public API.</strong> * <p><pre> * ,____________________________, * | This class is reserved for | * | OpenTSDB's internal usage! | * `----------------------------' * \ / \ //\ * \ |\___/| / \// \\ * /0 0 \__ / // | \ \ * / / \/_/ // | \ \ * @_^_@'/ \/_ // | \ \ * //_^_/ \/_ // | \ \ * ( //) | \/// | \ \ * ( / /) _|_ / ) // | \ _\ * ( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-. * (( / / )) ,-{ _ `-.|.-~-. .~ `. * (( // / )) '/\ / ~-. _ .-~ .-~^-. \ * (( /// )) `. { } / \ \ * (( / )) .----~-.\ \-' .~ \ `. \^-. * ///.----../ \ _ -~ `. ^-` ^-_ * ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~ * /.-~ * You've been warned by the dragon! * </pre><p> * This class is reserved for OpenTSDB's own internal usage only. If you use * anything from this package outside of OpenTSDB, a dragon will spontaneously * appear and eat you. You've been warned. * <p> * This class only exists because Java's packaging system is annoying as the * "package-private" accessibility level only applies to the current package * but not its sub-packages, and because Java doesn't have fine-grained API * visibility mechanism such as that of Scala or C++. * <p> * This package provides access into internal methods for higher-level * packages, for the sake of reducing code duplication and (ab)use of * reflection. */ public final class Internal { /** @see Const#FLAG_BITS */ public static final short FLAG_BITS = Const.FLAG_BITS; /** @see Const#LENGTH_MASK */ public static final short LENGTH_MASK = Const.LENGTH_MASK; /** @see Const#FLAGS_MASK */ public static final short FLAGS_MASK = Const.FLAGS_MASK; private Internal() { // Can't instantiate. } /** @see TsdbQuery#getScanner */ public static Scanner getScanner(final Query query) { return ((TsdbQuery) query).getScanner(); } /** @see RowKey#metricName */ public static String metricName(final TSDB tsdb, final byte[] id) { return RowKey.metricName(tsdb, id); } /** Extracts the timestamp from a row key. */ public static long baseTime(final TSDB tsdb, final byte[] row) { return Bytes.getUnsignedInt(row, tsdb.metrics.width()); } /** @see Tags#getTags */ public static Map<String, String> getTags(final TSDB tsdb, final byte[] row) { return Tags.getTags(tsdb, row); } /** @see RowSeq#extractIntegerValue */ public static long extractIntegerValue(final byte[] values, final int value_idx, final byte flags) { return RowSeq.extractIntegerValue(values, value_idx, flags); } /** @see RowSeq#extractFloatingPointValue */ public static double extractFloatingPointValue(final byte[] values, final int value_idx, final byte flags) { return RowSeq.extractFloatingPointValue(values, value_idx, flags); } public static short metricWidth(final TSDB tsdb) { return tsdb.metrics.width(); } /** @see CompactionQueue#complexCompact */ public static KeyValue complexCompact(final KeyValue kv) { final ArrayList<KeyValue> kvs = new ArrayList<KeyValue>(1); kvs.add(kv); return CompactionQueue.complexCompact(kvs, kv.qualifier().length / 2); } }