/*
* Galaxy
* Copyright (c) 2012-2014, Parallel Universe Software Co. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 3.0
* as published by the Free Software Foundation.
*/
package co.paralleluniverse.galaxy.core;
import co.paralleluniverse.common.monitoring.PeriodicMonitor;
import co.paralleluniverse.galaxy.monitoring.BackupMXBean;
import co.paralleluniverse.galaxy.monitoring.Counter;
import java.util.concurrent.TimeUnit;
/**
*
* @author pron
*/
public class JMXBackupMonitor extends PeriodicMonitor implements BackupMonitor, BackupMXBean {
private final Counter replicationBackupsCounter = new Counter();
private final Counter backupsCounter = new Counter();
private final Counter backupPacketsCounter = new Counter();
private final Counter slavesAckTimeCounter = new Counter();
private final Counter serverAckTimeCounter = new Counter();
private int replicationBackups;
private int backups;
private int backupPackets;
private long avgSlavesAckTimeMicros;
private long avgServerAckTimeMicros;
public JMXBackupMonitor(String name) {
super(BackupMXBean.class, "co.paralleluniverse.galaxy.core:type=Backup");
}
@Override
protected void collectAndResetCounters() {
replicationBackups = (int) replicationBackupsCounter.get();
backupPackets = (int) backupPacketsCounter.get();
backups = (int) backupsCounter.get();
final long microsSinceLastCollect = TimeUnit.MICROSECONDS.convert(getMillisSinceLastCollect(), TimeUnit.MILLISECONDS);
avgSlavesAckTimeMicros = slavesAckTimeCounter.get() / microsSinceLastCollect;
avgServerAckTimeMicros = serverAckTimeCounter.get() / microsSinceLastCollect;
resetCounters();
}
@Override
protected void resetCounters() {
replicationBackupsCounter.reset();
backupsCounter.reset();
backupPacketsCounter.reset();
slavesAckTimeCounter.reset();
serverAckTimeCounter.reset();
}
@Override
public void addReplicationBackup(int num) {
replicationBackupsCounter.add(num);
}
@Override
public void addBackups(int num) {
backupsCounter.add(num);
}
@Override
public void addBackupPacket() {
backupPacketsCounter.inc();
}
@Override
public void addSlaveAckTime(long nanos) {
slavesAckTimeCounter.add(TimeUnit.MICROSECONDS.convert(nanos, TimeUnit.NANOSECONDS));
}
@Override
public void addServerAckTime(long nanos) {
serverAckTimeCounter.add(TimeUnit.MICROSECONDS.convert(nanos, TimeUnit.NANOSECONDS));
}
@Override
public long getAvgServerAckTimeMicros() {
return avgServerAckTimeMicros;
}
@Override
public long getAvgSlavesAckTimeMicros() {
return avgSlavesAckTimeMicros;
}
@Override
public int getBackups() {
return backups;
}
@Override
public int getBackupPackets() {
return backupPackets;
}
@Override
public int getReplicationBackups() {
return replicationBackups;
}
}