X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Ftracelib.cpp;h=b1526f1f15031cbfdc1182da72055568cb2a057e;hb=71e9444097372e2cf0505583bba65a85a4c3bebf;hp=6ec898c73b26886462752860be6fe7f255cbdc12;hpb=f165e5750fff603b11c8f221b7c36a9db4e8e86e;p=ric-plt%2Ftracelibcpp.git diff --git a/src/tracelib.cpp b/src/tracelib.cpp index 6ec898c..b1526f1 100644 --- a/src/tracelib.cpp +++ b/src/tracelib.cpp @@ -13,16 +13,106 @@ * 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); +} -#include +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 config = jaegertracing::Config(false, - jaegertracing::samplers::Config("const", 1)); - return jaegertracing::Tracer::make(serviceName, config, jaegertracing::logging::consoleLogger()); + 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()); + } } +