![]() |
RTBKit
0.9
Open-source framework to create real-time ad bidding systems.
|
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