Browse Source

fix /controller endpoint

Grant Limberg 1 year ago
parent
commit
8426677c55
1 changed files with 21 additions and 0 deletions
  1. 21 0
      controller/EmbeddedNetworkController.cpp

+ 21 - 0
controller/EmbeddedNetworkController.cpp

@@ -867,12 +867,33 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
 	const std::function<void(const httplib::Request&, httplib::Response&, std::string)> setContent)
 	const std::function<void(const httplib::Request&, httplib::Response&, std::string)> setContent)
 {
 {
 	// Control plane Endpoints
 	// Control plane Endpoints
+	std::string controllerPath = "/controller";
 	std::string networkListPath = "/controller/network";
 	std::string networkListPath = "/controller/network";
 	std::string networkPath = "/controller/network/([0-9a-fA-F]{16})";
 	std::string networkPath = "/controller/network/([0-9a-fA-F]{16})";
 	std::string oldAndBustedNetworkCreatePath = "/controller/network/([0-9a-fA-F]{10})______";
 	std::string oldAndBustedNetworkCreatePath = "/controller/network/([0-9a-fA-F]{10})______";
 	std::string memberListPath = "/controller/network/([0-9a-fA-F]{16})/member";
 	std::string memberListPath = "/controller/network/([0-9a-fA-F]{16})/member";
 	std::string memberPath = "/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})";
 	std::string memberPath = "/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})";
 
 
+	auto controllerGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
+		char tmp[4096];
+		const bool dbOk = _db.isReady();
+		OSUtils::ztsnprintf(
+			tmp,
+			sizeof(tmp),
+			"{\n\t\"controller\": true,\n\t\"apiVersion\": %d,\n\t\"clock\": %llu,\n\t\"databaseReady\": %s\n}\n",
+			ZT_NETCONF_CONTROLLER_API_VERSION,
+			(unsigned long long)OSUtils::now(),
+			dbOk ? "true" : "false");
+
+			if (!dbOk) {
+				res.status = 503;
+			}
+
+			setContent(req, res, tmp);
+	};
+	s.Get(controllerPath, controllerGet);
+	sv6.Get(controllerPath, controllerGet);
+
 	auto networkListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
 	auto networkListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
 		std::set<uint64_t> networkIds;
 		std::set<uint64_t> networkIds;
 		_db.networks(networkIds);
 		_db.networks(networkIds);