[ 
https://issues.apache.org/jira/browse/GOBBLIN-1639?focusedWorklogId=771561&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-771561
 ]

ASF GitHub Bot logged work on GOBBLIN-1639:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 17/May/22 20:18
            Start Date: 17/May/22 20:18
    Worklog Time Spent: 10m 
      Work Description: Will-Lo commented on code in PR #3500:
URL: https://github.com/apache/gobblin/pull/3500#discussion_r875227464


##########
gobblin-runtime/src/main/java/org/apache/gobblin/runtime/metrics/ServiceGobblinJobMetricReporter.java:
##########
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.gobblin.runtime.metrics;
+
+import com.codahale.metrics.MetricRegistry;
+import com.google.common.base.Optional;
+import java.util.concurrent.TimeUnit;
+import org.apache.gobblin.configuration.ConfigurationKeys;
+import org.apache.gobblin.metrics.ContextAwareGauge;
+import org.apache.gobblin.metrics.MetricContext;
+import org.apache.gobblin.metrics.ServiceMetricNames;
+import org.apache.gobblin.metrics.event.JobEvent;
+import org.apache.gobblin.metrics.event.TimingEvent;
+import org.apache.gobblin.runtime.JobState;
+
+
+/**
+ * A metrics reporter to report job-level metrics to Gobblin-as-a-Service
+ * Metrics should have the name FLOW_GROUP.FLOW_NAME.EDGE_ID.METRIC_NAME
+ * If edge ID does not exist due to a different flowgraph being used, use the 
jobName as default
+ */
+public class ServiceGobblinJobMetricReporter implements 
GobblinJobMetricReporter {
+  static String FLOW_EDGE_ID_KEY = "flow.edge.id";
+  private Optional<MetricContext> metricContext;
+
+  public ServiceGobblinJobMetricReporter(Optional<MetricContext> 
metricContext) {
+    this.metricContext = metricContext;
+  }
+
+  public void reportWorkUnitCreationTimerMetrics(TimingEvent 
workUnitsCreationTimer, JobState jobState) {
+    if (!this.metricContext.isPresent() || 
!jobState.getPropAsBoolean(ConfigurationKeys.GOBBLIN_OUTPUT_JOB_LEVEL_METRICS, 
true)) {
+      return;
+    }
+    String workunitCreationGaugeName = 
MetricRegistry.name(ServiceMetricNames.GOBBLIN_SERVICE_PREFIX, 
jobState.getProp(ConfigurationKeys.FLOW_GROUP_KEY),
+        jobState.getProp(ConfigurationKeys.FLOW_NAME_KEY), 
jobState.getProp(FLOW_EDGE_ID_KEY, jobState.getJobName()), 
TimingEvent.LauncherTimings.WORK_UNITS_CREATION);
+    long workUnitsCreationTime = workUnitsCreationTimer.getDuration() / 
TimeUnit.SECONDS.toMillis(1);
+    ContextAwareGauge<Integer> workunitCreationGauge =
+        
this.metricContext.get().newContextAwareGauge(workunitCreationGaugeName, () -> 
(int) workUnitsCreationTime);
+    this.metricContext.get().register(workunitCreationGaugeName, 
workunitCreationGauge);
+  }
+
+  public void reportWorkUnitCountMetrics(int workUnitCount, JobState jobState) 
{
+    if (!this.metricContext.isPresent() || 
!jobState.getPropAsBoolean(ConfigurationKeys.GOBBLIN_OUTPUT_JOB_LEVEL_METRICS, 
true)) {
+      return;
+    }
+    String workunitCountGaugeName =  
MetricRegistry.name(ServiceMetricNames.GOBBLIN_SERVICE_PREFIX, 
jobState.getProp(ConfigurationKeys.FLOW_GROUP_KEY),
+        jobState.getProp(ConfigurationKeys.FLOW_NAME_KEY), 
jobState.getProp(FLOW_EDGE_ID_KEY, jobState.getJobName()), 
JobEvent.WORK_UNITS_CREATED);
+    ContextAwareGauge<Integer> workunitCountGauge = this.metricContext.get()
+        .newContextAwareGauge(workunitCountGaugeName, () -> 
Integer.valueOf(workUnitCount));

Review Comment:
   workUnitsCreationTime is a long so it isn't supported in `Integer.valueOf`





Issue Time Tracking
-------------------

    Worklog Id:     (was: 771561)
    Time Spent: 2.5h  (was: 2h 20m)

> Remove adhoc job metric emission and also provide a more uniform way of 
> emitting per pipeline metrics on Gobblin
> ----------------------------------------------------------------------------------------------------------------
>
>                 Key: GOBBLIN-1639
>                 URL: https://issues.apache.org/jira/browse/GOBBLIN-1639
>             Project: Apache Gobblin
>          Issue Type: Task
>          Components: gobblin-service
>            Reporter: William Lo
>            Assignee: Abhishek Tiwari
>            Priority: Major
>          Time Spent: 2.5h
>  Remaining Estimate: 0h
>
> Gobblin flows still emit certain metrics by default.
> 1. GaaS flows which are adhoc should not be emitting metrics outside of GTE
> 2. Per pipeline metrics are too disorganized right now, need to unify them 
> and this can be the first step.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to