Documentation for tracelibcpp
[ric-plt/tracelibcpp.git] / src / tracelib.cpp
index 6ec898c..b1526f1 100644 (file)
  * 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/Tracer.h>
+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<jaegertracing::logging::Logger> 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<opentracing::Tracer> 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());
+    }
 }
 
+