/* * Copyright (c) 2019 AT&T Intellectual Property. * Copyright (c) 2018-2019 Nokia. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * This source code is part of the near-RT RIC (RAN Intelligent Controller) * platform project (RICP). */ #include "tracelibcpp.hpp" #include "config.hpp" using namespace tracelibcpp; std::string ConfMaker::getEnv(const char* envName, std::string defVal) { const char *ev = getenv(envName); if (!ev) return defVal; return std::string(ev); } bool ConfMaker::isTracingEnabled() { std::string envValue = getEnv(TRACING_ENABLED_ENV, "false"); if (envValue == "1" || boost::iequals(envValue, "true")) return true; else return false; } jaegertracing::Config ConfMaker::makeNopTraceConfig() { return jaegertracing::Config(true, jaegertracing::samplers::Config("const", 0)); } jaegertracing::samplers::Config ConfMaker::getSamplerConfig() { std::string samplerType = getEnv(JAEGER_SAMPLER_TYPE_ENV, "const"); // Use value 0.001 as default param, same way as jaeger does it double param = atof(getEnv(JAEGER_SAMPLER_PARAM_ENV, "0.001").c_str()); return jaegertracing::samplers::Config(samplerType, param); } jaegertracing::reporters::Config ConfMaker::getReporterConfig() { std::string agentHostPort = getEnv(JAEGER_AGENT_ADDR_ENV, jaegertracing::reporters::Config::kDefaultLocalAgentHostPort); if (agentHostPort.find(':') == std::string::npos) agentHostPort += ":6831"; return jaegertracing::reporters::Config( 0, std::chrono::seconds(0), // use jaeger defaults getLoggingLevel() == LOG_ALL, // log spans agentHostPort ); } LogLevel ConfMaker::getLoggingLevel() { std::string logLevel = getEnv(JAEGER_LOG_LEVEL_ENV, "error"); if (boost::iequals(logLevel, "all")) return LOG_ALL; else if (boost::iequals(logLevel, "error")) return LOG_ERR; else return LOG_NONE; } std::unique_ptr ConfMaker::getLogger() { switch (getLoggingLevel()) { case LOG_ALL: case LOG_ERR: return jaegertracing::logging::consoleLogger(); break; default: return jaegertracing::logging::nullLogger(); } } jaegertracing::Config ConfMaker::getTraceConfig() { if (!isTracingEnabled()) return makeNopTraceConfig(); auto sampler = getSamplerConfig(); auto reporter = getReporterConfig(); return jaegertracing::Config(false, sampler, reporter); } std::shared_ptr tracelibcpp::createTracer(std::string serviceName) { auto cm = ConfMaker(serviceName); auto config = cm.getTraceConfig(); try { return jaegertracing::Tracer::make(serviceName, config, cm.getLogger()); } catch (std::exception& e) { if (cm.getLoggingLevel() != LOG_NONE) std::cerr << "Cannot create tracer: " << e.what() << std::endl; return jaegertracing::Tracer::make(serviceName, cm.makeNopTraceConfig()); } }