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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 01acd60e2b3 [Pick][Improment]Add workload group query detail (#40050) 
(#41594)
01acd60e2b3 is described below

commit 01acd60e2b3f24fbd18689feead2183f255490e1
Author: wangbo <wan...@apache.org>
AuthorDate: Fri Oct 11 09:32:33 2024 +0800

    [Pick][Improment]Add workload group query detail (#40050) (#41594)
    
    pick #40050
---
 .../org/apache/doris/metric/JsonMetricVisitor.java |  5 ++++
 .../java/org/apache/doris/metric/MetricRepo.java   |  2 ++
 .../org/apache/doris/metric/MetricVisitor.java     |  2 ++
 .../doris/metric/PrometheusMetricVisitor.java      | 29 ++++++++++++++++++++++
 .../doris/metric/SimpleCoreMetricVisitor.java      |  5 ++++
 .../resource/workloadgroup/WorkloadGroupMgr.java   | 25 +++++++++++++++++++
 6 files changed, 68 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/metric/JsonMetricVisitor.java 
b/fe/fe-core/src/main/java/org/apache/doris/metric/JsonMetricVisitor.java
index 5b3b3d292a2..23682e5cd66 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/metric/JsonMetricVisitor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/metric/JsonMetricVisitor.java
@@ -228,6 +228,11 @@ public class JsonMetricVisitor extends MetricVisitor {
         }
     }
 
+    @Override
+    public void visitWorkloadGroup() {
+        return;
+    }
+
     @Override
     public String finish() {
         if (!closed) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/metric/MetricRepo.java 
b/fe/fe-core/src/main/java/org/apache/doris/metric/MetricRepo.java
index a18b57ac785..f029b4f6255 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/metric/MetricRepo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/metric/MetricRepo.java
@@ -686,6 +686,8 @@ public final class MetricRepo {
         // node info
         visitor.getNodeInfo();
 
+        visitor.visitWorkloadGroup();
+
         return visitor.finish();
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/metric/MetricVisitor.java 
b/fe/fe-core/src/main/java/org/apache/doris/metric/MetricVisitor.java
index dcbf9268b82..f1dbab67117 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/metric/MetricVisitor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/metric/MetricVisitor.java
@@ -44,6 +44,8 @@ public abstract class MetricVisitor {
 
     public abstract void getNodeInfo();
 
+    public abstract void visitWorkloadGroup();
+
     public String finish() {
         return sb.toString();
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java 
b/fe/fe-core/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java
index 4cab30e8041..aabeb8e317c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java
@@ -26,11 +26,14 @@ import org.apache.doris.monitor.jvm.JvmStats.Threads;
 import com.codahale.metrics.Histogram;
 import com.codahale.metrics.Snapshot;
 import com.google.common.base.Joiner;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -41,6 +44,9 @@ import java.util.stream.Collectors;
  * doris_fe_job{job="load", type="mini", state="pending"} 0
  */
 public class PrometheusMetricVisitor extends MetricVisitor {
+
+    private static final Logger logger = 
LogManager.getLogger(PrometheusMetricVisitor.class);
+
     // jvm
     private static final String JVM_HEAP_SIZE_BYTES = "jvm_heap_size_bytes";
     private static final String JVM_NON_HEAP_SIZE_BYTES = 
"jvm_non_heap_size_bytes";
@@ -225,4 +231,27 @@ public class PrometheusMetricVisitor extends MetricVisitor 
{
         }
         return;
     }
+
+    @Override
+    public void visitWorkloadGroup() {
+        StringBuilder tmpSb = new StringBuilder();
+        try {
+            String counterTitle = "doris_workload_group_query_detail";
+            tmpSb.append("# HELP " + counterTitle + "\n");
+            tmpSb.append("# TYPE " + counterTitle + " counter\n");
+            Map<String, List<String>> workloadGroupMap = 
Env.getCurrentEnv().getWorkloadGroupMgr()
+                    .getWorkloadGroupQueryDetail();
+            for (Map.Entry<String, List<String>> entry : 
workloadGroupMap.entrySet()) {
+                String name = entry.getKey();
+                List<String> valList = entry.getValue();
+                tmpSb.append(String.format("%s{name=\"%s\", type=\"%s\"} 
%s\n", counterTitle, name, "running_query_num",
+                        valList.get(0)));
+                tmpSb.append(String.format("%s{name=\"%s\", type=\"%s\"} 
%s\n", counterTitle, name, "waiting_query_num",
+                        valList.get(1)));
+            }
+            sb.append(tmpSb);
+        } catch (Exception e) {
+            logger.warn("error happends when get workload group query detail 
", e);
+        }
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/metric/SimpleCoreMetricVisitor.java 
b/fe/fe-core/src/main/java/org/apache/doris/metric/SimpleCoreMetricVisitor.java
index bbbd13186ee..cb7d559ef1c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/metric/SimpleCoreMetricVisitor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/metric/SimpleCoreMetricVisitor.java
@@ -136,4 +136,9 @@ public class SimpleCoreMetricVisitor extends MetricVisitor {
         sb.append("doris_fe_backend_dead_num").append(" 
").append(beDeadNum).append("\n");
         sb.append("doris_fe_broker_dead_num").append(" 
").append(brokerDeadNum).append("\n");
     }
+
+    @Override
+    public void visitWorkloadGroup() {
+        return;
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroupMgr.java
 
b/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroupMgr.java
index 272f045f41b..81a08ad76fe 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroupMgr.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/resource/workloadgroup/WorkloadGroupMgr.java
@@ -301,6 +301,31 @@ public class WorkloadGroupMgr extends MasterDaemon 
implements Writable, GsonPost
         }
     }
 
+    public Map<String, List<String>> getWorkloadGroupQueryDetail() {
+        Map<String, List<String>> ret = Maps.newHashMap();
+        readLock();
+        try {
+            for (Map.Entry<Long, WorkloadGroup> entry : 
idToWorkloadGroup.entrySet()) {
+                Long wgId = entry.getKey();
+                WorkloadGroup wg = entry.getValue();
+                QueryQueue qq = idToQueryQueue.get(wgId);
+                List<String> valueList = new ArrayList<>(2);
+                if (qq == null) {
+                    valueList.add("0");
+                    valueList.add("0");
+                } else {
+                    Pair<Integer, Integer> qdtail = qq.getQueryQueueDetail();
+                    valueList.add(String.valueOf(qdtail.first));
+                    valueList.add(String.valueOf(qdtail.second));
+                }
+                ret.put(wg.getName(), valueList);
+            }
+        } finally {
+            readUnlock();
+        }
+        return ret;
+    }
+
     private String getWorkloadGroupNameAndCheckPriv(ConnectContext context) 
throws AnalysisException {
         String groupName = context.getSessionVariable().getWorkloadGroup();
         if (Strings.isNullOrEmpty(groupName)) {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to