package org.infinispan.stats.container; /** * The available extended statistics * * @author Roberto Palmieri * @author Sebastiano Peluso * @author Diego Didona * @author Pedro Ruivo * @since 6.0 */ public enum ExtendedStatistic { //Write transaction related statistics NUM_COMMITTED_WR_TX(true, true), //number of committed write transactions NUM_ABORTED_WR_TX(true, true), //number of aborted write transaction WR_TX_ABORTED_EXECUTION_TIME(true, true), //write tx execution time include the prepare and commit phase for aborted transactions WR_TX_SUCCESSFUL_EXECUTION_TIME(true, true), //write tx execution time including the prepare and commit phase for committed transactions LOCAL_EXEC_NO_CONT(true, false), //write tx execution time excluding the waiting time acquiring locks (pessimistic mode only) //Read-only transaction related statistics NUM_COMMITTED_RO_TX(true, true), // number of committed read-only transaction NUM_ABORTED_RO_TX(true, true), // number of aborted read-only transaction RO_TX_SUCCESSFUL_EXECUTION_TIME(true, true), // read-only tx execution time for aborted transaction RO_TX_ABORTED_EXECUTION_TIME(true, true), //read-only tx execution time for aborted transaction //Write transaction access NUM_PUTS_WR_TX(true, false), // number of puts on local keys per write transaction NUM_REMOTE_PUTS_WR_TX(true, false), // number of puts on remote keys per write transaction NUM_GETS_WR_TX(true, false), //number of gets on local keys per write transaction NUM_REMOTE_GETS_WR_TX(true, false), //number of gets on remote keys per write transaction //Read-Only transaction access NUM_GETS_RO_TX(true, false), //number of gets on local keys per read-only transaction NUM_REMOTE_GETS_RO_TX(true, false), //number of gets on remote keys per read-only transaction //Accesses (used during runtime. when the transaction ends, they are copied to the access above) NUM_REMOTE_GET(true, false), //number of gets on remote keys in the transaction NUM_GET(true, false), //number of gets on local keys in the transaction NUM_REMOTE_PUT(true, false), //number of gets on remote keys in the transaction NUM_PUT(true, false), //number of gets on local keys in the transaction //Per operation execution time REMOTE_GET_EXECUTION(true, false), //get execution time for a remote keys LOCAL_GET_EXECUTION(true, false), //get execution time for a local keys ALL_GET_EXECUTION(true, false), //TODO: fixme REMOTE_PUT_EXECUTION(true, false), //put execution time for a remote key LOCAL_PUT_EXECUTION(true, false), //put execution time for a local key //Transaction counter //TODO add the remaining NUM_COMMITTED_TX(false, false), //the total number of committed remote and local transactions NUM_LOCAL_COMMITTED_TX(false, false), //the total number of committed local transactions //Lock related LOCK_HOLD_TIME(true, true), //the average lock hold time NUM_HELD_LOCKS(true, true), //the total number of locks acquired LOCK_HOLD_TIME_SUCCESS_LOCAL_TX(true, false), //the average lock hold time NUM_HELD_LOCKS_SUCCESS_LOCAL_TX(true, false), //number of locks held by a successful local transaction NUM_LOCK_FAILED_TIMEOUT(true, false), //number of locks failed to acquire due to timeout NUM_LOCK_FAILED_DEADLOCK(true, false), //number of locks failed to acquire due to deadlock (deadlock exception) NUM_WAITED_FOR_LOCKS(true, true), //number of lock that were contented and the transaction have to wait LOCK_WAITING_TIME(true, true), //the waiting time before acquire the lock LOCK_HOLD_TIME_LOCAL(false, false), //query only: average lock hold time by local transactions LOCK_HOLD_TIME_REMOTE(false, false), //query only: average lock hold time by remote transaction NUM_LOCK_PER_LOCAL_TX(false, false), //query only: average number of locks per all local transaction NUM_LOCK_PER_REMOTE_TX(false, false), //query only: average number of locks per all remote transaction //other transactional stuff WRITE_TX_PERCENTAGE(false, false), //query only: write transaction percentage SUCCESSFUL_WRITE_TX_PERCENTAGE(false, false), //query only: same as above but only for successful transactions //write skew NUM_WRITE_SKEW(true, false), //number of write skew detected WRITE_SKEW_PROBABILITY(false, false), //query only: write skew probability //Abort rate, arrival rate and throughput ABORT_RATE(false, false), //percentage of aborted transactions ARRIVAL_RATE(false, false), // number of local and remote transactions processed per second THROUGHPUT(false, false), //number of local transactions processed per second //commands execution time PREPARE_EXECUTION_TIME(true, true), //prepare command execution time (includes communication) NUM_PREPARE_COMMAND(true, true), //number of prepare commands LOCAL_PREPARE_EXECUTION_TIME(false, false), //query only: average prepare command execution time for local transactions REMOTE_PREPARE_EXECUTION_TIME(false, false), //query only: average prepare command execution time for remote transactions COMMIT_EXECUTION_TIME(true, true), //commit command execution time (includes communication) NUM_COMMIT_COMMAND(true, true), //number of commit commands LOCAL_COMMIT_EXECUTION_TIME(false, false), //query only: average commit command execution time for local transactions REMOTE_COMMIT_EXECUTION_TIME(false, false), //query only: average commit command execution time for remote transactions ROLLBACK_EXECUTION_TIME(true, true), //rollback command execution time (includes communication) NUM_ROLLBACK_COMMAND(true, true), //number of rollback commands LOCAL_ROLLBACK_EXECUTION_TIME(false, false), //query only: average rollback command execution time for local transactions REMOTE_ROLLBACK_EXECUTION_TIME(false, false), //query only: average rollback command execution time for remote transactions //commands size PREPARE_COMMAND_SIZE(true, false), //prepare command size in bytes COMMIT_COMMAND_SIZE(true, false), //commit command size in bytes CLUSTERED_GET_COMMAND_SIZE(true, false), //cluster get command size in bytes //RTT: local && synchronous communication NUM_SYNC_PREPARE(true, false), //number of synchronous prepare command sent SYNC_PREPARE_TIME(true, false), //response time of synchronous prepare command NUM_SYNC_COMMIT(true, false), //number of synchronous commit command sent SYNC_COMMIT_TIME(true, false), //response time of synchronous commit command NUM_SYNC_ROLLBACK(true, false), //number of synchronous rollback command sent SYNC_ROLLBACK_TIME(true, false), //response time of synchronous rollback command NUM_SYNC_GET(true, false), //number of synchronous cluster get command sent SYNC_GET_TIME(true, false), //response time of synchronous cluster get command //ASYNC: local && asynchronous communication ASYNC_COMPLETE_NOTIFY_TIME(true, false), //send-and-forget time for tx completion notify command NUM_ASYNC_COMPLETE_NOTIFY(true, false), //number of asynchronous tx completion notify command sent //Number of nodes in remote communication NUM_NODES_PREPARE(true, false), //average number of nodes involved in a prepare command NUM_NODES_COMMIT(true, false), //average number of nodes involved in a commit command NUM_NODES_ROLLBACK(true, false), //average number of nodes involved in a rollback command NUM_NODES_COMPLETE_NOTIFY(true, false), //average number of nodes involved in a tx completion notify command NUM_NODES_GET(true, false), //average number of nodes involved in a tx completion notify command RESPONSE_TIME(false, false); //average transaction response time public static final int NO_INDEX = -1; private static short localStatsSize = 0; private static short remoteStatsSize = 0; private final boolean local; private final boolean remote; private short localIndex = NO_INDEX; private short remoteIndex = NO_INDEX; ExtendedStatistic(boolean local, boolean remote) { this.local = local; this.remote = remote; } public final int getLocalIndex() { return localIndex; } public final int getRemoteIndex() { return remoteIndex; } public final boolean isLocal() { return local; } public final boolean isRemote() { return remote; } public static int getRemoteStatsSize() { return remoteStatsSize; } public static int getLocalStatsSize() { return localStatsSize; } static { for (ExtendedStatistic stat : values()) { if (stat.local) { stat.localIndex = localStatsSize++; } if (stat.remote) { stat.remoteIndex = remoteStatsSize++; } } } }