From 260ce7465a66427832da15caae0077323dc9750a Mon Sep 17 00:00:00 2001 From: neodarz Date: Mon, 9 Sep 2019 17:56:09 +0200 Subject: Refactoring a little more --- api/umosapi.cpp | 82 ++++++++++++++++++++++++++++----------------------------- api/umosapi.h | 37 +++++++++----------------- main.cpp | 30 +++++++-------------- 3 files changed, 64 insertions(+), 85 deletions(-) diff --git a/api/umosapi.cpp b/api/umosapi.cpp index 6b25124..57716e9 100644 --- a/api/umosapi.cpp +++ b/api/umosapi.cpp @@ -34,21 +34,21 @@ void UmosapiService::Api::init() { auto uri = mongocxx::uri{config["mongoURI"]}; mongo.configure(std::move(uri)); UmosapiService::Api::createResource(); - ofstream swagger_json; + std::ofstream swagger_json; swagger_json.open(config["swaggerui"] + "/swagger.json"); swagger_json << UmosapiService::Api::_swagger.dump(); swagger_json.close(); } void UmosapiService::Api::start(int port, int thr) { - auto settings = make_shared< restbed::Settings >(); + auto settings = std::make_shared< restbed::Settings >(); settings->set_port( port ); settings->set_worker_limit( thr ); settings->set_default_header("Connection", "close"); UmosapiService::Api::_service.start(settings); } -void service_error_handler( const int, const exception& e, const shared_ptr< restbed::Session > session ) +void service_error_handler( const int, const std::exception& e, const std::shared_ptr< restbed::Session > session ) { std::string message = "Backend Service is dead: "; message += e.what(); @@ -60,7 +60,7 @@ void service_error_handler( const int, const exception& e, const shared_ptr< res fprintf( stderr, "ERROR: %s.\n", message.c_str() ); } -void resource_error_handler( const int, const exception& e, const shared_ptr< restbed::Session > session ) +void resource_error_handler( const int, const std::exception& e, const std::shared_ptr< restbed::Session > session ) { std::string message = "Backend Resource is dead: "; message += e.what(); @@ -69,14 +69,14 @@ void resource_error_handler( const int, const exception& e, const shared_ptr< re fprintf( stderr, "ERROR: %s.\n", message.c_str() ); } -void faulty_method_handler( const shared_ptr< restbed::Session > ) +void faulty_method_handler( const std::shared_ptr< restbed::Session > ) { - throw SERVICE_UNAVAILABLE; + throw restbed::SERVICE_UNAVAILABLE; } -void is_ready(const shared_ptr< restbed::Session > session) +void is_ready(const std::shared_ptr< restbed::Session > session) { - session->close( OK, "1", { { "Content-Length", "1"}}); + session->close( restbed::OK, "1", { { "Content-Length", "1"}}); } /* @@ -89,7 +89,7 @@ void is_ready(const shared_ptr< restbed::Session > session) * tags: array of tags */ void UmosapiService::Api::desc(std::string route, std::string http_word, const std::function< void ( const std::shared_ptr< restbed::Session > ) >& callback, const std::function< void(int, const std::exception&, std::shared_ptr< restbed::Session >) >& error_callback, tag tags[]) { - auto resource = make_shared< restbed::Resource > (); + auto resource = std::make_shared< restbed::Resource > (); resource->set_path(route); resource->set_method_handler(http_word, callback); resource->set_error_handler( error_callback ); @@ -133,7 +133,7 @@ void UmosapiService::Api::scheme(std::string scheme) { } void UmosapiService::Api::set_path(std::string route) { - UmosapiService::Api::_resource = make_shared< restbed::Resource > (); + UmosapiService::Api::_resource = std::make_shared< restbed::Resource > (); UmosapiService::Api::_resource->set_path(route); std::regex parameter(":.*?}"); std::regex base_path("^/v2"); @@ -220,17 +220,17 @@ void UmosapiService::Api::response(std::string http_code, std::string descriptio } void UmosapiService::Api::swagger(std::string ui_path, std::string swagger_dir, std::string api_path) { - UmosapiService::Api::_resource = make_shared< restbed::Resource > (); + UmosapiService::Api::_resource = std::make_shared< restbed::Resource > (); UmosapiService::Api::_resource->set_path(ui_path); UmosapiService::Api::_resource->set_method_handler("GET", swaggerEndpoint); UmosapiService::Api::_service.publish(_resource); - UmosapiService::Api::_resource = make_shared< restbed::Resource > (); + UmosapiService::Api::_resource = std::make_shared< restbed::Resource > (); UmosapiService::Api::_resource->set_path(ui_path + "/{filename: .*}"); UmosapiService::Api::_resource->set_method_handler("GET", swaggerEndpointResources); UmosapiService::Api::_service.publish(_resource); - UmosapiService::Api::_resource = make_shared< restbed::Resource > (); + UmosapiService::Api::_resource = std::make_shared< restbed::Resource > (); UmosapiService::Api::_resource->set_path(api_path); UmosapiService::Api::_resource->set_method_handler("GET", swaggerEndpointApi); UmosapiService::Api::_service.publish(_resource); @@ -294,13 +294,13 @@ void UmosapiService::Api::createResource() { UmosapiService::Api::_service.set_error_handler( service_error_handler ); } -void UmosapiService::Api::retrieveAll( const shared_ptr< restbed::Session> session ){ +void UmosapiService::Api::retrieveAll( const std::shared_ptr< restbed::Session> session ){ UmosapiService::uobject uobject; auto jsonObjects = json_object_new_array(); const auto& request = session->get_request( ); auto json_string = uobject.retrieveAll(request->get_path_parameter( "mcollection" ), jsonObjects); - session->close( OK, json_string, { + session->close( restbed::OK, json_string, { { "Content-Length", std::to_string(json_string.length()) }, { "Content-Type", "application/json" } }); @@ -308,12 +308,12 @@ void UmosapiService::Api::retrieveAll( const shared_ptr< restbed::Session> sessi } -void UmosapiService::Api::addUObject( const shared_ptr< restbed::Session > session ){ +void UmosapiService::Api::addUObject( const std::shared_ptr< restbed::Session > session ){ const auto request = session->get_request(); size_t content_length = request->get_header( "Content-Length", 0 ); - session->fetch( content_length, [ request ]( const shared_ptr< restbed::Session > session, const Bytes & body ) + session->fetch( content_length, [ request ]( const std::shared_ptr< restbed::Session > session, const restbed::Bytes & body ) { UmosapiService::uobject uobject; auto jsonObject = json_object_new_object(); @@ -321,15 +321,15 @@ void UmosapiService::Api::addUObject( const shared_ptr< restbed::Session > sessi memset(bodyData, 0, sizeof(bodyData)); snprintf(bodyData, sizeof(bodyData), "%.*s", ( int ) body.size( ), body.data()); auto json_string = uobject.add(request->get_path_parameter("mcollection"), jsonObject, bodyData); - session->close( OK, json_string, { - { "Content-Length", ::to_string(json_string.length()) }, + session->close( restbed::OK, json_string, { + { "Content-Length", std::to_string(json_string.length()) }, { "Content-Type", "application/json" } }); json_object_put(jsonObject); } ); } -void UmosapiService::Api::deleteUObject( const shared_ptr< restbed::Session > session ){ +void UmosapiService::Api::deleteUObject( const std::shared_ptr< restbed::Session > session ){ UmosapiService::uobject uobject; auto jsonObject = json_object_new_object(); @@ -337,91 +337,91 @@ void UmosapiService::Api::deleteUObject( const shared_ptr< restbed::Session > se auto json_string = uobject.remove(request->get_path_parameter("mcollection"), request->get_path_parameter("oid"), jsonObject); - session->close( OK, json_string, { + session->close( restbed::OK, json_string, { { "Content-Length", std::to_string(json_string.length()) }, { "Content-Type", "application/json" } }); json_object_put(jsonObject); } -void UmosapiService::Api::searchUObjectByKeyValue( const shared_ptr< restbed::Session > session ){ +void UmosapiService::Api::searchUObjectByKeyValue( const std::shared_ptr< restbed::Session > session ){ UmosapiService::uobject uobject; auto jsonObject = json_object_new_array(); const auto request = session->get_request(); auto json_string = uobject.searchKeyValue(request->get_path_parameter("mcollection"), request->get_path_parameter("key"), request->get_path_parameter("value"), jsonObject); - session->close( OK, json_string, { + session->close( restbed::OK, json_string, { { "Content-Length", std::to_string(json_string.length()) }, { "Content-Type", "application/json" } }); json_object_put(jsonObject); } -void UmosapiService::Api::swaggerEndpoint( const shared_ptr< restbed::Session > session ){ +void UmosapiService::Api::swaggerEndpoint( const std::shared_ptr< restbed::Session > session ){ const auto request = session->get_request(); - ifstream stream(config["swaggerui"] + "/index.html", ifstream::in ); + std::ifstream stream(config["swaggerui"] + "/index.html", std::ifstream::in ); if ( stream.is_open() ) { - const std::string body = std::string( istreambuf_iterator< char >(stream), istreambuf_iterator< char>()); + const std::string body = std::string( std::istreambuf_iterator< char >(stream), std::istreambuf_iterator< char>()); - const multimap< std::string, std::string> headers { + const std::multimap< std::string, std::string> headers { { "Content-Type", "text/html" }, { "Content-Length", std::to_string( body.length() ) } }; - session->close(OK, body, headers); + session->close(restbed::OK, body, headers); } else { - session->close( NOT_FOUND ); + session->close( restbed::NOT_FOUND ); } } -void UmosapiService::Api::swaggerEndpointResources( const shared_ptr< restbed::Session > session ) +void UmosapiService::Api::swaggerEndpointResources( const std::shared_ptr< restbed::Session > session ) { const auto request = session->get_request( ); const std::string filename = request->get_path_parameter( "filename" ); - ifstream stream( config["swaggerui"] + "/" + filename, ifstream::in ); + std::ifstream stream( config["swaggerui"] + "/" + filename, std::ifstream::in ); if ( stream.is_open( ) ) { - const std::string body = std::string( istreambuf_iterator< char >( stream ), istreambuf_iterator< char >( ) ); + const std::string body = std::string( std::istreambuf_iterator< char >( stream ), std::istreambuf_iterator< char >( ) ); - const multimap< std::string, std::string > headers + const std::multimap< std::string, std::string > headers { { "Content-Length", std::to_string( body.length( ) ) } }; - session->close( OK, body, headers ); + session->close( restbed::OK, body, headers ); } else { - session->close( NOT_FOUND ); + session->close( restbed::NOT_FOUND ); } } -void UmosapiService::Api::swaggerEndpointApi( const shared_ptr< restbed::Session > session ) +void UmosapiService::Api::swaggerEndpointApi( const std::shared_ptr< restbed::Session > session ) { const auto request = session->get_request( ); const std::string filename = request->get_path_parameter( "filename" ); const std::string path = request->get_path(); - ifstream stream( config["swaggerui"] + "/swagger.json", ifstream::in ); + std::ifstream stream( config["swaggerui"] + "/swagger.json", std::ifstream::in ); if ( stream.is_open( ) ) { - const std::string body = std::string( istreambuf_iterator< char >( stream ), istreambuf_iterator< char >( ) ); + const std::string body = std::string( std::istreambuf_iterator< char >( stream ), std::istreambuf_iterator< char >( ) ); - const multimap< std::string, std::string > headers + const std::multimap< std::string, std::string > headers { { "Content-Type", "application/json" }, { "Content-Length", std::to_string( body.length( ) ) } }; - session->close( OK, body, headers ); + session->close( restbed::OK, body, headers ); } else { - session->close( NOT_FOUND ); + session->close( restbed::NOT_FOUND ); } } diff --git a/api/umosapi.h b/api/umosapi.h index 3cb2b47..a066ac9 100644 --- a/api/umosapi.h +++ b/api/umosapi.h @@ -1,21 +1,10 @@ #ifndef UmosapiService_H_ #define UmosapiService_H_ -//#include -//#include -//#include - #include -//#include - #include -using namespace restbed; -using namespace std; - -using json = nlohmann::json; - namespace UmosapiService { struct tag { @@ -64,30 +53,30 @@ class Api { void init(); void start(int, int); - Service _service; - json _swagger; - vector _tags; + restbed::Service _service; + nlohmann::json _swagger; + std::vector _tags; private: - void desc(std::string route, std::string http_word, const std::function< void ( const std::shared_ptr< Session > ) >& callback, const std::function< void(int, const std::exception&, std::shared_ptr) >& error_callback, tag tags[]); + void desc(std::string route, std::string http_word, const std::function< void ( const std::shared_ptr< restbed::Session > ) >& callback, const std::function< void(int, const std::exception&, std::shared_ptr< restbed::Session >) >& error_callback, tag tags[]); void createResource(); - static void retrieveAll( const shared_ptr session ); - static void addUObject( const shared_ptr session ); - static void deleteUObject( const shared_ptr session ); - static void searchUObjectByKeyValue( const shared_ptr session ); - static void swaggerEndpoint( const shared_ptr session ); - static void swaggerEndpointResources( const shared_ptr session ); - static void swaggerEndpointApi( const shared_ptr session ); + static void retrieveAll( const std::shared_ptr< restbed::Session > session ); + static void addUObject( const std::shared_ptr< restbed::Session > session ); + static void deleteUObject( const std::shared_ptr< restbed::Session > session ); + static void searchUObjectByKeyValue( const std::shared_ptr< restbed::Session > session ); + static void swaggerEndpoint( const std::shared_ptr< restbed::Session > session ); + static void swaggerEndpointResources( const std::shared_ptr< restbed::Session > session ); + static void swaggerEndpointApi( const std::shared_ptr< restbed::Session > session ); - shared_ptr< Resource> _resource; + std::shared_ptr< restbed::Resource> _resource; Definition _definition; Definitions _definitions; Path _path; Paths _paths; void set_path(); void set_path(std::string route); - void set_method_handler(std::string http_word, const std::function< void ( const std::shared_ptr< Session > ) >& callback); + void set_method_handler(std::string http_word, const std::function< void ( const std::shared_ptr< restbed::Session > ) >& callback); void set_error_handler(const std::function< void(int, const std::exception&, std::shared_ptr) >& error_callback); void produce(std::string); void consume(std::string); diff --git a/main.cpp b/main.cpp index dd3b794..2ca3399 100644 --- a/main.cpp +++ b/main.cpp @@ -8,13 +8,12 @@ #include "config.h" #include "api/umosapi.h" -#include "service.hpp" std::map config; int main(int argc, char *argv[]) { - string config_path = ""; + std::string config_path = ""; const char *homedir; if ((homedir = getenv("XDG_CONFIG_HOME")) == NULL || (homedir = getenv("HOME")) == NULL) { @@ -44,32 +43,23 @@ int main(int argc, char *argv[]) { exit(1); } - //Address addr(Ipv4::any(), Port(config["port"])); + std::cout << "INFO: Using " << std::thread::hardware_concurrency() << " cores"; + std::cout << " - " << thr << " threads" << std::endl; + std::cout << "INFO: Listen on 0.0.0.0:" << config["port"] << std::endl; - cout << "INFO: Using " << std::thread::hardware_concurrency() << " cores"; - cout << " - " << thr << " threads" << endl; - cout << "INFO: Listen on 0.0.0.0:" << config["port"] << endl; - - cout << "INFO: Using config file '" << config_path << "'" << endl; + std::cout << "INFO: Using config file '" << config_path << "'" << std::endl; if (!std::filesystem::exists(config_path)) { - cout << "ERROR: Error fatal : config file '" << config_path << "' not found" << endl; - cout << "ERROR: config.txt is search here: ~/.config/umosapi/config.txt" << endl; + std::cout << "ERROR: Error fatal : config file '" << config_path << "' not found" << std::endl; + std::cout << "ERROR: config.txt is search here: ~/.config/umosapi/config.txt" << std::endl; exit (EXIT_FAILURE); } load_config(config_path); - //cout << "Using swaggerui " << config["swaggerui"] << " path" << endl; - cout << "INFO: No support for swagger for the moment" << endl; - cout << "INFO: Using mongoURI " << config["mongoURI"] << endl; - /* - - UmosapiService umosapi(addr); - - umosapi.init(thr); - umosapi.start(config["swaggerui"]); - */ + std::cout << "Using swaggerui " << config["swaggerui"] << " path" << std::endl; + std::cout << "INFO: No support for swagger for the moment" << std::endl; + std::cout << "INFO: Using mongoURI " << config["mongoURI"] << std::endl; UmosapiService::Api umosapi; umosapi.init(); -- cgit v1.2.1