You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by "github-advanced-security[bot] (via GitHub)" <gi...@apache.org> on 2024/05/29 16:41:02 UTC

Re: [PR] Add cgroup cpu/mem/disk usage metrics (druid)

github-advanced-security[bot] commented on code in PR #16472:
URL: https://github.com/apache/druid/pull/16472#discussion_r1619191381


##########
processing/src/main/java/org/apache/druid/java/util/metrics/CgroupCpuMonitor.java:
##########
@@ -20,28 +20,61 @@
 package org.apache.druid.java.util.metrics;
 
 import com.google.common.collect.ImmutableMap;
+import org.apache.druid.java.util.common.logger.Logger;
 import org.apache.druid.java.util.emitter.service.ServiceEmitter;
 import org.apache.druid.java.util.emitter.service.ServiceMetricEvent;
 import org.apache.druid.java.util.metrics.cgroups.CgroupDiscoverer;
 import org.apache.druid.java.util.metrics.cgroups.Cpu;
+import org.apache.druid.java.util.metrics.cgroups.ProcSelfCgroupDiscoverer;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.time.Instant;
 import java.util.Map;
 
 public class CgroupCpuMonitor extends FeedDefiningMonitor
 {
+  private static final Logger LOG = new Logger(CgroupCpuMonitor.class);
+  private static final Long DEFAULT_USER_HZ = 100L;
+  public static final String TOTAL_USAGE_METRIC = "cgroup/cpu/usage/total/percentage";
+  public static final String USER_USAGE_METRIC = "cgroup/cpu/usage/user/percentage";
+  public static final String SYS_USAGE_METRIC = "cgroup/cpu/usage/sys/percentage";
+  private static final String TOTAL = "total";
+  private static final String USER = "user";
+  private static final String SYSTEM = "system";
   final CgroupDiscoverer cgroupDiscoverer;
   final Map<String, String[]> dimensions;
+  private Long userHz;
+  private KeyedDiff jiffies = new KeyedDiff();
+  private long prevJiffiesSnapshotAt = 0;
 
   public CgroupCpuMonitor(CgroupDiscoverer cgroupDiscoverer, final Map<String, String[]> dimensions, String feed)
   {
     super(feed);
     this.cgroupDiscoverer = cgroupDiscoverer;
     this.dimensions = dimensions;
+    try {
+      Process p = new ProcessBuilder("getconf", "CLK_TCK").start();

Review Comment:
   ## Executing a command with a relative path
   
   Command with a relative path 'getconf' is executed.
   
   [Show more details](https://github.com/apache/druid/security/code-scanning/7423)



##########
processing/src/main/java/org/apache/druid/java/util/metrics/CgroupCpuMonitor.java:
##########
@@ -20,28 +20,61 @@
 package org.apache.druid.java.util.metrics;
 
 import com.google.common.collect.ImmutableMap;
+import org.apache.druid.java.util.common.logger.Logger;
 import org.apache.druid.java.util.emitter.service.ServiceEmitter;
 import org.apache.druid.java.util.emitter.service.ServiceMetricEvent;
 import org.apache.druid.java.util.metrics.cgroups.CgroupDiscoverer;
 import org.apache.druid.java.util.metrics.cgroups.Cpu;
+import org.apache.druid.java.util.metrics.cgroups.ProcSelfCgroupDiscoverer;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.time.Instant;
 import java.util.Map;
 
 public class CgroupCpuMonitor extends FeedDefiningMonitor
 {
+  private static final Logger LOG = new Logger(CgroupCpuMonitor.class);
+  private static final Long DEFAULT_USER_HZ = 100L;
+  public static final String TOTAL_USAGE_METRIC = "cgroup/cpu/usage/total/percentage";
+  public static final String USER_USAGE_METRIC = "cgroup/cpu/usage/user/percentage";
+  public static final String SYS_USAGE_METRIC = "cgroup/cpu/usage/sys/percentage";
+  private static final String TOTAL = "total";
+  private static final String USER = "user";
+  private static final String SYSTEM = "system";
   final CgroupDiscoverer cgroupDiscoverer;
   final Map<String, String[]> dimensions;
+  private Long userHz;
+  private KeyedDiff jiffies = new KeyedDiff();
+  private long prevJiffiesSnapshotAt = 0;
 
   public CgroupCpuMonitor(CgroupDiscoverer cgroupDiscoverer, final Map<String, String[]> dimensions, String feed)
   {
     super(feed);
     this.cgroupDiscoverer = cgroupDiscoverer;
     this.dimensions = dimensions;
+    try {
+      Process p = new ProcessBuilder("getconf", "CLK_TCK").start();
+      BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream(), StandardCharsets.UTF_8));

Review Comment:
   ## Potential input resource leak
   
   This InputStreamReader is not always closed on method exit.
   
   [Show more details](https://github.com/apache/druid/security/code-scanning/7422)



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org