/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.coordinator.client.model; import com.emc.storageos.coordinator.exceptions.CoordinatorException; import com.emc.storageos.coordinator.exceptions.FatalCoordinatorException; public class SiteNetworkState implements CoordinatorSerializable { public static final String CONFIG_KIND = "siteNetworkState"; public static final String CONFIG_ID = "global"; private static final String ENCODING_SEPARATOR = "\0"; private NetworkHealth networkHealth; private double networkLatencyInMs; public enum NetworkHealth { GOOD, SLOW, BROKEN } public SiteNetworkState() { } private SiteNetworkState(double networkLatencyInMs, NetworkHealth networkHealth) { this.networkLatencyInMs = networkLatencyInMs; this.networkHealth = networkHealth; } public double getNetworkLatencyInMs() { return networkLatencyInMs; } public void setNetworkLatencyInMs(double networkLatencyInMs) { this.networkLatencyInMs = networkLatencyInMs; } public NetworkHealth getNetworkHealth() { return networkHealth; } public void setNetworkHealth(NetworkHealth networkHealth) { this.networkHealth = networkHealth; } @Override public String encodeAsString() { StringBuilder sb = new StringBuilder(); sb.append(networkLatencyInMs); sb.append(ENCODING_SEPARATOR); sb.append(networkHealth); return sb.toString(); } @Override public SiteNetworkState decodeFromString(String infoStr) throws FatalCoordinatorException { if (infoStr == null) { return null; } final String[] strings = infoStr.split(ENCODING_SEPARATOR); if (strings.length != 2) { throw CoordinatorException.fatals.decodingError("invalid site monitor network info"); } return new SiteNetworkState(Double.parseDouble(strings[0]), NetworkHealth.valueOf(strings[1])); } @Override public CoordinatorClassInfo getCoordinatorClassInfo() { return new CoordinatorClassInfo(CONFIG_ID, CONFIG_KIND, "siteNetworkState"); } }