From 8c977b503f2c0febed1692f1d523015e68cbcf62 Mon Sep 17 00:00:00 2001 From: Vitaliy Guliy Date: Mon, 25 Jul 2016 13:05:37 +0300 Subject: [PATCH] CHE-1361 Artik: Resources monitor (CPU, memory and storage) Signed-off-by: Vitaliy Guliy --- .../org/eclipse/che/ide/api/theme/Theme.java | 8 + .../org/eclipse/che/ide/theme/DarkTheme.java | 12 ++ .../org/eclipse/che/ide/theme/LightTheme.java | 12 ++ .../java/org/eclipse/che/ide/ui/Tooltip.java | 17 ++ .../org/eclipse/che/ide/ui/Tooltip.css | 12 +- .../client/machine/MachineStateEvent.java | 2 +- .../processes/ConsolesPanelPresenter.java | 21 +- .../processes/ConsolesPanelViewImpl.java | 2 +- .../client/processes/ProcessTreeRenderer.java | 16 +- .../processes/monitoring/MachineMonitors.java | 110 ++++++++++ .../processes/monitoring/MonitorWidget.java | 120 +++++++++++ .../processes/monitoring/MonitorWidget.ui.xml | 202 ++++++++++++++++++ .../processes/ConsolesPanelPresenterTest.java | 5 +- 13 files changed, 510 insertions(+), 29 deletions(-) create mode 100644 plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MachineMonitors.java create mode 100644 plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MonitorWidget.java create mode 100644 plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MonitorWidget.ui.xml diff --git a/ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/theme/Theme.java b/ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/theme/Theme.java index 8b706b0a5d3..e57d98b36ea 100644 --- a/ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/theme/Theme.java +++ b/ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/theme/Theme.java @@ -1511,4 +1511,12 @@ public interface Theme { String vcsConsoleChangesLineNumbersColor(); String editorPreferenceCategoryBackgroundColor(); + + /******************************************************************************************** + * + * Resource monitors + * + ********************************************************************************************/ + String resourceMonitorBarBackground(); + } diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/DarkTheme.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/DarkTheme.java index 12ff22fb3ee..5cd5c3fa4bb 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/DarkTheme.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/DarkTheme.java @@ -1499,4 +1499,16 @@ public String vcsConsoleChangesLineNumbersColor() { public String editorPreferenceCategoryBackgroundColor() { return "rgba(215, 215, 215, 0.10)"; } + + /******************************************************************************************** + * + * Resource monitors + * + ********************************************************************************************/ + + @Override + public String resourceMonitorBarBackground() { + return "rgb(76, 76, 76)"; + } + } diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/LightTheme.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/LightTheme.java index 0dc59ecc957..c50d04e7191 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/LightTheme.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/LightTheme.java @@ -1476,4 +1476,16 @@ public String vcsConsoleChangesLineNumbersColor() { public String editorPreferenceCategoryBackgroundColor() { return "rgba(27, 27, 27, 0.10)"; } + + /******************************************************************************************** + * + * Resource monitors + * + ********************************************************************************************/ + + @Override + public String resourceMonitorBarBackground() { + return "#e0e0e0"; + } + } diff --git a/ide/commons-gwt/src/main/java/org/eclipse/che/ide/ui/Tooltip.java b/ide/commons-gwt/src/main/java/org/eclipse/che/ide/ui/Tooltip.java index 5cb04e3a7c1..53c4b604912 100644 --- a/ide/commons-gwt/src/main/java/org/eclipse/che/ide/ui/Tooltip.java +++ b/ide/commons-gwt/src/main/java/org/eclipse/che/ide/ui/Tooltip.java @@ -125,6 +125,23 @@ public static Tooltip create(Element targetElement, PositionController.VerticalA new SimpleStringRenderer(tooltipText)).build(); } + /** Static factory method for creating a simple tooltip with given element as content. */ + public static Tooltip create(Element targetElement, PositionController.VerticalAlign vAlign, + PositionController.HorizontalAlign hAlign, final Element tooltipContent) { + return new Builder(targetElement, new TooltipPositionerBuilder().setVerticalAlign(vAlign) + .setHorizontalAlign(hAlign) + .buildAnchorPositioner(targetElement)).setTooltipRenderer( + + new TooltipRenderer() { + @Override + public Element renderDom() { + return tooltipContent; + } + } + + ).build(); + } + /** The Tooltip is a flyweight that uses a singleton View base element. */ private static AutoHideView getViewInstance(Css css) { if (tooltipViewInstance == null) { diff --git a/ide/commons-gwt/src/main/resources/org/eclipse/che/ide/ui/Tooltip.css b/ide/commons-gwt/src/main/resources/org/eclipse/che/ide/ui/Tooltip.css index c0a70ef7163..785c7fa2967 100644 --- a/ide/commons-gwt/src/main/resources/org/eclipse/che/ide/ui/Tooltip.css +++ b/ide/commons-gwt/src/main/resources/org/eclipse/che/ide/ui/Tooltip.css @@ -25,13 +25,13 @@ display: inline-block; position: relative; margin: 0; - max-width: 200px; + max-width: 250px; } - /* - * Imageless triangles can be made using only css by adding a large border on one side, - * then transparent borders on the two adjacent sides. - */ +/* + * Imageless triangles can be made using only css by adding a large border on one side, + * then transparent borders on the two adjacent sides. + */ .triangle { position: absolute; width: 0px; @@ -52,7 +52,7 @@ margin-left: -4px; } - /* A tooltip that is below but right aligned */ +/* A tooltip that is below but right aligned */ .tooltipBelowRightAligned { margin-top: 7px; } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineStateEvent.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineStateEvent.java index 5bf81fa201e..bfeaac2ce59 100755 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineStateEvent.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineStateEvent.java @@ -51,7 +51,7 @@ public interface Handler extends EventHandler { /** * Type class used to register this event. */ - public static Type TYPE = new Type<>(); + public static final Type TYPE = new Type<>(); private final org.eclipse.che.api.core.model.machine.Machine machine; diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenter.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenter.java index f62860a345c..dbb6e083611 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenter.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenter.java @@ -26,7 +26,6 @@ import org.eclipse.che.ide.api.dialogs.ConfirmCallback; import org.eclipse.che.ide.api.dialogs.DialogFactory; import org.eclipse.che.ide.api.machine.MachineServiceClient; -import org.eclipse.che.ide.api.machine.events.DevMachineStateEvent; import org.eclipse.che.ide.api.mvp.View; import org.eclipse.che.ide.api.notification.NotificationManager; import org.eclipse.che.ide.api.outputconsole.OutputConsole; @@ -81,8 +80,7 @@ public class ConsolesPanelPresenter implements ConsolesPanelView.ActionDelegate, OutputConsole.ConsoleOutputListener, WorkspaceStartingEvent.Handler, WorkspaceStoppedEvent.Handler, - MachineStateEvent.Handler, - DevMachineStateEvent.Handler { + MachineStateEvent.Handler { private static final String DEFAULT_TERMINAL_NAME = "Terminal"; @@ -153,13 +151,12 @@ public ConsolesPanelPresenter(ConsolesPanelView view, this.consoleCommands = new HashMap<>(); this.machineNodes = new HashMap<>(); - this.view.setDelegate(this); + view.setDelegate(this); eventBus.addHandler(ProcessFinishedEvent.TYPE, this); eventBus.addHandler(WorkspaceStartingEvent.TYPE, this); eventBus.addHandler(WorkspaceStoppedEvent.TYPE, this); eventBus.addHandler(MachineStateEvent.TYPE, this); - eventBus.addHandler(DevMachineStateEvent.TYPE, this); rootNode = new ProcessTreeNode(ROOT_NODE, null, null, null, rootNodes); @@ -215,14 +212,6 @@ public void onMachineDestroyed(MachineStateEvent event) { view.setProcessesData(rootNode); } - @Override - public void onDevMachineStarted(DevMachineStateEvent event) { - } - - @Override - public void onDevMachineDestroyed(DevMachineStateEvent event) { - } - /** Get the list of all available machines. */ public void fetchMachines() { machineService.getMachines(appContext.getWorkspaceId()).then(new Operation>() { @@ -262,9 +251,11 @@ public void printDevMachineOutput(String text) { } private ProcessTreeNode addMachineNode(MachineDto machine) { - List processTreeNodes = new ArrayList(); + if (machineNodes.containsKey(machine.getId())) { + return machineNodes.get(machine.getId()); + } - ProcessTreeNode machineNode = new ProcessTreeNode(MACHINE_NODE, rootNode, machine, null, processTreeNodes); + ProcessTreeNode machineNode = new ProcessTreeNode(MACHINE_NODE, rootNode, machine, null, new ArrayList()); machineNode.setRunning(true); machineNodes.put(machine.getId(), machineNode); diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelViewImpl.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelViewImpl.java index db6052a3035..fa358c325bb 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelViewImpl.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelViewImpl.java @@ -275,7 +275,7 @@ public void setProcessesData(@NotNull ProcessTreeNode root) { processTree.asWidget().setVisible(true); processTree.getModel().setRoot(root); - processTree.renderTree(-1); + processTree.renderTree(); for (ProcessTreeNode processTreeNode : processTreeNodes.values()) { if (!processTreeNode.getId().equals(activeProcessId) && processTreeNode.hasUnreadContent()) { diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ProcessTreeRenderer.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ProcessTreeRenderer.java index 01ffa09c1f9..580768a9d49 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ProcessTreeRenderer.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ProcessTreeRenderer.java @@ -24,6 +24,7 @@ import org.eclipse.che.ide.api.parts.PartStackUIResources; import org.eclipse.che.ide.extension.machine.client.MachineLocalizationConstant; import org.eclipse.che.ide.extension.machine.client.MachineResources; +import org.eclipse.che.ide.extension.machine.client.processes.monitoring.MachineMonitors; import org.eclipse.che.ide.ui.Tooltip; import org.eclipse.che.ide.ui.tree.NodeRenderer; import org.eclipse.che.ide.ui.tree.TreeNodeElement; @@ -59,13 +60,17 @@ public class ProcessTreeRenderer implements NodeRenderer { private AddTerminalClickHandler addTerminalClickHandler; private PreviewSshClickHandler previewSshClickHandler; private StopProcessHandler stopProcessHandler; + private final MachineMonitors machineMonitors; @Inject - public ProcessTreeRenderer(MachineResources resources, MachineLocalizationConstant locale, - PartStackUIResources partStackUIResources) { + public ProcessTreeRenderer(MachineResources resources, + MachineLocalizationConstant locale, + PartStackUIResources partStackUIResources, + MachineMonitors machineMonitors) { this.resources = resources; this.locale = locale; this.partStackUIResources = partStackUIResources; + this.machineMonitors = machineMonitors; } @Override @@ -190,6 +195,13 @@ public void handleEvent(Event event) { newTerminalButton.addEventListener(Event.CLICK, blockMouseListener, true); newTerminalButton.addEventListener(Event.DBLCLICK, blockMouseListener, true); + Element monitorsElement = Elements.createSpanElement(); + monitorsElement.getStyle().setProperty("float", "right"); + monitorsElement.getStyle().setProperty("cursor", "default"); + root.appendChild(monitorsElement); + + Node monitorNode = (Node)machineMonitors.getMonitorWidget(machine.getId(), this).getElement(); + monitorsElement.appendChild(monitorNode); Element nameElement = Elements.createSpanElement(resources.getCss().nameLabel()); nameElement.setTextContent(machine.getConfig().getName()); diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MachineMonitors.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MachineMonitors.java new file mode 100644 index 00000000000..e8ab3acea77 --- /dev/null +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MachineMonitors.java @@ -0,0 +1,110 @@ +/******************************************************************************* + * Copyright (c) 2012-2016 Codenvy, S.A. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Codenvy, S.A. - initial API and implementation + *******************************************************************************/ +package org.eclipse.che.ide.extension.machine.client.processes.monitoring; + +import com.google.inject.Singleton; + +import java.util.HashMap; +import java.util.Map; + +/** + * Manages and provides widgets for displaying CPU, memory and disk usages for the machines. + * + * @author Vitaliy Guliy + */ +@Singleton +public class MachineMonitors { + + private Map> monitorWidgets = new HashMap<>(); + + /** + * Creates new or returns existed widget for the given machine and referrer. + * Referrer is an UI object containing monitor widgets attached as children. + * + * @param machineID + * machines ID + * @param referrer + * referrer object + * @return + * monitor widget + */ + public MonitorWidget getMonitorWidget(String machineID, Object referrer) { + Map widgets = monitorWidgets.get(machineID); + if (widgets == null) { + widgets = new HashMap<>(); + monitorWidgets.put(machineID, widgets); + } + + MonitorWidget widget = widgets.get(referrer); + if (widget == null) { + widget = new MonitorWidget(); + widgets.put(referrer, widget); + } + + return widget; + } + + /** + * Sets new CPU usage value for machine with given ID. + * + * @param machineID + * machine ID + * @param cpuUsage + * new cpu usage + */ + public void setCpuUsage(String machineID, int cpuUsage) { + Map widgets = monitorWidgets.get(machineID); + if (widgets != null) { + for (MonitorWidget widget : widgets.values()) { + widget.setCpuUsage(cpuUsage); + } + } + } + + /** + * Sets new memory usage value for machine with given ID. + * + * @param machineID + * machine ID + * @param mem + * new memory usage + * @param max + * maximum amount of memory + */ + public void setMemoryUsage(String machineID, int mem, int max) { + Map widgets = monitorWidgets.get(machineID); + if (widgets != null) { + for (MonitorWidget widget : widgets.values()) { + widget.setMemoryUsage(mem, max); + } + } + } + + /** + * Sets new disk usage value for machine with given ID. + * + * @param machineID + * machine ID + * @param disk + * new disk usage + * @param max + * maximum amount of disk space + */ + public void setDiskUsage(String machineID, int disk, int max) { + Map widgets = monitorWidgets.get(machineID); + if (widgets != null) { + for (MonitorWidget widget : widgets.values()) { + widget.setDiskUsage(disk, max); + } + } + } + +} diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MonitorWidget.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MonitorWidget.java new file mode 100644 index 00000000000..a3c7bb0449a --- /dev/null +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MonitorWidget.java @@ -0,0 +1,120 @@ +/******************************************************************************* + * Copyright (c) 2012-2016 Codenvy, S.A. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Codenvy, S.A. - initial API and implementation + *******************************************************************************/ +package org.eclipse.che.ide.extension.machine.client.processes.monitoring; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.Widget; +import elemental.dom.Element; +import org.eclipse.che.ide.ui.Tooltip; +import org.eclipse.che.ide.ui.menu.PositionController; + +/** + * Resource monitor widget. Displays information about cpu, memory and disk usage in consoles tree. + * The widget also creates a tooltip with additional information. + * + * @author Vitaliy Guliy + */ +public class MonitorWidget extends Composite { + + interface MonitorWidgetUiBinder extends UiBinder { + } + + private final static MonitorWidgetUiBinder UI_BINDER = GWT.create(MonitorWidgetUiBinder.class); + + @UiField + FlowPanel cpuBar, memBar, diskBar; + + @UiField + HTMLPanel tooltip; + + @UiField + DivElement tooltipCpuBar, tooltipCpuValue; + + @UiField + DivElement tooltipMemBar, tooltipMemValue, tooltipMemDescription; + + @UiField + DivElement tooltipDiskBar, tooltipDiskValue, tooltipDiskDescription; + + public MonitorWidget() { + initWidget(UI_BINDER.createAndBindUi(this)); + + tooltip.removeFromParent(); + + Tooltip.create((Element)getElement(), PositionController.VerticalAlign.BOTTOM, PositionController.HorizontalAlign.RIGHT, (Element)tooltip.getElement()); + } + + /** + * Sets CPU usage value. + * + * @param cpuUsage + * cpuUsage usage + */ + public void setCpuUsage(int cpuUsage) { + setVisible(true); + + cpuBar.getElement().getFirstChildElement().getStyle().setProperty("height", cpuUsage + "%"); + + tooltipCpuBar.getStyle().setProperty("height", cpuUsage + "%"); + tooltipCpuValue.setInnerText(cpuUsage + "%"); + } + + /** + * Sets memory usage value. + * + * @param mem + * memory usage + * @param max + * max memory available + */ + public void setMemoryUsage(int mem, int max) { + setVisible(true); + + int percentage = (int)((double)mem / ((double)max / 100) ); + + memBar.getElement().getFirstChildElement().getStyle().setProperty("height", percentage + "%"); + + tooltipMemBar.getStyle().setProperty("height", percentage + "%"); + tooltipMemValue.setInnerText(percentage + "%"); + tooltipMemDescription.setInnerText("- " + mem + " MB / " + max + " MB"); + } + + /** + * Sets disk usage value. + * + * @param disk + * disk usage + * @param max + * max disk available + */ + public void setDiskUsage(int disk, int max) { + setVisible(true); + + int percentage = (int)((double)disk / ((double)max / 100) ); + + diskBar.getElement().getFirstChildElement().getStyle().setProperty("height", percentage + "%"); + + tooltipDiskBar.getStyle().setProperty("height", percentage + "%"); + tooltipDiskValue.setInnerText(percentage + "%"); + + disk = disk / 1024; + max = max / 1024; + + tooltipDiskDescription.setInnerText("- " + disk + " MB / " + max + " MB"); + } + +} diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MonitorWidget.ui.xml b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MonitorWidget.ui.xml new file mode 100644 index 00000000000..47bb30b2e84 --- /dev/null +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/monitoring/MonitorWidget.ui.xml @@ -0,0 +1,202 @@ + + + + + + + + + @eval outputBackgroundColor org.eclipse.che.ide.api.theme.Style.theme.outputBackgroundColor(); + + @eval resourceMonitorBarBackground org.eclipse.che.ide.api.theme.Style.theme.resourceMonitorBarBackground(); + + .monitor { + width: 22px; + height: 18px; + position: relative; + overflow: hidden; + } + + .cpu, + .mem, + .disk { + position: absolute; + overflow: hidden; + width: 3px; + height: 12px; + background-color: resourceMonitorBarBackground; + top: 3px; + } + + .cpu { + left: 4px; + } + + .mem { + left: 9px; + } + + .disk { + left: 14px; + } + + .cpu > div, + .mem > div, + .disk > div { + position: absolute; + left: 0px; + right: 0px; + bottom: 0px; + } + + .cpu > div { + background-color: #46af00; + } + + .mem > div { + background-color: #f2b043; + } + + .disk > div { + background-color: #d0021b; + } + + .tooltip { + width: 210px; + height: 75px; + background-color: outputBackgroundColor; + font-size: 11px; + } + + .rowCPU, + .rowMEM, + .rowDISK { + position: absolute; + left: 0px; + width: 100%; + height: 25px; + overflow: hidden; + } + + .rowCPU { + top: 2px; + } + .rowMEM { + top: 30px; + } + .rowDISK { + top: 58px; + } + + .labelCell { + position: absolute; + left: 10px; + top: 0px; + width: 35px; + height: 25px; + line-height: 25px; + } + + .indicatorCell { + position: absolute; + left: 45px; + top: 2px; + width: 7px; + height: 21px; + background-color: resourceMonitorBarBackground; + overflow: hidden; + } + + .valueCell { + position: absolute; + left: 60px; + top: 0px; + width: 35px; + height: 25px; + line-height: 25px; + } + + .descriptionCell { + position: absolute; + left: 97px; + top: 0px; + width: 130px; + height: 25px; + line-height: 25px; + overflow: hidden; + white-space: nowrap; + } + + .indicatorCPU { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 52%; + background-color: #46af00; + } + + .indicatorMEM { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 82%; + background-color: #f2b043; + } + + .indicatorDISK { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 92%; + background-color: #d0021b; + } + + + + + + + + + + + +
+
CPU
+
+
52%
+
+
+ +
+
MEM
+
+
82%
+
- 350000MB / 400000MB
+
+ +
+
DISK
+
+
92%
+
- 1.7 G / 15 G
+
+ + + + diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenterTest.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenterTest.java index b1b9cf77926..6346b4fbc06 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenterTest.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenterTest.java @@ -225,10 +225,7 @@ public void shouldFetchMachines() throws Exception { when(appContext.getWorkspaceId()).thenReturn("workspaceID"); DevMachineStateEvent devMachineStateEvent = mock(DevMachineStateEvent.class); - verify(eventBus, times(5)).addHandler(anyObject(), devMachineStateHandlerCaptor.capture()); - - DevMachineStateEvent.Handler devMachineStateHandler = devMachineStateHandlerCaptor.getAllValues().get(0); - devMachineStateHandler.onDevMachineStarted(devMachineStateEvent); + verify(eventBus, times(4)).addHandler(anyObject(), devMachineStateHandlerCaptor.capture()); verify(machineService).getMachines(eq(WORKSPACE_ID)); verify(machinesPromise).then(machinesCaptor.capture());