This is an automated email from the ASF dual-hosted git repository.

wlo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/gobblin.git


The following commit(s) were added to refs/heads/master by this push:
     new 2bc563854e [GOBBLIN-2161] Support for configuring openTelemetry metric 
exporter as logExporter (#4061)
2bc563854e is described below

commit 2bc563854e8bcb6dd086aac26fb36fbd37a11f2e
Author: Prateek Khandelwal <[email protected]>
AuthorDate: Mon Sep 30 22:22:10 2024 +0530

    [GOBBLIN-2161] Support for configuring openTelemetry metric exporter as 
logExporter (#4061)
    
    * Support for configuring openTelemetry metric exporter as logExporter
    
    * Added a TODO to use factory pattern
---
 .../apache/gobblin/configuration/ConfigurationKeys.java   |  6 ++++++
 .../org/apache/gobblin/metrics/OpenTelemetryMetrics.java  | 15 +++++++++++++++
 2 files changed, 21 insertions(+)

diff --git 
a/gobblin-api/src/main/java/org/apache/gobblin/configuration/ConfigurationKeys.java
 
b/gobblin-api/src/main/java/org/apache/gobblin/configuration/ConfigurationKeys.java
index 637cdeba06..7b33f1d303 100644
--- 
a/gobblin-api/src/main/java/org/apache/gobblin/configuration/ConfigurationKeys.java
+++ 
b/gobblin-api/src/main/java/org/apache/gobblin/configuration/ConfigurationKeys.java
@@ -911,6 +911,12 @@ public class ConfigurationKeys {
   public static final String METRICS_REPORTING_OPENTELEMETRY_PREFIX = 
"metrics.reporting.opentelemetry.";
   public static final String METRICS_REPORTING_OPENTELEMETRY_ENABLED = 
METRICS_REPORTING_OPENTELEMETRY_PREFIX + "enabled";
 
+  public static final String 
METRICS_REPORTING_OPENTELEMETRY_LOGEXPORTER_ENABLED = 
METRICS_REPORTING_OPENTELEMETRY_PREFIX + "logexporter.enabled";
+
+  public static final Boolean 
DEFAULT_METRICS_REPORTING_OPENTELEMETRY_LOGEXPORTER_ENABLED = false;
+
+  public static final String 
METRICS_REPORTING_OPENTELEMETRY_LOGEXPORTER_CLASSNAME = 
METRICS_REPORTING_OPENTELEMETRY_PREFIX + "logexporter.className";
+
   public static final String METRICS_REPORTING_OPENTELEMETRY_CONFIGS_PREFIX = 
METRICS_REPORTING_OPENTELEMETRY_PREFIX + "configs.";
   public static final Boolean DEFAULT_METRICS_REPORTING_OPENTELEMETRY_ENABLED 
= false;
 
diff --git 
a/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/OpenTelemetryMetrics.java
 
b/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/OpenTelemetryMetrics.java
index 522568462b..ce85b6ad89 100644
--- 
a/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/OpenTelemetryMetrics.java
+++ 
b/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/OpenTelemetryMetrics.java
@@ -17,6 +17,7 @@
 
 package org.apache.gobblin.metrics;
 
+import java.lang.reflect.Method;
 import java.time.Duration;
 import java.util.HashMap;
 import java.util.Map;
@@ -59,6 +60,20 @@ public class OpenTelemetryMetrics extends 
OpenTelemetryMetricsBase {
 
   @Override
   protected MetricExporter initializeMetricExporter(State state) {
+    // TODO: Refactor the method to use a factory pattern for instantiating 
MetricExporter. Each MetricExporter
+    //       type would have its own factory class, ensuring proper 
instantiation and handling specific configs.
+    if 
(state.getPropAsBoolean(ConfigurationKeys.METRICS_REPORTING_OPENTELEMETRY_LOGEXPORTER_ENABLED,
+        
ConfigurationKeys.DEFAULT_METRICS_REPORTING_OPENTELEMETRY_LOGEXPORTER_ENABLED)) 
{
+      try {
+        Class<?> clazz = 
Class.forName(ConfigurationKeys.METRICS_REPORTING_OPENTELEMETRY_LOGEXPORTER_CLASSNAME);
+        Method instanceMethod = clazz.getMethod("instance");
+        // Invoke the method to get the singleton instance
+        return metricExporter = (MetricExporter) instanceMethod.invoke(null);
+      } catch (Exception e) {
+        log.error("Error occurred while instantiating opentelemetry 
LogExporter class", e);
+      }
+    }
+
     
Preconditions.checkArgument(state.contains(ConfigurationKeys.METRICS_REPORTING_OPENTELEMETRY_ENDPOINT),
         "OpenTelemetry endpoint must be provided");
     OtlpHttpMetricExporterBuilder httpExporterBuilder = 
OtlpHttpMetricExporter.builder();

Reply via email to