All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mobicents.tools.heartbeat.api.Node Maven / Gradle / Ivy

/*
 * TeleStax, Open Source Cloud Communications
 * Copyright 2011-2017, Telestax Inc and individual contributors
 * by the @authors tag.
 *
 * This program is free software: you can redistribute it and/or modify
 * under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation; either version 3 of
 * the License, or (at your option) any later version.
 *
 * This program 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 Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see 
 */
package org.mobicents.tools.heartbeat.api;


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
/**
 * @author Konstantin Nosach ([email protected])
 */
public class Node implements Comparable {

	private String hostName = null;
	private String ip = null;
	private long timeStamp = System.currentTimeMillis();
	private HashMap properties = new HashMap();
	private boolean gracefulShutdown;
	private boolean bad;
	private int failCounter = 0;
	private int weightIndex = 0;
    private AtomicInteger requestNumberWithoutResponse = new AtomicInteger(0);
    private AtomicLong lastTimeResponse = new AtomicLong(System.currentTimeMillis());
	
	public Node(){}
	public Node(String hostName, String ip) {
		super();
		if(hostName==null)
			this.hostName = "undeffined_node";
		else
			this.hostName = hostName;
		this.ip = ip;
	}
	
	@SuppressWarnings("unchecked")
	public Node(JsonObject json) {
		Gson gson = new Gson();
		properties = gson.fromJson(json,properties.getClass());
		this.hostName = properties.remove(Protocol.HOST_NAME);
		this.ip = properties.remove(Protocol.IP);
		//rename restcomm instance id key
		String restcommInstanceId = properties.remove("restcommInstanceId");
		if(restcommInstanceId!=null)
			properties.put(Protocol.RESTCOMM_INSTANCE_ID, restcommInstanceId);
	}

	public String getHostName() {
		return hostName;
	}

	public String getIp() {
		return ip;
	}

	public Map getProperties() {
		return properties;
	}
	
	public long getTimeStamp() {
		return this.timeStamp;
	}

	public void updateTimerStamp() {
		this.timeStamp = System.currentTimeMillis();
	}

	public int getAndIncrementFailCounter() {
		return ++failCounter;
	}
	public void setFailCounter(int failCounter) {
		this.failCounter = failCounter;
	}

	public boolean isGracefulShutdown() {
		return gracefulShutdown;
	}
	public void setGracefulShutdown(boolean gracefulShutdown) {
		this.gracefulShutdown = gracefulShutdown;
	}
	
	public boolean isBad() {
		return bad;
	}
	public void setBad(boolean bad) {
		this.bad = bad;
	}
	
	public String getPorts()
	{
		return properties.get(Protocol.TCP_PORT) +
				properties.get(Protocol.UDP_PORT) +
				properties.get(Protocol.TLS_PORT) +
				properties.get(Protocol.WS_PORT) +
				properties.get(Protocol.WSS_PORT) +
				properties.get(Protocol.HTTP_PORT) + 
				properties.get(Protocol.SSL_PORT) + 
				properties.get(Protocol.SMPP_PORT);
	}
	
	public AtomicInteger getRequestNumberWithoutResponse() {
		return requestNumberWithoutResponse;
	}
	public void setRequestNumberWithoutResponse(int requestNumberWithoutResponse) {
		this.requestNumberWithoutResponse.set(requestNumberWithoutResponse);
	}
	public AtomicLong getLastTimeResponse() {
		return lastTimeResponse;
	}
	public void setLastTimeResponse(long lastTimeResponse) {
		this.lastTimeResponse.set(lastTimeResponse);
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((hostName == null) ? 0 : hostName.hashCode());
		result = prime * result + ((ip == null) ? 0 : ip.hashCode());
		Iterator keyIterator = properties.keySet().iterator();
		while(keyIterator.hasNext()) {
			String key = keyIterator.next();
			result = prime * result + properties.get(key).hashCode();
		}
		return result;
	}

	@Override
	public boolean equals(Object obj) 
	{
		if(obj!=null && obj instanceof Node)
		{
			if(this==obj)
				return true;
			else if(ip!=null&&ip.equals(((Node)obj).getIp())&&getPorts().equals(((Node)obj).getPorts()))
				return true;
			else if(properties.get(Protocol.SESSION_ID)!=null&&properties.get(Protocol.SESSION_ID).equals(((Node)obj).getProperties().get(Protocol.SESSION_ID)))
				return true;
			else
				return false;
		}
		else return false;
	}

	public String toString() {

		String result = "Node hostname[" + this.hostName + "] ip[" + this.ip
				+ "] ";
		Iterator keyIterator = properties.keySet().iterator();
		while(keyIterator.hasNext()) {
			String key = keyIterator.next();
			result += key + "[" + properties.get(key) + "] ";
		}
		return result;
	}
	
	public String toStringWithoutJvmroute() {

		String result = "Node hostname[" + this.hostName + "] ip[" + this.ip
		+ "] ";
		Iterator keyIterator = properties.keySet().iterator();
		while(keyIterator.hasNext()) {
			String key = keyIterator.next();
			if(!key.equals("jvmRoute")) {
				result += key + "[" + properties.get(key) + "] ";
			}
		}
		return result;
	}

	public int compareTo(Node node) {
		return this.toStringWithoutJvmroute().compareTo(node.toStringWithoutJvmroute());
	}
	
	public void incrementWeightIndex()
	{
		weightIndex++;
	}
	public int obtainWeightIndex() {
		return weightIndex;
	}
	
	
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy