/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.monitoring.system.api.model;
import java.io.Serializable;
import java.util.List;
/**
* Holds information about a process.
*
* @author David Scholz
*/
public class ProcessInformation implements Serializable {
private static final long serialVersionUID = -7273457883589693406L;
private List<ProcessInformation> children;
private double cpuUsage;
private long ramUsage;
private long pid;
private String name;
public ProcessInformation(long pid, String name, List<ProcessInformation> children, double cpuUsage, long ramUsage) {
this.pid = pid;
this.name = name;
this.children = children;
this.cpuUsage = cpuUsage;
this.ramUsage = ramUsage;
}
public List<ProcessInformation> getChildren() {
return children;
}
public double getCpuUsage() {
return cpuUsage;
}
public long getRamUsage() {
return ramUsage;
}
public long getPid() {
return pid;
}
public String getName() {
return name;
}
@Override
public int hashCode() {
final int prime = 31;
final int i = 32;
int result = 1;
if (children == null) {
result = prime * result;
} else {
result = prime * result + children.hashCode();
}
long temp;
temp = Double.doubleToLongBits(cpuUsage);
result = prime * result + (int) (temp ^ (temp >>> i));
if (name == null) {
result = prime * result;
} else {
result = prime * result + name.hashCode();
}
result = prime * result + (int) (pid ^ (pid >>> i));
result = prime * result + (int) (ramUsage ^ (ramUsage >>> i));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
ProcessInformation other = (ProcessInformation) obj;
if (children == null) {
if (other.children != null) {
return false;
}
} else if (!children.equals(other.children)) {
return false;
}
if (Double.doubleToLongBits(cpuUsage) != Double.doubleToLongBits(other.cpuUsage)) {
return false;
}
if (name == null) {
if (other.name != null) {
return false;
}
} else if (!name.equals(other.name)) {
return false;
}
if (pid != other.pid) {
return false;
}
if (ramUsage != other.ramUsage) {
return false;
}
return true;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb = getChildInfo(children, 0, sb);
return sb.toString();
}
private StringBuilder getChildInfo(List<ProcessInformation> c, int level, StringBuilder sb) {
toLevelString(level, sb);
for (ProcessInformation pinf : c) {
getChildInfo(pinf.getChildren(), level + 1, sb);
}
return sb;
}
private void toLevelString(int lvl, StringBuilder sb) {
for (int i = 0; i <= lvl; i++) {
sb.append(" ");
}
sb.append(name + ": " + cpuUsage + "\n");
}
}