com.spotify.helios.common.descriptors.HostInfo.java Source code

Java tutorial

Introduction

Here is the source code for com.spotify.helios.common.descriptors.HostInfo.java

Source

/*
 * 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:
 * <pre>
 * {
 *   "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 ..."
 * },
 * </pre>
 */
@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 + '\'' + "} " + super.toString();
    }

    @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;
    }
}