浏览代码

AMBARI-15223: Add ability to display messages on Upgrade UI in paragraphs (dili)

Di Li 9 年之前
父节点
当前提交
20de17a827

+ 12 - 2
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java

@@ -115,6 +115,8 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.assistedinject.Assisted;
@@ -1468,20 +1470,28 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
 
     String itemDetail = entity.getText();
     String stageText = StringUtils.abbreviate(entity.getText(), 255);
-
     switch (task.getType()) {
       case MANUAL: {
         ManualTask mt = (ManualTask) task;
-        itemDetail = mt.message;
+        JsonArray messageArray = new JsonArray();
+        for(String message: mt.messages){
+          JsonObject messageObj = new JsonObject();
+          messageObj.addProperty("message", message);
+          messageArray.add(messageObj);
+        }
+        itemDetail = messageArray.toString();
         if (null != mt.summary) {
           stageText = mt.summary;
         }
+
         entity.setText(itemDetail);
 
         if (null != mt.structuredOut) {
           commandParams.put(COMMAND_PARAM_STRUCT_OUT, mt.structuredOut);
         }
 
+        //To be used later on by the Stage...
+        itemDetail = StringUtils.join(mt.messages, " ");
         break;
       }
       case CONFIGURE: {

+ 6 - 3
ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java

@@ -508,9 +508,12 @@ public class UpgradeHelper {
 
           if (task.getType() == Type.MANUAL) {
             ManualTask mt = (ManualTask) task;
-            if (null != mt.message) {
-              mt.message = tokenReplace(ctx, mt.message,
-                  taskWrapper.getService(), taskWrapper.getComponent());
+            if(null != mt.messages && !mt.messages.isEmpty()){
+              for(int i = 0; i < mt.messages.size(); i++){
+                String message =  mt.messages.get(i);
+                message = tokenReplace(ctx, message, taskWrapper.getService(), taskWrapper.getComponent());
+                mt.messages.set(i, message);
+              }
             }
           }
         }

+ 21 - 13
ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ColocatedGrouping.java

@@ -164,7 +164,9 @@ public class ColocatedGrouping extends Grouping {
 
         ManualTask task = new ManualTask();
         task.summary = m_batch.summary;
-        task.message = m_batch.message;
+        List<String> messages =  new ArrayList<String>();
+        messages.add(m_batch.message);
+        task.messages = messages;
         formatFirstBatch(upgradeContext, task, befores);
 
         StageWrapper wrapper = new StageWrapper(
@@ -264,21 +266,27 @@ public class ColocatedGrouping extends Grouping {
         }
       }
 
-      // !!! add the display names to the message, if needed
-      if (task.message.contains("{{components}}")) {
-        StringBuilder sb = new StringBuilder();
+      for(int i = 0; i < task.messages.size(); i++){
+        String message = task.messages.get(i);
+        // !!! add the display names to the message, if needed
+        if (message.contains("{{components}}")) {
+          StringBuilder sb = new StringBuilder();
 
-        List<String> compNames = new ArrayList<String>(names);
+          List<String> compNames = new ArrayList<String>(names);
 
-        if (compNames.size() == 1) {
-          sb.append(compNames.get(0));
-        } else if (names.size() > 1) {
-          String last = compNames.remove(compNames.size() - 1);
-          sb.append(StringUtils.join(compNames, ", "));
-          sb.append(" and ").append(last);
-        }
+          if (compNames.size() == 1) {
+            sb.append(compNames.get(0));
+          } else if (names.size() > 1) {
+            String last = compNames.remove(compNames.size() - 1);
+            sb.append(StringUtils.join(compNames, ", "));
+            sb.append(" and ").append(last);
+          }
 
-        task.message = task.message.replace("{{components}}", sb.toString());
+          message = message.replace("{{components}}", sb.toString());
+
+          //Add the updated message back to the message list.
+          task.messages.set(i, message);
+        }
       }
 
       // !!! build the structured out to attach to the manual task

+ 6 - 1
ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ManualTask.java

@@ -17,6 +17,8 @@
  */
 package org.apache.ambari.server.state.stack.upgrade;
 
+import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,8 +46,11 @@ public class ManualTask extends ServerSideActionTask {
   @XmlTransient
   public String structuredOut = null;
 
+  /*@XmlElement(name="message")
+  public String message;*/
+
   @XmlElement(name="message")
-  public String message;
+  public List<String> messages;
 
   @Override
   public Task.Type getType() {

+ 1 - 1
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java

@@ -307,7 +307,7 @@ public class UpgradeResourceProviderHDP22Test {
     group = upgrade.getUpgradeGroups().get(0);
     assertEquals(2, group.getItems().size());
     UpgradeItemEntity item = group.getItems().get(1);
-    assertEquals("Value is set for the source stack upgrade pack", "Goo", item.getText());
+    assertEquals("Value is set for the source stack upgrade pack", "[{\"message\":\"Goo\"}]", item.getText());
 
     assertTrue(cluster.getDesiredConfigs().containsKey("hive-site"));
 

+ 20 - 5
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java

@@ -96,6 +96,9 @@ import org.junit.Ignore;
 import org.junit.Test;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
@@ -281,8 +284,8 @@ public class UpgradeResourceProviderTest {
 
     List<UpgradeItemEntity> preClusterUpgradeItems = preClusterGroup.getItems();
     assertEquals(2, preClusterUpgradeItems.size());
-    assertEquals("Foo", preClusterUpgradeItems.get(0).getText());
-    assertEquals("Foo", preClusterUpgradeItems.get(1).getText());
+    assertEquals("Foo", parseSingleMessage(preClusterUpgradeItems.get(0).getText()));
+    assertEquals("Foo", parseSingleMessage(preClusterUpgradeItems.get(1).getText()));
 
     UpgradeGroupEntity zookeeperGroup = upgradeGroups.get(1);
     assertEquals("ZOOKEEPER", zookeeperGroup.getName());
@@ -291,7 +294,7 @@ public class UpgradeResourceProviderTest {
     assertEquals(5, zookeeperUpgradeItems.size());
 
     assertEquals("This is a manual task with a placeholder of placeholder-rendered-properly",
-        zookeeperUpgradeItems.get(0).getText());
+        parseSingleMessage(zookeeperUpgradeItems.get(0).getText()));
     assertEquals("Restarting ZooKeeper Server on h1", zookeeperUpgradeItems.get(1).getText());
     assertEquals("Skipping Configuration Task 2.2.0", zookeeperUpgradeItems.get(2).getText());
     assertEquals("Service Check ZooKeeper", zookeeperUpgradeItems.get(3).getText());
@@ -306,7 +309,7 @@ public class UpgradeResourceProviderTest {
 
     List<UpgradeItemEntity> postClusterUpgradeItems = postClusterGroup.getItems();
     assertEquals(2, postClusterUpgradeItems.size());
-    assertEquals("Please confirm you are ready to finalize", postClusterUpgradeItems.get(0).getText());
+    assertEquals("Please confirm you are ready to finalize", parseSingleMessage(postClusterUpgradeItems.get(0).getText()));
     assertEquals("Save Cluster State", postClusterUpgradeItems.get(1).getText());
   }
 
@@ -492,7 +495,12 @@ public class UpgradeResourceProviderTest {
     res = resources.iterator().next();
 
     assertEquals("Confirm Finalize", res.getPropertyValue("UpgradeItem/context"));
-    assertTrue(res.getPropertyValue("UpgradeItem/text").toString().startsWith("Please confirm"));
+    String msgStr = res.getPropertyValue("UpgradeItem/text").toString();
+    JsonParser parser = new JsonParser();
+    JsonArray msgArray = (JsonArray) parser.parse(msgStr);
+    JsonObject msg = (JsonObject) msgArray.get(0);
+
+    assertTrue(msg.get("message").getAsString().startsWith("Please confirm"));
   }
 
   /**
@@ -1319,6 +1327,13 @@ public class UpgradeResourceProviderTest {
     }
   }
 
+  private String parseSingleMessage(String msgStr){
+    JsonParser parser = new JsonParser();
+    JsonArray msgArray = (JsonArray) parser.parse(msgStr);
+    JsonObject msg = (JsonObject) msgArray.get(0);
+
+    return msg.get("message").getAsString();
+  }
 
   /**
    *

+ 9 - 7
ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java

@@ -222,7 +222,7 @@ public class UpgradeHelperTest {
     Task t = sw.getTasks().get(0).getTasks().get(0);
     assertEquals(ManualTask.class, t.getClass());
     ManualTask mt = (ManualTask) t;
-    assertTrue(mt.message.contains("DataNode and NodeManager"));
+    assertTrue(mt.messages.get(0).contains("DataNode and NodeManager"));
     assertNotNull(mt.structuredOut);
     assertTrue(mt.structuredOut.contains("DATANODE"));
     assertTrue(mt.structuredOut.contains("NODEMANAGER"));
@@ -611,9 +611,9 @@ public class UpgradeHelperTest {
     ManualTask manualTask = (ManualTask) zookeeperGroup.items.get(0).getTasks().get(
         0).getTasks().get(0);
 
-    assertEquals(
-        "This is a manual task with a placeholder of placeholder-rendered-properly",
-        manualTask.message);
+    assertEquals(1, manualTask.messages.size());
+    assertEquals("This is a manual task with a placeholder of placeholder-rendered-properly",
+        manualTask.messages.get(0));
   }
 
   @Test
@@ -1044,9 +1044,10 @@ public class UpgradeHelperTest {
     ManualTask manualTask = (ManualTask) zookeeperGroup.items.get(0).getTasks().get(
         0).getTasks().get(0);
 
+    assertEquals(1, manualTask.messages.size());
     assertEquals(
         "This is a manual task with a placeholder of placeholder-rendered-properly",
-        manualTask.message);
+        manualTask.messages.get(0));
   }
 
   @Test
@@ -1072,9 +1073,10 @@ public class UpgradeHelperTest {
     ManualTask manualTask = (ManualTask) zookeeperGroup.items.get(0).getTasks().get(
         0).getTasks().get(0);
 
+    assertEquals(1, manualTask.messages.size());
     assertEquals(
         "This is a manual task with a placeholder of placeholder-rendered-properly",
-        manualTask.message);
+        manualTask.messages.get(0));
   }
 
   @Test
@@ -1128,7 +1130,7 @@ public class UpgradeHelperTest {
     Task t = sw.getTasks().get(0).getTasks().get(0);
     assertEquals(ManualTask.class, t.getClass());
     ManualTask mt = (ManualTask) t;
-    assertTrue(mt.message.contains("DataNode and NodeManager"));
+    assertTrue(mt.messages.get(0).contains("DataNode and NodeManager"));
     assertNotNull(mt.structuredOut);
     assertTrue(mt.structuredOut.contains("DATANODE"));
     assertTrue(mt.structuredOut.contains("NODEMANAGER"));

+ 15 - 0
ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js

@@ -413,6 +413,21 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
         upgradeItems = [];
       newGroup.upgrade_items.forEach(function (item) {
         var oldItem = App.upgradeEntity.create({type: 'ITEM'}, item.UpgradeItem);
+        var status = oldItem.get('status');
+        if ('HOLDING' == status){
+          //manualItem
+          var text = oldItem.get('text');
+          try {
+            var messageArray = $.parseJSON(text)
+            var messages = [];
+            for(var i = 0; i < messageArray.length; i ++){
+              var aMessageObj = messageArray[i];
+              messages.push(aMessageObj.message);
+            }
+            oldItem.set('messages', messages)
+            oldItem.set('text', messages.join(' '))
+          } catch (err){}
+        }
         oldItem.set('tasks', []);
         upgradeItems.pushObject(oldItem);
       });

+ 3 - 2
ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs

@@ -97,8 +97,9 @@
         {{#if view.plainManualItem}}
           <div class="box details-box">
             <p class="manual-steps-title"><strong>{{t admin.stackUpgrade.dialog.manual}}</strong></p>
-            <p class="manual-steps-content">{{view.manualItem.text}}</p>
-
+            {{#each message in view.manualItem.messages}}
+              <p class="manual-steps-content">{{message}}</p>
+            {{/each}}
             <label class="message">
               {{view Em.Checkbox checkedBinding="view.isManualDone"}}
               {{t admin.stackUpgrade.dialog.manualDone}}