package com.taobao.top.analysis.node.monitor; import java.util.Date; import java.util.concurrent.atomic.AtomicLong; /** * Slave节点监控信息 * @author sihai * */ public class SlaveMonitorInfo extends MonitorInfo implements Cloneable { /** * */ private static final long serialVersionUID = -7236590241815578921L; private static final String TITLE_SLAVE_STARTUP_TIME = "Slave启动时间"; private static final String TITLE_SLAVE_TRY_PULL_TASK_COUNT = "Slave尝试拉取任务次数"; private static final String TITLE_SLAVE_PULL_TASK_CONSUME_TIME = "Slave拉取任务花费的时间"; private static final String TITLE_SLAVE_PULLED_TASK_COUNT = "Slave成功拉取的任务总数"; private static final String TITLE_SLAVE_AVERAGE_PULL_TASK_CONSUME_TIME = "Slave平均每次拉取任务消耗时间"; private static final String TITLE_SLAVE_AVERAGE_PULLED_TASK_COUNT = "平均每次成功拉取任务个数"; private static final String TITLE_SLAVE_AVERAGE_TASK_CONSUME_TIME = "平均每个任务消耗时间"; private static final String TITLE_SLAVE_EXECUTE_TASK_CONSUME_TIME = "Slave花费在执行任务的时间"; private static final String TITLE_SLAVE_EXECUTEED_TASK_COUNT = "Slave成功执行的任务总数"; private static final String TITLE_SLAVE_CONSUME_DATA_SIZE = "Slave处理数据总大小"; private static final String TITLE_SLAVE_CONSUME_DATA_LINE = "Slave处理数据行总数"; private static final String TITLE_SLAVE_CONSUME_EMPTY_LINE = "Slave处理空数据行总数"; private static final String TITLE_SLAVE_CONSUME_EXCEPTION_LINE = "Slave处理异常数据行总数"; private static final String TITLE_SLAVE_KEY_COUNT = "Slave Map Key总数"; private static final String TITLE_SLAVE_VALUE_COUNT = "Slave Map Value总数"; private static final String TITLE_SLAVE_MERGED_TASK_COUNT = "Slave Merged任务总数"; private static final String TITLE_SLAVE_MERGED_TASK_CONSUME_TIME = "Slave 在Merged消耗的时间"; // /** * Slave启动时间 */ private Date slaveStartupTime; /** * Slave尝试拉取任务次数, 不一定是每次都成功的或是每次都拉取到了任务 */ private volatile long slaveTryPullTaskCount; /** * Slave在拉取任务花费的时间, 单位毫秒 */ private volatile long slavePullTaskConsumeTime; /** * Slave成功拉取的任务总数 */ private volatile long slavePulledTaskCount; // 任务 /** * Slave平均每次拉取任务消耗时间, 单位毫秒 */ private volatile double averagePullTaskConsumeTime; /** * 平均每次成功拉取任务个数 */ private volatile double averagePulledTaskCount; /** * 平均每个任务消耗时间 */ private volatile long averageTaskConsumeTime; /** * Slave花费在执行任务的时间, 单位毫秒 */ private AtomicLong slaveExecuteTaskTime; /** * Slave成功执行的任务总数 */ private AtomicLong slaveExecutedTaskCount; // 数据 /** * Slave处理数据总大小 */ private AtomicLong slaveConsumeDataSize; /** * Slave处理数据行总数 */ private AtomicLong slaveConsumeDataLine; /** * Slave处理空数据行总数 */ private AtomicLong slaveConsumeEmptyLine; /** * Slave处理异常数据行总数 */ private AtomicLong slaveConsumeExceptionLine; /** * Slave Map key总数 */ private AtomicLong keyCount; /** * Slave Map value总数 */ private AtomicLong valueCount; // merge /** * merge多少task */ private AtomicLong mergedTaskCount; /** * merge消耗多少时间, 单位毫秒 */ private AtomicLong megeredTaskConsumeTime; public SlaveMonitorInfo() { slaveExecuteTaskTime = new AtomicLong(0L); slaveExecutedTaskCount = new AtomicLong(0L); slaveConsumeDataSize = new AtomicLong(0L); slaveConsumeDataLine = new AtomicLong(0L); slaveConsumeEmptyLine = new AtomicLong(0L); slaveConsumeExceptionLine = new AtomicLong(0L); keyCount = new AtomicLong(0L); valueCount = new AtomicLong(0L); mergedTaskCount = new AtomicLong(0L); megeredTaskConsumeTime = new AtomicLong(0L); } public Date getSlaveStartupTime() { return slaveStartupTime; } public void setSlaveStartupTime(Date slaveStartupTime) { this.slaveStartupTime = slaveStartupTime; } public long getSlaveTryPullTaskCount() { return slaveTryPullTaskCount; } public void setSlaveTryPullTaskCount(long slaveTryPullTaskCount) { this.slaveTryPullTaskCount = slaveTryPullTaskCount; } public long getSlavePullTaskConsumeTime() { return slavePullTaskConsumeTime; } public void setSlavePullTaskConsumeTime(long slavePullTaskConsumeTime) { this.slavePullTaskConsumeTime = slavePullTaskConsumeTime; } public double getAveragePullTaskConsumeTime() { return averagePullTaskConsumeTime; } public void setAveragePullTaskConsumeTime(double averagePullTaskConsumeTime) { this.averagePullTaskConsumeTime = averagePullTaskConsumeTime; } public double getAveragePulledTaskCount() { return averagePulledTaskCount; } public void setAveragePulledTaskCount(double averagePulledTaskCount) { this.averagePulledTaskCount = averagePulledTaskCount; } public long getAverageTaskConsumeTime() { return averageTaskConsumeTime; } public void setAverageTaskConsumeTime(long averageTaskConsumeTime) { this.averageTaskConsumeTime = averageTaskConsumeTime; } public long getSlaveExecuteTaskTime() { return slaveExecuteTaskTime.get(); } public long incSlaveExecuteTaskTime(long slaveExecuteTaskTime) { return this.slaveExecuteTaskTime.addAndGet(slaveExecuteTaskTime); } public long getSlavePulledTaskCount() { return slavePulledTaskCount; } public void setSlavePulledTaskCount(long slavePulledTaskCount) { this.slavePulledTaskCount = slavePulledTaskCount; } public long getSlaveExecutedTaskCount() { return slaveExecutedTaskCount.get(); } public long incSlaveExecutedTaskCount(long slaveExecutedTaskCount) { return this.slaveExecutedTaskCount.addAndGet(slaveExecutedTaskCount); } public long getSlaveConsumeDataSize() { return slaveConsumeDataSize.get(); } public void incSlaveConsumeDataSize(long slaveConsumeDataSize) { this.slaveConsumeDataSize.addAndGet(slaveConsumeDataSize); } public long getSlaveConsumeDataLine() { return slaveConsumeDataLine.get(); } public long incSlaveConsumeDataLine(long slaveConsumeDataLine) { return this.slaveConsumeDataLine.addAndGet(slaveConsumeDataLine); } public long getSlaveConsumeEmptyLine() { return slaveConsumeEmptyLine.get(); } public void incSlaveConsumeEmptyLine(long slaveConsumeEmptyLine) { this.slaveConsumeEmptyLine.addAndGet(slaveConsumeEmptyLine); } public long getSlaveConsumeExceptionLine() { return slaveConsumeExceptionLine.get(); } public long incSlaveConsumeExceptionLine(long slaveConsumeExceptionLine) { return this.slaveConsumeExceptionLine.addAndGet(slaveConsumeExceptionLine); } public long getKeyCount() { return keyCount.get(); } public void incKeyCount(long keyCount) { this.keyCount.addAndGet(keyCount); } public long getValueCount() { return valueCount.get(); } public void incValueCount(long valueCount) { this.valueCount.addAndGet(valueCount); } public long getMergedTaskCount() { return mergedTaskCount.get(); } public void incMergedTaskCount(long mergedTaskCount) { this.mergedTaskCount.addAndGet(mergedTaskCount); } public long getMegeredTaskConsumeTime() { return megeredTaskConsumeTime.get(); } public void incMegeredTaskConsumeTime(long megeredTaskConsumeTime) { this.megeredTaskConsumeTime.addAndGet(megeredTaskConsumeTime); } public static String title() { StringBuilder sb = new StringBuilder(MonitorInfo.title()); sb.append(","); sb.append(TITLE_SLAVE_STARTUP_TIME); sb.append(","); sb.append(TITLE_SLAVE_TRY_PULL_TASK_COUNT); sb.append(","); sb.append(TITLE_SLAVE_PULL_TASK_CONSUME_TIME); sb.append(","); sb.append(TITLE_SLAVE_PULLED_TASK_COUNT); sb.append(","); sb.append(TITLE_SLAVE_AVERAGE_PULL_TASK_CONSUME_TIME); sb.append(","); sb.append(TITLE_SLAVE_AVERAGE_PULLED_TASK_COUNT); sb.append(","); sb.append(TITLE_SLAVE_AVERAGE_TASK_CONSUME_TIME); sb.append(","); sb.append(TITLE_SLAVE_EXECUTE_TASK_CONSUME_TIME); sb.append(","); sb.append(TITLE_SLAVE_EXECUTEED_TASK_COUNT); sb.append(","); sb.append(TITLE_SLAVE_CONSUME_DATA_SIZE); sb.append(","); sb.append(TITLE_SLAVE_CONSUME_DATA_LINE); sb.append(","); sb.append(TITLE_SLAVE_CONSUME_EMPTY_LINE); sb.append(","); sb.append(TITLE_SLAVE_CONSUME_EXCEPTION_LINE); sb.append(","); sb.append(TITLE_SLAVE_KEY_COUNT); sb.append(","); sb.append(TITLE_SLAVE_VALUE_COUNT); sb.append(","); sb.append(TITLE_SLAVE_MERGED_TASK_COUNT); sb.append(","); sb.append(TITLE_SLAVE_MERGED_TASK_CONSUME_TIME); return sb.toString(); } @Override public String toString() { StringBuilder sb = new StringBuilder(super.toString()); sb.append(","); sb.append(System.currentTimeMillis() - slaveStartupTime.getTime()); sb.append(","); sb.append(slavePulledTaskCount); sb.append(","); sb.append(averagePullTaskConsumeTime); sb.append(","); sb.append(averagePulledTaskCount); sb.append(","); sb.append(averageTaskConsumeTime); sb.append(","); sb.append(slaveExecuteTaskTime.get()); sb.append(","); sb.append(slaveExecutedTaskCount.get()); sb.append(","); sb.append(slaveConsumeDataSize.get()); sb.append(","); sb.append(slaveConsumeDataLine.get()); sb.append(","); sb.append(slaveConsumeEmptyLine.get()); sb.append(","); sb.append(slaveConsumeExceptionLine.get()); sb.append(","); sb.append(keyCount.get()); sb.append(","); sb.append(valueCount.get()); sb.append(","); sb.append(mergedTaskCount.get()); sb.append(","); sb.append(megeredTaskConsumeTime.get()); return sb.toString(); } @Override public Object clone() throws CloneNotSupportedException { SlaveMonitorInfo clone = (SlaveMonitorInfo)super.clone(); clone.slaveStartupTime = slaveStartupTime; clone.slavePulledTaskCount = slavePulledTaskCount; clone.averagePullTaskConsumeTime = averagePullTaskConsumeTime; clone.averagePulledTaskCount = averagePulledTaskCount; clone.averageTaskConsumeTime = averageTaskConsumeTime; clone.slaveExecuteTaskTime = new AtomicLong(slaveExecuteTaskTime.get()); clone.slaveExecutedTaskCount = new AtomicLong(slaveExecutedTaskCount.get()); clone.slaveConsumeDataSize = new AtomicLong(slaveConsumeDataSize.get()); clone.slaveConsumeDataLine = new AtomicLong(slaveConsumeDataLine.get()); clone.slaveConsumeEmptyLine = new AtomicLong(slaveConsumeEmptyLine.get()); clone.slaveConsumeExceptionLine = new AtomicLong(slaveConsumeExceptionLine.get()); clone.keyCount = new AtomicLong(keyCount.get()); clone.valueCount = new AtomicLong(valueCount.get()); clone.megeredTaskConsumeTime = new AtomicLong(mergedTaskCount.get()); clone.megeredTaskConsumeTime = new AtomicLong(megeredTaskConsumeTime.get()); return clone; } }