Merge remote branch 'remotes/official/next' into next
Add PluginLoader, a super simple plugin framework that allow for dynamically
loading JAR files after startup and searching for plugins that implement a given
abstract class.
Add a unit test with dummy plugin and implementations. The makefile will compile
a plugin jar that the unit test will load at runtime and check for implementations

Signed-off-by: unknown <clarsen@euphoriaaudio.com>
Add the Annotation class for storing global or timeseries associated notes.
Add TSMeta class for storing metadata associated with a timeseries.
Add UIDMeta class for storing metadata associated with metrics, tagk and tagvs
Add unit tests for the new classes
Thanks to Peter Gotz for Annotations, will add his GraphHandler code later on
Add DateTime utility class that moves the date parsing features out of
GraphHandler and CliQuery where they can be shared by the API and other tools.
Add millsecond absolute timestamp parsing
Add month relative time option with the "n" character that works over 30 day
periods
Refactor the date/time specific calls out of GraphHandler
Modify CliQuery to use the new date/time parsing so folks can now enter relative
or timestamps via the command line
Add unit test class for DateTime.java
Allow override of local timezone via config file
Merge remote branch 'remotes/official/next' into next
Remove HttpQuery.sendJsonArray() and .toJsonArray() as they're replaced by the
JSON class
Refactor HTTP API calls that return JSON to use the JSON class, no behaviors
are changed
Add HttpQuery.getCharset() to parse the proper encoding from the request or use the default UTF-8
Add HttpQuery.getContent() as a helper to decode the request body as a String using the given encoding
Add TestHttpQuery unit test class and quick/simple test for the query parsing methods, need to add tests for the sending methods
Add HttpQuery.getQueryPath() to fetch the path component of the requested URI
Add HttpQuery.explodePath() to fetch the path component of the requested URI
Break shared Netty mock/unit test methods into NettyMocks.java
Add tests for the HttpQuery mime private methods via reflection
Update TestHttpQuery with refactored code and proper tests
Add api version fields to HttpQuery
Add HttpQuery.getQueryBaseRoute() to calculate what RPC module to route the
request to
Simplify HttpQuery.explodePath()
Add version to the BuildData.java file so we can print out the OpenTSDB version,
not just the git hash
Modify version RPC call to return the OpenTSDB version and use the JSON helper class for JSON formatting
Extend BadRequestException.java with HTTP status code and details
Add HttpSerializer abstract class for serializer plugins
Add HttpJsonSerializer default implementation of HttpSerializer
Add DummyHttpSerializer.java for plugin testing
Add serializer_map_content_type and query_string hash maps for serializer
mapping
Add HttpQuery.setSerializer() to determine what serializer to use based on the
query string or content type
Add HttpQuery.InitialiizeSerializerMap() to scan the class path for serializer
implementations, should be called once per tsd
Modify the PipelineFactory constructor to initialize the serializer maps
Split out SuggestRpc into it's own file
Added "api/suggest" route
RpcHandler for HTTP requests now passes BadRequestExceptions to the serializer
Add tsd.http_show_stack_trace config option
Add method shortcut to HttpQuery since the API RPCs will need to check it
Add method checks to the api/serializers and api/suggest endpoints
Fix up TestHttpQuery with mocking required to initialize the HttpQuery object
Add TestSuggestRpc.java
Add TestHttpJsonSerializer
Fix assertEquals calls in TestHttpQuery where the expected value should appear
first
Add a number of unit tests to TestHttpQuery that now cover everything except
the HTML formatting calls

fixes
Add "max" query parameter to SuggestRpc calls that lets users specify the number of results returned.
JAVA API remains unchanged.
closes #147
Merge remote branch 'remotes/official/next' into next
Implement api/aggregators endpoint
Implement api/version endpoint
Implement api/dropcaches endpoint
Fix comments in HttpSerializer format methods
Fix error handlers in HttpSerializer where, if the user does not supply a jsonp
callback function, it was still wrapping the response in parentheses
Implement /api/put to store datapoints over HTTP
Add TestPutRpc that unit tests many possible HTTP inputs
Add parsePutV1() to serializer
Add formatPutV1() to serializer
Add NettyMocks.postQuery() overload for providing a common Content-Type
fixes
Throw exception on 1 or more bad datapoints
Add JSONException.java class to wrap the different Jackson exceptions as per
Tsuna's request
Refactor the TestJSON unit tests for cleaner code and handle the new exception
class
Add constructors to BadRequestException.java to wrap source exceptions
Merge remote branch 'remotes/official/next' into next
Add methods to UniqueId.java for converting UID byte arrays to hex strings and
vice-versa
Add unit tests for new hex to byte methods
Add HttpQuery.explodeAPIPath() to help API calls strip the /api/v# portion
Add unit tests for HttpQuery.explodeAPIPath()
Add TSDB.assignUid() to assign UIDs to metric, tagks and tagvs using the caches.
It's also slightly different than UniqueId.getOrCreateId() in that we want to
throw an exception if the UID is already assigned.
Add unit test file for the TSDB class with tests for assignUID(), need more
Set Tags.validateString() public as we'll need it elsewhere