summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2018-04-10 13:29:16 -0400
committerMark Benvenuto <mark.benvenuto@mongodb.com>2018-04-10 13:29:16 -0400
commitf98493d3112905d2ad988b453b74d9555f5fdac8 (patch)
tree94edc01be00d88821da9b564af90c0aa487ef745
parente2327f7b9acd5016b419db6a9b9a6c150bfdd79b (diff)
downloadmongo-f98493d3112905d2ad988b453b74d9555f5fdac8.tar.gz
SERVER-34223 Implement config file options for free monitoring
-rw-r--r--src/mongo/db/free_mon/SConscript1
-rw-r--r--src/mongo/db/free_mon/free_mon_options.cpp129
-rw-r--r--src/mongo/db/free_mon/free_mon_options.h54
-rw-r--r--src/mongo/db/free_mon/free_mon_queue_test.cpp2
4 files changed, 185 insertions, 1 deletions
diff --git a/src/mongo/db/free_mon/SConscript b/src/mongo/db/free_mon/SConscript
index 0bfce9a48a8..f9210015636 100644
--- a/src/mongo/db/free_mon/SConscript
+++ b/src/mongo/db/free_mon/SConscript
@@ -30,6 +30,7 @@ if get_option("enable-free-mon") == "on":
target='free_mon_mongod',
source=[
'free_mon_mongod.cpp',
+ 'free_mon_options.cpp',
'http_client_curl.cpp',
#'http_client_curl.cpp' if not env.TargetOSIs('windows') else 'http_client_winhttp.cpp',
],
diff --git a/src/mongo/db/free_mon/free_mon_options.cpp b/src/mongo/db/free_mon/free_mon_options.cpp
new file mode 100644
index 00000000000..81293405b59
--- /dev/null
+++ b/src/mongo/db/free_mon/free_mon_options.cpp
@@ -0,0 +1,129 @@
+/**
+ * Copyright (C) 2018 MongoDB Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * As a special exception, the copyright holders give permission to link the
+ * code of portions of this program with the OpenSSL library under certain
+ * conditions as described in each individual source file and distribute
+ * linked combinations including the program with the OpenSSL library. You
+ * must comply with the GNU Affero General Public License in all respects
+ * for all of the code used other than as permitted herein. If you modify
+ * file(s) with this exception, you may extend this exception to your
+ * version of the file(s), but you are not obligated to do so. If you do not
+ * wish to do so, delete this exception statement from your version. If you
+ * delete this exception statement from all source files in the program,
+ * then also delete it in the license file.
+ */
+
+#define MONGO_LOG_DEFAULT_COMPONENT ::mongo::logger::LogComponent::kFTDC
+
+
+#include "mongo/platform/basic.h"
+
+#include "mongo/db/free_mon/free_mon_options.h"
+
+#include "mongo/base/error_codes.h"
+#include "mongo/base/initializer_context.h"
+#include "mongo/base/status.h"
+#include "mongo/base/status_with.h"
+#include "mongo/base/string_data.h"
+#include "mongo/util/log.h"
+#include "mongo/util/options_parser/startup_option_init.h"
+#include "mongo/util/options_parser/startup_options.h"
+
+namespace mongo {
+
+FreeMonParams globalFreeMonParams;
+
+namespace optionenvironment {
+class OptionSection;
+class Environment;
+} // namespace optionenvironment
+
+namespace moe = mongo::optionenvironment;
+
+namespace {
+
+constexpr StringData kEnableCloudState_on = "on"_sd;
+constexpr StringData kEnableCloudState_off = "off"_sd;
+constexpr StringData kEnableCloudState_runtime = "runtime"_sd;
+
+StatusWith<EnableCloudStateEnum> EnableCloudState_parse(StringData value) {
+ if (value == kEnableCloudState_on) {
+ return EnableCloudStateEnum::kOn;
+ }
+ if (value == kEnableCloudState_off) {
+ return EnableCloudStateEnum::kOff;
+ }
+ if (value == kEnableCloudState_runtime) {
+ return EnableCloudStateEnum::kRuntime;
+ }
+
+ // TODO
+ return Status(ErrorCodes::InvalidOptions, "Unrecognized state");
+}
+
+Status addFreeMonitoringOptions(moe::OptionSection* options) {
+ moe::OptionSection freeMonitoringOptions("Free Monitoring options");
+
+ // Command Line: --enableFreeMonitoring=<on|runtime|off>
+ // YAML Name: cloud.monitoring.free=<on|runtime|off>
+ freeMonitoringOptions.addOptionChaining("cloud.monitoring.free.state",
+ "enableFreeMonitoring",
+ moe::String,
+ "Enable Cloud Free Monitoring (on|runtime|off)");
+
+ // Command Line: --enableFreeMonitoringTag=string
+ // YAML Name: cloud.monitoring.free.tag=string
+ freeMonitoringOptions.addOptionChaining(
+ "cloud.monitoring.free.tag", "freeMonitoringTag", moe::String, "Cloud Free Monitoring Tag");
+
+ Status ret = options->addSection(freeMonitoringOptions);
+ if (!ret.isOK()) {
+ error() << "Failed to add free monitoring option section: " << ret.toString();
+ return ret;
+ }
+
+ return Status::OK();
+}
+
+Status storeFreeMonitoringOptions(const moe::Environment& params) {
+
+ if (params.count("cloud.monitoring.free.state")) {
+ auto swState =
+ EnableCloudState_parse(params["cloud.monitoring.free.state"].as<std::string>());
+ if (!swState.isOK()) {
+ return swState.getStatus();
+ }
+ globalFreeMonParams.freeMonitoringState = swState.getValue();
+ }
+
+ if (params.count("cloud.monitoring.free.tag")) {
+ globalFreeMonParams.freeMonitoringTag =
+ params["cloud.monitoring.free.tag"].as<std::string>();
+ }
+
+ return Status::OK();
+}
+
+MONGO_MODULE_STARTUP_OPTIONS_REGISTER(FreeMonitoringOptions)(InitializerContext* /*unused*/) {
+ return addFreeMonitoringOptions(&moe::startupOptions);
+}
+
+MONGO_STARTUP_OPTIONS_STORE(FreeMonitoringOptions)(InitializerContext* /*unused*/) {
+ return storeFreeMonitoringOptions(moe::startupOptionsParsed);
+}
+
+} // namespace
+} // namespace mongo
diff --git a/src/mongo/db/free_mon/free_mon_options.h b/src/mongo/db/free_mon/free_mon_options.h
new file mode 100644
index 00000000000..05d4ae2a91a
--- /dev/null
+++ b/src/mongo/db/free_mon/free_mon_options.h
@@ -0,0 +1,54 @@
+/**
+ * Copyright (C) 2018 MongoDB Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * As a special exception, the copyright holders give permission to link the
+ * code of portions of this program with the OpenSSL library under certain
+ * conditions as described in each individual source file and distribute
+ * linked combinations including the program with the OpenSSL library. You
+ * must comply with the GNU Affero General Public License in all respects
+ * for all of the code used other than as permitted herein. If you modify
+ * file(s) with this exception, you may extend this exception to your
+ * version of the file(s), but you are not obligated to do so. If you do not
+ * wish to do so, delete this exception statement from your version. If you
+ * delete this exception statement from all source files in the program,
+ * then also delete it in the license file.
+ */
+
+#pragma once
+
+#include <string>
+
+namespace mongo {
+
+/**
+* Free Moniting Command line choices
+*/
+enum class EnableCloudStateEnum : std::int32_t {
+ kOn,
+ kOff,
+ kRuntime,
+};
+
+/**
+ * Free Monitoring configuration options
+ */
+struct FreeMonParams {
+ std::string freeMonitoringTag;
+ EnableCloudStateEnum freeMonitoringState = EnableCloudStateEnum::kRuntime;
+};
+
+extern FreeMonParams globalFreeMonParams;
+
+} // namespace mongo
diff --git a/src/mongo/db/free_mon/free_mon_queue_test.cpp b/src/mongo/db/free_mon/free_mon_queue_test.cpp
index b7dd61887f0..5e7b35c061d 100644
--- a/src/mongo/db/free_mon/free_mon_queue_test.cpp
+++ b/src/mongo/db/free_mon/free_mon_queue_test.cpp
@@ -140,7 +140,7 @@ TEST_F(FreeMonQueueTest, TestQueueStop) {
// Let our worker thread proceed
barrier.countDownAndWait();
-
+
_mockThreadPool->shutdown();
_mockThreadPool->join();
}