AMBARI-15223: Add ability to display messages on Upgrade UI in paragraphs (dili)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/20de17a8 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/20de17a8 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/20de17a8 Branch: refs/heads/AMBARI-13364 Commit: 20de17a827f47ed9bf0d6b9b476032bb16c78eb1 Parents: 087fcff Author: Di Li <d...@apache.org> Authored: Wed Mar 9 11:45:29 2016 -0500 Committer: Di Li <d...@apache.org> Committed: Wed Mar 9 11:45:29 2016 -0500 ---------------------------------------------------------------------- .../internal/UpgradeResourceProvider.java | 14 ++++++-- .../ambari/server/state/UpgradeHelper.java | 9 ++++-- .../state/stack/upgrade/ColocatedGrouping.java | 34 ++++++++++++-------- .../server/state/stack/upgrade/ManualTask.java | 7 +++- .../UpgradeResourceProviderHDP22Test.java | 2 +- .../internal/UpgradeResourceProviderTest.java | 25 +++++++++++--- .../ambari/server/state/UpgradeHelperTest.java | 16 +++++---- .../main/admin/stack_and_upgrade_controller.js | 15 +++++++++ .../stack_upgrade/stack_upgrade_wizard.hbs | 5 +-- 9 files changed, 93 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/20de17a8/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java index 3a335ae..07061e1 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java +++ b/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: { http://git-wip-us.apache.org/repos/asf/ambari/blob/20de17a8/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java index 05d49c4..2ac4d25 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java +++ b/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); + } } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/20de17a8/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ColocatedGrouping.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ColocatedGrouping.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ColocatedGrouping.java index 3705c43..39ccb95 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ColocatedGrouping.java +++ b/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 http://git-wip-us.apache.org/repos/asf/ambari/blob/20de17a8/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ManualTask.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ManualTask.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ManualTask.java index a0a347a..e56a602 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ManualTask.java +++ b/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() { http://git-wip-us.apache.org/repos/asf/ambari/blob/20de17a8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java index 654fbd9..a9c4b17 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java +++ b/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")); http://git-wip-us.apache.org/repos/asf/ambari/blob/20de17a8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java index 5866453..17c52d2 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java +++ b/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(); + } /** * http://git-wip-us.apache.org/repos/asf/ambari/blob/20de17a8/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java index e443d9d..bd3453e 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java +++ b/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")); http://git-wip-us.apache.org/repos/asf/ambari/blob/20de17a8/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js index 847544f..2dceccc 100644 --- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js +++ b/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); }); http://git-wip-us.apache.org/repos/asf/ambari/blob/20de17a8/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs index 02022cf..f1189a3 100644 --- a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs +++ b/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}}