/** * This file is part of Graylog. * * Graylog is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Graylog is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Graylog. If not, see <http://www.gnu.org/licenses/>. */ package org.graylog2.shared.system.stats.network; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.auto.value.AutoValue; import org.graylog.autovalue.WithBeanGetter; import javax.annotation.Nullable; import java.util.Map; import java.util.Set; @JsonAutoDetect @AutoValue @WithBeanGetter public abstract class NetworkStats { @JsonProperty @Nullable public abstract String primaryInterface(); @JsonProperty public abstract Map<String, Interface> interfaces(); @JsonProperty @Nullable public abstract TcpStats tcp(); public static NetworkStats create(String primaryInterface, Map<String, NetworkStats.Interface> interfaces, NetworkStats.TcpStats tcp) { return new AutoValue_NetworkStats(primaryInterface, interfaces, tcp); } @JsonAutoDetect @AutoValue @WithBeanGetter public abstract static class Interface { @JsonProperty public abstract String name(); @JsonProperty public abstract Set<String> addresses(); @JsonProperty public abstract String macAddress(); @JsonProperty public abstract long mtu(); @JsonProperty @Nullable public abstract InterfaceStats interfaceStats(); public static Interface create(String name, Set<String> addresses, String macAddress, long mtu, InterfaceStats interfaceStats) { return new AutoValue_NetworkStats_Interface(name, addresses, macAddress, mtu, interfaceStats); } } @JsonAutoDetect @AutoValue @WithBeanGetter public abstract static class InterfaceStats { @JsonProperty public abstract long rxPackets(); @JsonProperty public abstract long rxErrors(); @JsonProperty public abstract long rxDropped(); @JsonProperty public abstract long rxOverruns(); @JsonProperty public abstract long rxFrame(); @JsonProperty public abstract long txPackets(); @JsonProperty public abstract long txErrors(); @JsonProperty public abstract long txDropped(); @JsonProperty public abstract long txOverruns(); @JsonProperty public abstract long txCarrier(); @JsonProperty public abstract long txCollisions(); @JsonProperty public abstract long rxBytes(); @JsonProperty public abstract long txBytes(); public static InterfaceStats create(long rxPackets, long rxErrors, long rxDropped, long rxOverruns, long rxFrame, long txPackets, long txErrors, long txDropped, long txOverruns, long txCarrier, long txCollisions, long rxBytes, long txBytes) { return new AutoValue_NetworkStats_InterfaceStats( rxPackets, rxErrors, rxDropped, rxOverruns, rxFrame, txPackets, txErrors, txDropped, txOverruns, txCarrier, txCollisions, rxBytes, txBytes); } } @JsonAutoDetect @AutoValue @WithBeanGetter public abstract static class TcpStats { @JsonProperty public abstract long activeOpens(); @JsonProperty public abstract long passiveOpens(); @JsonProperty public abstract long attemptFails(); @JsonProperty public abstract long estabResets(); @JsonProperty public abstract long currEstab(); @JsonProperty public abstract long inSegs(); @JsonProperty public abstract long outSegs(); @JsonProperty public abstract long retransSegs(); @JsonProperty public abstract long inErrs(); @JsonProperty public abstract long outRsts(); public static TcpStats create(long activeOpens, long passiveOpens, long attemptFails, long estabResets, long currEstab, long inSegs, long outSegs, long retransSegs, long inErrs, long outRsts) { return new AutoValue_NetworkStats_TcpStats( activeOpens, passiveOpens, attemptFails, estabResets, currEstab, inSegs, outSegs, retransSegs, inErrs, outRsts); } } }