Status OptionsConfigParserPlugin::update(const std::string& source, const ParserConfig& config) { if (config.count("options") > 0) { data_ = pt::ptree(); data_.put_child("options", config.at("options")); } const auto& options = data_.get_child("options"); for (const auto& option : options) { std::string value = options.get<std::string>(option.first, ""); if (value.empty()) { continue; } Flag::updateValue(option.first, value); // There is a special case for supported Gflags-reserved switches. if (option.first == "verbose" || option.first == "verbose_debug" || option.first == "debug") { setVerboseLevel(); if (Flag::getValue("verbose") == "true") { VLOG(1) << "Verbose logging enabled by config option"; } } } return Status(0, "OK"); }
Status PrometheusMetricsConfigParserPlugin::update(const std::string& source, const ParserConfig& config) { if (config.count(kConfigParserRootKey) > 0) { data_ = boost::property_tree::ptree(); data_.put_child(kConfigParserRootKey, config.at(kConfigParserRootKey)); } return Status(0, "OK"); }
Status FilePathsConfigParserPlugin::update(const std::string& source, const ParserConfig& config) { if (config.count("file_paths") > 0) { data_.put_child("file_paths", config.at("file_paths")); } auto& accesses = data_.get_child("file_accesses"); if (config.count("file_accesses") > 0) { if (access_map_.count(source) > 0) { access_map_.erase(source); } for (const auto& category : config.at("file_accesses")) { auto path = category.second.get_value<std::string>(""); access_map_[source].push_back(path); } // Regenerate the access: for (const auto& access_source : access_map_) { for (const auto& category : access_source.second) { accesses.put(category, access_source.first); } } } Config::getInstance().removeFiles(source); for (const auto& category : data_.get_child("file_paths")) { for (const auto& path : category.second) { auto pattern = path.second.get_value<std::string>(""); if (pattern.empty()) { continue; } replaceGlobWildcards(pattern); Config::getInstance().addFile(source, category.first, pattern); } } return Status(0, "OK"); }