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

com.bigdata.service.HostScore Maven / Gradle / Ivy

package com.bigdata.service;

import com.bigdata.service.LoadBalancerService.UpdateTask;

/**
 * Per-host metadata and a score for that host which gets updated
 * periodically by {@link UpdateTask}. {@link HostScore}s are a
 * resource utilization measure. They are higher for a host which
 * is more highly utilized. There are several ways to look at the score,
 * including the {@link #rawScore}, the {@link #rank}, and the
 * {@link #drank normalized double-precision rank}. The ranks move in the
 * same direction as the {@link #rawScore}s - a higher rank indicates
 * higher utilization. The least utilized host is always rank zero (0). The
 * most utilized host is always in the last rank.
 * 
 * @author Bryan Thompson
 * @version $Id$
 */
public class HostScore implements Comparable {

    public final String hostname;

    /** The raw score computed for that service. */
    public final double rawScore;

    /** The normalized score computed for that service. */
    public double score;

    /** The rank in [0:#scored].  This is an index into the Scores[]. */
    public int rank = -1;

    /** The normalized double precision rank in [0.0:1.0]. */
    public double drank = -1d;

    /**
     * Constructor variant used when you do not have performance counters
     * for the host and could not compute its rawScore.
     * 
     * @param hostname
     */
    public HostScore(String hostname) {

        this(hostname, 0d);

    }

    /**
     * Constructor variant used when you have computed the rawStore.
     * 
     * @param hostname
     * @param rawScore
     */
    public HostScore(String hostname, double rawScore) {

        assert hostname != null;

        assert hostname.length() > 0;

        this.hostname = hostname;

        this.rawScore = rawScore;

    }

    public String toString() {

        return "HostScore{hostname=" + hostname + ", rawScore=" + rawScore
                + ", score=" + score + ", rank=" + rank + ", drank=" + drank
                + "}";

    }

    /**
     * Places elements into order by ascending {@link #rawScore} (aka
     * increasing utilization). The {@link #hostname} is used to break any
     * ties.
     */
    public int compareTo(HostScore arg0) {

        if (rawScore < arg0.rawScore) {

            return -1;

        } else if (rawScore > arg0.rawScore) {

            return 1;

        }

        return hostname.compareTo(arg0.hostname);

    }

    /**
     * Normalizes a raw score in the context of totals for some host.
     * 
     * @param rawScore
     *            The raw score.
     * @param totalRawScore
     *            The raw score computed from the totals.
     *            
     * @return The normalized score.
     */
    static public double normalize(double rawScore, double totalRawScore) {

        if (totalRawScore == 0d) {

            return 0d;

        }

        return rawScore / totalRawScore;

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy