Repository: kylin
Updated Branches:
  refs/heads/yaho-cube-planner 8491905eb -> 199c198b4


APACHE-KYLIN-2723: add 'user' property for metrics subject query & job


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/199c198b
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/199c198b
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/199c198b

Branch: refs/heads/yaho-cube-planner
Commit: 199c198b44d7ed6d0923d504a66efcccf7f2c464
Parents: 8491905
Author: Zhong <nju_y...@apache.org>
Authored: Fri Aug 11 10:24:12 2017 +0800
Committer: Zhong <nju_y...@apache.org>
Committed: Fri Aug 11 10:24:12 2017 +0800

----------------------------------------------------------------------
 .../kylin/job/metrics/JobMetricsFacade.java     | 21 +++++++++-----
 .../kylin/metrics/property/JobPropertyEnum.java |  4 +--
 .../metrics/property/QueryPropertyEnum.java     |  4 +--
 .../org/apache/kylin/engine/mr/CubingJob.java   | 30 +++++++-------------
 .../kylin/rest/metrics/QueryMetricsFacade.java  | 10 +++++--
 5 files changed, 37 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/199c198b/core-job/src/main/java/org/apache/kylin/job/metrics/JobMetricsFacade.java
----------------------------------------------------------------------
diff --git 
a/core-job/src/main/java/org/apache/kylin/job/metrics/JobMetricsFacade.java 
b/core-job/src/main/java/org/apache/kylin/job/metrics/JobMetricsFacade.java
index 9762b81..6171b54 100644
--- a/core-job/src/main/java/org/apache/kylin/job/metrics/JobMetricsFacade.java
+++ b/core-job/src/main/java/org/apache/kylin/job/metrics/JobMetricsFacade.java
@@ -36,19 +36,22 @@ public class JobMetricsFacade {
         RecordEvent metricsEvent;
         if (jobStats.throwable == null) {
             metricsEvent = new 
TimedRecordEvent(KylinConfig.getInstanceFromEnv().getKylinMetricsSubjectJob());
-            setJobWrapper(metricsEvent, jobStats.projectName, 
jobStats.cubeName, jobStats.jobId, jobStats.jobType, jobStats.cubingType);
+            setJobWrapper(metricsEvent, jobStats.user, jobStats.projectName, 
jobStats.cubeName, jobStats.jobId,
+                    jobStats.jobType, jobStats.cubingType);
             setJobStats(metricsEvent, jobStats.tableSize, jobStats.cubeSize, 
jobStats.buildDuration, jobStats.waitResourceTime, jobStats.perBytesTimeCost, //
                     jobStats.dColumnDistinct, jobStats.dDictBuilding, 
jobStats.dCubingInmem, jobStats.dHfileConvert);
         } else {
             metricsEvent = new 
TimedRecordEvent(KylinConfig.getInstanceFromEnv().getKylinMetricsSubjectJobException());
-            setJobExceptionWrapper(metricsEvent, jobStats.projectName, 
jobStats.cubeName, jobStats.jobId, jobStats.jobType, jobStats.cubingType, //
+            setJobExceptionWrapper(metricsEvent, jobStats.user, 
jobStats.projectName, jobStats.cubeName, jobStats.jobId,
+                    jobStats.jobType, jobStats.cubingType, //
                     jobStats.throwable.getClass());
         }
         MetricsManager.getInstance().update(metricsEvent);
     }
 
-    private static void setJobWrapper(RecordEvent metricsEvent, String 
projectName, String cubeName, String jobId,
-            String jobType, String cubingType) {
+    private static void setJobWrapper(RecordEvent metricsEvent, String user, 
String projectName, String cubeName,
+            String jobId, String jobType, String cubingType) {
+        metricsEvent.put(JobPropertyEnum.USER.toString(), user);
         metricsEvent.put(JobPropertyEnum.PROJECT.toString(), projectName);
         metricsEvent.put(JobPropertyEnum.CUBE.toString(), cubeName);
         metricsEvent.put(JobPropertyEnum.ID_CODE.toString(), jobId);
@@ -70,14 +73,16 @@ public class JobMetricsFacade {
         
metricsEvent.put(JobPropertyEnum.STEP_DURATION_HFILE_CONVERT.toString(), 
dHfileConvert);
     }
 
-    private static <T extends Throwable> void 
setJobExceptionWrapper(RecordEvent metricsEvent, String projectName,
+    private static <T extends Throwable> void 
setJobExceptionWrapper(RecordEvent metricsEvent, String user,
+            String projectName,
                                                                      String 
cubeName, String jobId, String jobType, String cubingType, Class<T> 
throwableClass) {
-        setJobWrapper(metricsEvent, projectName, cubeName, jobId, jobType, 
cubingType);
+        setJobWrapper(metricsEvent, user, projectName, cubeName, jobId, 
jobType, cubingType);
         metricsEvent.put(JobPropertyEnum.EXCEPTION.toString(), 
throwableClass.getName());
     }
 
     public static class JobStatisticsResult {
         // dimensions
+        private String user;
         private String projectName;
         private String cubeName;
         private String jobId;
@@ -100,7 +105,9 @@ public class JobMetricsFacade {
         // exception
         private Throwable throwable;
 
-        public void setWrapper(String projectName, String cubeName, String 
jobId, String jobType, String cubingType) {
+        public void setWrapper(String user, String projectName, String 
cubeName, String jobId, String jobType,
+                String cubingType) {
+            this.user = user;
             this.projectName = projectName;
             this.cubeName = cubeName;
             this.jobId = jobId;

http://git-wip-us.apache.org/repos/asf/kylin/blob/199c198b/core-metrics/src/main/java/org/apache/kylin/metrics/property/JobPropertyEnum.java
----------------------------------------------------------------------
diff --git 
a/core-metrics/src/main/java/org/apache/kylin/metrics/property/JobPropertyEnum.java
 
b/core-metrics/src/main/java/org/apache/kylin/metrics/property/JobPropertyEnum.java
index 0453221..bbe987a 100644
--- 
a/core-metrics/src/main/java/org/apache/kylin/metrics/property/JobPropertyEnum.java
+++ 
b/core-metrics/src/main/java/org/apache/kylin/metrics/property/JobPropertyEnum.java
@@ -21,8 +21,8 @@ package org.apache.kylin.metrics.property;
 import com.google.common.base.Strings;
 
 public enum JobPropertyEnum {
-    ID_CODE("JOB_ID"), PROJECT("PROJECT"), CUBE("CUBE_NAME"), 
TYPE("JOB_TYPE"), ALGORITHM("CUBING_TYPE"), STATUS(
-            "JOB_STATUS"), EXCEPTION("EXCEPTION"), //
+    ID_CODE("JOB_ID"), USER("USER"), PROJECT("PROJECT"), CUBE("CUBE_NAME"), 
TYPE("JOB_TYPE"), ALGORITHM(
+            "CUBING_TYPE"), STATUS("JOB_STATUS"), EXCEPTION("EXCEPTION"), //
     SOURCE_SIZE("TABLE_SIZE"), CUBE_SIZE("CUBE_SIZE"), 
BUILD_DURATION("DURATION"), WAIT_RESOURCE_TIME(
             "WAIT_RESOURCE_TIME"), PER_BYTES_TIME_COST("PER_BYTES_TIME_COST"), 
STEP_DURATION_DISTINCT_COLUMNS(
                     "STEP_DURATION_DISTINCT_COLUMNS"), 
STEP_DURATION_DICTIONARY(

http://git-wip-us.apache.org/repos/asf/kylin/blob/199c198b/core-metrics/src/main/java/org/apache/kylin/metrics/property/QueryPropertyEnum.java
----------------------------------------------------------------------
diff --git 
a/core-metrics/src/main/java/org/apache/kylin/metrics/property/QueryPropertyEnum.java
 
b/core-metrics/src/main/java/org/apache/kylin/metrics/property/QueryPropertyEnum.java
index d3fd3ce..6fe5b0f 100644
--- 
a/core-metrics/src/main/java/org/apache/kylin/metrics/property/QueryPropertyEnum.java
+++ 
b/core-metrics/src/main/java/org/apache/kylin/metrics/property/QueryPropertyEnum.java
@@ -21,8 +21,8 @@ package org.apache.kylin.metrics.property;
 import com.google.common.base.Strings;
 
 public enum QueryPropertyEnum {
-    ID_CODE("QUERY_HASH_CODE"), TYPE("QUERY_TYPE"), PROJECT("PROJECT"), 
REALIZATION("REALIZATION"), REALIZATION_TYPE(
-            "REALIZATION_TYPE"), EXCEPTION("EXCEPTION"), //
+    ID_CODE("QUERY_HASH_CODE"), TYPE("QUERY_TYPE"), USER("USER"), 
PROJECT("PROJECT"), REALIZATION(
+            "REALIZATION"), REALIZATION_TYPE("REALIZATION_TYPE"), 
EXCEPTION("EXCEPTION"), //
     TIME_COST("QUERY_TIME_COST"), 
CALCITE_RETURN_COUNT("CALCITE_COUNT_RETURN"), STORAGE_RETURN_COUNT(
             "STORAGE_COUNT_RETURN"), 
AGGR_FILTER_COUNT("CALCITE_COUNT_AGGREGATE_FILTER");
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/199c198b/engine-mr/src/main/java/org/apache/kylin/engine/mr/CubingJob.java
----------------------------------------------------------------------
diff --git a/engine-mr/src/main/java/org/apache/kylin/engine/mr/CubingJob.java 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/CubingJob.java
index 9d493aa..47f6a87 100644
--- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/CubingJob.java
+++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/CubingJob.java
@@ -18,7 +18,14 @@
 
 package org.apache.kylin.engine.mr;
 
-import com.google.common.base.Strings;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.regex.Matcher;
+
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.StringUtil;
@@ -29,29 +36,14 @@ import 
org.apache.kylin.engine.mr.common.MapReduceExecutable;
 import org.apache.kylin.engine.mr.steps.CubingExecutableUtil;
 import org.apache.kylin.job.constant.ExecutableConstants;
 import org.apache.kylin.job.engine.JobEngineConfig;
-import org.apache.kylin.job.execution.AbstractExecutable;
-import org.apache.kylin.job.execution.DefaultChainedExecutable;
-import org.apache.kylin.job.execution.ExecutableContext;
-import org.apache.kylin.job.execution.ExecutableState;
-import org.apache.kylin.job.execution.ExecuteResult;
-import org.apache.kylin.job.execution.Output;
+import org.apache.kylin.job.execution.*;
 import org.apache.kylin.job.metrics.JobMetricsFacade;
 import org.apache.kylin.metadata.project.ProjectInstance;
 import org.apache.kylin.metadata.project.ProjectManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.TimeZone;
-import java.util.regex.Matcher;
+import com.google.common.base.Strings;
 
 /**
  */
@@ -246,7 +238,7 @@ public class CubingJob extends DefaultChainedExecutable {
 
     protected void updateMetrics(ExecutableContext context, ExecuteResult 
result, ExecutableState state) {
         JobMetricsFacade.JobStatisticsResult jobStats = new 
JobMetricsFacade.JobStatisticsResult();
-        
jobStats.setWrapper(ProjectInstance.getNormalizedProjectName(getProjectName()),
+        jobStats.setWrapper(getSubmitter(), 
ProjectInstance.getNormalizedProjectName(getProjectName()),
                 CubingExecutableUtil.getCubeName(getParams()), getId(), 
getJobType(),
                 getAlgorithm() == null ? "NULL" : getAlgorithm().toString());
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/199c198b/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java
----------------------------------------------------------------------
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java
 
b/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java
index 938488a..e670580 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java
@@ -38,6 +38,7 @@ import org.apache.kylin.rest.request.SQLRequest;
 import org.apache.kylin.rest.response.SQLResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.security.core.context.SecurityContextHolder;
 
 import com.google.common.hash.HashFunction;
 import com.google.common.hash.Hashing;
@@ -83,6 +84,10 @@ public class QueryMetricsFacade {
         /**
          * report query related metrics
          */
+        String user = 
SecurityContextHolder.getContext().getAuthentication().getName();
+        if (user == null) {
+            user = "unknown";
+        }
         final QueryContext.QueryStatisticsResult queryStatisticsResult = 
sqlResponse.getQueryStatistics();
         for (QueryContext.RPCStatistics entry : 
queryStatisticsResult.getRpcStatisticsList()) {
             RecordEvent rpcMetricsEvent = new TimedRecordEvent(
@@ -102,7 +107,7 @@ public class QueryMetricsFacade {
             RecordEvent queryMetricsEvent = new TimedRecordEvent(
                     
KylinConfig.getInstanceFromEnv().getKylinMetricsSubjectQuery());
             setQueryWrapper(queryMetricsEvent, //
-                    sqlHashCode, sqlResponse.isStorageCacheUsed() ? "CACHE" : 
contextEntry.getQueryType(),
+                    user, sqlHashCode, sqlResponse.isStorageCacheUsed() ? 
"CACHE" : contextEntry.getQueryType(),
                     sqlRequest.getProject(), contextEntry.getRealization(), 
contextEntry.getRealizationType(),
                     sqlResponse.getThrowable());
 
@@ -180,8 +185,9 @@ public class QueryMetricsFacade {
         metricsEvent.put(QueryCubePropertyEnum.WEIGHT_PER_HIT.toString(), 
weightPerHit);
     }
 
-    private static void setQueryWrapper(RecordEvent metricsEvent, long 
queryHashCode, String queryType,
+    private static void setQueryWrapper(RecordEvent metricsEvent, String user, 
long queryHashCode, String queryType,
             String projectName, String realizationName, int realizationType, 
Throwable throwable) {
+        metricsEvent.put(QueryPropertyEnum.USER.toString(), user);
         metricsEvent.put(QueryPropertyEnum.ID_CODE.toString(), queryHashCode);
         metricsEvent.put(QueryPropertyEnum.TYPE.toString(), queryType);
         metricsEvent.put(QueryPropertyEnum.PROJECT.toString(), projectName);

Reply via email to