// Copyright (C) 2013 GerritForge www.gerritforge.com // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mobi.jenkinsci.ci.model; import mobi.jenkinsci.model.Alignment; import mobi.jenkinsci.model.ItemNode; import mobi.jenkinsci.model.Layout; import mobi.jenkinsci.net.UrlPath; import com.google.gson.annotations.SerializedName; public class Computer extends JenkinsItem { @SerializedName("offline") private boolean offline; @SerializedName("idle") private boolean idle; @SerializedName("numExecutors") private int numExecutors; @SerializedName("monitorData") private MonitorData monitorData; public boolean isOffline() { return offline; } public void setOffline(boolean offline) { this.offline = offline; } public boolean isIdle() { return idle; } public void setIdle(boolean idle) { this.idle = idle; } public int getNumExecutors() { return numExecutors; } public void setNumExecutors(int numExecutors) { this.numExecutors = numExecutors; } public MonitorData getMonitorData() { return monitorData; } public void setMonitorData(MonitorData monitorData) { this.monitorData = monitorData; } public class MonitorData { @SerializedName("hudson.node_monitors.SwapSpaceMonitor") private SwapSpaceMonitor swapSpaceMonitor; @SerializedName("hudson.node_monitors.ArchitectureMonitor") private String architectureMonitor; public SwapSpaceMonitor getSwapSpaceMonitor() { return swapSpaceMonitor; } public void setSwapSpaceMonitor(SwapSpaceMonitor swapSpaceMonitor) { this.swapSpaceMonitor = swapSpaceMonitor; } public String getArchitectureMonitor() { return architectureMonitor; } public void setArchitectureMonitor(String architectureMonitor) { this.architectureMonitor = architectureMonitor; } } public class SwapSpaceMonitor { @SerializedName("availablePhysicalMemory") private long availablePhysicalMemory; @SerializedName("availableSwapSpace") private long availableSwapSpace; @SerializedName("totalPhysicalMemory") private long totalPhysicalMemory; @SerializedName("totalSwapSpace") private long totalSwapSpace; public long getAvailablePhysicalMemory() { return availablePhysicalMemory; } public void setAvailablePhysicalMemory(long availablePhysicalMemory) { this.availablePhysicalMemory = availablePhysicalMemory; } public long getAvailableSwapSpace() { return availableSwapSpace; } public void setAvailableSwapSpace(long availableSwapSpace) { this.availableSwapSpace = availableSwapSpace; } public long getTotalPhysicalMemory() { return totalPhysicalMemory; } public void setTotalPhysicalMemory(long totalPhysicalMemory) { this.totalPhysicalMemory = totalPhysicalMemory; } public long getTotalSwapSpace() { return totalSwapSpace; } public void setTotalSwapSpace(long totalSwapSpace) { this.totalSwapSpace = totalSwapSpace; } } @Override public ItemNode toAbstractNode(String urlPrefix) { ItemNode result = new ItemNode(); result.setLayout(Layout.LIST); result.setVersion(ItemNode.API_VERSION); result.setPath(UrlPath.normalizePath(path)); result.setDescriptionAlign(Alignment.BOTTOM); result.setTitle(displayName); result.setIcon(result.getPath()+"?image="+(isOffline() ? "icons/computer_offline.png" : "icons/computer_online.png")); if (getMonitorData().getArchitectureMonitor() != null) { result.setDescription(getNumExecutors() + " executors - " + getMonitorData().getArchitectureMonitor()); } else { result.setDescription(getNumExecutors() + " executors - N/A"); } if (getMonitorData().getArchitectureMonitor() != null) { ItemNode childNode = new ItemNode("Operating System", getMonitorData() .getArchitectureMonitor()); childNode.setDescriptionAlign(Alignment.RIGHT); result.addNode(childNode); } ItemNode childNode = new ItemNode("Status", isOffline() ? "OFF-LINE" : "ON-LINE"); childNode.setDescriptionAlign(Alignment.RIGHT); childNode.setDescriptionColor(isOffline() ? "#FF0000" : "#00FF00"); result.addNode(childNode); childNode = new ItemNode("Number of executors", Integer.toString(getNumExecutors())); childNode.setDescriptionAlign(Alignment.RIGHT); result.addNode(childNode); if (getMonitorData().getSwapSpaceMonitor() != null) { long totRam = getMonitorData().getSwapSpaceMonitor().getTotalPhysicalMemory() / 1024 / 1024; long availRam = getMonitorData().getSwapSpaceMonitor().getAvailablePhysicalMemory() / 1024 / 1024; childNode = new ItemNode("RAM", "" + availRam + "/" + totRam + " MB"); childNode.setDescriptionAlign(Alignment.RIGHT); result.addNode(childNode); long totSwap = getMonitorData().getSwapSpaceMonitor().getTotalSwapSpace() / 1024 / 1024; long availSwap = getMonitorData().getSwapSpaceMonitor().getAvailableSwapSpace() / 1024 / 1024; childNode = new ItemNode("SWAP", "" + availSwap + "/" + totSwap + " MB"); childNode.setDescriptionAlign(Alignment.RIGHT); result.addNode(childNode); } result.setLeaf(true); return result; } }