|
35 | 35 |
|
36 | 36 | import javax.annotation.CheckForNull;
|
37 | 37 | import javax.annotation.Nonnull;
|
| 38 | +import java.io.BufferedReader; |
38 | 39 | import java.io.ByteArrayOutputStream;
|
39 | 40 | import java.io.IOException;
|
| 41 | +import java.io.Reader; |
| 42 | +import java.io.StringReader; |
40 | 43 | import java.nio.charset.Charset;
|
41 | 44 | import java.text.ParseException;
|
42 | 45 | import java.text.SimpleDateFormat;
|
| 46 | +import java.util.ArrayList; |
43 | 47 | import java.util.Collection;
|
44 | 48 | import java.util.Collections;
|
45 | 49 | import java.util.Date;
|
46 | 50 | import java.util.Map;
|
47 | 51 | import java.util.List;
|
48 | 52 | import java.util.Arrays;
|
| 53 | +import java.util.StringTokenizer; |
49 | 54 | import java.util.concurrent.TimeUnit;
|
50 | 55 | import java.util.logging.Level;
|
51 | 56 | import java.util.logging.Logger;
|
@@ -131,6 +136,30 @@ public String run(@Nonnull EnvVars launchEnv, @Nonnull String image, @CheckForNu
|
131 | 136 | }
|
132 | 137 | }
|
133 | 138 |
|
| 139 | + public List<String> listProcess(@Nonnull EnvVars launchEnv, @Nonnull String containerId) throws IOException, InterruptedException { |
| 140 | + LaunchResult result = launch(launchEnv, false, "top", containerId); |
| 141 | + if (result.getStatus() != 0) { |
| 142 | + throw new IOException(String.format("Failed to run top '%s'. Error: %s", containerId, result.getErr())); |
| 143 | + } |
| 144 | + List<String> processes = new ArrayList<>(); |
| 145 | + try (Reader r = new StringReader(result.getOut()); |
| 146 | + BufferedReader in = new BufferedReader(r)) { |
| 147 | + String line; |
| 148 | + in.readLine(); // ps header |
| 149 | + while ((line = in.readLine()) != null) { |
| 150 | + final StringTokenizer stringTokenizer = new StringTokenizer(line, " "); |
| 151 | + if (stringTokenizer.countTokens() < 4) { |
| 152 | + throw new IOException("Unexpected `docker top` output : "+line); |
| 153 | + } |
| 154 | + stringTokenizer.nextToken(); // PID |
| 155 | + stringTokenizer.nextToken(); // USER |
| 156 | + stringTokenizer.nextToken(); // TIME |
| 157 | + processes.add(stringTokenizer.nextToken()); // COMMAND |
| 158 | + } |
| 159 | + } |
| 160 | + return processes; |
| 161 | + } |
| 162 | + |
134 | 163 | /**
|
135 | 164 | * Stop a container.
|
136 | 165 | *
|
|
0 commit comments