瀏覽代碼

AMBARI-8352 - Alert Groups REST Endpoint Should Support Associated Definitions (jonathanhurley)

Jonathan Hurley 10 年之前
父節點
當前提交
4955e5a19a

+ 23 - 0
ambari-server/src/main/java/org/apache/ambari/server/controller/AlertDefinitionResponse.java

@@ -33,6 +33,7 @@ public class AlertDefinitionResponse {
   private String name = null;
   private String label = null;
   private Long definitionId;
+  private boolean enabled = true;
 
   /**
    * @return the definitionId
@@ -114,6 +115,27 @@ public class AlertDefinitionResponse {
     label = definitionLabel;
   }
 
+
+  /**
+   * Gets whether this definition is enabled.
+   *
+   * @return {@code true} if enabled.
+   */
+  @JsonProperty("enabled")
+  public boolean isEnabled() {
+    return enabled;
+  }
+
+  /**
+   * Sets whether this definition is enabled.
+   *
+   * @param enabled
+   *          {@code true} if enabled.
+   */
+  public void setEnabled(boolean enabled) {
+    this.enabled = enabled;
+  }
+
   @Override
   public String toString() {
     return name;
@@ -137,6 +159,7 @@ public class AlertDefinitionResponse {
     response.setLabel(entity.getLabel());
     response.setName(entity.getDefinitionName());
     response.setServiceName(entity.getServiceName());
+    response.setEnabled(entity.getEnabled());
 
     return response;
   }

+ 17 - 11
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java

@@ -390,29 +390,35 @@ public class AlertGroupResourceProvider extends
     resource.setProperty(ALERT_GROUP_ID, entity.getGroupId());
     resource.setProperty(ALERT_GROUP_NAME, entity.getGroupName());
     resource.setProperty(ALERT_GROUP_CLUSTER_NAME, clusterName);
-    resource.setProperty(ALERT_GROUP_DEFAULT, entity.isDefault());
+
+    setResourceProperty(resource, ALERT_GROUP_DEFAULT, entity.isDefault(),
+        requestedIds);
+
+    // only set the definitions if requested
+    if (BaseProvider.isPropertyRequested(ALERT_GROUP_DEFINITIONS, requestedIds)) {
+      Set<AlertDefinitionEntity> definitions = entity.getAlertDefinitions();
+      List<AlertDefinitionResponse> definitionList = new ArrayList<AlertDefinitionResponse>(
+          definitions.size());
+
+      for (AlertDefinitionEntity definition : definitions) {
+        AlertDefinitionResponse response = AlertDefinitionResponse.coerce(definition);
+        definitionList.add(response);
+      }
+
+      resource.setProperty(ALERT_GROUP_DEFINITIONS, definitionList);
+    }
 
     if( !isCollection ){
       Set<AlertTargetEntity> targetEntities = entity.getAlertTargets();
-      Set<AlertDefinitionEntity> definitions = entity.getAlertDefinitions();
 
       List<AlertTarget> targets = new ArrayList<AlertTarget>(
           targetEntities.size());
 
-      List<AlertDefinitionResponse> definitionList = new ArrayList<AlertDefinitionResponse>(
-          definitions.size());
-
       for (AlertTargetEntity targetEntity : targetEntities) {
         AlertTarget target = AlertTarget.coerce(targetEntity);
         targets.add(target);
       }
 
-      for (AlertDefinitionEntity definition : definitions) {
-        AlertDefinitionResponse response = AlertDefinitionResponse.coerce(definition);
-        definitionList.add(response);
-      }
-
-      resource.setProperty(ALERT_GROUP_DEFINITIONS, definitionList);
       resource.setProperty(ALERT_GROUP_TARGETS, targets);
     }
 

+ 44 - 6
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProviderTest.java

@@ -169,23 +169,61 @@ public class AlertGroupResourceProviderTest {
     assertEquals(ALERT_GROUP_CLUSTER_NAME,
         r.getPropertyValue(AlertGroupResourceProvider.ALERT_GROUP_CLUSTER_NAME));
 
-    // verify definitions do not come back in collections
+    // verify definitions do not come back when not requested
     assertNull(r.getPropertyValue(AlertGroupResourceProvider.ALERT_GROUP_DEFINITIONS));
 
     verify(m_amc, m_clusters, m_cluster, m_dao);
   }
 
+  /**
+   * @throws Exception
+   */
+  @Test
+  public void testGetResourcesAllProperties() throws Exception {
+    Request request = PropertyHelper.getReadRequest();
+
+    Predicate predicate = new PredicateBuilder().property(
+        AlertGroupResourceProvider.ALERT_GROUP_CLUSTER_NAME).equals("c1").toPredicate();
+
+    expect(m_dao.findAllGroups(ALERT_GROUP_CLUSTER_ID)).andReturn(
+        getMockEntities());
+
+    replay(m_amc, m_clusters, m_cluster, m_dao);
+
+    AlertGroupResourceProvider provider = createProvider(m_amc);
+    Set<Resource> results = provider.getResources(request, predicate);
+
+    assertEquals(1, results.size());
+
+    Resource r = results.iterator().next();
+
+    assertEquals(ALERT_GROUP_NAME,
+        r.getPropertyValue(AlertGroupResourceProvider.ALERT_GROUP_NAME));
+
+    assertEquals(ALERT_GROUP_ID,
+        r.getPropertyValue(AlertGroupResourceProvider.ALERT_GROUP_ID));
+
+    assertEquals(ALERT_GROUP_CLUSTER_NAME,
+        r.getPropertyValue(AlertGroupResourceProvider.ALERT_GROUP_CLUSTER_NAME));
+
+
+    // verify definitions do not come back when not requested
+    List<AlertDefinitionResponse> definitions = (List<AlertDefinitionResponse>) r.getPropertyValue(AlertGroupResourceProvider.ALERT_GROUP_DEFINITIONS);
+
+    assertNotNull(definitions);
+    assertEquals(1, definitions.size());
+    assertEquals(ALERT_DEF_NAME, definitions.get(0).getName());
+
+    verify(m_amc, m_clusters, m_cluster, m_dao);
+  }
+
   /**
    * @throws Exception
    */
   @Test
   @SuppressWarnings("unchecked")
   public void testGetSingleResource() throws Exception {
-    Request request = PropertyHelper.getReadRequest(
-        AlertGroupResourceProvider.ALERT_GROUP_ID,
-        AlertGroupResourceProvider.ALERT_GROUP_NAME,
-        AlertGroupResourceProvider.ALERT_GROUP_CLUSTER_NAME,
-        AlertGroupResourceProvider.ALERT_GROUP_DEFAULT);
+    Request request = PropertyHelper.getReadRequest();
 
     AmbariManagementController amc = createMock(AmbariManagementController.class);