com.spotify.helios.common.descriptors.HostInfo Maven / Gradle / Ivy
/*
* Copyright (c) 2014 Spotify AB.
*
* 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 com.spotify.helios.common.descriptors;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Represents the Agent system information.
*
* A typical JSON representation might look like:
*
* {
* "architecture" : "amd64",
* "cpus" : 24,
* "dockerHost" : "unix:///var/run/docker.sock",
* "dockerCertPath" : null,
* "dockerVersion" : {
* "apiVersion" : "1.12",
* "arch" : "amd64",
* "gitCommit" : "688b5cf-dirty",
* "goVersion" : "go1.2.1",
* "kernelVersion" : "3.13.0-19-generic",
* "os" : "linux",
* "version" : "1.0.0"
* },
* "hostname" : "agenthostname",
* "loadAvg" : 0.28,
* "memoryFreeBytes" : 26494124032,
* "memoryTotalBytes" : 33421123584,
* "osName" : "Linux",
* "osVersion" : "3.13.0-19-generic",
* "swapFreeBytes" : 10737414144,
* "swapTotalBytes" : 10737414144,
* "uname" : "Linux agenthostname 3.13.0-19-generic #40-Ubuntu SMP Mon Mar 24 02:36:06 UTC ..."
* },
*
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class HostInfo extends Descriptor {
private final String hostname;
private final String uname;
private final String architecture;
private final String osName;
private final String osVersion;
private final int cpus;
private final double loadAvg;
private final long memoryTotalBytes;
private final long memoryFreeBytes;
private final long swapTotalBytes;
private final long swapFreeBytes;
private final DockerVersion dockerVersion;
private final String dockerHost;
private final String dockerCertPath;
/**
* @param hostname The hostname of the agent.
* @param uname The output of the uname command.
* @param architecture The architecture of the Agent.
* @param osName The name of the operating system on the Agent.
* @param osVersion The version of the operating system (or kernel version).
* @param cpus The number of CPUS on the machine.
* @param loadAvg The current load average on the host.
* @param memoryTotalBytes Total memory on the host.
* @param memoryFreeBytes Total memory free on the host.
* @param swapTotalBytes Total swap bytes.
* @param swapFreeBytes Total free swap bytes.
* @param dockerVersion Docker version.
* @param dockerHost The docker host address.
* @param dockerCertPath The docker certificate path.
*/
public HostInfo(@JsonProperty("hostname") final String hostname,
@JsonProperty("uname") final String uname,
@JsonProperty("architecture") final String architecture,
@JsonProperty("osName") final String osName,
@JsonProperty("osVersion") final String osVersion,
@JsonProperty("cpus") final int cpus,
@JsonProperty("loadAvg") final double loadAvg,
@JsonProperty("memoryTotalBytes") final long memoryTotalBytes,
@JsonProperty("memoryFreeBytes") final long memoryFreeBytes,
@JsonProperty("swapTotalBytes") final long swapTotalBytes,
@JsonProperty("swapFreeBytes") final long swapFreeBytes,
@JsonProperty("dockerVersion") final DockerVersion dockerVersion,
@JsonProperty("dockerHost") final String dockerHost,
@JsonProperty("dockerCertPath") final String dockerCertPath) {
this.hostname = hostname;
this.uname = uname;
this.architecture = architecture;
this.osName = osName;
this.osVersion = osVersion;
this.cpus = cpus;
this.loadAvg = loadAvg;
this.memoryTotalBytes = memoryTotalBytes;
this.memoryFreeBytes = memoryFreeBytes;
this.swapTotalBytes = swapTotalBytes;
this.swapFreeBytes = swapFreeBytes;
this.dockerVersion = dockerVersion;
this.dockerHost = dockerHost;
this.dockerCertPath = dockerCertPath;
}
public HostInfo(final Builder builder) {
this.hostname = builder.hostname;
this.uname = builder.uname;
this.architecture = builder.architecture;
this.osName = builder.osName;
this.osVersion = builder.osVersion;
this.cpus = builder.cpus;
this.loadAvg = builder.loadAvg;
this.memoryTotalBytes = builder.memoryTotalBytes;
this.memoryFreeBytes = builder.memoryFreeBytes;
this.swapTotalBytes = builder.swapTotalBytes;
this.swapFreeBytes = builder.swapFreeBytes;
this.dockerVersion = builder.dockerVersion;
this.dockerHost = builder.dockerHost;
this.dockerCertPath = builder.dockerCertPath;
}
public String getHostname() {
return hostname;
}
public String getUname() {
return uname;
}
public String getArchitecture() {
return architecture;
}
public String getOsName() {
return osName;
}
public String getOsVersion() {
return osVersion;
}
public int getCpus() {
return cpus;
}
public double getLoadAvg() {
return loadAvg;
}
public long getMemoryTotalBytes() {
return memoryTotalBytes;
}
public long getMemoryFreeBytes() {
return memoryFreeBytes;
}
public long getSwapTotalBytes() {
return swapTotalBytes;
}
public long getSwapFreeBytes() {
return swapFreeBytes;
}
public DockerVersion getDockerVersion() {
return dockerVersion;
}
public String getDockerHost() {
return dockerHost;
}
public String getDockerCertPath() {
return dockerCertPath;
}
public static Builder newBuilder() {
return new Builder();
}
public static class Builder {
private String hostname;
private String uname;
private String architecture;
private String osName;
private String osVersion;
private int cpus;
private double loadAvg;
private long memoryTotalBytes;
private long memoryFreeBytes;
private long swapTotalBytes;
private long swapFreeBytes;
private DockerVersion dockerVersion;
private String dockerHost;
private String dockerCertPath;
public Builder setHostname(final String hostname) {
this.hostname = hostname;
return this;
}
public Builder setUname(final String uname) {
this.uname = uname;
return this;
}
public Builder setArchitecture(final String architecture) {
this.architecture = architecture;
return this;
}
public Builder setOsName(final String osName) {
this.osName = osName;
return this;
}
public Builder setOsVersion(final String osVersion) {
this.osVersion = osVersion;
return this;
}
public Builder setCpus(final int cpus) {
this.cpus = cpus;
return this;
}
public Builder setLoadAvg(final double loadAvg) {
this.loadAvg = loadAvg;
return this;
}
public Builder setMemoryTotalBytes(final long memoryTotalBytes) {
this.memoryTotalBytes = memoryTotalBytes;
return this;
}
public Builder setMemoryFreeBytes(final long memoryFreeBytes) {
this.memoryFreeBytes = memoryFreeBytes;
return this;
}
public Builder setSwapTotalBytes(final long swapTotalBytes) {
this.swapTotalBytes = swapTotalBytes;
return this;
}
public Builder setSwapFreeBytes(final long swapFreeBytes) {
this.swapFreeBytes = swapFreeBytes;
return this;
}
public Builder setDockerVersion(final DockerVersion dockerVersion) {
this.dockerVersion = dockerVersion;
return this;
}
public Builder setDockerHost(final String dockerHost) {
this.dockerHost = dockerHost;
return this;
}
public Builder setDockerCertPath(final String dockerCertPath) {
this.dockerCertPath = dockerCertPath;
return this;
}
public HostInfo build() {
return new HostInfo(this);
}
}
@Override
public String toString() {
return "HostInfo{" +
"hostname='" + hostname + '\'' +
", uname='" + uname + '\'' +
", architecture='" + architecture + '\'' +
", osName='" + osName + '\'' +
", osVersion='" + osVersion + '\'' +
", cpus=" + cpus +
", loadAvg=" + loadAvg +
", memoryTotalBytes=" + memoryTotalBytes +
", memoryFreeBytes=" + memoryFreeBytes +
", swapTotalBytes=" + swapTotalBytes +
", swapFreeBytes=" + swapFreeBytes +
", dockerVersion=" + dockerVersion +
", dockerHost='" + dockerHost + '\'' +
", dockerCertPath='" + dockerCertPath + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
final HostInfo hostInfo = (HostInfo) o;
if (cpus != hostInfo.cpus) {
return false;
}
if (Double.compare(hostInfo.loadAvg, loadAvg) != 0) {
return false;
}
if (memoryTotalBytes != hostInfo.memoryTotalBytes) {
return false;
}
if (memoryFreeBytes != hostInfo.memoryFreeBytes) {
return false;
}
if (swapTotalBytes != hostInfo.swapTotalBytes) {
return false;
}
if (swapFreeBytes != hostInfo.swapFreeBytes) {
return false;
}
if (hostname != null ? !hostname.equals(hostInfo.hostname) : hostInfo.hostname != null) {
return false;
}
if (uname != null ? !uname.equals(hostInfo.uname) : hostInfo.uname != null) {
return false;
}
if (architecture != null ? !architecture.equals(hostInfo.architecture)
: hostInfo.architecture != null) {
return false;
}
if (osName != null ? !osName.equals(hostInfo.osName) : hostInfo.osName != null) {
return false;
}
if (osVersion != null ? !osVersion.equals(hostInfo.osVersion) : hostInfo.osVersion != null) {
return false;
}
if (dockerVersion != null ? !dockerVersion.equals(hostInfo.dockerVersion)
: hostInfo.dockerVersion != null) {
return false;
}
if (dockerHost != null ? !dockerHost.equals(hostInfo.dockerHost)
: hostInfo.dockerHost != null) {
return false;
}
return !(dockerCertPath != null ? !dockerCertPath.equals(hostInfo.dockerCertPath)
: hostInfo.dockerCertPath != null);
}
@Override
public int hashCode() {
int result;
long temp;
result = hostname != null ? hostname.hashCode() : 0;
result = 31 * result + (uname != null ? uname.hashCode() : 0);
result = 31 * result + (architecture != null ? architecture.hashCode() : 0);
result = 31 * result + (osName != null ? osName.hashCode() : 0);
result = 31 * result + (osVersion != null ? osVersion.hashCode() : 0);
result = 31 * result + cpus;
temp = Double.doubleToLongBits(loadAvg);
result = 31 * result + (int) (temp ^ (temp >>> 32));
result = 31 * result + (int) (memoryTotalBytes ^ (memoryTotalBytes >>> 32));
result = 31 * result + (int) (memoryFreeBytes ^ (memoryFreeBytes >>> 32));
result = 31 * result + (int) (swapTotalBytes ^ (swapTotalBytes >>> 32));
result = 31 * result + (int) (swapFreeBytes ^ (swapFreeBytes >>> 32));
result = 31 * result + (dockerVersion != null ? dockerVersion.hashCode() : 0);
result = 31 * result + (dockerHost != null ? dockerHost.hashCode() : 0);
result = 31 * result + (dockerCertPath != null ? dockerCertPath.hashCode() : 0);
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy