view src/org/dancres/blitz/stats/StatsBoard.java @ 0:3dc0c5604566

Initial checkin of blitz 2.0 fcs - no installer yet.
author Dan Creswell <dan.creswell@gmail.com>
date Sat, 21 Mar 2009 11:00:06 +0000
parents
children
line wrap: on
line source

package org.dancres.blitz.stats;

import java.util.LinkedList;
import java.util.Iterator;

import java.util.logging.Logger;

import org.dancres.blitz.Logging;

/**
   All available performance statistics are held here.
 */
public class StatsBoard {
    static final Logger theLogger =
        Logging.newLogger("org.dancres.blitz.stats.StatsBoard");

    private static StatsBoard theBoard = new StatsBoard();

    private LinkedList theStatGenerators = new LinkedList();

    private long theNextId = 1;

    private StatsBoard() {
        add(new MemoryStat());
        add(new HostStat());
        add(new ThreadStat());
    }

    public static StatsBoard get() {
        return theBoard;
    }

    public synchronized void add(StatGenerator aStat) {
        if (! theStatGenerators.contains(aStat)) {
            if (aStat.getId() == StatGenerator.UNSET_ID)
                aStat.setId(theNextId++);

            theStatGenerators.add(aStat);
        }
    }

    public synchronized void remove(StatGenerator aStat) {
        theStatGenerators.remove(aStat);
    }

    public Stat[] getStats() {
        StatGenerator[] myGenerators;

        synchronized(this) {
            myGenerators = new StatGenerator[theStatGenerators.size()];
            myGenerators =
                    (StatGenerator[]) theStatGenerators.toArray(myGenerators);
        }

        Stat[] myStats = new Stat[myGenerators.length];

        for (int i = 0; i < myGenerators.length; i++) {
            myStats[i] = myGenerators[i].generate();
        }

        return myStats;
    }
}