Pārlūkot izejas kodu

AMBARI-11030 Queue-specific metrics cannot be queried as time series data via Ambari API (dsen)

Dmytro Sen 10 gadi atpakaļ
vecāks
revīzija
c94780aa3e

+ 2 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseProvider.java

@@ -79,7 +79,8 @@ public abstract class BaseProvider {
    * <p/>
    * {@code metrics/yarn/Queue/-/AppsCompleted/-/foo/-/bar/-}
    */
-  private static final Pattern METRIC_ARGUMENT_METHOD_REPLACEMENT = Pattern.compile("\\$\\d+(\\.\\w+(\\(\\\\\"\\S+\\\\\"\\)|\\(\\d+\\)))*");
+  private static final Pattern METRIC_ARGUMENT_METHOD_REPLACEMENT =
+      Pattern.compile("\\$\\d+(\\.\\S+\\(\\S+\\))*");
 
   // ----- Constructors ------------------------------------------------------
 

+ 22 - 0
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/BaseProviderTest.java

@@ -326,6 +326,7 @@ public class BaseProviderTest {
     Set<String> propertyIds = new HashSet<String>();
     propertyIds.add("metrics/flume/$1.substring(0)/CHANNEL/$2.replaceAll(\"[^-]+\",\"\")EventPutSuccessCount/rate/sum");
     propertyIds.add("metrics/yarn/Queue/$1.replaceAll(\"([.])\",\"/\")/AppsCompleted");
+    propertyIds.add("metrics/yarn/Queue/$1.replaceAll(\",q(\\d+)=\",\"/\").substring(1)/AppsFailed");
 
     TestProvider provider = new TestProvider(propertyIds);
     Entry<String, Pattern> entry = provider.getRegexEntry("metrics/flume/flume");
@@ -347,6 +348,27 @@ public class BaseProviderTest {
     assertEquals(
         "metrics/flume/(\\S*)/CHANNEL/(\\S*)EventPutSuccessCount/rate",
         entry.getValue().pattern());
+
+    entry = provider.getRegexEntry("metrics/yarn/Queue/root/AppsCompleted");
+    assertEquals("metrics/yarn/Queue/$1.replaceAll(\"([.])\",\"/\")/AppsCompleted",
+        entry.getKey());
+    assertEquals(
+        "metrics/yarn/Queue/(\\S*)/AppsCompleted",
+        entry.getValue().pattern());
+
+    entry = provider.getRegexEntry("metrics/yarn/Queue/root/default/AppsCompleted");
+    assertEquals("metrics/yarn/Queue/$1.replaceAll(\"([.])\",\"/\")/AppsCompleted",
+        entry.getKey());
+    assertEquals(
+        "metrics/yarn/Queue/(\\S*)/AppsCompleted",
+        entry.getValue().pattern());
+
+    entry = provider.getRegexEntry("metrics/yarn/Queue/root/default/AppsFailed");
+    assertEquals("metrics/yarn/Queue/$1.replaceAll(\",q(\\d+)=\",\"/\").substring(1)/AppsFailed",
+        entry.getKey());
+    assertEquals(
+        "metrics/yarn/Queue/(\\S*)/AppsFailed",
+        entry.getValue().pattern());
   }
 
   static class TestProvider extends BaseProvider {

+ 3 - 3
ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java

@@ -245,7 +245,7 @@ public class AMSPropertyProviderTest {
         new HashMap<String, Map<String, PropertyInfo>>() {{
       put("RESOURCEMANAGER", new HashMap<String, PropertyInfo>() {{
         put("metrics/yarn/Queue/$1.replaceAll(\"([.])\",\"/\")/AvailableMB",
-            new PropertyInfo("yarn.QueueMetrics.(.+).AvailableMB", true, false));
+            new PropertyInfo("yarn.QueueMetrics.Queue=(.+).AvailableMB", true, false));
       }});
     }};
 
@@ -274,12 +274,12 @@ public class AMSPropertyProviderTest {
     Map<String, Object> properties = PropertyHelper.getProperties(resources.iterator().next());
     Assert.assertNotNull(properties);
     URIBuilder uriBuilder = AMSPropertyProvider.getAMSUriBuilder("localhost", 8188);
-    uriBuilder.addParameter("metricNames", "yarn.QueueMetrics.%.AvailableMB");
+    uriBuilder.addParameter("metricNames", "yarn.QueueMetrics.Queue=root.AvailableMB");
     uriBuilder.addParameter("appId", "RESOURCEMANAGER");
     uriBuilder.addParameter("startTime", "1416528819369");
     uriBuilder.addParameter("endTime", "1416528819569");
     Assert.assertEquals(uriBuilder.toString(), streamProvider.getLastSpec());
-    Number[][] val = (Number[][]) res.getPropertyValue("metrics/yarn/Queue/Queue=root/AvailableMB");
+    Number[][] val = (Number[][]) res.getPropertyValue("metrics/yarn/Queue/root/AvailableMB");
     Assert.assertEquals(238, val.length);
   }