Add the Jackson dependency for de/serializing objects with JSON format which
will be used in the API as well as HBase data storage.
Add an src/utils directory for shared utilities that are not a part of the
OpenTSDB core behavior
Add utils/JSON that provides instantiation of a static Jackson ObjectMaper
and some helper methods
Tested standard and Maven builds
Add mygnuplot.bat that works on Windows machines with gnuplot installed
Modify GraphHandler to support Windows machines. Really simple, just had to
tweak the line endings. Tested changes on Linux and Windows, works fine
Add a Java Properties format configuration file for OpenTSDB. It's fully
backwards compatible in that you can still use the existing command line
options, which will overload defaults or config file options, but it can let
you save a config file in a certain location and use any of the TSD CLI tools
without passing extra parameters.
Sample config file is at src/opentsdb.conf
The Config class has helpers to convert values to numbers or boolean
Modify all of the code that used to reply on System properties or other means
to use the new Config class
Mark the start of 2.0.0 in configure.ac and NEWS

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Update Jackson dependency to 2.1.4 as per Paul Brown

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add ManOLamancha and LLNW to AUTHORS.
Fix compile issue with some versions (e.g. 1.6.0_24-b07) that throw an error: type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds T,java.lang.Object

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
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>
Signed-off-by: Chris Larsen <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

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
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

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Fix Config.hasProperty bug where it was throwing an NPE if the entry did not exist instead of returning false
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

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
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()

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
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

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
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

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add "max" query parameter to SuggestRpc calls that lets users specify the number of results returned.
JAVA API remains unchanged.
closes #147

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
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

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add configurable support for chunked HTTP requests via the
 tsd.http.request.enable_chunked config parameter
Add tsd.http.request.max_chunk to allow changing the max chunk size
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

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
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

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
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

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Add HttpQuery.explodeAPIPath() to help API calls strip the /api/v# portion
Add unit tests for HttpQuery.explodeAPIPath()

Signed-off-by: Chris Larsen <clarsen@euphoriaaudio.com>
Fix issue in HttpSerializer.formatError where exceptions with null "message"
fields (NullPointerException) were throwing another NPE

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