From 4dcb4d900d6ac8143e95cf7189b40fbc464182e6 Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Tue, 3 Oct 2017 09:32:30 +0000 Subject: write config file --- .../apps/vespa-logforwarder-start/cf-handler.cpp | 37 +++++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) (limited to 'logforwarder') diff --git a/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.cpp b/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.cpp index 573a23a373e..13370c08b59 100644 --- a/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.cpp +++ b/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.cpp @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "cf-handler.h" +#include #include #include @@ -19,15 +20,41 @@ CfHandler::subscribe(const std::string & configId, uint64_t timeoutMS) _handle = _subscriber.subscribe(configId, timeoutMS); } +namespace { +std::string +cfFilePath() { + std::string path = vespa::Defaults::underVespaHome("var/db/vespa/splunk"); + DIR *dp = opendir(path.c_str()); + if (dp == NULL) { + if (errno != ENOTDIR || mkdir(path.c_str() != 0)) { + perror(path.c_str()); + } + } + if (dp != NULL) closedir(dp); + path += "/deploymentclient.conf; + return path; +} +} + void CfHandler::doConfigure() { std::unique_ptr cfg(_handle->getConfig()); const LogforwarderConfig& config(*cfg); - printf("logforwarder:\n"); - printf(" deployment server: %s\n", config.deploymentServer.c_str()); - printf(" client name: %s\n", config.clientName.c_str()); + std::string path = cfFilePath(); + std::string tmpPath = path + ".new"; + FILE *fp = fopen(tmpPath.c_str(), "w"); + if (fp == NULL) return; + + fprintf(fp, "[deployment-client]\n"); + fprintf(fp, "clientName = %s\n", config.clientName.c_str()); + fprintf(fp, "\n"); + fprintf(fp, "[target-broker:deploymentServer]\n"); + fprintf(fp, "targetUri = %s\n", config.deploymentServer.c_str()); + + fclose(fp); + rename(tmpPath.c_str(), path.c_str()); } void @@ -43,9 +70,10 @@ constexpr uint64_t CONFIG_TIMEOUT_MS = 30 * 1000; void CfHandler::start(const char *configId) { - LOG(debug, "Reading configuration configid '%s'", configId); + LOG(debug, "Reading configuration with id '%s'", configId); try { subscribe(configId, CONFIG_TIMEOUT_MS); + doConfigure(); } catch (config::ConfigTimeoutException & ex) { LOG(warning, "Timout getting config, please check your setup. Will exit and restart: %s", ex.getMessage().c_str()); exit(EXIT_FAILURE); @@ -56,5 +84,4 @@ CfHandler::start(const char *configId) LOG(error, "Fatal: Could not get config, please check your setup: %s", ex.getMessage().c_str()); exit(EXIT_FAILURE); } - doConfigure(); } -- cgit v1.2.3