RTBKit  0.9
Open-source framework to create real-time ad bidding systems.
core/router/router_rest_api.cc
00001 /* router_rest_api.cc                                              -*- C++ -*-
00002    Jeremy Barnes, 7 November 2012
00003    Copyright (c) 2012 Datacratic Inc.  All rights reserved.
00004 
00005    Class to add an http monitor to a router.
00006 */
00007 
00008 #include "router_rest_api.h"
00009 #include "router.h"
00010 #include "jml/utils/json_parsing.h"
00011 
00012 using namespace std;
00013 using namespace ML;
00014 
00015 namespace RTBKIT {
00016 
00017 
00018 /******************************************************************************/
00019 /* ROUTER MONITOR CONNECTION                                                  */
00020 /******************************************************************************/
00021 
00022 RouterRestApiConnection::
00023 RouterRestApiConnection(const string& name,
00024                         ServiceBase& parent,
00025                         Router* router) :
00026     HttpMonitorHandler(name, parent, router),
00027     router(router)
00028 {
00029 }
00030 
00031 void
00032 RouterRestApiConnection::
00033 doGet(const std::string& resource)
00034 {
00035     if (header.resource == "/stats")
00036         sendResponse(router->getStats());
00037     else if (header.resource == "/agents") {
00038         sendResponse(router->getAllAgentInfo());
00039     }
00040     else if (header.resource.find("/agent/") == 0) {
00041         string agentName(header.resource, 7);
00042         sendResponse(router->getAgentInfo(agentName));
00043     }
00044     else if (header.resource.find("/strategy/") == 0) {
00045         string strategyName(header.resource, 10);
00046         sendResponse(router->getStrategyInfo(strategyName));
00047     }
00048     else if (header.resource.find("/campaign/") == 0) {
00049         string campaignName(header.resource, 10);
00050         sendResponse(router->getCampaignInfo(campaignName));
00051     }
00052     else {
00053         sendErrorResponse(
00054                           404, "unknown GET resource '" + header.resource + "'");
00055     }
00056 }
00057 
00058 void
00059 RouterRestApiConnection::
00060 doPost(const std::string& resource, const std::string& payload)
00061 {
00062     if (header.resource == "/validateConfig") {
00063         try {
00064             AgentConfig config;
00065             config.parse(payload);
00066             Json::Value response;
00067             response["status"] = "OK";
00068             response["config"] = config.toJson();
00069             sendResponse(response);
00070         } catch (const std::exception & exc) {
00071             Json::Value response;
00072             response["error"]
00073                 = "exception processing request "
00074                 + header.verb + " "
00075                 + header.resource;
00076             response["exception"] = exc.what();
00077             sendErrorResponse(400, response);
00078         }
00079     }
00080     else {
00081         sendErrorResponse(404,
00082                           "unknown GET resource '" + header.resource
00083                           + "'");
00084     }
00085 }
00086 
00087 } // namespace RTBKIT
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator