Commit 015d37f7 authored by Philipp Bogensberger's avatar Philipp Bogensberger
Browse files

Added support for crate.io (http://crate.io).

Crate can be used as sql backend and as storage backend
for metrics.
parent da7f9537
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -81,6 +81,9 @@ set(FNORDMETRIC_SOURCES
    stage/src/fnordmetric/sql/backends/mysql/mysqlbackend.cc
    stage/src/fnordmetric/sql/backends/mysql/mysqlconnection.cc
    stage/src/fnordmetric/sql/backends/mysql/mysqltableref.cc
    stage/src/fnordmetric/sql/backends/crate/cratebackend.cc
    stage/src/fnordmetric/sql/backends/crate/crateconnection.cc
    stage/src/fnordmetric/sql/backends/crate/cratetableref.cc
    stage/src/fnordmetric/query/query.cc
    stage/src/fnordmetric/query/queryservice.cc
    stage/src/fnordmetric/sql/expressions/aggregate.cc
@@ -133,6 +136,8 @@ set(FNORDMETRIC_SOURCES
    stage/src/fnordmetric/metricdb/backends/disk/tokenindexwriter.cc
    stage/src/fnordmetric/metricdb/backends/inmemory/metric.cc
    stage/src/fnordmetric/metricdb/backends/inmemory/metricrepository.cc
    stage/src/fnordmetric/metricdb/backends/crate/metric.cc
    stage/src/fnordmetric/metricdb/backends/crate/metricrepository.cc
    stage/src/fnordmetric/metricdb/httpapi.cc
    stage/src/fnordmetric/metricdb/metric.cc
    stage/src/fnordmetric/metricdb/metricrepository.cc
@@ -172,6 +177,26 @@ else()
  message("WARNING: libmysqlclient not found, FnordMetric will be compiled without MySQL support")
endif()

find_package(CURL)
if(CURL_FOUND)
  target_link_libraries(fnordmetric-cli ${CURL_LIBRARY})
  target_link_libraries(fnordmetric-server ${CURL_LIBRARY})
else()
    message("WARNING: libcurl not found, FnordMetric will be compiled without Crate support")
endif()

find_package(rapidjson)
if(RAPIDJSON_FOUND)
    target_link_libraries(fnordmetric-cli ${RAPIDJSON_LIBRARIES})
    target_link_libraries(fnordmetric-server ${RAPIDJSON_LIBRARIES})
else()
    message("WARNING: rapidjson not found, FnordMetric will be compiled without Crate support")
endif()

if(RAPIDJSON_FOUND AND CURL_FOUND)
    set(FNORD_ENABLE_CRATE true)
endif()

configure_file(config.h.in config.h)

if(ENABLE_TESTS)
+1 −0
Original line number Diff line number Diff line
#cmakedefine FNORD_ENABLE_MYSQL
#cmakedefine FNORD_ENABLE_CRATE
+70 −0
Original line number Diff line number Diff line
# - Find curl
# Find the native CURL headers and libraries.
#
#  CURL_INCLUDE_DIRS - where to find curl/curl.h, etc.
#  CURL_LIBRARIES    - List of libraries when using curl.
#  CURL_FOUND        - True if curl found.

# Look for the header file.
FIND_PATH(CURL_INCLUDE_DIR curl/curl.h
  $ENV{INCLUDE}
  "$ENV{LIB_DIR}/include"
  /usr/local/include
  /usr/include
  #mingw
  c:/msys/local/include
  NO_DEFAULT_PATH
  )

MARK_AS_ADVANCED(CURL_INCLUDE_DIR)

# Look for the library.
FIND_LIBRARY(CURL_LIBRARY NAMES curl libcurl_imp PATHS
  $ENV{LIB}
  "$ENV{LIB_DIR}/lib"
  /usr/local/lib
  /usr/lib
  c:/msys/local/lib
  NO_DEFAULT_PATH
  )

MARK_AS_ADVANCED(CURL_LIBRARY)

IF(CURL_INCLUDE_DIR)
  MESSAGE(STATUS "Curl include was found")
ENDIF(CURL_INCLUDE_DIR)
IF(CURL_LIBRARY)
  MESSAGE(STATUS "Curl lib was found")
ENDIF(CURL_LIBRARY)

# Copy the results to the output variables.
IF(CURL_INCLUDE_DIR AND CURL_LIBRARY)
  SET(CURL_FOUND 1)
  SET(CURL_LIBRARIES ${CURL_LIBRARY})
  SET(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR})
ELSE(CURL_INCLUDE_DIR AND CURL_LIBRARY)
  SET(CURL_FOUND 0)
  SET(CURL_LIBRARIES)
  SET(CURL_INCLUDE_DIRS)
ENDIF(CURL_INCLUDE_DIR AND CURL_LIBRARY)

# Report the results.
IF(CURL_FOUND)
   IF (NOT CURL_FIND_QUIETLY)
      MESSAGE(STATUS "Found CURL: ${CURL_LIBRARY}")
   ENDIF (NOT CURL_FIND_QUIETLY)
ELSE(CURL_FOUND)
  SET(CURL_DIR_MESSAGE "CURL was not found.")

  IF(CURL_FIND_REQUIRED)
    MESSAGE(FATAL_ERROR "${CURL_DIR_MESSAGE}")
  ELSE(CURL_FIND_REQUIRED)
    IF(NOT CURL_FIND_QUIETLY)
      MESSAGE(STATUS "${CURL_DIR_MESSAGE}")
    ENDIF(NOT CURL_FIND_QUIETLY)
    # Avoid cmake complaints if CURL is not found
    SET(CURL_INCLUDE_DIR "")
    SET(CURL_LIBRARY "")
  ENDIF(CURL_FIND_REQUIRED)

ENDIF(CURL_FOUND)
+97 −0
Original line number Diff line number Diff line
# Copyright (c) 2011 Milo Yip (miloyip@gmail.com)
# Copyright (c) 2013 Rafal Jeczalik (rjeczalik@gmail.com)
# Distributed under the MIT License (see license.txt file)

# -----------------------------------------------------------------------------------
#
# Finds the rapidjson library
#
# -----------------------------------------------------------------------------------
#
# Variables used by this module, they can change the default behaviour.
# Those variables need to be either set before calling find_package
# or exported as environment variables before running CMake:
#
# RAPIDJSON_INCLUDEDIR - Set custom include path, useful when rapidjson headers are
#                        outside system paths
# RAPIDJSON_USE_SSE2   - Configure rapidjson to take advantage of SSE2 capabilities
# RAPIDJSON_USE_SSE42  - Configure rapidjson to take advantage of SSE4.2 capabilities
#
# -----------------------------------------------------------------------------------
#
# Variables defined by this module:
#
# RAPIDJSON_FOUND        - True if rapidjson was found
# RAPIDJSON_INCLUDE_DIRS - Path to rapidjson include directory
# RAPIDJSON_CXX_FLAGS    - Extra C++ flags required for compilation with rapidjson
#
# -----------------------------------------------------------------------------------
#
# Example usage:
#
#  set(RAPIDJSON_USE_SSE2 ON)
#  set(RAPIDJSON_INCLUDEDIR "/opt/github.com/rjeczalik/rapidjson/include")
#
#  find_package(rapidjson REQUIRED)
#
#  include_directories("${RAPIDJSON_INCLUDE_DIRS}")
#  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${RAPIDJSON_CXX_FLAGS}")
#  add_executable(foo foo.cc)
#
# -----------------------------------------------------------------------------------

foreach(opt RAPIDJSON_INCLUDEDIR RAPIDJSON_USE_SSE2 RAPIDJSON_USE_SSE42)
  if(${opt} AND DEFINED ENV{${opt}} AND NOT ${opt} STREQUAL "$ENV{${opt}}")
    message(WARNING "Conflicting ${opt} values: ignoring environment variable and using CMake cache entry.")
  elseif(DEFINED ENV{${opt}} AND NOT ${opt})
    set(${opt} "$ENV{${opt}}")
  endif()
endforeach()

find_path(
  RAPIDJSON_INCLUDE_DIRS
  NAMES rapidjson/rapidjson.h
  PATHS ${RAPIDJSON_INCLUDEDIR}
  DOC "Include directory for the rapidjson library."
)

mark_as_advanced(RAPIDJSON_INCLUDE_DIRS)

if(RAPIDJSON_INCLUDE_DIRS)
  set(RAPIDJSON_FOUND TRUE)
endif()

mark_as_advanced(RAPIDJSON_FOUND)

if(RAPIDJSON_USE_SSE42)
  set(RAPIDJSON_CXX_FLAGS "-DRAPIDJSON_SSE42")
  if(MSVC)
    set(RAPIDJSON_CXX_FLAGS "${RAPIDJSON_CXX_FLAGS} /arch:SSE4.2")
  else()
    set(RAPIDJSON_CXX_FLAGS "${RAPIDJSON_CXX_FLAGS} -msse4.2")
  endif()
else()
  if(RAPIDJSON_USE_SSE2)
    set(RAPIDJSON_CXX_FLAGS "-DRAPIDJSON_SSE2")
    if(MSVC)
      set(RAPIDJSON_CXX_FLAGS "${RAPIDJSON_CXX_FLAGS} /arch:SSE2")
    else()
      set(RAPIDJSON_CXX_FLAGS "${RAPIDJSON_CXX_FLAGS} -msse2")
    endif()
  endif()
endif()

mark_as_advanced(RAPIDJSON_CXX_FLAGS)

if(RAPIDJSON_FOUND)
  if(NOT rapidjson_FIND_QUIETLY)
    message(STATUS "Found rapidjson header files in ${RAPIDJSON_INCLUDE_DIRS}")
    if(DEFINED RAPIDJSON_CXX_FLAGS)
      message(STATUS "Found rapidjson C++ extra compilation flags: ${RAPIDJSON_CXX_FLAGS}")
    endif()
  endif()
elseif(rapidjson_FIND_REQUIRED)
    message(FATAL_ERROR "Could not find rapidjson")
else()
  message(STATUS "Optional package rapidjson was not found")
endif()
+5 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <fnordmetric/util/runtimeexception.h>
#include <fnordmetric/sql/backends/csv/csvbackend.h>
#include <fnordmetric/sql/backends/mysql/mysqlbackend.h>
#include <fnordmetric/sql/backends/crate/cratebackend.h>

namespace fnordmetric {
namespace cli {
@@ -168,6 +169,10 @@ void CLI::execute(Environment* env) {
      std::unique_ptr<fnordmetric::query::Backend>(
          new fnordmetric::query::csv_backend::CSVBackend));

  query_service.registerBackend(
      std::unique_ptr<fnordmetric::query::Backend>(
          new fnordmetric::query::crate_backend::CrateBackend));

  query_service.executeQuery(
      input,
      getOutputFormat(env),
Loading