package pt.ist.fenixframework.backend.jvstm.pstm; import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import pt.ist.fenixframework.Atomic; import pt.ist.fenixframework.Atomic.TxMode; import pt.ist.fenixframework.FenixFramework; public class StatisticsThread extends Thread { private static final Logger logger = LoggerFactory.getLogger(StatisticsThread.class); private static final long SECONDS_BETWEEN_REPORTS = 5 * 60; private final String server; private int numReport = 0; public StatisticsThread() { this.server = Util.getServerName(); setDaemon(true); } @Override public void run() { while (true) { try { sleep(SECONDS_BETWEEN_REPORTS * 1000); } catch (InterruptedException ie) { // ignore exception } reportStatistics(); } } private void reportStatistics() { final TransactionStatistics.Report stats = TransactionStatistics.STATISTICS.getReportAndReset(); numReport++; doAtomicReporting(stats); } @Atomic(mode = TxMode.WRITE) private void doAtomicReporting(final TransactionStatistics.Report stats) { TransactionStatisticsEntry entry; entry = new TransactionStatisticsEntry(server, numReport, stats.numReads, stats.numWrites, stats.numAborts, stats.numConflicts, SECONDS_BETWEEN_REPORTS, new DateTime(), stats.readOnlyReads, stats.readWriteReads, stats.readWriteWrites); FenixFrameworkData ffData = FenixFramework.getDomainRoot().getFenixFrameworkData(); ffData.addFFTxStatsEntry(entry); } }